chore(i18n): refresh uk translations
This commit is contained in:
parent
ac2ed368cb
commit
b375246497
@ -1,179 +1,179 @@
|
||||
---
|
||||
read_when:
|
||||
- Вам потрібен точний покроковий опис циклу агента або подій життєвого циклу
|
||||
- Ви змінюєте постановку сеансів у чергу, записи транскриптів або поведінку блокування запису сеансу
|
||||
- Ви змінюєте постановку сесій у чергу, операції запису транскрипту або поведінку блокування запису сесії
|
||||
summary: Життєвий цикл циклу агента, потоки та семантика очікування
|
||||
title: Цикл агента
|
||||
x-i18n:
|
||||
generated_at: "2026-04-30T18:26:41Z"
|
||||
generated_at: "2026-05-01T23:18:12Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 5466893253e1f82482284ff82db56f4c3fca018bf12e4114fad76d37cad954df
|
||||
source_hash: dbb0bd7989c9ab5606cabeb632c1d0542b31cb60283c50ae945836f55024bbc1
|
||||
source_path: concepts/agent-loop.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Агентний цикл — це повний “справжній” запуск агента: приймання → збирання контексту → інференс моделі →
|
||||
виконання інструментів → потокові відповіді → збереження. Це канонічний шлях, який перетворює повідомлення
|
||||
Агентний цикл — це повний «реальний» запуск агента: приймання → збирання контексту → інференс моделі →
|
||||
виконання інструментів → потокові відповіді → збереження. Це авторитетний шлях, який перетворює повідомлення
|
||||
на дії та фінальну відповідь, водночас підтримуючи узгоджений стан сесії.
|
||||
|
||||
В OpenClaw цикл — це один серіалізований запуск на сесію, який випускає події життєвого циклу та потоку,
|
||||
поки модель думає, викликає інструменти й потоково передає вивід. У цьому документі пояснено, як цей автентичний цикл
|
||||
з’єднано від початку до кінця.
|
||||
В OpenClaw цикл — це один серіалізований запуск на сесію, який надсилає події життєвого циклу та потоку,
|
||||
коли модель міркує, викликає інструменти й транслює вивід. У цьому документі пояснено, як цей автентичний цикл
|
||||
з’єднано наскрізно.
|
||||
|
||||
## Точки входу
|
||||
|
||||
- RPC Gateway: `agent` і `agent.wait`.
|
||||
- Gateway RPC: `agent` і `agent.wait`.
|
||||
- CLI: команда `agent`.
|
||||
|
||||
## Як це працює (на високому рівні)
|
||||
|
||||
1. RPC `agent` перевіряє параметри, визначає сесію (sessionKey/sessionId), зберігає метадані сесії та негайно повертає `{ runId, acceptedAt }`.
|
||||
1. `agent` RPC перевіряє параметри, визначає сесію (sessionKey/sessionId), зберігає метадані сесії, одразу повертає `{ runId, acceptedAt }`.
|
||||
2. `agentCommand` запускає агента:
|
||||
- визначає типові значення моделі + thinking/verbose/trace
|
||||
- визначає модель + типові значення thinking/verbose/trace
|
||||
- завантажує знімок Skills
|
||||
- викликає `runEmbeddedPiAgent` (середовище виконання pi-agent-core)
|
||||
- випускає **кінець/помилку життєвого циклу**, якщо вбудований цикл не випускає таку подію
|
||||
- надсилає **завершення/помилку життєвого циклу**, якщо вбудований цикл цього не зробив
|
||||
3. `runEmbeddedPiAgent`:
|
||||
- серіалізує запуски через черги для кожної сесії + глобальні черги
|
||||
- визначає модель + профіль авторизації та створює сесію pi
|
||||
- підписується на події pi й потоково передає дельти асистента/інструментів
|
||||
- серіалізує запуски через черги на сесію + глобальні черги
|
||||
- визначає модель + профіль автентифікації та будує pi-сесію
|
||||
- підписується на pi-події та транслює дельти асистента/інструментів
|
||||
- застосовує тайм-аут -> перериває запуск, якщо його перевищено
|
||||
- для ходів сервера застосунку Codex перериває прийнятий хід, який припиняє створювати прогрес сервера застосунку до термінальної події
|
||||
- повертає корисні навантаження + метадані використання
|
||||
- для ходів app-server Codex перериває прийнятий хід, який перестає створювати прогрес app-server до термінальної події
|
||||
- повертає payload-и + метадані використання
|
||||
4. `subscribeEmbeddedPiSession` з’єднує події pi-agent-core з потоком OpenClaw `agent`:
|
||||
- події інструментів => `stream: "tool"`
|
||||
- дельти асистента => `stream: "assistant"`
|
||||
- події життєвого циклу => `stream: "lifecycle"` (`phase: "start" | "end" | "error"`)
|
||||
5. `agent.wait` використовує `waitForAgentRun`:
|
||||
- очікує на **кінець/помилку життєвого циклу** для `runId`
|
||||
- очікує **завершення/помилки життєвого циклу** для `runId`
|
||||
- повертає `{ status: ok|error|timeout, startedAt, endedAt, error? }`
|
||||
|
||||
## Постановка в чергу + конкурентність
|
||||
## Черги + конкурентність
|
||||
|
||||
- Запуски серіалізуються за ключем сесії (лінія сесії) і, за потреби, через глобальну лінію.
|
||||
- Це запобігає гонкам інструментів/сесій і зберігає узгодженість історії сесії.
|
||||
- Канали обміну повідомленнями можуть вибирати режими черги (collect/steer/followup), які подають роботу в цю систему ліній.
|
||||
- Запуски серіалізуються за ключем сесії (смуга сесії) і, за потреби, через глобальну смугу.
|
||||
- Це запобігає гонкам інструментів/сесій і підтримує узгоджену історію сесії.
|
||||
- Канали обміну повідомленнями можуть вибирати режими черги (collect/steer/followup), які подають роботу в цю систему смуг.
|
||||
Див. [Черга команд](/uk/concepts/queue).
|
||||
- Записи транскрипту також захищені блокуванням запису сесії на файлі сесії. Блокування
|
||||
враховує процеси та базується на файлі, тож виявляє авторів запису, які обходять внутрішньопроцесну чергу або надходять
|
||||
враховує процеси й базується на файлі, тому воно виявляє записувачів, які обходять внутрішньопроцесну чергу або надходять
|
||||
з іншого процесу.
|
||||
- Блокування запису сесії за замовчуванням не є реентерабельними. Якщо допоміжна функція навмисно вкладає отримання
|
||||
того самого блокування, зберігаючи одного логічного автора запису, вона має явно ввімкнути це через
|
||||
- Блокування запису сесії типово не є реентерабельними. Якщо помічник навмисно вкладає отримання
|
||||
того самого блокування, зберігаючи одного логічного записувача, він має явно ввімкнути це через
|
||||
`allowReentrant: true`.
|
||||
|
||||
## Підготовка сесії + робочої області
|
||||
## Підготовка сесії + робочого простору
|
||||
|
||||
- Робоча область визначається та створюється; запуски в пісочниці можуть переспрямовуватися до кореня робочої області пісочниці.
|
||||
- Skills завантажуються (або повторно використовуються зі знімка) та ін’єктуються в середовище й промпт.
|
||||
- Файли початкового завантаження/контексту визначаються та ін’єктуються у звіт системного промпта.
|
||||
- Робочий простір визначається і створюється; sandbox-запуски можуть перенаправлятися до кореня sandbox-робочого простору.
|
||||
- Skills завантажуються (або повторно використовуються зі знімка) та впроваджуються в env і промпт.
|
||||
- Bootstrap/context-файли визначаються та впроваджуються у звіт системного промпта.
|
||||
- Отримується блокування запису сесії; `SessionManager` відкривається та готується до початку потокової передачі. Будь-який
|
||||
подальший шлях переписування транскрипту, Compaction або скорочення має отримати те саме блокування перед відкриттям або
|
||||
зміненням файлу транскрипту.
|
||||
пізніший шлях переписування транскрипту, ущільнення або обрізання має отримати те саме блокування перед відкриттям або
|
||||
зміною файлу транскрипту.
|
||||
|
||||
## Збирання промпта + системний промпт
|
||||
|
||||
- Системний промпт будується з базового промпта OpenClaw, промпта Skills, контексту початкового завантаження та перевизначень для конкретного запуску.
|
||||
- Застосовуються специфічні для моделі обмеження та резерв токенів для Compaction.
|
||||
- Системний промпт будується з базового промпта OpenClaw, промпта Skills, bootstrap-контексту та перевизначень для конкретного запуску.
|
||||
- Застосовуються специфічні для моделі ліміти й резерв токенів для ущільнення.
|
||||
- Див. [Системний промпт](/uk/concepts/system-prompt), щоб дізнатися, що бачить модель.
|
||||
|
||||
## Точки хуків (де можна перехоплювати)
|
||||
## Точки перехоплення (де можна втрутитися)
|
||||
|
||||
OpenClaw має дві системи хуків:
|
||||
|
||||
- **Внутрішні хуки** (хуки Gateway): подієво-керовані скрипти для команд і подій життєвого циклу.
|
||||
- **Хуки Plugin**: точки розширення всередині життєвого циклу агента/інструментів і конвеєра gateway.
|
||||
- **Внутрішні хуки** (хуки Gateway): подієві скрипти для команд і подій життєвого циклу.
|
||||
- **Plugin-хуки**: точки розширення всередині життєвого циклу агента/інструмента та конвеєра gateway.
|
||||
|
||||
### Внутрішні хуки (хуки Gateway)
|
||||
|
||||
- **`agent:bootstrap`**: запускається під час створення файлів початкового завантаження до фіналізації системного промпта.
|
||||
Використовуйте це, щоб додавати/видаляти файли контексту початкового завантаження.
|
||||
- **Хуки команд**: `/new`, `/reset`, `/stop` та інші події команд (див. документ про хуки).
|
||||
- **`agent:bootstrap`**: запускається під час побудови bootstrap-файлів до фіналізації системного промпта.
|
||||
Використовуйте це, щоб додавати/видаляти файли bootstrap-контексту.
|
||||
- **Командні хуки**: `/new`, `/reset`, `/stop` та інші командні події (див. документ про хуки).
|
||||
|
||||
Див. [Хуки](/uk/automation/hooks) для налаштування та прикладів.
|
||||
|
||||
### Хуки Plugin (життєвий цикл агента + gateway)
|
||||
### Plugin-хуки (життєвий цикл агента + gateway)
|
||||
|
||||
Вони виконуються всередині циклу агента або конвеєра gateway:
|
||||
|
||||
- **`before_model_resolve`**: запускається до сесії (без `messages`), щоб детерміновано перевизначити провайдера/модель перед визначенням моделі.
|
||||
- **`before_prompt_build`**: запускається після завантаження сесії (з `messages`), щоб ін’єктувати `prependContext`, `systemPrompt`, `prependSystemContext` або `appendSystemContext` перед надсиланням промпта. Використовуйте `prependContext` для динамічного тексту на хід і поля системного контексту для стабільних вказівок, які мають перебувати в просторі системного промпта.
|
||||
- **`before_agent_start`**: застарілий хук сумісності, який може запускатися в будь-якій фазі; надавайте перевагу явним хукам вище.
|
||||
- **`before_agent_reply`**: запускається після inline-дій і перед викликом LLM, дозволяючи Plugin взяти хід на себе й повернути синтетичну відповідь або повністю приглушити хід.
|
||||
- **`before_model_resolve`**: виконується до сесії (без `messages`), щоб детерміновано перевизначити провайдера/модель перед визначенням моделі.
|
||||
- **`before_prompt_build`**: виконується після завантаження сесії (з `messages`), щоб впровадити `prependContext`, `systemPrompt`, `prependSystemContext` або `appendSystemContext` перед надсиланням промпта. Використовуйте `prependContext` для динамічного тексту на хід, а поля системного контексту — для стабільних настанов, які мають бути в просторі системного промпта.
|
||||
- **`before_agent_start`**: застарілий хук сумісності, який може виконуватися в будь-якій фазі; віддавайте перевагу явним хукам вище.
|
||||
- **`before_agent_reply`**: виконується після inline-дій і перед викликом LLM, дозволяючи Plugin перебрати хід і повернути синтетичну відповідь або повністю приглушити хід.
|
||||
- **`agent_end`**: перевіряє фінальний список повідомлень і метадані запуску після завершення.
|
||||
- **`before_compaction` / `after_compaction`**: спостерігає за циклами Compaction або додає до них анотації.
|
||||
- **`before_compaction` / `after_compaction`**: спостерігає за циклами ущільнення або анотує їх.
|
||||
- **`before_tool_call` / `after_tool_call`**: перехоплює параметри/результати інструментів.
|
||||
- **`before_install`**: перевіряє вбудовані результати сканування та за потреби блокує інсталяції Skills або Plugin.
|
||||
- **`tool_result_persist`**: синхронно трансформує результати інструментів перед записом у транскрипт сесії, що належить OpenClaw.
|
||||
- **`before_install`**: перевіряє результати вбудованого сканування і, за потреби, блокує встановлення skill або Plugin.
|
||||
- **`tool_result_persist`**: синхронно трансформує результати інструментів перед записом у транскрипт сесії, яким володіє OpenClaw.
|
||||
- **`message_received` / `message_sending` / `message_sent`**: хуки вхідних + вихідних повідомлень.
|
||||
- **`session_start` / `session_end`**: межі життєвого циклу сесії.
|
||||
- **`gateway_start` / `gateway_stop`**: події життєвого циклу gateway.
|
||||
|
||||
Правила рішень хуків для вихідних/інструментальних захистів:
|
||||
Правила рішень хуків для вихідних/інструментальних запобіжників:
|
||||
|
||||
- `before_tool_call`: `{ block: true }` є термінальним і зупиняє обробники з нижчим пріоритетом.
|
||||
- `before_tool_call`: `{ block: false }` не виконує дій і не скасовує попереднє блокування.
|
||||
- `before_tool_call`: `{ block: false }` нічого не робить і не скасовує попереднє блокування.
|
||||
- `before_install`: `{ block: true }` є термінальним і зупиняє обробники з нижчим пріоритетом.
|
||||
- `before_install`: `{ block: false }` не виконує дій і не скасовує попереднє блокування.
|
||||
- `before_install`: `{ block: false }` нічого не робить і не скасовує попереднє блокування.
|
||||
- `message_sending`: `{ cancel: true }` є термінальним і зупиняє обробники з нижчим пріоритетом.
|
||||
- `message_sending`: `{ cancel: false }` не виконує дій і не скасовує попереднє скасування.
|
||||
- `message_sending`: `{ cancel: false }` нічого не робить і не скасовує попереднє скасування.
|
||||
|
||||
Див. [Хуки Plugin](/uk/plugins/hooks) для API хуків і подробиць реєстрації.
|
||||
Див. [Plugin-хуки](/uk/plugins/hooks) для API хуків і деталей реєстрації.
|
||||
|
||||
Тестові обв’язки можуть адаптувати ці хуки по-різному. Тестова обв’язка сервера застосунку Codex зберігає
|
||||
хуки Plugin OpenClaw як контракт сумісності для документованих дзеркальних
|
||||
поверхонь, тоді як нативні хуки Codex залишаються окремим нижчорівневим механізмом Codex.
|
||||
Harness-и можуть адаптувати ці хуки по-різному. Harness app-server Codex зберігає
|
||||
Plugin-хуки OpenClaw як контракт сумісності для задокументованих дзеркальних
|
||||
поверхонь, тоді як нативні хуки Codex залишаються окремим нижчерівневим механізмом Codex.
|
||||
|
||||
## Потокова передача + часткові відповіді
|
||||
|
||||
- Дельти асистента потоково передаються з pi-agent-core і випускаються як події `assistant`.
|
||||
- Потокова передача блоків може випускати часткові відповіді або на `text_end`, або на `message_end`.
|
||||
- Потокова передача міркувань може випускатися як окремий потік або як блокові відповіді.
|
||||
- Див. [Потокова передача](/uk/concepts/streaming) щодо поведінки фрагментації та блокових відповідей.
|
||||
- Дельти асистента транслюються з pi-agent-core і надсилаються як події `assistant`.
|
||||
- Потокова передача блоків може надсилати часткові відповіді або на `text_end`, або на `message_end`.
|
||||
- Потокова передача міркувань може надсилатися як окремий потік або як блокові відповіді.
|
||||
- Див. [Потокова передача](/uk/concepts/streaming) про поведінку фрагментації та блокових відповідей.
|
||||
|
||||
## Виконання інструментів + інструменти обміну повідомленнями
|
||||
|
||||
- Події початку/оновлення/завершення інструментів випускаються в потоці `tool`.
|
||||
- Результати інструментів очищаються за розміром і корисними навантаженнями зображень перед журналюванням/випуском.
|
||||
- Надсилання інструментів обміну повідомленнями відстежуються, щоб пригнічувати дублікати підтверджень асистента.
|
||||
- Події start/update/end інструментів надсилаються в потоці `tool`.
|
||||
- Результати інструментів очищуються за розміром і image payload-и — перед журналюванням/надсиланням.
|
||||
- Надсилання інструментами повідомлень відстежується, щоб приглушити дубльовані підтвердження асистента.
|
||||
|
||||
## Формування відповіді + пригнічення
|
||||
## Формування відповіді + приглушення
|
||||
|
||||
- Фінальні корисні навантаження збираються з:
|
||||
- тексту асистента (і необов’язкового міркування)
|
||||
- Фінальні payload-и збираються з:
|
||||
- тексту асистента (та необов’язкового міркування)
|
||||
- inline-зведень інструментів (коли verbose + дозволено)
|
||||
- тексту помилки асистента, коли модель завершується з помилкою
|
||||
- Точний тихий токен `NO_REPLY` / `no_reply` фільтрується з вихідних
|
||||
корисних навантажень.
|
||||
- Дублікати інструментів обміну повідомленнями вилучаються з фінального списку корисних навантажень.
|
||||
- Якщо не залишається корисних навантажень, придатних для відображення, і інструмент завершився з помилкою, випускається резервна відповідь про помилку інструмента
|
||||
(якщо інструмент обміну повідомленнями вже не надіслав видиму користувачу відповідь).
|
||||
- тексту помилки асистента, коли модель повертає помилку
|
||||
- Точний silent token `NO_REPLY` / `no_reply` фільтрується з вихідних
|
||||
payload-ів.
|
||||
- Дублікати інструментів обміну повідомленнями видаляються з фінального списку payload-ів.
|
||||
- Якщо не залишилося жодних придатних до рендерингу payload-ів, а інструмент завершився з помилкою, надсилається fallback-відповідь про помилку інструмента
|
||||
(якщо інструмент обміну повідомленнями ще не надіслав видиму користувачу відповідь).
|
||||
|
||||
## Compaction + повторні спроби
|
||||
|
||||
- Автоматичний Compaction випускає події потоку `compaction` і може запустити повторну спробу.
|
||||
- Під час повторної спроби буфери в пам’яті та зведення інструментів скидаються, щоб уникнути дублювання виводу.
|
||||
- Див. [Compaction](/uk/concepts/compaction) щодо конвеєра Compaction.
|
||||
- Автоматичне ущільнення надсилає події потоку `compaction` і може запускати повторну спробу.
|
||||
- Під час повторної спроби буфери в пам’яті та зведення інструментів скидаються, щоб уникнути дубльованого виводу.
|
||||
- Див. [Compaction](/uk/concepts/compaction) про конвеєр ущільнення.
|
||||
|
||||
## Потоки подій (сьогодні)
|
||||
|
||||
- `lifecycle`: випускається `subscribeEmbeddedPiSession` (і як резервний варіант `agentCommand`)
|
||||
- `lifecycle`: надсилається `subscribeEmbeddedPiSession` (і як fallback через `agentCommand`)
|
||||
- `assistant`: потокові дельти з pi-agent-core
|
||||
- `tool`: потокові події інструментів з pi-agent-core
|
||||
|
||||
## Обробка чат-каналу
|
||||
## Обробка чат-каналів
|
||||
|
||||
- Дельти асистента буферизуються в чат-повідомлення `delta`.
|
||||
- Чат `final` випускається на **кінці/помилці життєвого циклу**.
|
||||
- Чат `final` надсилається на **завершення/помилку життєвого циклу**.
|
||||
|
||||
## Тайм-аути
|
||||
|
||||
- Типове значення `agent.wait`: 30 с (лише очікування). Параметр `timeoutMs` перевизначає.
|
||||
- Середовище виконання агента: типове значення `agents.defaults.timeoutSeconds` — 172800 с (48 годин); застосовується в таймері переривання `runEmbeddedPiAgent`.
|
||||
- Середовище виконання Cron: ізольований агентний хід `timeoutSeconds` належить cron. Планувальник запускає цей таймер, коли починається виконання, перериває базовий запуск у налаштований граничний момент, а потім виконує обмежене очищення перед записом тайм-ауту, щоб застаріла дочірня сесія не могла заблокувати лінію.
|
||||
- Відновлення застряглої сесії: з увімкненою діагностикою `diagnostics.stuckSessionWarnMs` виявляє тривалі сесії `processing`. Активні вбудовані запуски, активні операції відповідей і активні завдання лінії сесії за замовчуванням залишаються лише попередженнями; якщо діагностика не показує активної роботи для сесії, сторожовий механізм звільняє зачеплену лінію сесії, щоб робота запуску в черзі могла спорожнитися.
|
||||
- Тайм-аут простою моделі: OpenClaw перериває запит до моделі, коли до завершення вікна простою не надходять фрагменти відповіді. `models.providers.<id>.timeoutSeconds` розширює цей сторожовий механізм простою для повільних локальних/самостійно розміщених провайдерів; інакше OpenClaw використовує `agents.defaults.timeoutSeconds`, коли його налаштовано, з типовим обмеженням у 120 с. Запуски, ініційовані Cron, без явного тайм-ауту моделі або агента вимикають сторожовий механізм простою та покладаються на зовнішній тайм-аут cron.
|
||||
- Тайм-аут HTTP-запиту провайдера: `models.providers.<id>.timeoutSeconds` застосовується до HTTP-запитів моделі цього провайдера, включно з підключенням, заголовками, тілом, тайм-аутом запиту SDK, загальною обробкою переривання захищеного fetch і сторожовим механізмом простою потоку моделі. Використовуйте це для повільних локальних/самостійно розміщених провайдерів, як-от Ollama, перед підвищенням тайм-ауту всього середовища виконання агента.
|
||||
- Середовище виконання агента: типове значення `agents.defaults.timeoutSeconds` — 172800 с (48 годин); застосовується таймером переривання в `runEmbeddedPiAgent`.
|
||||
- Середовище виконання Cron: ізольований agent-turn `timeoutSeconds` належить cron. Планувальник запускає цей таймер на початку виконання, перериває базовий запуск у налаштований дедлайн, а потім виконує обмежене очищення перед записом тайм-ауту, щоб застаріла дочірня сесія не могла залишити смугу завислою.
|
||||
- Діагностика життєздатності сесії: коли діагностику ввімкнено, `diagnostics.stuckSessionWarnMs` класифікує довгі сесії `processing`. Активні вбудовані запуски, виклики моделі та виклики інструментів повідомляються як `session.long_running`; активна робота без недавнього прогресу повідомляється як `session.stalled`; `session.stuck` зарезервовано для застарілого обліку сесії без активної роботи, і лише цей шлях звільняє відповідну смугу сесії, щоб робота запуску в черзі могла просунутися.
|
||||
- Тайм-аут простою моделі: OpenClaw перериває запит до моделі, коли в межах вікна простою не надходять фрагменти відповіді. `models.providers.<id>.timeoutSeconds` розширює цей idle watchdog для повільних локальних/self-hosted провайдерів; інакше OpenClaw використовує `agents.defaults.timeoutSeconds`, коли його налаштовано, з типовим обмеженням 120 с. Запуски, ініційовані Cron, без явного тайм-ауту моделі або агента вимикають idle watchdog і покладаються на зовнішній тайм-аут cron.
|
||||
- Тайм-аут HTTP-запиту провайдера: `models.providers.<id>.timeoutSeconds` застосовується до HTTP-fetch-ів моделі цього провайдера, включно з connect, headers, body, SDK request timeout, total guarded-fetch abort handling і model stream idle watchdog. Використовуйте це для повільних локальних/self-hosted провайдерів, таких як Ollama, перш ніж підвищувати тайм-аут усього середовища виконання агента.
|
||||
|
||||
## Де все може завершитися раніше
|
||||
|
||||
@ -185,7 +185,7 @@ OpenClaw має дві системи хуків:
|
||||
## Пов’язане
|
||||
|
||||
- [Інструменти](/uk/tools) — доступні інструменти агента
|
||||
- [Хуки](/uk/automation/hooks) — подієво-керовані скрипти, що запускаються подіями життєвого циклу агента
|
||||
- [Хуки](/uk/automation/hooks) — подієві скрипти, що запускаються подіями життєвого циклу агента
|
||||
- [Compaction](/uk/concepts/compaction) — як підсумовуються довгі розмови
|
||||
- [Затвердження Exec](/uk/tools/exec-approvals) — шлюзи затвердження для команд оболонки
|
||||
- [Thinking](/uk/tools/thinking) — налаштування рівня thinking/міркування
|
||||
- [Підтвердження Exec](/uk/tools/exec-approvals) — шлюзи підтвердження для shell-команд
|
||||
- [Thinking](/uk/tools/thinking) — конфігурація рівня мислення/міркування
|
||||
|
||||
@ -2,33 +2,33 @@
|
||||
read_when:
|
||||
- Зміна виконання автовідповідей або паралельності
|
||||
- Пояснення режимів /queue або поведінки спрямування повідомлень
|
||||
summary: Режими черги автовідповідей, значення за замовчуванням і перевизначення для окремих сеансів
|
||||
summary: Режими черги автовідповідей, стандартні значення та перевизначення для окремих сеансів
|
||||
title: Черга команд
|
||||
x-i18n:
|
||||
generated_at: "2026-04-30T18:26:36Z"
|
||||
generated_at: "2026-05-01T23:18:08Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: fbf1bb1ffd4ce06fa138f63e31651b8821226d9c95dd6b93d68326a5fb91fdd0
|
||||
source_hash: b3b24643eea9c8f374b041b251675a1a3c6567306dca07001b4ba82d20391eb1
|
||||
source_path: concepts/queue.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Ми серіалізуємо вхідні запуски автовідповідей (усі канали) через невелику внутрішньопроцесну чергу, щоб запобігти конфліктам між кількома запусками агента, водночас зберігаючи безпечний паралелізм між сесіями.
|
||||
Ми серіалізуємо вхідні запуски автовідповідей (усі канали) через невелику внутрішньопроцесну чергу, щоб запобігти зіткненню кількох запусків агента, водночас дозволяючи безпечний паралелізм між сесіями.
|
||||
|
||||
## Чому
|
||||
## Навіщо
|
||||
|
||||
- Запуски автовідповідей можуть бути дорогими (виклики LLM) і можуть конфліктувати, коли кілька вхідних повідомлень надходять майже одночасно.
|
||||
- Серіалізація уникає конкуренції за спільні ресурси (файли сесій, журнали, stdin CLI) і зменшує ймовірність досягнення лімітів швидкості upstream.
|
||||
- Серіалізація уникає конкуренції за спільні ресурси (файли сесій, журнали, CLI stdin) і зменшує ймовірність upstream-лімітів частоти.
|
||||
|
||||
## Як це працює
|
||||
|
||||
- FIFO-черга з урахуванням lane обробляє кожну lane з налаштовуваним обмеженням конкурентності (типово 1 для неналаштованих lane; main типово має 4, subagent — 8).
|
||||
- `runEmbeddedPiAgent` ставить у чергу за **ключем сесії** (lane `session:<key>`), щоб гарантувати лише один активний запуск на сесію.
|
||||
- Кожен запуск сесії потім ставиться в **глобальну lane** (`main` за замовчуванням), тож загальний паралелізм обмежується `agents.defaults.maxConcurrent`.
|
||||
- Коли увімкнено докладне журналювання, поставлені в чергу запуски виводять коротке повідомлення, якщо чекали понад ~2 с перед стартом.
|
||||
- Індикатори набору все одно спрацьовують одразу під час додавання в чергу (коли це підтримує канал), тож користувацький досвід не змінюється, поки ми чекаємо своєї черги.
|
||||
- FIFO-черга з урахуванням смуг обробляє кожну смугу з налаштовуваним обмеженням конкурентності (типово 1 для неналаштованих смуг; main типово має 4, subagent — 8).
|
||||
- `runEmbeddedPiAgent` ставить у чергу за **ключем сесії** (смуга `session:<key>`), щоб гарантувати лише один активний запуск на сесію.
|
||||
- Кожен запуск сесії потім ставиться в **глобальну смугу** (`main` типово), тож загальний паралелізм обмежується `agents.defaults.maxConcurrent`.
|
||||
- Коли ввімкнено докладне журналювання, запуски в черзі виводять коротке сповіщення, якщо чекали понад ~2 с перед стартом.
|
||||
- Індикатори введення все одно спрацьовують одразу під час додавання в чергу (коли це підтримує канал), тож досвід користувача не змінюється, поки ми чекаємо своєї черги.
|
||||
|
||||
## Значення за замовчуванням
|
||||
## Типові значення
|
||||
|
||||
Коли не задано, усі поверхні вхідних каналів використовують:
|
||||
|
||||
@ -37,30 +37,30 @@ x-i18n:
|
||||
- `cap: 20`
|
||||
- `drop: "summarize"`
|
||||
|
||||
`steer` є типовим режимом, бо він зберігає активний хід моделі швидким без
|
||||
запуску другого запуску сесії. Він обробляє всі steering-повідомлення, що надійшли
|
||||
`steer` є типовим, бо він зберігає активний хід моделі чутливим без
|
||||
запуску другої сесії. Він обробляє всі керівні повідомлення, які надійшли
|
||||
до наступної межі моделі. Якщо поточний запуск не може приймати steering,
|
||||
OpenClaw повертається до запису followup у черзі.
|
||||
OpenClaw повертається до запису в черзі followup.
|
||||
|
||||
## Режими черги
|
||||
|
||||
Вхідні повідомлення можуть спрямовувати поточний запуск, чекати наступного ходу followup або робити і те, й інше:
|
||||
Вхідні повідомлення можуть спрямовувати поточний запуск, чекати наступного ходу або робити обидва:
|
||||
|
||||
- `steer`: ставить steering-повідомлення в чергу активного runtime. Pi доставляє всі очікувані steering-повідомлення **після того, як поточний хід асистента завершить виконання своїх викликів інструментів**, перед наступним викликом LLM; app-server Codex отримує один пакетний `turn/steer`. Якщо запуск не перебуває в активному streaming або steering недоступний, OpenClaw повертається до запису followup у черзі.
|
||||
- `queue` (застарілий): старий steering по одному повідомленню. Pi доставляє одне повідомлення steering із черги на кожній межі моделі; app-server Codex отримує окремі запити `turn/steer`. Надавайте перевагу `steer`, якщо вам не потрібна попередня серіалізована поведінка.
|
||||
- `steer`: ставить steering-повідомлення в активне середовище виконання. Pi доставляє всі очікувані steering-повідомлення **після того, як поточний хід асистента завершить виконання своїх викликів інструментів**, перед наступним викликом LLM; Codex app-server отримує один пакетний `turn/steer`. Якщо запуск не виконує активний streaming або steering недоступний, OpenClaw повертається до запису в черзі followup.
|
||||
- `queue` (застарілий): старий steering по одному повідомленню. Pi доставляє одне повідомлення steering з черги на кожній межі моделі; Codex app-server отримує окремі запити `turn/steer`. Віддавайте перевагу `steer`, якщо вам не потрібна попередня серіалізована поведінка.
|
||||
- `followup`: ставить кожне повідомлення в чергу для пізнішого ходу агента після завершення поточного запуску.
|
||||
- `collect`: об’єднує повідомлення з черги в **один** хід followup після тихого вікна. Якщо повідомлення спрямовані в різні канали/треди, вони обробляються окремо, щоб зберегти маршрутизацію.
|
||||
- `steer-backlog` (також `steer+backlog`): спрямовує зараз **і** зберігає те саме повідомлення для ходу followup.
|
||||
- `collect`: об’єднує повідомлення в черзі в **один** наступний хід після тихого вікна. Якщо повідомлення спрямовані до різних каналів/гілок, вони обробляються окремо, щоб зберегти маршрутизацію.
|
||||
- `steer-backlog` (також `steer+backlog`): спрямовує зараз **і** зберігає те саме повідомлення для наступного ходу.
|
||||
- `interrupt` (застарілий): перериває активний запуск для цієї сесії, а потім запускає найновіше повідомлення.
|
||||
|
||||
Steer-backlog означає, що після спрямованого запуску можна отримати відповідь followup, тому
|
||||
на streaming-поверхнях це може виглядати як дублікати. Надавайте перевагу `collect`/`steer`, якщо хочете
|
||||
Steer-backlog означає, що ви можете отримати наступну відповідь після спрямованого запуску, тож
|
||||
streaming-поверхні можуть виглядати як дублікати. Віддавайте перевагу `collect`/`steer`, якщо хочете
|
||||
одну відповідь на кожне вхідне повідомлення.
|
||||
|
||||
Про специфічні для runtime часові характеристики та поведінку залежностей див.
|
||||
Для специфічної для середовища виконання поведінки таймінгів і залежностей див.
|
||||
[Черга steering](/uk/concepts/queue-steering).
|
||||
|
||||
Налаштуйте глобально або для кожного каналу через `messages.queue`:
|
||||
Налаштуйте глобально або для окремого каналу через `messages.queue`:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -80,29 +80,29 @@ Steer-backlog означає, що після спрямованого запу
|
||||
|
||||
Параметри застосовуються до `followup`, `collect` і `steer-backlog` (а також до `steer` або застарілого `queue`, коли steering повертається до followup):
|
||||
|
||||
- `debounceMs`: тихе вікно перед обробкою поставлених у чергу followup. Числа без одиниць — це мілісекунди; одиниці `ms`, `s`, `m`, `h` і `d` приймаються параметрами `/queue`.
|
||||
- `debounceMs`: тихе вікно перед обробкою наступних повідомлень у черзі. Голі числа означають мілісекунди; одиниці `ms`, `s`, `m`, `h` і `d` приймаються параметрами `/queue`.
|
||||
- `cap`: максимальна кількість повідомлень у черзі на сесію. Значення нижче `1` ігноруються.
|
||||
- `drop: "summarize"`: типово. За потреби відкидає найстаріші записи черги, зберігає компактні підсумки та вставляє їх як синтетичний prompt followup.
|
||||
- `drop: "summarize"`: типово. За потреби відкидає найстаріші записи черги, зберігає стислі підсумки та вставляє їх як синтетичний prompt для followup.
|
||||
- `drop: "old"`: за потреби відкидає найстаріші записи черги без збереження підсумків.
|
||||
- `drop: "new"`: відхиляє найновіше повідомлення, коли черга вже заповнена.
|
||||
|
||||
Типово: `debounceMs: 500`, `cap: 20`, `drop: summarize`.
|
||||
|
||||
## Пріоритет
|
||||
## Пріоритетність
|
||||
|
||||
Для вибору режиму OpenClaw визначає:
|
||||
|
||||
1. Inline або збережене перевизначення `/queue` для сесії.
|
||||
1. Вбудоване або збережене посесійне перевизначення `/queue`.
|
||||
2. `messages.queue.byChannel.<channel>`.
|
||||
3. `messages.queue.mode`.
|
||||
4. Типовий `steer`.
|
||||
|
||||
Для параметрів inline або збережені параметри `/queue` мають пріоритет над конфігурацією. Потім
|
||||
застосовуються debounce для каналу (`messages.queue.debounceMsByChannel`), типові значення debounce
|
||||
Plugin, глобальні параметри `messages.queue` і вбудовані типові значення. `cap` і `drop` є глобальними/сесійними параметрами, а не конфігураційними
|
||||
ключами для кожного каналу.
|
||||
Для параметрів вбудовані або збережені параметри `/queue` мають перевагу над конфігурацією. Потім
|
||||
застосовуються специфічний для каналу debounce (`messages.queue.debounceMsByChannel`), типові значення
|
||||
debounce для plugin, глобальні параметри `messages.queue` і вбудовані типові значення. `cap` і `drop` є
|
||||
глобальними/сесійними параметрами, а не ключами поканальної конфігурації.
|
||||
|
||||
## Перевизначення для сесії
|
||||
## Посесійні перевизначення
|
||||
|
||||
- Надішліть `/queue <mode>` як окрему команду, щоб зберегти режим для поточної сесії.
|
||||
- Параметри можна комбінувати: `/queue collect debounce:0.5s cap:25 drop:summarize`
|
||||
@ -110,18 +110,18 @@ Plugin, глобальні параметри `messages.queue` і вбудова
|
||||
|
||||
## Область дії та гарантії
|
||||
|
||||
- Застосовується до запусків агентів автовідповіді в усіх вхідних каналах, які використовують reply pipeline Gateway (WhatsApp web, Telegram, Slack, Discord, Signal, iMessage, webchat тощо).
|
||||
- Типова lane (`main`) є процесно-глобальною для вхідних повідомлень і основних Heartbeat; задайте `agents.defaults.maxConcurrent`, щоб дозволити кілька сесій паралельно.
|
||||
- Можуть існувати додаткові lane (наприклад, `cron`, `cron-nested`, `nested`, `subagent`), щоб фонові завдання могли виконуватися паралельно, не блокуючи вхідні відповіді. Ізольовані ходи cron-агента утримують слот `cron`, поки їхнє внутрішнє виконання агента використовує `cron-nested`; обидва використовують `cron.maxConcurrentRuns`. Спільні не-cron потоки `nested` зберігають власну поведінку lane. Ці відокремлені запуски відстежуються як [фонові завдання](/uk/automation/tasks).
|
||||
- Lane для сесії гарантують, що лише один запуск агента одночасно торкається певної сесії.
|
||||
- Без зовнішніх залежностей або фонових worker-тредів; чистий TypeScript + promises.
|
||||
- Застосовується до запусків агентів автовідповідей у всіх вхідних каналах, що використовують конвеєр відповідей Gateway (WhatsApp web, Telegram, Slack, Discord, Signal, iMessage, webchat тощо).
|
||||
- Типова смуга (`main`) є процесно-глобальною для вхідних повідомлень + основних Heartbeat; задайте `agents.defaults.maxConcurrent`, щоб дозволити кілька сесій паралельно.
|
||||
- Можуть існувати додаткові смуги (наприклад, `cron`, `cron-nested`, `nested`, `subagent`), щоб фонові завдання могли виконуватися паралельно, не блокуючи вхідні відповіді. Ізольовані ходи cron-агента утримують слот `cron`, доки їхнє внутрішнє виконання агента використовує `cron-nested`; обидва використовують `cron.maxConcurrentRuns`. Спільні не-cron потоки `nested` зберігають власну поведінку смуги. Ці відокремлені запуски відстежуються як [фонові завдання](/uk/automation/tasks).
|
||||
- Посесійні смуги гарантують, що лише один запуск агента торкається певної сесії одночасно.
|
||||
- Без зовнішніх залежностей або фонових worker-потоків; чисті TypeScript + promises.
|
||||
|
||||
## Усунення несправностей
|
||||
|
||||
- Якщо команди здаються завислими, увімкніть докладні журнали та шукайте рядки “queued for …ms”, щоб підтвердити, що черга обробляється.
|
||||
- Якщо вам потрібна глибина черги, увімкніть докладні журнали та стежте за рядками часу черги.
|
||||
- Запуски app-server Codex, які приймають хід, а потім перестають виводити прогрес, перериваються адаптером Codex, щоб активна lane сесії могла звільнитися замість очікування timeout зовнішнього запуску.
|
||||
- Коли діагностику увімкнено, сесії, що залишаються в `processing` довше за `diagnostics.stuckSessionWarnMs`, записують попередження про завислу сесію. Активні вбудовані запуски, активні операції відповіді та активні завдання lane типово залишаються лише попередженнями; застарілий startup-облік без активної роботи сесії може звільнити відповідну lane сесії, щоб робота з черги продовжилася.
|
||||
- Якщо здається, що команди зависли, увімкніть докладні журнали й шукайте рядки “queued for …ms”, щоб підтвердити, що черга обробляється.
|
||||
- Якщо вам потрібна глибина черги, увімкніть докладні журнали й стежте за рядками таймінгів черги.
|
||||
- Запуски Codex app-server, які приймають хід, а потім припиняють виводити прогрес, перериваються адаптером Codex, щоб активна смуга сесії могла звільнитися замість очікування тайм-ауту зовнішнього запуску.
|
||||
- Коли діагностику ввімкнено, сесії, що залишаються в `processing` після `diagnostics.stuckSessionWarnMs`, класифікуються за поточною активністю. Активна робота журналюється як `session.long_running`; активна робота без нещодавнього прогресу журналюється як `session.stalled`; `session.stuck` зарезервовано для застарілого обліку сесій без активної роботи, і лише цей шлях може звільнити відповідну смугу сесії, щоб робота в черзі обробилася.
|
||||
|
||||
## Пов’язане
|
||||
|
||||
|
||||
@ -1,58 +1,58 @@
|
||||
---
|
||||
read_when:
|
||||
- Вам потрібна точна семантика конфігурації на рівні полів або значення за замовчуванням
|
||||
- Вам потрібні точна семантика конфігурації на рівні полів або значення за замовчуванням
|
||||
- Ви перевіряєте блоки конфігурації каналу, моделі, Gateway або інструмента
|
||||
summary: Довідник конфігурації Gateway для основних ключів OpenClaw, значень за замовчуванням і посилань на окремі довідники підсистем
|
||||
title: Довідник із конфігурації
|
||||
summary: Довідник з конфігурації Gateway для основних ключів OpenClaw, стандартних значень і посилань на спеціалізовані довідники підсистем
|
||||
title: Довідник із налаштування
|
||||
x-i18n:
|
||||
generated_at: "2026-04-29T01:48:49Z"
|
||||
generated_at: "2026-05-01T23:18:17Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 83fd28b7d6a2e670ab97aac206bb14343bd887da3236c6135d7958cc6e97b735
|
||||
source_hash: d5e167fb8f9670e206a7b3794c8a2b1cf269fc7ad816c2feae00d1309edd1d54
|
||||
source_path: gateway/configuration-reference.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Довідник основної конфігурації для `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Конфігурація](/uk/gateway/configuration).
|
||||
Основний довідник конфігурації для `~/.openclaw/openclaw.json`. Для огляду, орієнтованого на завдання, див. [Configuration](/uk/gateway/configuration).
|
||||
|
||||
Охоплює основні поверхні конфігурації OpenClaw і містить посилання на глибші довідники, коли підсистема має власний. Каталоги команд, якими володіють канали й plugin, а також поглиблені параметри пам’яті/QMD розміщені на власних сторінках, а не на цій.
|
||||
Охоплює основні поверхні конфігурації OpenClaw і посилається на окремі довші довідники, коли підсистема має власну детальнішу документацію. Каталоги команд, що належать каналам і plugins, а також глибокі налаштування пам’яті/QMD розміщені на власних сторінках, а не на цій.
|
||||
|
||||
Джерело істини в коді:
|
||||
Істина в коді:
|
||||
|
||||
- `openclaw config schema` виводить актуальну JSON Schema, що використовується для валідації та Control UI, з об’єднаними метаданими вбудованих/plugin/каналів, коли вони доступні
|
||||
- `config.schema.lookup` повертає один вузол схеми з областю дії за шляхом для інструментів деталізації
|
||||
- `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) для орієнтованих на завдання настанов, а цю сторінку
|
||||
для ширшої карти полів, значень за замовчуванням і посилань на довідники підсистем.
|
||||
точної документації та обмежень на рівні поля перед редагуванням. Використовуйте
|
||||
[Configuration](/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) для поточного каталогу вбудованих + bundled команд
|
||||
- сторінки відповідних каналів/plugin для поверхонь команд, специфічних для каналів
|
||||
- [Slash commands](/uk/tools/slash-commands) для поточного вбудованого + bundled каталогу команд
|
||||
- сторінки каналів/plugins-власників для поверхонь команд, специфічних для каналів
|
||||
|
||||
Формат конфігурації — **JSON5** (дозволені коментарі та кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні значення за замовчуванням, коли їх пропущено.
|
||||
Формат конфігурації — **JSON5** (дозволені коментарі + кінцеві коми). Усі поля необов’язкові — OpenClaw використовує безпечні стандартні значення, коли їх пропущено.
|
||||
|
||||
---
|
||||
|
||||
## Канали
|
||||
|
||||
Ключі конфігурації для окремих каналів перенесено на спеціальну сторінку — див.
|
||||
[Конфігурація — канали](/uk/gateway/config-channels) для `channels.*`,
|
||||
Ключі конфігурації для окремих каналів перенесено на окрему сторінку — див.
|
||||
[Configuration — channels](/uk/gateway/config-channels) для `channels.*`,
|
||||
зокрема Slack, Discord, Telegram, WhatsApp, Matrix, iMessage та інших
|
||||
bundled каналів (автентифікація, контроль доступу, кілька облікових записів, шлюзування згадок).
|
||||
bundled каналів (автентифікація, контроль доступу, кілька облікових записів, шлюз згадок).
|
||||
|
||||
## Стандартні параметри агента, кілька агентів, сеанси та повідомлення
|
||||
## Стандартні значення агента, кілька агентів, сеанси та повідомлення
|
||||
|
||||
Перенесено на спеціальну сторінку — див.
|
||||
[Конфігурація — агенти](/uk/gateway/config-agents) для:
|
||||
Перенесено на окрему сторінку — див.
|
||||
[Configuration — agents](/uk/gateway/config-agents) для:
|
||||
|
||||
- `agents.defaults.*` (робочий простір, модель, thinking, heartbeat, пам’ять, медіа, skills, sandbox)
|
||||
- `agents.defaults.*` (робоча область, модель, thinking, heartbeat, пам’ять, медіа, skills, sandbox)
|
||||
- `multiAgent.*` (маршрутизація та прив’язки кількох агентів)
|
||||
- `session.*` (життєвий цикл сеансу, compaction, pruning)
|
||||
- `session.*` (життєвий цикл сеансу, compaction, обрізання)
|
||||
- `messages.*` (доставка повідомлень, TTS, рендеринг markdown)
|
||||
- `talk.*` (режим Talk)
|
||||
- `talk.speechLocale`: необов’язковий ідентифікатор локалі BCP 47 для розпізнавання мовлення Talk на iOS/macOS
|
||||
@ -60,15 +60,15 @@ bundled каналів (автентифікація, контроль дост
|
||||
|
||||
## Інструменти та користувацькі провайдери
|
||||
|
||||
Політику інструментів, експериментальні перемикачі, конфігурацію інструментів на базі провайдерів і налаштування користувацького
|
||||
провайдера / базового URL перенесено на спеціальну сторінку — див.
|
||||
[Конфігурація — інструменти та користувацькі провайдери](/uk/gateway/config-tools).
|
||||
Політику інструментів, експериментальні перемикачі, конфігурацію інструментів на базі провайдерів і налаштування користувацьких
|
||||
провайдерів / базових URL перенесено на окрему сторінку — див.
|
||||
[Configuration — tools and custom providers](/uk/gateway/config-tools).
|
||||
|
||||
## Моделі
|
||||
|
||||
Визначення провайдерів, списки дозволених моделей і налаштування користувацьких провайдерів розміщені в
|
||||
[Конфігурація — інструменти та користувацькі провайдери](/uk/gateway/config-tools#custom-providers-and-base-urls).
|
||||
Корінь `models` також володіє глобальною поведінкою каталогу моделей.
|
||||
Визначення провайдерів, allowlists моделей і налаштування користувацьких провайдерів розміщені в
|
||||
[Configuration — tools and custom providers](/uk/gateway/config-tools#custom-providers-and-base-urls).
|
||||
Корінь `models` також відповідає за глобальну поведінку каталогу моделей.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -79,17 +79,17 @@ bundled каналів (автентифікація, контроль дост
|
||||
}
|
||||
```
|
||||
|
||||
- `models.mode`: поведінка каталогу провайдера (`merge` або `replace`).
|
||||
- `models.providers`: мапа користувацьких провайдерів, ключована за id провайдера.
|
||||
- `models.pricing.enabled`: керує фоновим bootstrap ціноутворення. Коли
|
||||
- `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-адаптерами. Команди `openclaw mcp list`,
|
||||
`show`, `set` і `unset` керують цим блоком без підключення до
|
||||
цільового сервера під час редагування конфігурації.
|
||||
|
||||
@ -115,20 +115,20 @@ bundled каналів (автентифікація, контроль дост
|
||||
}
|
||||
```
|
||||
|
||||
- `mcp.servers`: іменовані визначення stdio або віддалених MCP-серверів для runtime, які
|
||||
- `mcp.servers`: іменовані stdio або віддалені визначення MCP-серверів для runtime, які
|
||||
надають налаштовані MCP-інструменти.
|
||||
Віддалені записи використовують `transport: "streamable-http"` або `transport: "sse"`;
|
||||
`type: "http"` — CLI-native псевдонім, який `openclaw mcp set` і
|
||||
`type: "http"` — це CLI-native псевдонім, який `openclaw mcp set` і
|
||||
`openclaw doctor --fix` нормалізують у канонічне поле `transport`.
|
||||
- `mcp.sessionIdleTtlMs`: TTL бездіяльності для bundled MCP runtime з областю дії сеансу.
|
||||
Одноразові вбудовані запуски запитують очищення наприкінці виконання; цей TTL є резервним механізмом для
|
||||
- `mcp.sessionIdleTtlMs`: idle TTL для session-scoped bundled MCP runtime.
|
||||
Одноразові вбудовані запуски запитують очищення після завершення запуску; цей TTL є запасним механізмом для
|
||||
довготривалих сеансів і майбутніх викликачів.
|
||||
- Зміни в `mcp.*` застосовуються наживо через утилізацію кешованих MCP runtime сеансу.
|
||||
Наступне виявлення/використання інструмента відтворює їх із нової конфігурації, тому видалені
|
||||
записи `mcp.servers` прибираються негайно, а не чекають TTL бездіяльності.
|
||||
- Зміни в `mcp.*` застосовуються гаряче через dispose кешованих session MCP runtime.
|
||||
Наступне виявлення/використання інструменту відтворює їх із нової конфігурації, тож видалені
|
||||
записи `mcp.servers` прибираються негайно, а не чекають idle TTL.
|
||||
|
||||
Див. [MCP](/uk/cli/mcp#openclaw-as-an-mcp-client-registry) і
|
||||
[CLI-бекенди](/uk/gateway/cli-backends#bundle-mcp-overlays) щодо runtime-поведінки.
|
||||
[CLI backends](/uk/gateway/cli-backends#bundle-mcp-overlays) щодо runtime-поведінки.
|
||||
|
||||
## Skills
|
||||
|
||||
@ -155,14 +155,14 @@ bundled каналів (автентифікація, контроль дост
|
||||
}
|
||||
```
|
||||
|
||||
- `allowBundled`: необов’язковий список дозволених лише для bundled skills (керовані/workspace skills не зачіпаються).
|
||||
- `allowBundled`: необов’язковий allowlist лише для bundled skills (керовані/робочі skills не зачіпаються).
|
||||
- `load.extraDirs`: додаткові спільні корені skill (найнижчий пріоритет).
|
||||
- `install.preferBrew`: коли `true`, надає перевагу інсталяторам Homebrew, якщо `brew`
|
||||
доступний, перед переходом до інших типів інсталяторів.
|
||||
- `install.preferBrew`: коли true, надавати перевагу інсталяторам Homebrew, коли `brew` є
|
||||
доступним, перш ніж переходити до інших типів інсталяторів.
|
||||
- `install.nodeManager`: перевага node-інсталятора для специфікацій `metadata.openclaw.install`
|
||||
(`npm` | `pnpm` | `yarn` | `bun`).
|
||||
- `entries.<skillKey>.enabled: false` вимикає skill, навіть якщо він bundled/installed.
|
||||
- `entries.<skillKey>.apiKey`: зручне поле для skills, що оголошують основну env var (звичайний текстовий рядок або об’єкт SecretRef).
|
||||
- `entries.<skillKey>.apiKey`: зручність для skills, що оголошують основну env var (plaintext string або об’єкт SecretRef).
|
||||
|
||||
---
|
||||
|
||||
@ -190,31 +190,31 @@ bundled каналів (автентифікація, контроль дост
|
||||
}
|
||||
```
|
||||
|
||||
- Завантажується з `~/.openclaw/extensions`, `<workspace>/.openclaw/extensions`, а також `plugins.load.paths`.
|
||||
- Виявлення приймає native OpenClaw plugins, а також сумісні Codex bundles і Claude bundles, зокрема manifestless Claude default-layout bundles.
|
||||
- Завантажуються з `~/.openclaw/extensions`, `<workspace>/.openclaw/extensions`, а також `plugins.load.paths`.
|
||||
- Discovery приймає нативні OpenClaw plugins, а також сумісні Codex bundles і Claude bundles, зокрема manifestless Claude default-layout bundles.
|
||||
- **Зміни конфігурації потребують перезапуску gateway.**
|
||||
- `allow`: необов’язковий список дозволених (завантажуються лише перелічені plugins). `deny` має пріоритет.
|
||||
- `allow`: необов’язковий allowlist (завантажуються лише перелічені plugins). `deny` має пріоритет.
|
||||
- `plugins.entries.<id>.apiKey`: зручне поле API-ключа на рівні plugin (коли підтримується plugin).
|
||||
- `plugins.entries.<id>.env`: мапа env var з областю дії plugin.
|
||||
- `plugins.entries.<id>.hooks.allowPromptInjection`: коли `false`, core блокує `before_prompt_build` та ігнорує поля, що змінюють prompt, зі застарілого `before_agent_start`, водночас зберігаючи застарілі `modelOverride` і `providerOverride`. Застосовується до native plugin hooks і підтримуваних директорій hooks, наданих bundle.
|
||||
- `plugins.entries.<id>.hooks.allowConversationAccess`: коли `true`, довірені non-bundled plugins можуть читати raw conversation content із типізованих hooks, таких як `llm_input`, `llm_output`, `before_agent_finalize` і `agent_end`.
|
||||
- `plugins.entries.<id>.subagent.allowModelOverride`: явно довіряє цьому plugin запитувати per-run перевизначення `provider` і `model` для фонових запусків subagent.
|
||||
- `plugins.entries.<id>.subagent.allowedModels`: необов’язковий список дозволених канонічних цілей `provider/model` для довірених subagent override. Використовуйте `"*"` лише тоді, коли навмисно хочете дозволити будь-яку модель.
|
||||
- `plugins.entries.<id>.config`: визначений plugin об’єкт конфігурації (валідується native OpenClaw plugin schema, коли доступна).
|
||||
- Налаштування облікових записів/runtime каналів plugin розміщуються в `channels.<id>` і мають описуватися метаданими `channelConfigs` маніфесту відповідного plugin, а не центральним реєстром опцій OpenClaw.
|
||||
- `plugins.entries.firecrawl.config.webFetch`: налаштування провайдера web-fetch Firecrawl.
|
||||
- `apiKey`: API-ключ Firecrawl (приймає SecretRef). Повертається до `plugins.entries.firecrawl.config.webSearch.apiKey`, застарілого `tools.web.fetch.firecrawl.apiKey` або env var `FIRECRAWL_API_KEY`.
|
||||
- `baseUrl`: базовий URL API Firecrawl (за замовчуванням: `https://api.firecrawl.dev`).
|
||||
- `onlyMainContent`: витягувати зі сторінок лише основний вміст (за замовчуванням: `true`).
|
||||
- `maxAgeMs`: максимальний вік кешу в мілісекундах (за замовчуванням: `172800000` / 2 дні).
|
||||
- `timeoutSeconds`: тайм-аут scrape-запиту в секундах (за замовчуванням: `60`).
|
||||
- `plugins.entries.xai.config.xSearch`: налаштування xAI X Search (Grok web search).
|
||||
- `enabled`: увімкнути провайдера X Search.
|
||||
- `plugins.entries.<id>.env`: мапа env var, обмежена plugin.
|
||||
- `plugins.entries.<id>.hooks.allowPromptInjection`: коли `false`, core блокує `before_prompt_build` та ігнорує поля, що змінюють prompt, із legacy `before_agent_start`, зберігаючи legacy `modelOverride` і `providerOverride`. Застосовується до нативних plugin hooks і підтримуваних каталогів hooks, наданих bundle.
|
||||
- `plugins.entries.<id>.hooks.allowConversationAccess`: коли `true`, довірені non-bundled plugins можуть читати raw conversation content із typed hooks, таких як `llm_input`, `llm_output`, `before_agent_finalize` і `agent_end`.
|
||||
- `plugins.entries.<id>.subagent.allowModelOverride`: явно довірити цьому plugin запитувати per-run перевизначення `provider` і `model` для фонових запусків subagent.
|
||||
- `plugins.entries.<id>.subagent.allowedModels`: необов’язковий allowlist канонічних цілей `provider/model` для довірених перевизначень subagent. Використовуйте `"*"` лише тоді, коли навмисно хочете дозволити будь-яку модель.
|
||||
- `plugins.entries.<id>.config`: об’єкт конфігурації, визначений plugin (валідується нативною схемою OpenClaw plugin, коли вона доступна).
|
||||
- Налаштування облікових записів/runtime для channel plugin розміщені в `channels.<id>` і мають описуватися метаданими `channelConfigs` маніфесту plugin-власника, а не центральним реєстром опцій OpenClaw.
|
||||
- `plugins.entries.firecrawl.config.webFetch`: налаштування провайдера веб-отримання Firecrawl.
|
||||
- `apiKey`: API-ключ Firecrawl (приймає SecretRef). Використовує fallback до `plugins.entries.firecrawl.config.webSearch.apiKey`, legacy `tools.web.fetch.firecrawl.apiKey` або env var `FIRECRAWL_API_KEY`.
|
||||
- `baseUrl`: базовий URL API Firecrawl (стандартно: `https://api.firecrawl.dev`).
|
||||
- `onlyMainContent`: витягувати зі сторінок лише основний вміст (стандартно: `true`).
|
||||
- `maxAgeMs`: максимальний вік кешу в мілісекундах (стандартно: `172800000` / 2 дні).
|
||||
- `timeoutSeconds`: timeout запиту scrape у секундах (стандартно: `60`).
|
||||
- `plugins.entries.xai.config.xSearch`: налаштування xAI X Search (вебпошук Grok).
|
||||
- `enabled`: увімкнути провайдер X Search.
|
||||
- `model`: модель Grok для використання в пошуку (наприклад, `"grok-4-1-fast"`).
|
||||
- `plugins.entries.memory-core.config.dreaming`: налаштування memory 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`, щоб обмежити цілі. Помилки недоступності моделі повторюються один раз із моделлю сеансу за замовчуванням; помилки довіри або allowlist не мають тихого fallback.
|
||||
- `enabled`: головний перемикач dreaming (стандартно `false`).
|
||||
- `frequency`: cron cadence для кожного повного проходу dreaming (`"0 3 * * *"` стандартно).
|
||||
- `model`: необов’язкове перевизначення моделі subagent Dream Diary. Потребує `plugins.entries.memory-core.subagent.allowModelOverride: true`; поєднуйте з `allowedModels`, щоб обмежити цілі. Помилки недоступності моделі повторюються один раз зі стандартною моделлю сеансу; помилки довіри або allowlist не переходять на fallback мовчки.
|
||||
- політика фаз і пороги є деталями реалізації (не користувацькими ключами конфігурації).
|
||||
- Повна конфігурація пам’яті розміщена в [Довіднику конфігурації пам’яті](/uk/reference/memory-config):
|
||||
- `agents.defaults.memorySearch.*`
|
||||
@ -222,9 +222,9 @@ bundled каналів (автентифікація, контроль дост
|
||||
- `memory.citations`
|
||||
- `memory.qmd.*`
|
||||
- `plugins.entries.memory-core.config.dreaming`
|
||||
- Увімкнені Claude bundle plugins також можуть додавати вбудовані стандартні параметри Pi з `settings.json`; OpenClaw застосовує їх як очищені налаштування агента, а не як raw OpenClaw config patches.
|
||||
- `plugins.slots.memory`: вибрати id активного memory plugin або `"none"`, щоб вимкнути memory plugins.
|
||||
- `plugins.slots.contextEngine`: вибрати id активного context engine plugin; за замовчуванням `"legacy"`, якщо ви не встановите й не виберете інший engine.
|
||||
- Увімкнені Claude bundle plugins також можуть додавати вбудовані стандартні значення Pi з `settings.json`; OpenClaw застосовує їх як очищені налаштування агента, а не як 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).
|
||||
|
||||
@ -277,48 +277,48 @@ bundled каналів (автентифікація, контроль дост
|
||||
```
|
||||
|
||||
- `evaluateEnabled: false` вимикає `act:evaluate` і `wait --fn`.
|
||||
- `tabCleanup` звільняє відстежувані вкладки основного агента після простою або коли
|
||||
- `tabCleanup` звільняє відстежувані вкладки основного агента після часу простою або коли
|
||||
сесія перевищує свій ліміт. Установіть `idleMinutes: 0` або `maxTabsPerSession: 0`, щоб
|
||||
вимкнути ці окремі режими очищення.
|
||||
- `ssrfPolicy.dangerouslyAllowPrivateNetwork` вимкнено, коли не задано, тому навігація браузера за замовчуванням залишається суворою.
|
||||
- `ssrfPolicy.dangerouslyAllowPrivateNetwork` вимкнено, якщо не задано, тому навігація браузера за замовчуванням залишається суворою.
|
||||
- Установлюйте `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` лише тоді, коли ви навмисно довіряєте навігації браузера приватною мережею.
|
||||
- У суворому режимі віддалені кінцеві точки профілів CDP (`profiles.*.cdpUrl`) підлягають такому самому блокуванню приватної мережі під час перевірок досяжності/виявлення.
|
||||
- `ssrfPolicy.allowPrivateNetwork` і далі підтримується як застарілий псевдонім.
|
||||
- У суворому режимі віддалені кінцеві точки профілів CDP (`profiles.*.cdpUrl`) підпадають під те саме блокування приватної мережі під час перевірок досяжності/виявлення.
|
||||
- `ssrfPolicy.allowPrivateNetwork` залишається підтримуваним як застарілий псевдонім.
|
||||
- У суворому режимі використовуйте `ssrfPolicy.hostnameAllowlist` і `ssrfPolicy.allowedHostnames` для явних винятків.
|
||||
- Віддалені профілі працюють лише в режимі приєднання (start/stop/reset вимкнено).
|
||||
- Віддалені профілі працюють лише в режимі приєднання (запуск/зупинка/скидання вимкнені).
|
||||
- `profiles.*.cdpUrl` приймає `http://`, `https://`, `ws://` і `wss://`.
|
||||
Використовуйте HTTP(S), коли хочете, щоб OpenClaw виявляв `/json/version`; використовуйте WS(S),
|
||||
коли ваш провайдер надає вам прямий DevTools WebSocket URL.
|
||||
коли ваш провайдер надає прямий URL DevTools WebSocket.
|
||||
- `remoteCdpTimeoutMs` і `remoteCdpHandshakeTimeoutMs` застосовуються до досяжності віддаленого та
|
||||
`attachOnly` CDP, а також до запитів відкриття вкладок. Керовані профілі loopback
|
||||
зберігають локальні типові значення CDP.
|
||||
- Якщо зовнішньо керована служба CDP досяжна через loopback, установіть для цього
|
||||
профілю `attachOnly: true`; інакше OpenClaw розглядає порт loopback як
|
||||
- Якщо зовнішньо керований сервіс CDP доступний через loopback, установіть для цього
|
||||
профілю `attachOnly: true`; інакше OpenClaw трактує порт loopback як
|
||||
локальний керований профіль браузера й може повідомляти про помилки володіння локальним портом.
|
||||
- Профілі `existing-session` використовують Chrome MCP замість CDP і можуть приєднуватися на
|
||||
вибраному хості або через підключений вузол браузера.
|
||||
- Профілі `existing-session` можуть задавати `userDataDir`, щоб націлитися на певний
|
||||
профіль браузера на основі Chromium, наприклад Brave або Edge.
|
||||
- Профілі `existing-session` можуть задавати `userDataDir`, щоб націлитися на конкретний
|
||||
профіль браузера на базі Chromium, наприклад Brave або Edge.
|
||||
- Профілі `existing-session` зберігають поточні обмеження маршруту Chrome MCP:
|
||||
дії на основі snapshot/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.
|
||||
готовності websocket CDP після запуску. Збільшуйте їх на повільніших хостах, де Chrome
|
||||
успішно запускається, але перевірки готовності випереджають старт. Обидва значення мають бути
|
||||
додатними цілими числами до `120000` мс; некоректні значення конфігурації відхиляються.
|
||||
- Порядок автовиявлення: типовий браузер, якщо він на базі Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
|
||||
- `browser.executablePath` і `browser.profiles.<name>.executablePath` обидва
|
||||
приймають `~` і `~/...` для домашнього каталогу вашої ОС перед запуском Chromium.
|
||||
Профільний `userDataDir` у профілях `existing-session` також розгортається з тильдою.
|
||||
- Служба керування: лише loopback (порт виводиться з `gateway.port`, типово `18791`).
|
||||
- `extraArgs` додає додаткові прапорці запуску до локального старту Chromium (наприклад,
|
||||
`userDataDir` для окремого профілю в профілях `existing-session` також розгортається з тильдою.
|
||||
- Сервіс керування: лише loopback (порт походить від `gateway.port`, типово `18791`).
|
||||
- `extraArgs` додає додаткові прапорці запуску до локального старту Chromium (наприклад
|
||||
`--disable-gpu`, розмір вікна або прапорці налагодження).
|
||||
|
||||
---
|
||||
@ -337,8 +337,8 @@ bundled каналів (автентифікація, контроль дост
|
||||
}
|
||||
```
|
||||
|
||||
- `seamColor`: акцентний колір для chrome нативного UI застосунку (відтінок бульбашки Talk Mode тощо).
|
||||
- `assistant`: перевизначення ідентичності Control UI. Повертається до ідентичності активного агента.
|
||||
- `seamColor`: акцентний колір для chrome нативного UI застосунку (відтінок бульбашки режиму розмови тощо).
|
||||
- `assistant`: перевизначення ідентичності Control UI. Резервно використовує ідентичність активного агента.
|
||||
|
||||
---
|
||||
|
||||
@ -413,66 +413,67 @@ bundled каналів (автентифікація, контроль дост
|
||||
}
|
||||
```
|
||||
|
||||
<Accordion title="Gateway field details">
|
||||
<Accordion title="Докладні відомості про поля Gateway">
|
||||
|
||||
- `mode`: `local` (запустити Gateway) або `remote` (підключитися до віддаленого Gateway). Gateway відмовляється запускатися, якщо значення не `local`.
|
||||
- `mode`: `local` (запустити gateway) або `remote` (під’єднатися до віддаленого gateway). Gateway відмовляється запускатися, якщо значення не `local`.
|
||||
- `port`: єдиний мультиплексований порт для WS + HTTP. Пріоритет: `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`.
|
||||
- `bind`: `auto`, `loopback` (типово), `lan` (`0.0.0.0`), `tailnet` (лише IP Tailscale) або `custom`.
|
||||
- **Застарілі псевдоніми прив’язки**: використовуйте значення режиму прив’язки в `gateway.bind` (`auto`, `loopback`, `lan`, `tailnet`, `custom`), а не псевдоніми хоста (`0.0.0.0`, `127.0.0.1`, `localhost`, `::`, `::1`).
|
||||
- **Примітка щодо Docker**: типова прив’язка `loopback` прослуховує `127.0.0.1` всередині контейнера. З мережевим мостом Docker (`-p 18789:18789`) трафік надходить на `eth0`, тому Gateway недосяжний. Використовуйте `--network host` або задайте `bind: "lan"` (чи `bind: "custom"` з `customBindHost: "0.0.0.0"`), щоб прослуховувати всі інтерфейси.
|
||||
- **Автентифікація**: типово обов’язкова. Прив’язки не до loopback вимагають автентифікації Gateway. На практиці це означає спільний токен/пароль або реверсний проксі з підтримкою ідентифікації з `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"`: делегує автентифікацію браузера/користувача реверсному проксі з підтримкою ідентифікації та довіряє заголовкам ідентичності від `gateway.trustedProxies` (див. [автентифікацію довіреного проксі](/uk/gateway/trusted-proxy-auth)). Цей режим типово очікує джерело проксі **не з loopback**; реверсні проксі на тому самому хості через loopback потребують явного `gateway.auth.trustedProxy.allowLoopback = true`. Внутрішні викликачі з того самого хоста можуть використовувати `gateway.auth.password` як локальний прямий резервний варіант; `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-адреси клієнта й кожної області автентифікації (спільний секрет і токен пристрою відстежуються незалежно). Заблоковані спроби повертають `429` + `Retry-After`.
|
||||
- На асинхронному шляху інтерфейсу керування Tailscale Serve невдалі спроби для того самого `{scope, clientIp}` серіалізуються перед записом помилки. Тому одночасні неправильні спроби від того самого клієнта можуть спрацювати на обмежувач уже на другому запиті, замість того щоб обидві пройти як звичайні невідповідності.
|
||||
- `gateway.auth.rateLimit.exemptLoopback` типово має значення `true`; задайте `false`, коли навмисно хочете обмежувати також трафік localhost (для тестових налаштувань або суворих розгортань проксі).
|
||||
- Спроби WS-автентифікації з браузерного походження завжди обмежуються з вимкненим винятком для loopback (додатковий захист від браузерного перебору localhost).
|
||||
- На loopback такі блокування з браузерного походження ізольовані за нормалізованим значенням `Origin`, тому повторні невдачі з одного походження localhost не блокують автоматично інше походження.
|
||||
- `tailscale.mode`: `serve` (лише tailnet, прив’язка loopback) або `funnel` (публічний, потребує автентифікації).
|
||||
- `controlUi.allowedOrigins`: явний список дозволених браузерних походжень для підключень Gateway WebSocket. Обов’язковий, коли очікуються браузерні клієнти з походжень не з loopback.
|
||||
- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: небезпечний режим, що вмикає резервне визначення походження за заголовком Host для розгортань, які навмисно покладаються на політику походження за заголовком Host.
|
||||
- **Застарілі псевдоніми прив’язки**: використовуйте значення режиму прив’язки в `gateway.bind` (`auto`, `loopback`, `lan`, `tailnet`, `custom`), а не псевдоніми хостів (`0.0.0.0`, `127.0.0.1`, `localhost`, `::`, `::1`).
|
||||
- **Примітка щодо Docker**: типова прив’язка `loopback` слухає `127.0.0.1` всередині контейнера. За мережевого мосту Docker (`-p 18789:18789`) трафік надходить на `eth0`, тому Gateway недоступний. Використовуйте `--network host` або встановіть `bind: "lan"` (або `bind: "custom"` з `customBindHost: "0.0.0.0"`), щоб слухати на всіх інтерфейсах.
|
||||
- **Автентифікація**: типово обов’язкова. Прив’язки не до 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` (див. [Автентифікація через довірений проксі](/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`.
|
||||
- На асинхронному шляху Control UI Tailscale Serve невдалі спроби для тієї самої пари `{scope, clientIp}` серіалізуються перед записом помилки. Тому одночасні невдалі спроби від того самого клієнта можуть спрацювати обмежувач уже на другому запиті, замість того щоб обидві пройшли як прості невідповідності.
|
||||
- `gateway.auth.rateLimit.exemptLoopback` типово `true`; встановіть `false`, коли ви навмисно хочете також обмежувати трафік localhost (для тестових налаштувань або суворих розгортань проксі).
|
||||
- Спроби автентифікації WS із браузерного origin завжди обмежуються з вимкненим винятком для loopback (додатковий захист від перебору localhost з браузера).
|
||||
- На loopback ці блокування з браузерного origin ізольовані для кожного нормалізованого значення `Origin`, тому повторні невдачі з одного localhost origin не блокують автоматично інший origin.
|
||||
- `tailscale.mode`: `serve` (лише tailnet, прив’язка 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`: перевизначення через середовище процесу на клієнтському боці для аварійного доступу, яке дозволяє відкритий текст `ws://` до довірених IP-адрес приватної мережі; типово відкритий текст залишається дозволеним лише для loopback. Еквівалента в `openclaw.json` немає, а конфігурація приватної мережі браузера, як-от `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`, не впливає на клієнтів Gateway WebSocket.
|
||||
- `gateway.remote.token` / `.password` — поля облікових даних віддаленого клієнта. Вони самі по собі не налаштовують автентифікацію Gateway.
|
||||
- `gateway.push.apns.relay.baseUrl`: базова HTTPS-URL для зовнішнього ретранслятора APNs, який використовується офіційними/TestFlight збірками iOS після публікації ними реєстрацій із підтримкою ретранслятора в Gateway. Ця URL має збігатися з URL ретранслятора, скомпільованою в iOS-збірку.
|
||||
- `gateway.push.apns.relay.timeoutMs`: тайм-аут надсилання від Gateway до ретранслятора в мілісекундах. Типово `10000`.
|
||||
- Реєстрації з підтримкою ретранслятора делегуються конкретній ідентичності Gateway. Спарена iOS-програма отримує `gateway.identity.get`, включає цю ідентичність у реєстрацію ретранслятора та пересилає Gateway дозвіл на надсилання, обмежений цією реєстрацією. Інший Gateway не може повторно використати цю збережену реєстрацію.
|
||||
- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: тимчасові перевизначення через змінні середовища для наведеної вище конфігурації ретранслятора.
|
||||
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: аварійний варіант лише для розробки для HTTP-URL ретранслятора через loopback. Виробничі URL ретранслятора мають залишатися на HTTPS.
|
||||
- `gateway.handshakeTimeoutMs`: тайм-аут попереднього до автентифікації рукостискання Gateway WebSocket у мілісекундах. Типово: `15000`. `OPENCLAW_HANDSHAKE_TIMEOUT_MS` має пріоритет, якщо задано. Збільшуйте це значення на завантажених або малопотужних хостах, де локальні клієнти можуть підключатися, поки прогрів запуску ще завершується.
|
||||
- `gateway.channelHealthCheckMinutes`: інтервал монітора стану каналу в хвилинах. Задайте `0`, щоб глобально вимкнути перезапуски монітора стану. Типово: `5`.
|
||||
- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: аварійне перевизначення середовища процесу на стороні клієнта, яке дозволяє відкритий `ws://` до довірених IP приватної мережі; типово відкритий текст залишається дозволеним лише для loopback. Еквівалента в `openclaw.json` немає, а конфігурація приватної мережі браузера, як-от `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`, не впливає на клієнтів Gateway WebSocket.
|
||||
- `gateway.remote.token` / `.password` — це поля облікових даних віддаленого клієнта. Вони самі по собі не налаштовують автентифікацію Gateway.
|
||||
- `gateway.push.apns.relay.baseUrl`: базова HTTPS-URL для зовнішнього ретранслятора APNs, який використовується офіційними/TestFlight збірками iOS після публікації реєстрацій із підтримкою ретранслятора до Gateway. Ця URL має збігатися з URL ретранслятора, скомпільованою в iOS-збірку.
|
||||
- `gateway.push.apns.relay.timeoutMs`: таймаут надсилання від Gateway до ретранслятора в мілісекундах. Типово `10000`.
|
||||
- Реєстрації з підтримкою ретранслятора делегуються конкретній ідентичності Gateway. Спарений iOS-застосунок отримує `gateway.identity.get`, включає цю ідентичність у реєстрацію ретранслятора та пересилає до Gateway грант надсилання, обмежений реєстрацією. Інший Gateway не може повторно використати цю збережену реєстрацію.
|
||||
- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: тимчасові env-перевизначення для конфігурації ретранслятора вище.
|
||||
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: escape hatch лише для розробки для HTTP-URL ретранслятора через loopback. Виробничі URL ретранслятора мають залишатися на HTTPS.
|
||||
- `gateway.handshakeTimeoutMs`: таймаут попереднього до автентифікації рукостискання Gateway WebSocket у мілісекундах. Типово: `15000`. `OPENCLAW_HANDSHAKE_TIMEOUT_MS` має пріоритет, коли задано. Збільште це значення на завантажених або малопотужних хостах, де локальні клієнти можуть під’єднатися, поки прогрів запуску ще стабілізується.
|
||||
- `gateway.channelHealthCheckMinutes`: інтервал монітора стану каналів у хвилинах. Встановіть `0`, щоб глобально вимкнути перезапуски монітора стану. Типово: `5`.
|
||||
- `gateway.channelStaleEventThresholdMinutes`: поріг застарілого сокета в хвилинах. Тримайте це значення більшим або рівним `gateway.channelHealthCheckMinutes`. Типово: `30`.
|
||||
- `gateway.channelMaxRestartsPerHour`: максимальна кількість перезапусків монітора стану на канал/обліковий запис за ковзну годину. Типово: `10`.
|
||||
- `channels.<provider>.healthMonitor.enabled`: вимкнення перезапусків монітора стану для окремого каналу за збереження ввімкненого глобального монітора.
|
||||
- `channels.<provider>.accounts.<accountId>.healthMonitor.enabled`: перевизначення для окремого облікового запису в багатокористувацьких каналах. Коли задано, має пріоритет над перевизначенням на рівні каналу.
|
||||
- Локальні шляхи виклику Gateway можуть використовувати `gateway.remote.*` як резервний варіант лише тоді, коли `gateway.auth.*` не задано.
|
||||
- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef і не розв’язано, розв’язання завершується закритою відмовою (без маскування віддаленим резервним варіантом).
|
||||
- `trustedProxies`: IP-адреси реверсних проксі, які завершують TLS або додають заголовки переспрямованого клієнта. Вказуйте лише проксі, які ви контролюєте. Записи loopback усе ще допустимі для налаштувань проксі/локального виявлення на тому самому хості (наприклад, Tailscale Serve або локальний реверсний проксі), але вони **не** роблять запити loopback придатними для `gateway.auth.mode: "trusted-proxy"`.
|
||||
- `allowRealIpFallback`: коли `true`, Gateway приймає `X-Real-IP`, якщо `X-Forwarded-For` відсутній. Типово `false` для поведінки із закритою відмовою.
|
||||
- `gateway.nodes.pairing.autoApproveCidrs`: необов’язковий список дозволених CIDR/IP для автоматичного схвалення першого спарювання пристрою Node без запитаних областей доступу. Вимкнено, якщо не задано. Це не схвалює автоматично спарювання оператора/браузера/інтерфейсу керування/WebChat і не схвалює автоматично оновлення ролі, області доступу, метаданих або відкритого ключа.
|
||||
- `gateway.nodes.allowCommands` / `gateway.nodes.denyCommands`: глобальне формування дозволів/заборон для оголошених команд Node після спарювання й оцінювання списку дозволів платформи. Використовуйте `allowCommands`, щоб дозволити небезпечні команди Node, як-от `camera.snap`, `camera.clip` і `screen.record`; `denyCommands` вилучає команду, навіть якщо типове значення платформи або явний дозвіл інакше включали б її. Після того як Node змінює свій оголошений список команд, відхиліть і повторно схваліть спарювання цього пристрою, щоб Gateway зберіг оновлений знімок команд.
|
||||
- `gateway.tools.deny`: додаткові назви інструментів, заблоковані для HTTP `POST /tools/invoke` (розширює типовий список заборон).
|
||||
- `gateway.tools.allow`: вилучити назви інструментів із типового списку заборон HTTP.
|
||||
- `gateway.channelMaxRestartsPerHour`: максимальна кількість перезапусків монітора стану на канал/акаунт у ковзну годину. Типово: `10`.
|
||||
- `channels.<provider>.healthMonitor.enabled`: відмова на рівні каналу від перезапусків монітора стану зі збереженням глобального монітора ввімкненим.
|
||||
- `channels.<provider>.accounts.<accountId>.healthMonitor.enabled`: перевизначення на рівні акаунта для багатьох акаунтів у каналах. Коли задано, має пріоритет над перевизначенням на рівні каналу.
|
||||
- Локальні шляхи виклику Gateway можуть використовувати `gateway.remote.*` як резервний варіант лише коли `gateway.auth.*` не задано.
|
||||
- Якщо `gateway.auth.token` / `gateway.auth.password` явно налаштовано через SecretRef і не розв’язано, розв’язання завершується закрито (без маскування віддаленим резервним варіантом).
|
||||
- `trustedProxies`: IP reverse proxy, які завершують TLS або вставляють заголовки пересланого клієнта. Вказуйте лише проксі, які ви контролюєте. Записи 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 без запитаних областей. Вимкнено, коли не задано. Це не схвалює автоматично спарювання оператора/браузера/Control UI/WebChat, а також не схвалює автоматично оновлення ролі, області, метаданих або відкритого ключа.
|
||||
- `gateway.nodes.allowCommands` / `gateway.nodes.denyCommands`: глобальне формування allow/deny для оголошених команд node після спарювання та оцінювання allowlist платформи. Використовуйте `allowCommands`, щоб увімкнути небезпечні команди node, як-от `camera.snap`, `camera.clip` і `screen.record`; `denyCommands` вилучає команду, навіть якщо типовий дозвіл платформи або явний allow інакше включав би її. Після того як node змінює свій оголошений список команд, відхиліть і повторно схваліть це спарювання пристрою, щоб Gateway зберіг оновлений знімок команд.
|
||||
- `gateway.tools.deny`: додаткові назви інструментів, заблоковані для HTTP `POST /tools/invoke` (розширює типовий список deny).
|
||||
- `gateway.tools.allow`: вилучає назви інструментів із типового HTTP deny list.
|
||||
|
||||
</Accordion>
|
||||
|
||||
### OpenAI-сумісні кінцеві точки
|
||||
### Сумісні з OpenAI кінцеві точки
|
||||
|
||||
- Chat Completions: типово вимкнено. Увімкніть через `gateway.http.endpoints.chatCompletions.enabled: true`.
|
||||
- Chat Completions: типово вимкнено. Увімкніть за допомогою `gateway.http.endpoints.chatCompletions.enabled: true`.
|
||||
- Responses API: `gateway.http.endpoints.responses.enabled`.
|
||||
- Посилений захист URL-вводу Responses:
|
||||
- Посилення захисту URL-вводу Responses:
|
||||
- `gateway.http.endpoints.responses.maxUrlParts`
|
||||
- `gateway.http.endpoints.responses.files.urlAllowlist`
|
||||
- `gateway.http.endpoints.responses.images.urlAllowlist`
|
||||
Порожні списки дозволів вважаються незаданими; використовуйте `gateway.http.endpoints.responses.files.allowUrl=false` і/або `gateway.http.endpoints.responses.images.allowUrl=false`, щоб вимкнути отримання URL.
|
||||
Порожні allowlist вважаються незаданими; використовуйте `gateway.http.endpoints.responses.files.allowUrl=false`
|
||||
та/або `gateway.http.endpoints.responses.images.allowUrl=false`, щоб вимкнути отримання URL.
|
||||
- Необов’язковий заголовок посиленого захисту відповіді:
|
||||
- `gateway.http.securityHeaders.strictTransportSecurity` (задавайте лише для HTTPS-походжень, які ви контролюєте; див. [автентифікацію довіреного проксі](/uk/gateway/trusted-proxy-auth#tls-termination-and-hsts))
|
||||
- `gateway.http.securityHeaders.strictTransportSecurity` (встановлюйте лише для HTTPS origin, які ви контролюєте; див. [Автентифікація через довірений проксі](/uk/gateway/trusted-proxy-auth#tls-termination-and-hsts))
|
||||
|
||||
### Ізоляція кількох екземплярів
|
||||
|
||||
Запускайте кілька Gateway на одному хості з унікальними портами й каталогами стану:
|
||||
Запускайте кілька Gateway на одному хості з унікальними портами та каталогами стану:
|
||||
|
||||
```bash
|
||||
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \
|
||||
@ -482,7 +483,7 @@ openclaw gateway --port 19001
|
||||
|
||||
Зручні прапорці: `--dev` (використовує `~/.openclaw-dev` + порт `19001`), `--profile <name>` (використовує `~/.openclaw-<name>`).
|
||||
|
||||
Див. [кілька Gateway](/uk/gateway/multiple-gateways).
|
||||
Див. [Кілька Gateway](/uk/gateway/multiple-gateways).
|
||||
|
||||
### `gateway.tls`
|
||||
|
||||
@ -501,10 +502,10 @@ openclaw gateway --port 19001
|
||||
```
|
||||
|
||||
- `enabled`: вмикає завершення TLS на слухачі Gateway (HTTPS/WSS) (типово: `false`).
|
||||
- `autoGenerate`: автоматично генерує локальну самопідписану пару сертифікат/ключ, коли явні файли не налаштовані; лише для локального використання/розробки.
|
||||
- `certPath`: шлях файлової системи до файла сертифіката TLS.
|
||||
- `keyPath`: шлях файлової системи до файла приватного ключа TLS; обмежте права доступу.
|
||||
- `caPath`: необов’язковий шлях до пакета CA для перевірки клієнтів або користувацьких ланцюжків довіри.
|
||||
- `autoGenerate`: автоматично генерує локальну самопідписану пару сертифікат/ключ, коли явні файли не налаштовано; лише для локального використання/розробки.
|
||||
- `certPath`: шлях у файловій системі до файлу TLS-сертифіката.
|
||||
- `keyPath`: шлях у файловій системі до файлу приватного TLS-ключа; тримайте доступ обмеженим.
|
||||
- `caPath`: необов’язковий шлях до CA bundle для перевірки клієнтів або користувацьких ланцюжків довіри.
|
||||
|
||||
### `gateway.reload`
|
||||
|
||||
@ -521,12 +522,12 @@ openclaw gateway --port 19001
|
||||
```
|
||||
|
||||
- `mode`: керує тим, як зміни конфігурації застосовуються під час виконання.
|
||||
- `"off"`: ігнорувати живі редагування; зміни потребують явного перезапуску.
|
||||
- `"restart"`: завжди перезапускати процес Gateway під час зміни конфігурації.
|
||||
- `"hot"`: застосовувати зміни в межах процесу без перезапуску.
|
||||
- `"hybrid"` (типово): спершу спробувати гаряче перезавантаження; за потреби перейти до перезапуску.
|
||||
- `debounceMs`: вікно усунення брязкоту в мс перед застосуванням змін конфігурації (невід’ємне ціле число).
|
||||
- `deferralTimeoutMs`: необов’язковий максимальний час у мс очікування операцій у процесі перед примусовим перезапуском. Опустіть, щоб використати типове обмежене очікування (`300000`); задайте `0`, щоб чекати безстроково й періодично журналювати попередження про все ще незавершені операції.
|
||||
- `"off"`: ігнорувати live-зміни; зміни потребують явного перезапуску.
|
||||
- `"restart"`: завжди перезапускати процес Gateway у разі зміни конфігурації.
|
||||
- `"hot"`: застосовувати зміни в процесі без перезапуску.
|
||||
- `"hybrid"` (типово): спочатку спробувати hot reload; повернутися до перезапуску, якщо потрібно.
|
||||
- `debounceMs`: вікно debounce у мс перед застосуванням змін конфігурації (невід’ємне ціле число).
|
||||
- `deferralTimeoutMs`: необов’язковий максимальний час у мс очікування операцій у процесі перед примусовим перезапуском. Пропустіть, щоб використати типове обмежене очікування (`300000`); встановіть `0`, щоб чекати безстроково та періодично логувати попередження про все ще незавершені операції.
|
||||
|
||||
---
|
||||
|
||||
@ -564,11 +565,11 @@ openclaw gateway --port 19001
|
||||
```
|
||||
|
||||
Автентифікація: `Authorization: Bearer <token>` або `x-openclaw-token: <token>`.
|
||||
Токени хуків у рядку запиту відхиляються.
|
||||
Токени хуків у query string відхиляються.
|
||||
|
||||
Нотатки щодо валідації та безпеки:
|
||||
Примітки щодо перевірки та безпеки:
|
||||
|
||||
- `hooks.enabled=true` вимагає непорожній `hooks.token`.
|
||||
- `hooks.enabled=true` потребує непорожнього `hooks.token`.
|
||||
- `hooks.token` має бути **відмінним** від `gateway.auth.token`; повторне використання токена Gateway відхиляється.
|
||||
- `hooks.path` не може бути `/`; використовуйте окремий підшлях, наприклад `/hooks`.
|
||||
- Якщо `hooks.allowRequestSessionKey=true`, обмежте `hooks.allowedSessionKeyPrefixes` (наприклад `["hook:"]`).
|
||||
@ -578,32 +579,32 @@ openclaw gateway --port 19001
|
||||
|
||||
- `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`).
|
||||
- `POST /hooks/<name>` → визначається через `hooks.mappings`
|
||||
- Значення `sessionKey` зіставлення, відтворені з шаблону, вважаються наданими ззовні й також потребують `hooks.allowRequestSessionKey=true`.
|
||||
- `sessionKey` з корисного навантаження запиту приймається лише коли `hooks.allowRequestSessionKey=true` (типово: `false`).
|
||||
- `POST /hooks/<name>` → розв’язується через `hooks.mappings`
|
||||
- Значення `sessionKey` зіставлення, відрендерені з шаблону, вважаються наданими ззовні й також потребують `hooks.allowRequestSessionKey=true`.
|
||||
|
||||
<Accordion title="Mapping details">
|
||||
<Accordion title="Подробиці зіставлення">
|
||||
|
||||
- `match.path` зіставляє підшлях після `/hooks` (наприклад `/hooks/gmail` → `gmail`).
|
||||
- `match.source` зіставляє поле payload для загальних шляхів.
|
||||
- Шаблони на кшталт `{{messages[0].subject}}` читають дані з payload.
|
||||
- `transform` може вказувати на модуль JS/TS, який повертає дію hook.
|
||||
- `transform.module` має бути відносним шляхом і залишатися в межах `hooks.transformsDir` (абсолютні шляхи та обхід каталогів відхиляються).
|
||||
- `agentId` спрямовує до конкретного агента; невідомі ID повертаються до типового.
|
||||
- `allowedAgentIds`: обмежує явну маршрутизацію (`*` або пропущено = дозволити всі, `[]` = заборонити всі).
|
||||
- `defaultSessionKey`: необов’язковий фіксований ключ сесії для запусків hook-агента без явного `sessionKey`.
|
||||
- `match.source` зіставляє поле корисного навантаження для загальних шляхів.
|
||||
- Шаблони на кшталт `{{messages[0].subject}}` читають дані з корисного навантаження.
|
||||
- `transform` може вказувати на модуль JS/TS, що повертає дію хука.
|
||||
- `transform.module` має бути відносним шляхом і лишатися в межах `hooks.transformsDir` (абсолютні шляхи та обхід каталогів відхиляються).
|
||||
- `agentId` маршрутизує до конкретного агента; невідомі ідентифікатори повертаються до типового.
|
||||
- `allowedAgentIds`: обмежує явну маршрутизацію (`*` або відсутнє значення = дозволити всіх, `[]` = заборонити всіх).
|
||||
- `defaultSessionKey`: необов’язковий фіксований ключ сесії для запусків агента хуком без явного `sessionKey`.
|
||||
- `allowRequestSessionKey`: дозволяє викликачам `/hooks/agent` і керованим шаблонами ключам сесій зіставлення задавати `sessionKey` (типово: `false`).
|
||||
- `allowedSessionKeyPrefixes`: необов’язковий список дозволених префіксів для явних значень `sessionKey` (запит + зіставлення), наприклад `["hook:"]`. Він стає обов’язковим, коли будь-яке зіставлення або пресет використовує шаблонний `sessionKey`.
|
||||
- `deliver: true` надсилає фінальну відповідь у канал; `channel` типово має значення `last`.
|
||||
- `model` перевизначає LLM для цього запуску hook (має бути дозволено, якщо каталог моделей задано).
|
||||
- `model` перевизначає LLM для цього запуску хука (має бути дозволено, якщо задано каталог моделей).
|
||||
|
||||
</Accordion>
|
||||
|
||||
### Інтеграція Gmail
|
||||
|
||||
- Вбудований пресет Gmail використовує `sessionKey: "hook:gmail:{{messages[0].id}}"`.
|
||||
- Якщо ви залишаєте цю маршрутизацію для кожного повідомлення, задайте `hooks.allowRequestSessionKey: true` і обмежте `hooks.allowedSessionKeyPrefixes`, щоб вони відповідали простору імен Gmail, наприклад `["hook:", "hook:gmail:"]`.
|
||||
- Якщо вам потрібно `hooks.allowRequestSessionKey: false`, перевизначте пресет статичним `sessionKey` замість типового шаблонного значення.
|
||||
- Якщо ви зберігаєте цю маршрутизацію для кожного повідомлення, задайте `hooks.allowRequestSessionKey: true` і обмежте `hooks.allowedSessionKeyPrefixes` так, щоб вони відповідали простору імен Gmail, наприклад `["hook:", "hook:gmail:"]`.
|
||||
- Якщо вам потрібно `hooks.allowRequestSessionKey: false`, перевизначте пресет статичним `sessionKey` замість шаблонного типового значення.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -627,7 +628,7 @@ openclaw gateway --port 19001
|
||||
```
|
||||
|
||||
- Gateway автоматично запускає `gog gmail watch serve` під час завантаження, коли це налаштовано. Задайте `OPENCLAW_SKIP_GMAIL_WATCHER=1`, щоб вимкнути.
|
||||
- Не запускайте окремий `gog gmail watch serve` паралельно з Gateway.
|
||||
- Не запускайте окремий `gog gmail watch serve` поруч із Gateway.
|
||||
|
||||
---
|
||||
|
||||
@ -643,13 +644,13 @@ openclaw gateway --port 19001
|
||||
}
|
||||
```
|
||||
|
||||
- Обслуговує редаговані агентом HTML/CSS/JS та A2UI через HTTP на порту Gateway:
|
||||
- Обслуговує редаговані агентом HTML/CSS/JS і A2UI через HTTP під портом Gateway:
|
||||
- `http://<gateway-host>:<gateway.port>/__openclaw__/canvas/`
|
||||
- `http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/`
|
||||
- Лише локально: залиште `gateway.bind: "loopback"` (типово).
|
||||
- Прив’язки не до loopback: маршрути canvas потребують автентифікації Gateway (токен/пароль/довірений проксі), як і інші HTTP-поверхні Gateway.
|
||||
- Node WebViews зазвичай не надсилають заголовки автентифікації; після спарення та підключення node Gateway оголошує URL можливостей із областю дії node для доступу до canvas/A2UI.
|
||||
- URL можливостей прив’язані до активної WS-сесії node і швидко спливають. Резервний варіант на основі IP не використовується.
|
||||
- Лише локально: залишайте `gateway.bind: "loopback"` (типово).
|
||||
- Прив’язки не до loopback: маршрути canvas потребують автентифікації Gateway (токен/пароль/довірений проксі), так само як інші HTTP-поверхні Gateway.
|
||||
- WebViews Node зазвичай не надсилають заголовки автентифікації; після створення пари з вузлом і підключення Gateway оголошує URL-адреси можливостей, обмежені вузлом, для доступу до canvas/A2UI.
|
||||
- URL-адреси можливостей прив’язані до активної WS-сесії вузла й швидко спливають. Резервний варіант на основі IP не використовується.
|
||||
- Вставляє клієнт live-reload в обслуговуваний HTML.
|
||||
- Автоматично створює початковий `index.html`, коли порожньо.
|
||||
- Також обслуговує A2UI за `/__openclaw__/a2ui/`.
|
||||
@ -672,11 +673,11 @@ openclaw gateway --port 19001
|
||||
}
|
||||
```
|
||||
|
||||
- `minimal` (типово): пропускає `cliPath` + `sshPort` у TXT-записах.
|
||||
- `minimal` (типово): пропускає `cliPath` + `sshPort` у записах TXT.
|
||||
- `full`: включає `cliPath` + `sshPort`.
|
||||
- Ім’я хоста типово дорівнює системному імені хоста, коли воно є дійсною DNS-міткою, і повертається до `openclaw` інакше. Перевизначте через `OPENCLAW_MDNS_HOSTNAME`.
|
||||
- Ім’я хоста типово дорівнює системному імені хоста, коли воно є дійсною DNS-міткою, з поверненням до `openclaw`. Перевизначте за допомогою `OPENCLAW_MDNS_HOSTNAME`.
|
||||
|
||||
### Глобальна область (DNS-SD)
|
||||
### Глобальна мережа (DNS-SD)
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -686,7 +687,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`.
|
||||
|
||||
@ -694,7 +695,7 @@ openclaw gateway --port 19001
|
||||
|
||||
## Середовище
|
||||
|
||||
### `env` (вбудовані змінні env)
|
||||
### `env` (вбудовані змінні середовища)
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -712,13 +713,13 @@ openclaw gateway --port 19001
|
||||
```
|
||||
|
||||
- Вбудовані змінні середовища застосовуються лише якщо в середовищі процесу відсутній ключ.
|
||||
- Файли `.env`: CWD `.env` + `~/.openclaw/.env` (жоден не перевизначає наявні змінні).
|
||||
- Файли `.env`: `.env` у CWD + `~/.openclaw/.env` (жоден не перевизначає наявні змінні).
|
||||
- `shellEnv`: імпортує відсутні очікувані ключі з профілю вашої login shell.
|
||||
- Повний порядок пріоритету див. у [Середовище](/uk/help/environment).
|
||||
- Див. [Середовище](/uk/help/environment) для повного порядку пріоритетів.
|
||||
|
||||
### Підстановка змінних середовища
|
||||
|
||||
Посилайтеся на змінні середовища в будь-якому рядку конфігурації через `${VAR_NAME}`:
|
||||
Посилайтеся на змінні середовища в будь-якому рядку конфігурації за допомогою `${VAR_NAME}`:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -728,9 +729,9 @@ openclaw gateway --port 19001
|
||||
}
|
||||
```
|
||||
|
||||
- Збігаються лише назви у верхньому регістрі: `[A-Z_][A-Z0-9_]*`.
|
||||
- Відсутні/порожні змінні спричиняють помилку під час завантаження конфігурації.
|
||||
- Екрануйте через `$${VAR}` для буквального `${VAR}`.
|
||||
- Зіставляються лише імена у верхньому регістрі: `[A-Z_][A-Z0-9_]*`.
|
||||
- Відсутні або порожні змінні спричиняють помилку під час завантаження конфігурації.
|
||||
- Екрануйте як `$${VAR}` для буквального `${VAR}`.
|
||||
- Працює з `$include`.
|
||||
|
||||
---
|
||||
@ -750,18 +751,18 @@ 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` відхиляється)
|
||||
- Шаблон `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` буде відхилено)
|
||||
|
||||
### Підтримувана поверхня облікових даних
|
||||
|
||||
- Канонічна матриця: [Поверхня облікових даних SecretRef](/uk/reference/secretref-credential-surface)
|
||||
- `secrets apply` націлюється на підтримувані шляхи облікових даних `openclaw.json`.
|
||||
- Посилання `auth-profiles.json` включені до runtime-вирішення й audit-покриття.
|
||||
- Посилання `auth-profiles.json` включені до розв’язання під час виконання та покриття аудиту.
|
||||
|
||||
### Конфігурація провайдерів секретів
|
||||
### Конфігурація постачальників секретів
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -791,18 +792,18 @@ openclaw gateway --port 19001
|
||||
|
||||
Примітки:
|
||||
|
||||
- Провайдер `file` підтримує `mode: "json"` і `mode: "singleValue"` (`id` має бути `"value"` у режимі singleValue).
|
||||
- Шляхи провайдерів file і exec закрито відмовляють, коли перевірка ACL Windows недоступна. Встановлюйте `allowInsecurePath: true` лише для довірених шляхів, які неможливо перевірити.
|
||||
- Провайдер `exec` вимагає абсолютний шлях `command` і використовує protocol payloads через stdin/stdout.
|
||||
- За замовчуванням шляхи команд-симлінків відхиляються. Встановіть `allowSymlinkCommand: true`, щоб дозволити шляхи симлінків із валідацією розв’язаного цільового шляху.
|
||||
- Постачальник `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`.
|
||||
- Посилання на секрети під час активації розв’язуються в in-memory snapshot, після чого шляхи запитів читають лише snapshot.
|
||||
- Фільтрація активної поверхні застосовується під час активації: нерозв’язані посилання на ввімкнених поверхнях спричиняють збій startup/reload, тоді як неактивні поверхні пропускаються з діагностикою.
|
||||
- Посилання на секрети розв’язуються під час активації в snapshot у пам’яті, після чого шляхи запитів читають лише snapshot.
|
||||
- Фільтрація активної поверхні застосовується під час активації: нерозв’язані посилання на увімкнених поверхнях спричиняють збій запуску/перезавантаження, тоді як неактивні поверхні пропускаються з діагностикою.
|
||||
|
||||
---
|
||||
|
||||
## Сховище auth
|
||||
## Сховище автентифікації
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -820,14 +821,14 @@ openclaw gateway --port 19001
|
||||
}
|
||||
```
|
||||
|
||||
- Профілі для кожного агента зберігаються в `<agentDir>/auth-profiles.json`.
|
||||
- `auth-profiles.json` підтримує посилання рівня значень (`keyRef` для `api_key`, `tokenRef` для `token`) для режимів статичних облікових даних.
|
||||
- Застарілі пласкі мапи `auth-profiles.json`, як-от `{ "provider": { "apiKey": "..." } }`, не є runtime-форматом; `openclaw doctor --fix` переписує їх у канонічні профілі API-key `provider:default` із резервною копією `.legacy-flat.*.bak`.
|
||||
- Профілі режиму OAuth (`auth.profiles.<id>.mode = "oauth"`) не підтримують облікові дані auth-profile на основі SecretRef.
|
||||
- Статичні runtime-облікові дані надходять з in-memory resolved snapshots; застарілі статичні записи `auth.json` очищуються після виявлення.
|
||||
- Застарілі OAuth імпортуються з `~/.openclaw/credentials/oauth.json`.
|
||||
- Профілі для окремих агентів зберігаються в `<agentDir>/auth-profiles.json`.
|
||||
- `auth-profiles.json` підтримує посилання на рівні значень (`keyRef` для `api_key`, `tokenRef` для `token`) для статичних режимів облікових даних.
|
||||
- Застарілі плоскі мапи `auth-profiles.json`, як-от `{ "provider": { "apiKey": "..." } }`, не є форматом під час виконання; `openclaw doctor --fix` переписує їх у канонічні API-key профілі `provider:default` з резервною копією `.legacy-flat.*.bak`.
|
||||
- Профілі в режимі OAuth (`auth.profiles.<id>.mode = "oauth"`) не підтримують облікові дані auth-profile на основі SecretRef.
|
||||
- Статичні облікові дані під час виконання надходять із розв’язаних snapshot-ів у пам’яті; застарілі статичні записи `auth.json` очищаються під час виявлення.
|
||||
- Застарілі імпорти OAuth беруться з `~/.openclaw/credentials/oauth.json`.
|
||||
- Див. [OAuth](/uk/concepts/oauth).
|
||||
- Runtime-поведінка секретів та інструменти `audit/configure/apply`: [Керування секретами](/uk/gateway/secrets).
|
||||
- Поведінка секретів під час виконання та інструменти `audit/configure/apply`: [Керування секретами](/uk/gateway/secrets).
|
||||
|
||||
### `auth.cooldowns`
|
||||
|
||||
@ -849,24 +850,24 @@ openclaw gateway --port 19001
|
||||
}
|
||||
```
|
||||
|
||||
- `billingBackoffHours`: базова затримка повтору в годинах, коли профіль зазнає збою через справжні
|
||||
помилки billing/insufficient-credit (за замовчуванням: `5`). Явний текст про billing може
|
||||
все одно потрапити сюди навіть у відповідях `401`/`403`, але провайдер-специфічні текстові
|
||||
матчери залишаються обмеженими провайдером, якому вони належать (наприклад OpenRouter
|
||||
`Key limit exceeded`). Retryable HTTP `402` usage-window або
|
||||
повідомлення про organization/workspace spend-limit натомість залишаються у шляху `rate_limit`.
|
||||
- `billingBackoffHoursByProvider`: необов’язкові перевизначення годин billing backoff для кожного провайдера.
|
||||
- `billingMaxHours`: обмеження в годинах для експоненційного зростання billing backoff (за замовчуванням: `24`).
|
||||
- `authPermanentBackoffMinutes`: базова затримка повтору в хвилинах для високонадійних збоїв `auth_permanent` (за замовчуванням: `10`).
|
||||
- `authPermanentMaxMinutes`: обмеження в хвилинах для зростання backoff `auth_permanent` (за замовчуванням: `60`).
|
||||
- `failureWindowHours`: ковзне вікно в годинах, яке використовується для лічильників backoff (за замовчуванням: `24`).
|
||||
- `overloadedProfileRotations`: максимальна кількість ротацій auth-profile того самого провайдера для помилок перевантаження перед переходом до model fallback (за замовчуванням: `1`). Форми provider-busy, як-от `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 у годинах, коли профіль зазнає збою через справжні
|
||||
помилки білінгу/недостатнього кредиту (за замовчуванням: `5`). Явний текст про білінг
|
||||
усе ще може потрапити сюди навіть у відповідях `401`/`403`, але специфічні для постачальника
|
||||
текстові зіставники залишаються обмеженими постачальником, якому вони належать (наприклад OpenRouter
|
||||
`Key limit exceeded`). Повторювані HTTP `402` повідомлення про usage-window або
|
||||
обмеження витрат організації/робочого простору натомість залишаються у шляху `rate_limit`.
|
||||
- `billingBackoffHoursByProvider`: необов’язкові перевизначення годин backoff для білінгу за постачальниками.
|
||||
- `billingMaxHours`: ліміт у годинах для експоненційного зростання backoff для білінгу (за замовчуванням: `24`).
|
||||
- `authPermanentBackoffMinutes`: базовий backoff у хвилинах для високодостовірних збоїв `auth_permanent` (за замовчуванням: `10`).
|
||||
- `authPermanentMaxMinutes`: ліміт у хвилинах для зростання backoff `auth_permanent` (за замовчуванням: `60`).
|
||||
- `failureWindowHours`: ковзне вікно в годинах, що використовується для лічильників backoff (за замовчуванням: `24`).
|
||||
- `overloadedProfileRotations`: максимальна кількість ротацій auth-profile того самого постачальника для помилок перевантаження перед переходом до резервної моделі (за замовчуванням: `1`). Форми зайнятості постачальника, як-от `ModelNotReadyException`, потрапляють сюди.
|
||||
- `overloadedBackoffMs`: фіксована затримка перед повторною спробою ротації перевантаженого постачальника/профілю (за замовчуванням: `0`).
|
||||
- `rateLimitedProfileRotations`: максимальна кількість ротацій auth-profile того самого постачальника для помилок rate-limit перед переходом до резервної моделі (за замовчуванням: `1`). Цей кошик rate-limit включає текст у формі постачальника, як-от `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded` і `resource exhausted`.
|
||||
|
||||
---
|
||||
|
||||
## Логування
|
||||
## Журналювання
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -884,8 +885,8 @@ openclaw gateway --port 19001
|
||||
- Стандартний файл журналу: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`.
|
||||
- Задайте `logging.file` для стабільного шляху.
|
||||
- `consoleLevel` підвищується до `debug`, коли використано `--verbose`.
|
||||
- `maxFileBytes`: максимальний розмір активного файлу журналу в байтах перед ротацією (додатне ціле число; стандартно: `104857600` = 100 МБ). OpenClaw зберігає до п’яти нумерованих архівів поруч з активним файлом.
|
||||
- `redactSensitive` / `redactPatterns`: маскування за принципом найкращих зусиль для виводу в консоль, файлових журналів, записів журналу OTLP і збереженого тексту стенограми сесії. `redactSensitive: "off"` вимикає лише цю загальну політику журналів/стенограм; поверхні безпеки UI/інструментів/діагностики все одно редагують секрети перед надсиланням.
|
||||
- `maxFileBytes`: максимальний розмір активного файлу журналу в байтах перед ротацією (додатне ціле число; типово: `104857600` = 100 MB). OpenClaw зберігає до п’яти нумерованих архівів поруч з активним файлом.
|
||||
- `redactSensitive` / `redactPatterns`: маскування на основі найкращих зусиль для виводу в консоль, файлових журналів, записів журналу OTLP і збереженого тексту стенограми сеансу. `redactSensitive: "off"` вимикає лише цю загальну політику журналів/стенограм; поверхні безпеки UI/інструментів/діагностики все одно редагують секрети перед надсиланням.
|
||||
|
||||
---
|
||||
|
||||
@ -933,25 +934,25 @@ openclaw gateway --port 19001
|
||||
}
|
||||
```
|
||||
|
||||
- `enabled`: головний перемикач для виводу інструментації (стандартно: `true`).
|
||||
- `flags`: масив рядків прапорців, що вмикають цільовий журнальний вивід (підтримує шаблони на кшталт `"telegram.*"` або `"*"`).
|
||||
- `stuckSessionWarnMs`: віковий поріг у мс для надсилання попереджень про завислі сесії, поки сесія лишається в стані обробки.
|
||||
- `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.
|
||||
- `enabled`: головний перемикач для виводу інструментації (типово: `true`).
|
||||
- `flags`: масив рядків прапорців, що вмикають цільовий вивід журналів (підтримує символи-джокери, як-от `"telegram.*"` або `"*"`).
|
||||
- `stuckSessionWarnMs`: поріг віку в мс для класифікації довготривалих сеансів обробки як `session.long_running`, `session.stalled` або `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`: явне ввімкнення захоплення сирого вмісту для атрибутів span OTEL. Стандартно вимкнено. Булеве `true` захоплює несистемний вміст повідомлень/інструментів; форма об’єкта дає змогу явно ввімкнути `inputMessages`, `outputMessages`, `toolInputs`, `toolOutputs` і `systemPrompt`.
|
||||
- `OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental`: змінна середовища для ввімкнення найновіших експериментальних атрибутів постачальника span GenAI. Стандартно spans зберігають застарілий атрибут `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`: змінні середовища кінцевих точок для окремих сигналів, що використовуються, коли відповідний ключ конфігурації не задано.
|
||||
- `cacheTrace.enabled`: записувати знімки трасування кешу для вбудованих запусків (стандартно: `false`).
|
||||
- `cacheTrace.filePath`: шлях виводу для JSONL трасування кешу (стандартно: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`).
|
||||
- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: керують тим, що включається у вивід трасування кешу (усі стандартно: `true`).
|
||||
- `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, що належить плагіну, зберігаючи активними діагностичні слухачі.
|
||||
- `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`).
|
||||
|
||||
---
|
||||
|
||||
@ -974,11 +975,11 @@ openclaw gateway --port 19001
|
||||
```
|
||||
|
||||
- `channel`: канал випусків для встановлень npm/git — `"stable"`, `"beta"` або `"dev"`.
|
||||
- `checkOnStart`: перевіряти оновлення npm під час запуску Gateway (стандартно: `true`).
|
||||
- `auto.enabled`: увімкнути фонове автооновлення для пакетних встановлень (стандартно: `false`).
|
||||
- `auto.stableDelayHours`: мінімальна затримка в годинах перед автоматичним застосуванням у stable-каналі (стандартно: `6`; максимум: `168`).
|
||||
- `auto.stableJitterHours`: додаткове вікно розподілу розгортання stable-каналу в годинах (стандартно: `12`; максимум: `168`).
|
||||
- `auto.betaCheckIntervalHours`: як часто виконуються перевірки beta-каналу, у годинах (стандартно: `1`; максимум: `24`).
|
||||
- `checkOnStart`: перевіряти оновлення npm під час запуску Gateway (типово: `true`).
|
||||
- `auto.enabled`: увімкнути фонове автооновлення для пакетних встановлень (типово: `false`).
|
||||
- `auto.stableDelayHours`: мінімальна затримка в годинах перед автоматичним застосуванням у стабільному каналі (типово: `6`; макс.: `168`).
|
||||
- `auto.stableJitterHours`: додаткове вікно розподілу розгортання стабільного каналу в годинах (типово: `12`; макс.: `168`).
|
||||
- `auto.betaCheckIntervalHours`: як часто виконуються перевірки бета-каналу, у годинах (типово: `1`; макс.: `24`).
|
||||
|
||||
---
|
||||
|
||||
@ -1011,23 +1012,23 @@ openclaw gateway --port 19001
|
||||
}
|
||||
```
|
||||
|
||||
- `enabled`: глобальний функціональний gate ACP (стандартно: `true`; задайте `false`, щоб приховати можливості dispatch і spawn ACP).
|
||||
- `dispatch.enabled`: незалежний gate для dispatch ходу сесії ACP (стандартно: `true`). Задайте `false`, щоб залишити команди ACP доступними, але заблокувати виконання.
|
||||
- `backend`: стандартний ідентифікатор backend середовища виконання ACP (має відповідати зареєстрованому ACP runtime plugin).
|
||||
Якщо задано `plugins.allow`, включіть ідентифікатор backend plugin (наприклад, `acpx`), інакше bundled стандартний plugin не завантажиться.
|
||||
- `defaultAgent`: резервний ідентифікатор цільового агента ACP, коли spawns не вказують явну ціль.
|
||||
- `allowedAgents`: allowlist ідентифікаторів агентів, дозволених для сесій середовища виконання ACP; порожнє значення означає відсутність додаткового обмеження.
|
||||
- `maxConcurrentSessions`: максимальна кількість одночасно активних сесій ACP.
|
||||
- `stream.coalesceIdleMs`: вікно idle flush у мс для потокового тексту.
|
||||
- `stream.maxChunkChars`: максимальний розмір фрагмента перед поділом проєкції потокового блока.
|
||||
- `stream.repeatSuppression`: пригнічувати повторювані рядки статусу/інструментів у межах ходу (стандартно: `true`).
|
||||
- `stream.deliveryMode`: `"live"` передає потік поступово; `"final_only"` буферизує до термінальних подій ходу.
|
||||
- `stream.hiddenBoundarySeparator`: розділювач перед видимим текстом після прихованих подій інструментів (стандартно: `"paragraph"`).
|
||||
- `stream.maxOutputChars`: максимальна кількість символів виводу асистента, що проєктується за хід ACP.
|
||||
- `stream.maxSessionUpdateChars`: максимальна кількість символів для проєктованих рядків статусу/оновлення ACP.
|
||||
- `stream.tagVisibility`: запис імен тегів для булевих перевизначень видимості потокових подій.
|
||||
- `runtime.ttlMinutes`: idle TTL у хвилинах для worker сесій ACP перед тим, як вони стають придатними для очищення.
|
||||
- `runtime.installCommand`: необов’язкова команда встановлення для запуску під час початкового налаштування середовища виконання ACP.
|
||||
- `enabled`: глобальний функціональний шлюз ACP (типово: `true`; задайте `false`, щоб приховати диспетчеризацію ACP і можливості запуску).
|
||||
- `dispatch.enabled`: незалежний шлюз для диспетчеризації ходу сеансу ACP (типово: `true`). Задайте `false`, щоб залишити команди ACP доступними, але заблокувати виконання.
|
||||
- `backend`: типовий ідентифікатор бекенда середовища виконання ACP (має збігатися із зареєстрованим плагіном середовища виконання ACP).
|
||||
Якщо задано `plugins.allow`, включіть ідентифікатор бекенд-плагіна (наприклад `acpx`), інакше вбудований типовий плагін не завантажиться.
|
||||
- `defaultAgent`: резервний ідентифікатор цільового агента ACP, коли запуски не вказують явну ціль.
|
||||
- `allowedAgents`: список дозволених ідентифікаторів агентів для сеансів середовища виконання ACP; порожнє значення означає відсутність додаткового обмеження.
|
||||
- `maxConcurrentSessions`: максимальна кількість одночасно активних сеансів ACP.
|
||||
- `stream.coalesceIdleMs`: вікно скидання під час простою в мс для потокового тексту.
|
||||
- `stream.maxChunkChars`: максимальний розмір фрагмента перед поділом проєкції потокового блоку.
|
||||
- `stream.repeatSuppression`: пригнічувати повторювані рядки статусу/інструментів у межах одного ходу (типово: `true`).
|
||||
- `stream.deliveryMode`: `"live"` передає потік поступово; `"final_only"` буферизує до завершальних подій ходу.
|
||||
- `stream.hiddenBoundarySeparator`: роздільник перед видимим текстом після прихованих подій інструментів (типово: `"paragraph"`).
|
||||
- `stream.maxOutputChars`: максимальна кількість символів виводу асистента, спроєктованих на один хід ACP.
|
||||
- `stream.maxSessionUpdateChars`: максимальна кількість символів для спроєктованих рядків статусу/оновлення ACP.
|
||||
- `stream.tagVisibility`: запис назв тегів у булеві перевизначення видимості для потокових подій.
|
||||
- `runtime.ttlMinutes`: TTL простою в хвилинах для робітників сеансу ACP перед можливим очищенням.
|
||||
- `runtime.installCommand`: необов’язкова команда встановлення, яку потрібно виконати під час початкового налаштування середовища виконання ACP.
|
||||
|
||||
---
|
||||
|
||||
@ -1043,17 +1044,17 @@ openclaw gateway --port 19001
|
||||
}
|
||||
```
|
||||
|
||||
- `cli.banner.taglineMode` керує стилем слогана банера:
|
||||
- `"random"` (стандартно): ротаційні смішні/сезонні слогани.
|
||||
- `cli.banner.taglineMode` керує стилем слогану банера:
|
||||
- `"random"` (типово): ротаційні жартівливі/сезонні слогани.
|
||||
- `"default"`: фіксований нейтральний слоган (`All your chats, one OpenClaw.`).
|
||||
- `"off"`: без тексту слогана (заголовок/версія банера все одно показуються).
|
||||
- `"off"`: без тексту слогану (назва/версія банера все одно показуються).
|
||||
- Щоб приховати весь банер (а не лише слогани), задайте змінну середовища `OPENCLAW_HIDE_BANNER=1`.
|
||||
|
||||
---
|
||||
|
||||
## Майстер
|
||||
|
||||
Метадані, записані керованими потоками налаштування CLI (`onboard`, `configure`, `doctor`):
|
||||
Метадані, які записують керовані потоки налаштування CLI (`onboard`, `configure`, `doctor`):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -1071,15 +1072,15 @@ openclaw gateway --port 19001
|
||||
|
||||
## Ідентичність
|
||||
|
||||
Див. поля ідентичності `agents.list` у [стандартних параметрах агента](/uk/gateway/config-agents#agent-defaults).
|
||||
Див. поля ідентичності `agents.list` у [типових значеннях агента](/uk/gateway/config-agents#agent-defaults).
|
||||
|
||||
---
|
||||
|
||||
## Bridge (застаріле, вилучено)
|
||||
## Міст (застаріле, вилучено)
|
||||
|
||||
Поточні збірки більше не містять TCP bridge. Nodes підключаються через WebSocket Gateway. Ключі `bridge.*` більше не є частиною схеми конфігурації (перевірка не проходить, доки їх не вилучено; `openclaw doctor --fix` може видалити невідомі ключі).
|
||||
Поточні збірки більше не містять TCP-міст. Nodes підключаються через WebSocket Gateway. Ключі `bridge.*` більше не є частиною схеми конфігурації (перевірка не пройде, доки їх не буде вилучено; `openclaw doctor --fix` може видалити невідомі ключі).
|
||||
|
||||
<Accordion title="Конфігурація legacy bridge (історична довідка)">
|
||||
<Accordion title="Застаріла конфігурація мосту (історична довідка)">
|
||||
|
||||
```json
|
||||
{
|
||||
@ -1117,11 +1118,11 @@ openclaw gateway --port 19001
|
||||
}
|
||||
```
|
||||
|
||||
- `sessionRetention`: як довго зберігати завершені ізольовані сесії запуску cron перед обрізанням із `sessions.json`. Також керує очищенням архівованих видалених стенограм cron. Стандартно: `24h`; задайте `false`, щоб вимкнути.
|
||||
- `runLog.maxBytes`: максимальний розмір кожного файлу журналу запуску (`cron/runs/<jobId>.jsonl`) перед обрізанням. Стандартно: `2_000_000` байтів.
|
||||
- `runLog.keepLines`: найновіші рядки, які зберігаються, коли спрацьовує обрізання журналу запуску. Стандартно: `2000`.
|
||||
- `webhookToken`: bearer token, що використовується для доставки cron webhook POST (`delivery.mode = "webhook"`); якщо пропущено, заголовок авторизації не надсилається.
|
||||
- `webhook`: застарілий legacy fallback URL webhook (http/https), що використовується лише для збережених завдань, які все ще мають `notify: true`.
|
||||
- `sessionRetention`: як довго зберігати завершені ізольовані сеанси запусків cron перед видаленням із `sessions.json`. Також керує очищенням архівованих стенограм видалених cron. Типово: `24h`; задайте `false`, щоб вимкнути.
|
||||
- `runLog.maxBytes`: максимальний розмір кожного файлу журналу запуску (`cron/runs/<jobId>.jsonl`) перед скороченням. Типово: `2_000_000` байтів.
|
||||
- `runLog.keepLines`: найновіші рядки, що зберігаються під час скорочення журналу запуску. Типово: `2000`.
|
||||
- `webhookToken`: bearer-токен, який використовується для доставки cron Webhook POST (`delivery.mode = "webhook"`); якщо пропущено, заголовок автентифікації не надсилається.
|
||||
- `webhook`: застарілий резервний URL Webhook (http/https), який використовується лише для збережених завдань, що досі мають `notify: true`.
|
||||
|
||||
### `cron.retry`
|
||||
|
||||
@ -1137,8 +1138,8 @@ openclaw gateway --port 19001
|
||||
}
|
||||
```
|
||||
|
||||
- `maxAttempts`: максимальна кількість повторних спроб для одноразових завдань при тимчасових помилках (стандартно: `3`; діапазон: `0`–`10`).
|
||||
- `backoffMs`: масив затримок backoff у мс для кожної повторної спроби (стандартно: `[30000, 60000, 300000]`; 1–10 записів).
|
||||
- `maxAttempts`: максимальна кількість повторних спроб для одноразових завдань у разі тимчасових помилок (типово: `3`; діапазон: `0`–`10`).
|
||||
- `backoffMs`: масив затримок backoff у мс для кожної повторної спроби (типово: `[30000, 60000, 300000]`; 1–10 записів).
|
||||
- `retryOn`: типи помилок, що запускають повторні спроби — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Пропустіть, щоб повторювати всі тимчасові типи.
|
||||
|
||||
Застосовується лише до одноразових завдань cron. Повторювані завдання використовують окрему обробку збоїв.
|
||||
@ -1160,12 +1161,12 @@ openclaw gateway --port 19001
|
||||
}
|
||||
```
|
||||
|
||||
- `enabled`: увімкнути сповіщення про збої для завдань cron (стандартно: `false`).
|
||||
- `after`: послідовні збої перед спрацюванням сповіщення (додатне ціле число, мінімум: `1`).
|
||||
- `enabled`: увімкнути сповіщення про збої для завдань cron (типово: `false`).
|
||||
- `after`: послідовні збої перед спрацюванням сповіщення (додатне ціле число, мін.: `1`).
|
||||
- `cooldownMs`: мінімальна кількість мілісекунд між повторними сповіщеннями для того самого завдання (невід’ємне ціле число).
|
||||
- `includeSkipped`: враховувати послідовні пропущені запуски в порозі сповіщення (стандартно: `false`). Пропущені запуски відстежуються окремо й не впливають на backoff помилок виконання.
|
||||
- `mode`: режим доставки — `"announce"` надсилає через повідомлення каналу; `"webhook"` публікує до налаштованого webhook.
|
||||
- `accountId`: необов’язковий ідентифікатор акаунта або каналу для обмеження області доставки сповіщень.
|
||||
- `includeSkipped`: враховувати послідовні пропущені запуски в поріг сповіщення (типово: `false`). Пропущені запуски відстежуються окремо й не впливають на backoff помилок виконання.
|
||||
- `mode`: режим доставки — `"announce"` надсилає через повідомлення каналу; `"webhook"` надсилає POST до налаштованого Webhook.
|
||||
- `accountId`: необов’язковий ідентифікатор облікового запису або каналу для обмеження області доставки сповіщень.
|
||||
|
||||
### `cron.failureDestination`
|
||||
|
||||
@ -1182,28 +1183,28 @@ openclaw gateway --port 19001
|
||||
}
|
||||
```
|
||||
|
||||
- Типове призначення для сповіщень про збої cron в усіх завданнях.
|
||||
- `mode`: `"announce"` або `"webhook"`; типово `"announce"`, коли є достатньо даних цілі.
|
||||
- Типове призначення для сповіщень про збої Cron в усіх завданнях.
|
||||
- `mode`: `"announce"` або `"webhook"`; типовим є `"announce"`, коли існує достатньо даних цілі.
|
||||
- `channel`: перевизначення каналу для доставки announce. `"last"` повторно використовує останній відомий канал доставки.
|
||||
- `to`: явна ціль announce або URL Webhook. Обов’язково для режиму Webhook.
|
||||
- `accountId`: необов’язкове перевизначення облікового запису для доставки.
|
||||
- `delivery.failureDestination` на рівні окремого завдання перевизначає це глобальне значення за замовчуванням.
|
||||
- Коли ні глобальне призначення для збоїв, ні призначення на рівні окремого завдання не задано, завдання, які вже доставляють через `announce`, у разі збою повертаються до цієї основної цілі 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`:
|
||||
Заповнювачі шаблону, що розгортаються в `tools.media.models[].args`:
|
||||
|
||||
| Змінна | Опис |
|
||||
| ------------------ | ------------------------------------------------- |
|
||||
| `{{Body}}` | Повне тіло вхідного повідомлення |
|
||||
| `{{RawBody}}` | Сире тіло (без обгорток історії/відправника) |
|
||||
| `{{BodyStripped}}` | Тіло з вилученими згадками груп |
|
||||
| `{{RawBody}}` | Необроблене тіло (без обгорток історії/відправника) |
|
||||
| `{{BodyStripped}}` | Тіло з видаленими груповими згадками |
|
||||
| `{{From}}` | Ідентифікатор відправника |
|
||||
| `{{To}}` | Ідентифікатор призначення |
|
||||
| `{{MessageSid}}` | ID повідомлення каналу |
|
||||
@ -1213,13 +1214,13 @@ openclaw gateway --port 19001
|
||||
| `{{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 тощо) |
|
||||
|
||||
---
|
||||
@ -1242,13 +1243,13 @@ 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; такі записи завершуються закритою відмовою замість вирівнювання конфігурації.
|
||||
- Помилки: зрозумілі повідомлення для відсутніх файлів, помилок аналізу та циклічних включень.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -1,38 +1,38 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете надсилати дані про використання моделей OpenClaw, потік повідомлень або метрики сесій до колектора OpenTelemetry
|
||||
- Ви налаштовуєте traces, метрики або журнали для Grafana, Datadog, Honeycomb, New Relic, Tempo чи іншого OTLP-бекенда
|
||||
- Вам потрібні точні назви метрик, spans або форми атрибутів, щоб створювати інформаційні панелі чи сповіщення
|
||||
summary: Експортуйте діагностику OpenClaw до будь-якого колектора OpenTelemetry через Plugin diagnostics-otel (OTLP/HTTP)
|
||||
- Ви хочете надсилати дані про використання моделей OpenClaw, потік повідомлень або метрики сеансів до колектора OpenTelemetry
|
||||
- Ви підключаєте трейси, метрики або журнали до Grafana, Datadog, Honeycomb, New Relic, Tempo або іншого OTLP-бекенда
|
||||
- Вам потрібні точні назви метрик, назви спанів або структури атрибутів, щоб створювати дашборди чи сповіщення
|
||||
summary: Експортуйте діагностичні дані OpenClaw до будь-якого колектора OpenTelemetry через Plugin diagnostics-otel (OTLP/HTTP)
|
||||
title: Експорт OpenTelemetry
|
||||
x-i18n:
|
||||
generated_at: "2026-04-27T08:31:11Z"
|
||||
model: gpt-5.4
|
||||
generated_at: "2026-05-01T23:18:23Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: e9d06589d281223ebb57e76f6f19441d30c138b9f7b0636198ab7bae5fad3c8a
|
||||
source_hash: 6afa805f9212571b325e00badff15d58fdc16be1b60c3f41dc7801e4241ed092
|
||||
source_path: gateway/opentelemetry.md
|
||||
workflow: 15
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
OpenClaw експортує діагностику через вбудований Plugin `diagnostics-otel`
|
||||
за допомогою **OTLP/HTTP (protobuf)**. Будь-який колектор або бекенд, що приймає OTLP/HTTP,
|
||||
працює без змін у коді. Для локальних файлових журналів і способів їх читання див.
|
||||
працює без змін у коді. Про локальні файлові журнали та як їх читати див.
|
||||
[Журналювання](/uk/logging).
|
||||
|
||||
## Як це працює разом
|
||||
|
||||
- **Події діагностики** — це структуровані внутрішньопроцесні записи, які видають
|
||||
Gateway і вбудовані plugins для запусків моделей, потоку повідомлень, сесій, черг
|
||||
- **Діагностичні події** — це структуровані внутрішньопроцесні записи, які випускають
|
||||
Gateway і вбудовані plugins для запусків моделей, потоку повідомлень, сеансів, черг,
|
||||
та exec.
|
||||
- **Plugin `diagnostics-otel`** підписується на ці події та експортує їх як
|
||||
OpenTelemetry **метрики**, **traces** і **журнали** через OTLP/HTTP.
|
||||
- **Виклики провайдера** отримують заголовок W3C `traceparent` із довіреного
|
||||
контексту span виклику моделі OpenClaw, якщо транспорт провайдера приймає
|
||||
користувацькі заголовки. Контекст trace, який видає Plugin, не поширюється.
|
||||
- Експортери підключаються лише тоді, коли ввімкнено і поверхню діагностики, і plugin,
|
||||
OpenTelemetry **метрики**, **трейси** та **журнали** через OTLP/HTTP.
|
||||
- **Виклики провайдерів** отримують заголовок W3C `traceparent` від належного OpenClaw
|
||||
контексту span для виклику моделі, коли транспорт провайдера приймає користувацькі
|
||||
заголовки. Контекст трасування, випущений Plugin, не поширюється.
|
||||
- Експортери підключаються лише тоді, коли ввімкнені і поверхня діагностики, і Plugin,
|
||||
тому внутрішньопроцесні витрати за замовчуванням залишаються майже нульовими.
|
||||
|
||||
## Швидкий початок
|
||||
## Швидкий старт
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -59,7 +59,7 @@ OpenClaw експортує діагностику через вбудовани
|
||||
}
|
||||
```
|
||||
|
||||
Ви також можете ввімкнути plugin з CLI:
|
||||
Ви також можете ввімкнути Plugin з CLI:
|
||||
|
||||
```bash
|
||||
openclaw plugins enable diagnostics-otel
|
||||
@ -71,14 +71,14 @@ openclaw plugins enable diagnostics-otel
|
||||
|
||||
## Експортовані сигнали
|
||||
|
||||
| Signal | Що в нього входить |
|
||||
| Сигнал | Що до нього входить |
|
||||
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| **Metrics** | Лічильники та гістограми для використання токенів, вартості, тривалості запуску, потоку повідомлень, смуг черги, стану сесії, exec і тиску пам’яті. |
|
||||
| **Traces** | Spans для використання моделей, викликів моделей, життєвого циклу harness, виконання інструментів, exec, обробки webhook/повідомлень, збирання контексту та циклів інструментів. |
|
||||
| **Logs** | Структуровані записи `logging.file`, експортовані через OTLP, коли ввімкнено `diagnostics.otel.logs`. |
|
||||
| **Метрики** | Лічильники та гістограми для використання токенів, вартості, тривалості запуску, потоку повідомлень, смуг черг, стану сеансу, exec і тиску пам’яті. |
|
||||
| **Трейси** | Spans для використання моделей, викликів моделей, життєвого циклу harness, виконання інструментів, exec, обробки webhook/повідомлень, складання контексту та циклів інструментів. |
|
||||
| **Журнали** | Структуровані записи `logging.file`, експортовані через OTLP, коли ввімкнено `diagnostics.otel.logs`. |
|
||||
|
||||
Перемикайте `traces`, `metrics` і `logs` незалежно. Усі три параметри за замовчуванням
|
||||
увімкнені, коли `diagnostics.otel.enabled` має значення true.
|
||||
Перемикайте `traces`, `metrics` і `logs` незалежно. Усі три за замовчуванням увімкнені,
|
||||
коли `diagnostics.otel.enabled` має значення true.
|
||||
|
||||
## Довідник конфігурації
|
||||
|
||||
@ -99,7 +99,7 @@ openclaw plugins enable diagnostics-otel
|
||||
metrics: true,
|
||||
logs: true,
|
||||
sampleRate: 0.2, // root-span sampler, 0.0..1.0
|
||||
flushIntervalMs: 60000, // interval exportu метрик (мінімум 1000ms)
|
||||
flushIntervalMs: 60000, // metric export interval (min 1000ms)
|
||||
captureContent: {
|
||||
enabled: false,
|
||||
inputMessages: false,
|
||||
@ -115,71 +115,71 @@ openclaw plugins enable diagnostics-otel
|
||||
|
||||
### Змінні середовища
|
||||
|
||||
| Variable | Призначення |
|
||||
| Змінна | Призначення |
|
||||
| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `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` | Перевизначення кінцевих точок для окремих сигналів, що використовуються, коли не задано відповідний ключ конфігурації `diagnostics.otel.*Endpoint`. Конфігурація для конкретного сигналу має пріоритет над env для конкретного сигналу, яке має пріоритет над спільною кінцевою точкою. |
|
||||
| `OTEL_SERVICE_NAME` | Перевизначає `diagnostics.otel.serviceName`. |
|
||||
| `OTEL_EXPORTER_OTLP_PROTOCOL` | Перевизначає wire protocol (сьогодні враховується лише `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 або host process уже зареєстрував глобальний SDK OpenTelemetry. Тоді plugin пропустить власний життєвий цикл NodeSDK, але все одно підключить слухачі діагностики та врахує `traces`/`metrics`/`logs`. |
|
||||
| `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` | Перевизначення кінцевих точок для окремих сигналів, які використовуються, коли відповідний ключ конфігурації `diagnostics.otel.*Endpoint` не задано. Конфігурація для окремого сигналу має пріоритет над env для окремого сигналу, а той має пріоритет над спільною кінцевою точкою. |
|
||||
| `OTEL_SERVICE_NAME` | Перевизначає `diagnostics.otel.serviceName`. |
|
||||
| `OTEL_EXPORTER_OTLP_PROTOCOL` | Перевизначає мережевий протокол (сьогодні враховується лише `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`. |
|
||||
|
||||
## Конфіденційність і захоплення вмісту
|
||||
## Приватність і захоплення вмісту
|
||||
|
||||
Необроблений вміст моделі/інструментів **не** експортується за замовчуванням. Spans містять
|
||||
обмежені ідентифікатори (канал, провайдер, модель, категорію помилки, ідентифікатори запитів
|
||||
лише у вигляді хешів) і ніколи не включають текст prompt, текст відповіді, вхідні дані
|
||||
інструментів, вихідні дані інструментів або ключі сесії.
|
||||
Сирий вміст моделі/інструментів **не** експортується за замовчуванням. Spans містять обмежені
|
||||
ідентифікатори (канал, провайдер, модель, категорія помилки, ідентифікатори запитів лише як хеш)
|
||||
і ніколи не містять текст prompt, текст відповіді, входи інструментів, виходи інструментів або
|
||||
ключі сеансів.
|
||||
|
||||
Вихідні запити до моделі можуть містити заголовок W3C `traceparent`. Цей заголовок
|
||||
генерується лише з контексту trace діагностики, що належить OpenClaw, для активного
|
||||
виклику моделі. Наявні заголовки `traceparent`, передані викликачем, замінюються, тому plugins або
|
||||
користувацькі параметри провайдера не можуть підробити походження cross-service trace.
|
||||
Вихідні запити до моделей можуть містити заголовок W3C `traceparent`. Цей заголовок
|
||||
генерується лише з діагностичного контексту трасування, що належить OpenClaw, для активного
|
||||
виклику моделі. Наявні заголовки `traceparent`, надані викликачем, замінюються, тому plugins або
|
||||
користувацькі параметри провайдера не можуть підробити міжсервісне походження трасування.
|
||||
|
||||
Установлюйте `diagnostics.otel.captureContent.*` у значення `true` лише тоді, коли ваш колектор
|
||||
і політика зберігання схвалені для тексту prompt, відповіді, інструментів або system prompt.
|
||||
Кожен вкладений ключ вмикається окремо:
|
||||
Установлюйте `diagnostics.otel.captureContent.*` у `true` лише тоді, коли ваш колектор і
|
||||
політика зберігання схвалені для тексту prompt, відповіді, інструменту або системного prompt.
|
||||
Кожен підключ окремо вмикається явно:
|
||||
|
||||
- `inputMessages` — вміст prompt користувача.
|
||||
- `outputMessages` — вміст відповіді моделі.
|
||||
- `toolInputs` — payload аргументів інструментів.
|
||||
- `toolOutputs` — payload результатів інструментів.
|
||||
- `systemPrompt` — зібраний system/developer prompt.
|
||||
- `toolInputs` — payload аргументів інструменту.
|
||||
- `toolOutputs` — payload результатів інструменту.
|
||||
- `systemPrompt` — зібраний системний/developer prompt.
|
||||
|
||||
Коли ввімкнено будь-який вкладений ключ, spans моделей та інструментів отримують обмежені,
|
||||
відредаговані атрибути `openclaw.content.*` лише для цього класу.
|
||||
Коли ввімкнено будь-який підключ, spans моделі й інструментів отримують обмежені, відредаговані
|
||||
атрибути `openclaw.content.*` лише для цього класу.
|
||||
|
||||
## Семплювання та скидання
|
||||
|
||||
- **Traces:** `diagnostics.otel.sampleRate` (лише root-span, `0.0` відкидає всі,
|
||||
- **Трейси:** `diagnostics.otel.sampleRate` (лише root-span, `0.0` відкидає всі,
|
||||
`1.0` зберігає всі).
|
||||
- **Metrics:** `diagnostics.otel.flushIntervalMs` (мінімум `1000`).
|
||||
- **Logs:** OTLP logs враховують `logging.level` (рівень файлового журналу). Вони використовують
|
||||
шлях редагування діагностичних log record, а не форматування консолі. Для інсталяцій із
|
||||
великим обсягом даних слід надавати перевагу семплюванню/фільтрації в колекторі OTLP, а не локальному семплюванню.
|
||||
- **Кореляція файлових журналів:** JSONL-файли журналів містять верхньорівневі `traceId`,
|
||||
`spanId`, `parentSpanId` і `traceFlags`, коли виклик журналу несе чинний діагностичний
|
||||
контекст trace, що дозволяє процесорам журналів поєднувати локальні рядки журналу з
|
||||
- **Метрики:** `diagnostics.otel.flushIntervalMs` (мінімум `1000`).
|
||||
- **Журнали:** журнали OTLP враховують `logging.level` (рівень файлового журналу). Вони використовують
|
||||
шлях редагування діагностичних записів журналу, а не форматування консолі. Інсталяціям із великим обсягом
|
||||
слід надавати перевагу семплюванню/фільтруванню колектора OTLP замість локального семплювання.
|
||||
- **Кореляція файлових журналів:** JSONL-файлові журнали містять верхньорівневі `traceId`,
|
||||
`spanId`, `parentSpanId` і `traceFlags`, коли виклик журналювання несе чинний
|
||||
діагностичний контекст трасування, що дає змогу обробникам журналів поєднувати локальні рядки журналу з
|
||||
експортованими spans.
|
||||
- **Кореляція запитів:** HTTP-запити Gateway і кадри WebSocket створюють внутрішню
|
||||
область trace запиту. Журнали й події діагностики в цій області за замовчуванням
|
||||
успадковують trace запиту, тоді як spans запуску агента та виклику моделі
|
||||
створюються як дочірні, щоб заголовки провайдера `traceparent` залишалися в межах того самого trace.
|
||||
- **Кореляція запитів:** HTTP-запити Gateway і кадри WebSocket створюють
|
||||
внутрішню область трасування запиту. Журнали й діагностичні події всередині цієї області
|
||||
за замовчуванням успадковують трасування запиту, тоді як spans запусків агентів і викликів моделей
|
||||
створюються як дочірні, щоб заголовки `traceparent` провайдера залишалися в тому самому трасуванні.
|
||||
|
||||
## Експортовані метрики
|
||||
|
||||
### Використання моделі
|
||||
### Використання моделей
|
||||
|
||||
- `openclaw.tokens` (лічильник, attrs: `openclaw.token`, `openclaw.channel`, `openclaw.provider`, `openclaw.model`, `openclaw.agent`)
|
||||
- `openclaw.cost.usd` (лічильник, attrs: `openclaw.channel`, `openclaw.provider`, `openclaw.model`)
|
||||
- `openclaw.run.duration_ms` (гістограма, attrs: `openclaw.channel`, `openclaw.provider`, `openclaw.model`)
|
||||
- `openclaw.context.tokens` (гістограма, attrs: `openclaw.context`, `openclaw.channel`, `openclaw.provider`, `openclaw.model`)
|
||||
- `gen_ai.client.token.usage` (гістограма, метрика семантичних угод GenAI, attrs: `gen_ai.token.type` = `input`/`output`, `gen_ai.provider.name`, `gen_ai.operation.name`, `gen_ai.request.model`)
|
||||
- `gen_ai.client.operation.duration` (гістограма, секунди, метрика семантичних угод GenAI, attrs: `gen_ai.provider.name`, `gen_ai.operation.name`, `gen_ai.request.model`, необов’язково `error.type`)
|
||||
- `gen_ai.client.token.usage` (гістограма, метрика семантичних конвенцій GenAI, attrs: `gen_ai.token.type` = `input`/`output`, `gen_ai.provider.name`, `gen_ai.operation.name`, `gen_ai.request.model`)
|
||||
- `gen_ai.client.operation.duration` (гістограма, секунди, метрика семантичних конвенцій GenAI, attrs: `gen_ai.provider.name`, `gen_ai.operation.name`, `gen_ai.request.model`, необов’язковий `error.type`)
|
||||
- `openclaw.model_call.duration_ms` (гістограма, attrs: `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` (гістограма, час до першої потокової події відповіді)
|
||||
- `openclaw.model_call.request_bytes` (гістограма, розмір фінального payload запиту до моделі у байтах UTF-8; без сирого вмісту payload)
|
||||
- `openclaw.model_call.response_bytes` (гістограма, розмір подій потокової відповіді моделі у байтах UTF-8; без сирого вмісту відповіді)
|
||||
- `openclaw.model_call.time_to_first_byte_ms` (гістограма, час, що минув до першої події потокової відповіді)
|
||||
|
||||
### Потік повідомлень
|
||||
|
||||
@ -192,20 +192,20 @@ openclaw plugins enable diagnostics-otel
|
||||
- `openclaw.message.delivery.started` (лічильник, attrs: `openclaw.channel`, `openclaw.delivery.kind`)
|
||||
- `openclaw.message.delivery.duration_ms` (гістограма, attrs: `openclaw.channel`, `openclaw.delivery.kind`, `openclaw.outcome`, `openclaw.errorCategory`)
|
||||
|
||||
### Черги та сесії
|
||||
### Черги та сеанси
|
||||
|
||||
- `openclaw.queue.lane.enqueue` (лічильник, attrs: `openclaw.lane`)
|
||||
- `openclaw.queue.lane.dequeue` (лічильник, attrs: `openclaw.lane`)
|
||||
- `openclaw.queue.depth` (гістограма, attrs: `openclaw.lane` або `openclaw.channel=heartbeat`)
|
||||
- `openclaw.queue.wait_ms` (гістограма, attrs: `openclaw.lane`)
|
||||
- `openclaw.session.state` (лічильник, attrs: `openclaw.state`, `openclaw.reason`)
|
||||
- `openclaw.session.stuck` (лічильник, attrs: `openclaw.state`)
|
||||
- `openclaw.session.stuck_age_ms` (гістограма, attrs: `openclaw.state`)
|
||||
- `openclaw.session.stuck` (лічильник, attrs: `openclaw.state`; випускається лише для обліку застарілих сеансів без активної роботи)
|
||||
- `openclaw.session.stuck_age_ms` (гістограма, attrs: `openclaw.state`; випускається лише для обліку застарілих сеансів без активної роботи)
|
||||
- `openclaw.run.attempt` (лічильник, attrs: `openclaw.attempt`)
|
||||
|
||||
### Життєвий цикл Harness
|
||||
### Життєвий цикл harness
|
||||
|
||||
- `openclaw.harness.duration_ms` (гістограма, attrs: `openclaw.harness.id`, `openclaw.harness.plugin`, `openclaw.outcome`, `openclaw.harness.phase` у разі помилок)
|
||||
- `openclaw.harness.duration_ms` (гістограма, attrs: `openclaw.harness.id`, `openclaw.harness.plugin`, `openclaw.outcome`, `openclaw.harness.phase` для помилок)
|
||||
|
||||
### Exec
|
||||
|
||||
@ -213,27 +213,27 @@ openclaw plugins enable diagnostics-otel
|
||||
|
||||
### Внутрішня діагностика (пам’ять і цикл інструментів)
|
||||
|
||||
- `openclaw.memory.heap_used_bytes` (гістограма, attrs: `openclaw.memory.kind`)
|
||||
- `openclaw.memory.heap_used_bytes` (гістограма, атрибути: `openclaw.memory.kind`)
|
||||
- `openclaw.memory.rss_bytes` (гістограма)
|
||||
- `openclaw.memory.pressure` (лічильник, attrs: `openclaw.memory.level`)
|
||||
- `openclaw.tool.loop.iterations` (лічильник, attrs: `openclaw.toolName`, `openclaw.outcome`)
|
||||
- `openclaw.tool.loop.duration_ms` (гістограма, attrs: `openclaw.toolName`, `openclaw.outcome`)
|
||||
- `openclaw.memory.pressure` (лічильник, атрибути: `openclaw.memory.level`)
|
||||
- `openclaw.tool.loop.iterations` (лічильник, атрибути: `openclaw.toolName`, `openclaw.outcome`)
|
||||
- `openclaw.tool.loop.duration_ms` (гістограма, атрибути: `openclaw.toolName`, `openclaw.outcome`)
|
||||
|
||||
## Експортовані spans
|
||||
## Експортовані спани
|
||||
|
||||
- `openclaw.model.usage`
|
||||
- `openclaw.channel`, `openclaw.provider`, `openclaw.model`
|
||||
- `openclaw.tokens.*` (input/output/cache_read/cache_write/total)
|
||||
- `gen_ai.system` за замовчуванням або `gen_ai.provider.name`, якщо ввімкнено найновіші семантичні угоди GenAI
|
||||
- `gen_ai.system` за замовчуванням або `gen_ai.provider.name`, коли увімкнено найновіші семантичні конвенції GenAI
|
||||
- `gen_ai.request.model`, `gen_ai.operation.name`, `gen_ai.usage.*`
|
||||
- `openclaw.run`
|
||||
- `openclaw.outcome`, `openclaw.channel`, `openclaw.provider`, `openclaw.model`, `openclaw.errorCategory`
|
||||
- `openclaw.model.call`
|
||||
- `gen_ai.system` за замовчуванням або `gen_ai.provider.name`, якщо ввімкнено найновіші семантичні угоди GenAI
|
||||
- `gen_ai.system` за замовчуванням або `gen_ai.provider.name`, коли увімкнено найновіші семантичні конвенції GenAI
|
||||
- `gen_ai.request.model`, `gen_ai.operation.name`, `openclaw.provider`, `openclaw.model`, `openclaw.api`, `openclaw.transport`
|
||||
- `openclaw.errorCategory` і необов’язковий `openclaw.failureKind` у разі помилок
|
||||
- `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 для upstream request id провайдера; необроблені id не експортуються)
|
||||
- `openclaw.provider.request_id_hash` (обмежений хеш на основі SHA для ідентифікатора запиту upstream-провайдера; необроблені ідентифікатори не експортуються)
|
||||
- `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`
|
||||
@ -253,27 +253,27 @@ openclaw plugins enable diagnostics-otel
|
||||
- `openclaw.session.stuck`
|
||||
- `openclaw.state`, `openclaw.ageMs`, `openclaw.queueDepth`
|
||||
- `openclaw.context.assembled`
|
||||
- `openclaw.prompt.size`, `openclaw.history.size`, `openclaw.context.tokens`, `openclaw.errorCategory` (без вмісту prompt, history, response або session key)
|
||||
- `openclaw.prompt.size`, `openclaw.history.size`, `openclaw.context.tokens`, `openclaw.errorCategory` (без вмісту промпта, історії, відповіді або session-key)
|
||||
- `openclaw.tool.loop`
|
||||
- `openclaw.toolName`, `openclaw.outcome`, `openclaw.iterations`, `openclaw.errorCategory` (без повідомлень циклу, params або виводу інструмента)
|
||||
- `openclaw.toolName`, `openclaw.outcome`, `openclaw.iterations`, `openclaw.errorCategory` (без повідомлень циклу, параметрів або виводу інструмента)
|
||||
- `openclaw.memory.pressure`
|
||||
- `openclaw.memory.level`, `openclaw.memory.heap_used_bytes`, `openclaw.memory.rss_bytes`
|
||||
|
||||
Якщо захоплення вмісту явно ввімкнено, spans моделей та інструментів також можуть
|
||||
включати обмежені, відредаговані атрибути `openclaw.content.*` для конкретних
|
||||
класів вмісту, які ви ввімкнули.
|
||||
Коли захоплення вмісту явно ввімкнено, спани моделі та інструментів також можуть
|
||||
містити обмежені, відредаговані атрибути `openclaw.content.*` для конкретних
|
||||
класів вмісту, які ви вибрали.
|
||||
|
||||
## Каталог подій діагностики
|
||||
## Каталог діагностичних подій
|
||||
|
||||
Наведені нижче події є основою для метрик і spans вище. Plugins також можуть підписуватися
|
||||
Наведені нижче події забезпечують метрики та спани вище. Plugins також можуть підписуватися
|
||||
на них напряму без експорту OTLP.
|
||||
|
||||
**Використання моделі**
|
||||
|
||||
- `model.usage` — токени, вартість, тривалість, контекст, провайдер/модель/канал,
|
||||
id сесії. `usage` — це облік провайдера/ходу для вартості й телеметрії;
|
||||
`context.used` — це поточний знімок prompt/контексту, який може бути меншим за
|
||||
`usage.total` провайдера, коли задіяно кешований ввід або виклики циклу інструментів.
|
||||
ідентифікатори сесій. `usage` — це облік провайдера/ходу для вартості й телеметрії;
|
||||
`context.used` — це поточний знімок промпта/контексту, і він може бути нижчим за
|
||||
провайдерський `usage.total`, коли задіяно кешований ввід або виклики tool-loop.
|
||||
|
||||
**Потік повідомлень**
|
||||
|
||||
@ -284,29 +284,29 @@ openclaw plugins enable diagnostics-otel
|
||||
**Черга та сесія**
|
||||
|
||||
- `queue.lane.enqueue` / `queue.lane.dequeue`
|
||||
- `session.state` / `session.stuck`
|
||||
- `run.attempt`
|
||||
- `session.state` / `session.long_running` / `session.stalled` / `session.stuck`
|
||||
- `run.attempt` / `run.progress`
|
||||
- `diagnostic.heartbeat` (агреговані лічильники: webhooks/queue/session)
|
||||
|
||||
**Життєвий цикл Harness**
|
||||
**Життєвий цикл harness**
|
||||
|
||||
- `harness.run.started` / `harness.run.completed` / `harness.run.error` —
|
||||
життєвий цикл agent harness для кожного запуску. Включає `harnessId`, необов’язковий
|
||||
`pluginId`, провайдера/модель/канал і id запуску. Завершення додає
|
||||
життєвий цикл для кожного запуску agent harness. Містить `harnessId`, необов’язковий
|
||||
`pluginId`, провайдер/модель/канал і ідентифікатор запуску. Завершення додає
|
||||
`durationMs`, `outcome`, необов’язкові `resultClassification`, `yieldDetected`
|
||||
та лічильники `itemLifecycle`. Помилки додають `phase`
|
||||
і лічильники `itemLifecycle`. Помилки додають `phase`
|
||||
(`prepare`/`start`/`send`/`resolve`/`cleanup`), `errorCategory` і
|
||||
необов’язковий `cleanupFailed`.
|
||||
|
||||
**Exec**
|
||||
|
||||
- `exec.process.completed` — кінцевий результат, тривалість, ціль, режим, код
|
||||
виходу та тип збою. Текст команди й робочі каталоги не
|
||||
- `exec.process.completed` — кінцевий результат термінала, тривалість, ціль, режим, код
|
||||
виходу та тип відмови. Текст команди й робочі каталоги не
|
||||
включаються.
|
||||
|
||||
## Без експортера
|
||||
|
||||
Ви можете залишити події діагностики доступними для plugins або користувацьких sinks без
|
||||
Ви можете залишити діагностичні події доступними для Plugins або власних приймачів без
|
||||
запуску `diagnostics-otel`:
|
||||
|
||||
```json5
|
||||
@ -315,8 +315,8 @@ openclaw plugins enable diagnostics-otel
|
||||
}
|
||||
```
|
||||
|
||||
Для цільового налагоджувального виводу без підвищення `logging.level` використовуйте
|
||||
прапорці діагностики. Прапорці нечутливі до регістру та підтримують wildcard-вирази (наприклад, `telegram.*` або
|
||||
Для цільового налагоджувального виводу без підвищення `logging.level` використовуйте діагностичні
|
||||
прапорці. Прапорці не чутливі до регістру й підтримують символи узагальнення (наприклад, `telegram.*` або
|
||||
`*`):
|
||||
|
||||
```json5
|
||||
@ -325,15 +325,15 @@ openclaw plugins enable diagnostics-otel
|
||||
}
|
||||
```
|
||||
|
||||
Або як одноразове перевизначення через env:
|
||||
Або як одноразове перевизначення env:
|
||||
|
||||
```bash
|
||||
OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload openclaw gateway
|
||||
```
|
||||
|
||||
Вивід прапорців надходить до стандартного файла журналу (`logging.file`) і все ще
|
||||
Вивід прапорців потрапляє у стандартний файл журналу (`logging.file`) і все одно
|
||||
редагується через `logging.redactSensitive`. Повний посібник:
|
||||
[Прапорці діагностики](/uk/diagnostics/flags).
|
||||
[Діагностичні прапорці](/uk/diagnostics/flags).
|
||||
|
||||
## Вимкнення
|
||||
|
||||
@ -348,8 +348,8 @@ OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload openclaw gateway
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Журналювання](/uk/logging) — файлові журнали, вивід у консоль, tailing у CLI та вкладка Logs у Control UI
|
||||
- [Журналювання](/uk/logging) — файлові журнали, консольний вивід, відстеження через CLI та вкладка Logs у Control UI
|
||||
- [Внутрішні механізми журналювання Gateway](/uk/gateway/logging) — стилі журналів WS, префікси підсистем і захоплення консолі
|
||||
- [Прапорці діагностики](/uk/diagnostics/flags) — цільові прапорці журналів налагодження
|
||||
- [Експорт діагностики](/uk/gateway/diagnostics) — інструмент operator support bundle (окремо від експорту OTEL)
|
||||
- [Діагностичні прапорці](/uk/diagnostics/flags) — цільові прапорці налагоджувального журналу
|
||||
- [Експорт діагностики](/uk/gateway/diagnostics) — інструмент support-bundle для операторів (окремо від експорту OTEL)
|
||||
- [Довідник конфігурації](/uk/gateway/configuration-reference#diagnostics) — повний довідник полів `diagnostics.*`
|
||||
|
||||
Loading…
Reference in New Issue
Block a user