chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-28 12:01:36 +00:00
parent feb52975dc
commit 7b18427b61
3 changed files with 389 additions and 422 deletions

View File

@ -1,36 +1,36 @@
---
read_when:
- Вам потрібно знати, які змінні середовища завантажуються і в якому порядку
- Ви налагоджуєте відсутні API-ключі в Gateway
- Ви налагоджуєте проблему з відсутніми ключами API у Gateway
- Ви документуєте автентифікацію провайдера або середовища розгортання
summary: Звідки OpenClaw завантажує змінні середовища та порядок пріоритету
summary: Де OpenClaw завантажує змінні середовища та порядок пріоритетності
title: Змінні середовища
x-i18n:
generated_at: "2026-04-23T20:55:05Z"
model: gpt-5.4
generated_at: "2026-04-28T11:59:57Z"
model: gpt-5.5
provider: openai
source_hash: b0538e07cc2f785224b5f061bdaee982c4c849838e9d637defcc86a5121710df
source_hash: d19b9053207a088b3eb39d03e36fc2d415295feb80da51bd71339884466b101b
source_path: help/environment.md
workflow: 15
workflow: 16
---
OpenClaw отримує змінні середовища з кількох джерел. Правило таке: **ніколи не перевизначати наявні значення**.
OpenClaw отримує змінні середовища з кількох джерел. Правило: **ніколи не перевизначати наявні значення**.
## Пріоритет (від найвищого до найнижчого)
## Пріоритетність (найвища → найнижча)
1. **Середовище процесу** (те, що процес Gateway уже отримав від батьківської оболонки/демона).
2. **`.env` у поточному робочому каталозі** (типова поведінка dotenv; не перевизначає).
3. **Глобальний `.env`** у `~/.openclaw/.env`обто `$OPENCLAW_STATE_DIR/.env`; не перевизначає).
4. **Блок config `env`** у `~/.openclaw/openclaw.json` (застосовується лише за відсутності значення).
5. **Необовязковий імпорт login-shell** (`env.shellEnv.enabled` або `OPENCLAW_LOAD_SHELL_ENV=1`), який застосовується лише для відсутніх очікуваних ключів.
1. **Середовище процесу** (те, що процес Gateway уже має від батьківської оболонки/демона).
2. **`.env` у поточному робочому каталозі** (стандарт dotenv; не перевизначає).
3. **Глобальний `.env`** у `~/.openclaw/.env`акож `$OPENCLAW_STATE_DIR/.env`; не перевизначає).
4. **Блок `env` конфігурації** у `~/.openclaw/openclaw.json` (застосовується лише якщо значення відсутнє).
5. **Необов'язковий імпорт login-shell** (`env.shellEnv.enabled` або `OPENCLAW_LOAD_SHELL_ENV=1`), застосовується лише для відсутніх очікуваних ключів.
На свіжих установленнях Ubuntu, які використовують типовий каталог стану, OpenClaw також розглядає `~/.config/openclaw/gateway.env` як сумісний резервний варіант після глобального `.env`. Якщо обидва файли існують і суперечать один одному, OpenClaw зберігає `~/.openclaw/.env` і виводить попередження.
На свіжих встановленнях Ubuntu, які використовують стандартний каталог стану, OpenClaw також розглядає `~/.config/openclaw/gateway.env` як сумісний резервний варіант після глобального `.env`. Якщо обидва файли існують і мають різні значення, OpenClaw залишає `~/.openclaw/.env` і виводить попередження.
Якщо файл конфігурації повністю відсутній, крок 4 пропускається; імпорт оболонки все одно виконується, якщо його ввімкнено.
Якщо файл конфігурації повністю відсутній, крок 4 пропускається; імпорт оболонки все одно запускається, якщо його ввімкнено.
## Блок config `env`
## Блок `env` конфігурації
Два еквівалентні способи задати inline env vars (обидва не перевизначають наявні значення):
Два рівнозначні способи встановити вбудовані змінні середовища (обидва не перевизначають):
```json5
{
@ -43,9 +43,9 @@ OpenClaw отримує змінні середовища з кількох дж
}
```
## Імпорт env оболонки
## Імпорт середовища оболонки
`env.shellEnv` запускає вашу login shell і імпортує лише **відсутні** очікувані ключі:
`env.shellEnv` запускає вашу оболонку входу й імпортує лише **відсутні** очікувані ключі:
```json5
{
@ -63,27 +63,27 @@ OpenClaw отримує змінні середовища з кількох дж
- `OPENCLAW_LOAD_SHELL_ENV=1`
- `OPENCLAW_SHELL_ENV_TIMEOUT_MS=15000`
## Env vars, ін’єктовані під час виконання
## Змінні середовища, впроваджені під час виконання
OpenClaw також ін’єктує маркери контексту в дочірні процеси, які він запускає:
OpenClaw також впроваджує контекстні маркери в породжені дочірні процеси:
- `OPENCLAW_SHELL=exec`: задається для команд, запущених через інструмент `exec`.
- `OPENCLAW_SHELL=acp`: задається для запусків процесів runtime-backend ACP (наприклад, `acpx`).
- `OPENCLAW_SHELL=acp-client`: задається для `openclaw acp client`, коли він запускає процес ACP bridge.
- `OPENCLAW_SHELL=tui-local`: задається для локальних команд оболонки `!` у TUI.
- `OPENCLAW_SHELL=exec`: встановлюється для команд, запущених через інструмент `exec`.
- `OPENCLAW_SHELL=acp`: встановлюється для породжених процесів бекенду середовища виконання ACP (наприклад `acpx`).
- `OPENCLAW_SHELL=acp-client`: встановлюється для `openclaw acp client`, коли він породжує процес моста ACP.
- `OPENCLAW_SHELL=tui-local`: встановлюється для локальних команд оболонки TUI `!`.
Це маркери часу виконання (а не обов’язкова конфігурація користувача). Їх можна використовувати в логіці shell/profile,
щоб застосовувати правила для конкретного контексту.
Це маркери часу виконання (не обов'язкова користувацька конфігурація). Їх можна використовувати в логіці оболонки/профілю
для застосування контекстно-специфічних правил.
## Env vars UI
## Змінні середовища інтерфейсу користувача
- `OPENCLAW_THEME=light`: примусово використовувати світлу палітру TUI, коли у вашого термінала світлий фон.
- `OPENCLAW_THEME=dark`: примусово використовувати темну палітру TUI.
- `COLORFGBG`: якщо ваш термінал експортує цю змінну, OpenClaw використовує підказку про колір фону, щоб автоматично вибрати палітру TUI.
- `OPENCLAW_THEME=light`: примусово вмикає світлу палітру TUI, коли ваш термінал має світле тло.
- `OPENCLAW_THEME=dark`: примусово вмикає темну палітру TUI.
- `COLORFGBG`: якщо ваш термінал експортує її, OpenClaw використовує підказку кольору тла для автоматичного вибору палітри TUI.
## Підстановка env vars у config
## Підстановка змінних середовища в конфігурації
Ви можете посилатися безпосередньо на env vars у рядкових значеннях config за допомогою синтаксису `${VAR_NAME}`:
Ви можете напряму посилатися на змінні середовища в рядкових значеннях конфігурації за допомогою синтаксису `${VAR_NAME}`:
```json5
{
@ -97,36 +97,36 @@ OpenClaw також ін’єктує маркери контексту в до
}
```
Повну інформацію див. в [Конфігурація: підстановка env vars](/uk/gateway/configuration-reference#env-var-substitution).
Повні подробиці див. у [Конфігурація: підстановка змінних середовища](/uk/gateway/configuration-reference#env-var-substitution).
## Secret refs проти рядків `${ENV}`
## Посилання на секрети й рядки `${ENV}`
OpenClaw підтримує два шаблони, що використовують env:
OpenClaw підтримує два шаблони на основі середовища:
- підстановку рядків `${VAR}` у значеннях config.
- обєкти SecretRef (`{ source: "env", provider: "default", id: "VAR" }`) для полів, що підтримують посилання на секрети.
- Рядкова підстановка `${VAR}` у значеннях конфігурації.
- Об'єкти SecretRef (`{ source: "env", provider: "default", id: "VAR" }`) для полів, що підтримують посилання на секрети.
Обидва варіанти розв’язуються із середовища процесу під час активації. Докладніше про SecretRef див. у [Керування секретами](/uk/gateway/secrets).
Обидва розв'язуються із середовища процесу під час активації. Подробиці щодо SecretRef задокументовано в [Керуванні секретами](/uk/gateway/secrets).
## Env vars, пов’язані зі шляхами
## Змінні середовища, пов'язані зі шляхами
| Змінна | Призначення |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OPENCLAW_HOME` | Перевизначає домашній каталог, який використовується для всіх внутрішніх шляхів (`~/.openclaw/`, каталоги агентів, сесії, credentials). Корисно при запуску OpenClaw як окремого користувача сервісу. |
| `OPENCLAW_STATE_DIR` | Перевизначає каталог стану (типово `~/.openclaw`). |
| `OPENCLAW_CONFIG_PATH` | Перевизначає шлях до файла конфігурації (типово `~/.openclaw/openclaw.json`). |
| Змінна | Призначення |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OPENCLAW_HOME` | Перевизначає домашній каталог, що використовується для всього внутрішнього розв'язання шляхів (`~/.openclaw/`, каталоги агентів, сеанси, облікові дані). Корисно під час запуску OpenClaw як виділеного службового користувача. |
| `OPENCLAW_STATE_DIR` | Перевизначає каталог стану (стандартно `~/.openclaw`). |
| `OPENCLAW_CONFIG_PATH` | Перевизначає шлях до файлу конфігурації (стандартно `~/.openclaw/openclaw.json`). |
## Журналювання
| Змінна | Призначення |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OPENCLAW_LOG_LEVEL` | Перевизначає рівень журналювання і для файла, і для консолі (наприклад, `debug`, `trace`). Має пріоритет над `logging.level` і `logging.consoleLevel` у config. Некоректні значення ігноруються з попередженням. |
| Змінна | Призначення |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OPENCLAW_LOG_LEVEL` | Перевизначає рівень журналювання і для файлу, і для консолі (наприклад `debug`, `trace`). Має пріоритет над `logging.level` і `logging.consoleLevel` у конфігурації. Недійсні значення ігноруються з попередженням. |
### `OPENCLAW_HOME`
Коли задано, `OPENCLAW_HOME` замінює системний домашній каталог (`$HOME` / `os.homedir()`) для всіх внутрішніх шляхів. Це дає змогу повністю ізолювати файлову систему для headless-облікових записів сервісу.
Коли встановлено, `OPENCLAW_HOME` замінює системний домашній каталог (`$HOME` / `os.homedir()`) для всього внутрішнього розв'язання шляхів. Це забезпечує повну ізоляцію файлової системи для безголових службових облікових записів.
**Пріоритет:** `OPENCLAW_HOME` > `$HOME` > `USERPROFILE` > `os.homedir()`
**Пріоритетність:** `OPENCLAW_HOME` > `$HOME` > `USERPROFILE` > `os.homedir()`
**Приклад** (macOS LaunchDaemon):
@ -138,18 +138,18 @@ OpenClaw підтримує два шаблони, що використовую
</dict>
```
`OPENCLAW_HOME` також можна задати як шлях із тильдою (наприклад, `~/svc`), який перед використанням розгортається через `$HOME`.
`OPENCLAW_HOME` також можна встановити як шлях із тильдою (наприклад `~/svc`), який перед використанням розгортається за допомогою `$HOME`.
## Користувачі nvm: збої TLS у web_fetch
Якщо Node.js було встановлено через **nvm** (а не через системний пакетний менеджер), вбудований `fetch()` використовує
вбудоване сховище CA від nvm, у якому можуть бракувати сучасних кореневих CA (ISRG Root X1/X2 для Let's Encrypt,
DigiCert Global Root G2 тощо). Через це `web_fetch` завершується з `"fetch failed"` на більшості HTTPS-сайтів.
Якщо Node.js було встановлено через **nvm** (а не системний менеджер пакунків), вбудований `fetch()` використовує
вбудоване сховище CA від nvm, у якому можуть бути відсутні сучасні кореневі CA (ISRG Root X1/X2 для Let's Encrypt,
DigiCert Global Root G2 тощо). Через це `web_fetch` завершується помилкою `"fetch failed"` на більшості сайтів HTTPS.
На Linux OpenClaw автоматично виявляє nvm і застосовує виправлення в реальному середовищі запуску:
У Linux OpenClaw автоматично виявляє nvm і застосовує виправлення у фактичному середовищі запуску:
- `openclaw gateway install` записує `NODE_EXTRA_CA_CERTS` у середовище сервісу systemd
- точка входу CLI `openclaw` повторно запускає себе з установленим `NODE_EXTRA_CA_CERTS` до старту Node
- `openclaw gateway install` записує `NODE_EXTRA_CA_CERTS` у середовище служби systemd
- точка входу CLI `openclaw` повторно запускає себе з установленим `NODE_EXTRA_CA_CERTS` до запуску Node
**Ручне виправлення (для старіших версій або прямих запусків `node ...`):**
@ -160,11 +160,23 @@ export NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt
openclaw gateway run
```
Не покладайтеся лише на запис цієї змінної в `~/.openclaw/.env`; Node зчитує
`NODE_EXTRA_CA_CERTS` під час старту процесу.
Не покладайтеся на запис лише в `~/.openclaw/.env` для цієї змінної; Node читає
`NODE_EXTRA_CA_CERTS` під час запуску процесу.
## Пов’язане
## Застарілі змінні середовища
OpenClaw читає лише змінні середовища `OPENCLAW_*`. Застарілі
префікси `CLAWDBOT_*` і `MOLTBOT_*` з попередніх випусків мовчки
ігноруються.
Якщо будь-які з них усе ще встановлені в процесі Gateway під час запуску, OpenClaw виводить
одне попередження Node про застарівання (`OPENCLAW_LEGACY_ENV_VARS`) зі списком
виявлених префіксів і загальною кількістю. Перейменуйте кожне значення, замінивши
застарілий префікс на `OPENCLAW_` (наприклад `CLAWDBOT_GATEWAY_TOKEN`
`OPENCLAW_GATEWAY_TOKEN`); старі назви не мають жодного ефекту.
## Пов'язане
- [Конфігурація Gateway](/uk/gateway/configuration)
- [FAQ: env vars і завантаження .env](/uk/help/faq#env-vars-and-env-loading)
- [Поширені запитання: змінні середовища та завантаження .env](/uk/help/faq#env-vars-and-env-loading)
- [Огляд моделей](/uk/concepts/models)

View File

@ -1,30 +1,30 @@
---
read_when:
- Ви створюєте plugin, якому потрібні `before_tool_call`, `before_agent_reply`, хуки повідомлень або хуки життєвого циклу
- Вам потрібно блокувати, переписувати або вимагати схвалення для викликів інструментів із plugin
- Ви обираєте між внутрішніми хуками та хуками plugin
summary: 'Хуки Plugin: перехоплюють події життєвого циклу агента, інструмента, повідомлення, сесії та Gateway'
- Ви створюєте Plugin, якому потрібні before_tool_call, before_agent_reply, хуки повідомлень або хуки життєвого циклу
- Потрібно блокувати, переписувати або вимагати схвалення для викликів інструментів із Plugin
- Ви обираєте між внутрішніми хуками та хуками Plugin
summary: 'Хуки Plugin: перехоплюйте події життєвого циклу агента, інструмента, повідомлення, сеансу та Gateway'
title: Хуки Plugin
x-i18n:
generated_at: "2026-04-28T00:34:03Z"
model: gpt-5.4
generated_at: "2026-04-28T12:00:09Z"
model: gpt-5.5
provider: openai
source_hash: 689f4c15058f03cff1feb2a8aa1450c75cc3f8648d8ac7cc03ea952b3a1975bd
source_hash: 7aa6284ea4033fd0da624a794bf7b8b62c0d93d1a4a5a1f7146c8aa55a1dd1c3
source_path: plugins/hooks.md
workflow: 15
workflow: 16
---
Хуки Plugin — це внутрішньопроцесні точки розширення для plugin у OpenClaw. Використовуйте їх,
коли plugin має перевіряти або змінювати запуски агента, виклики інструментів, потік повідомлень,
Plugin hooks — це внутрішньопроцесні точки розширення для плагінів OpenClaw. Використовуйте їх,
коли плагіну потрібно переглядати або змінювати запуски агентів, виклики інструментів, потік повідомлень,
життєвий цикл сесії, маршрутизацію субагентів, встановлення або запуск Gateway.
Натомість використовуйте [внутрішні хуки](/uk/automation/hooks), якщо вам потрібен невеликий
встановлюваний оператором скрипт `HOOK.md` для подій команд і Gateway, таких як
Натомість використовуйте [внутрішні hooks](/uk/automation/hooks), коли потрібен невеликий
установлений оператором скрипт `HOOK.md` для команд і подій Gateway, таких як
`/new`, `/reset`, `/stop`, `agent:bootstrap` або `gateway:startup`.
## Швидкий старт
Зареєструйте типізовані хуки plugin за допомогою `api.on(...)` у точці входу вашого plugin:
Реєструйте типізовані plugin hooks за допомогою `api.on(...)` з точки входу вашого плагіна:
```typescript
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
@ -56,66 +56,68 @@ export default definePluginEntry({
});
```
Обробники хуків виконуються послідовно у порядку спадання `priority`. Хуки з однаковим пріоритетом
Обробники hooks виконуються послідовно в порядку спадання `priority`. Hooks з однаковим пріоритетом
зберігають порядок реєстрації.
Кожен хук отримує `event.context.pluginConfig` — обчислену конфігурацію для plugin, який зареєстрував цей обробник. Використовуйте її для рішень хуків, яким потрібні
поточні параметри plugin; OpenClaw додає її окремо для кожного обробника, не змінюючи
спільний об’єкт події, який бачать інші plugin.
Кожен hook отримує `event.context.pluginConfig`, вирішену конфігурацію для
плагіна, який зареєстрував цей обробник. Використовуйте її для рішень hook, яким потрібні
поточні параметри плагіна; OpenClaw впроваджує її окремо для кожного обробника, не змінюючи
спільний об’єкт події, який бачать інші плагіни.
## Каталог хуків
## Каталог hooks
Хуки згруповані за поверхнею, яку вони розширюють. Назви **жирним** приймають
результат рішення (блокування, скасування, перевизначення або вимога схвалення); усі інші
призначені лише для спостереження.
Hooks згруповано за поверхнею, яку вони розширюють. Назви, виділені **жирним**, приймають
результат рішення (заблокувати, скасувати, перевизначити або вимагати схвалення); усі інші призначені
лише для спостереження.
**Хід агента**
- `before_model_resolve` — перевизначити провайдера або модель до завантаження повідомлень сесії
- `agent_turn_prepare` — спожити поставлені в чергу ін’єкції ходу plugin і додати контекст цього ж ходу перед хуками prompt
- `agent_turn_prepare` — спожити поставлені в чергу вставки ходу плагіна й додати контекст того самого ходу перед prompt hooks
- `before_prompt_build` — додати динамічний контекст або текст системного prompt перед викликом моделі
- `before_agent_start`сумісна об’єднана фаза; натомість віддавайте перевагу двом хукам вище
- **`before_agent_reply`** — замкнути хід моделі достроково синтетичною відповіддю або тишею
- **`before_agent_finalize`** — перевірити природну фінальну відповідь і запросити ще один прохід моделі
- `agent_end` — спостерігати фінальні повідомлення, стан успішності та тривалість запуску
- `heartbeat_prompt_contribution` — додати контекст лише для heartbeat для фонових моніторів і plugin життєвого циклу
- `before_agent_start`комбінована фаза лише для сумісності; віддавайте перевагу двом hooks вище
- **`before_agent_reply`** — коротко замкнути хід моделі синтетичною відповіддю або мовчанням
- **`before_agent_finalize`** — переглянути природну фінальну відповідь і запросити ще один прохід моделі
- `agent_end` — спостерігати фінальні повідомлення, стан успіху та тривалість запуску
- `heartbeat_prompt_contribution` — додати контекст лише для heartbeat для фонових моніторів і плагінів життєвого циклу
**Спостереження за розмовою**
- `model_call_started` / `model_call_ended` — спостерігати санітовані метадані виклику провайдера/моделі, час, результат і обмежені хеші request-id без вмісту prompt або відповіді
- `llm_input` — спостерігати вхід провайдера (системний prompt, prompt, історію)
- `llm_output` — спостерігати вихід провайдера
- `model_call_started` / `model_call_ended` — спостерігати санітизовані метадані виклику провайдера/моделі, таймінг, результат і обмежені хеші ідентифікаторів запитів без вмісту prompt або відповіді
- `llm_input` — спостерігати вхідні дані провайдера (системний prompt, prompt, історія)
- `llm_output` — спостерігати вихідні дані провайдера
**Інструменти**
- **`before_tool_call`** — переписати параметри інструмента, заблокувати виконання або вимагати схвалення
- `after_tool_call` — спостерігати результати інструмента, помилки та тривалість
- **`tool_result_persist`** — переписати повідомлення помічника, створене з результату інструмента
- **`before_message_write`** — перевірити або заблокувати запис повідомлення, що виконується (рідко)
- **`tool_result_persist`** — переписати повідомлення асистента, створене з результату інструмента
- **`before_message_write`** — переглянути або заблокувати запис повідомлення в процесі (рідко)
**Повідомлення і доставка**
**Повідомлення та доставлення**
- **`inbound_claim`** — перехопити вхідне повідомлення до маршрутизації агента (синтетичні відповіді)
- `message_received` — спостерігати вхідний вміст, відправника, потік і метадані
- **`message_sending`** — переписати вихідний вміст або скасувати доставку
- `message_sent` — спостерігати успіх або невдачу вихідної доставки
- **`before_dispatch`** — перевірити або переписати вихідне dispatch перед передачею каналу
- **`reply_dispatch`** — брати участь у фінальному конвеєрі dispatch відповіді
- **`inbound_claim`** — заявити права на вхідне повідомлення перед маршрутизацією агента (синтетичні відповіді)
- `message_received` — спостерігати вхідний вміст, відправника, thread і метадані
- **`message_sending`** — переписати вихідний вміст або скасувати доставлення
- `message_sent` — спостерігати успішне або невдале доставлення вихідного повідомлення
- **`before_dispatch`** — переглянути або переписати вихідне dispatch перед передаванням каналу
- **`reply_dispatch`** — брати участь у фінальному конвеєрі reply-dispatch
**Сесії та Compaction**
**Сесії та compaction**
- `session_start` / `session_end` — відстежувати межі життєвого циклу сесії
- `before_compaction` / `after_compaction` — спостерігати або анотувати цикли Compaction
- `before_compaction` / `after_compaction` — спостерігати або анотувати цикли compaction
- `before_reset` — спостерігати події скидання сесії (`/reset`, програмні скидання)
**Субагенти**
- `subagent_spawning` / `subagent_delivery_target` / `subagent_spawned` / `subagent_ended` — координувати маршрутизацію субагентів і доставку завершення
- `subagent_spawning` / `subagent_delivery_target` / `subagent_spawned` / `subagent_ended` — координувати маршрутизацію субагентів і доставлення завершення
**Життєвий цикл**
- `gateway_start` / `gateway_stop` — запускати або зупиняти сервіси plugin разом із Gateway
- **`before_install`** — перевіряти сканування встановлення skill або plugin і за потреби блокувати
- `gateway_start` / `gateway_stop` — запускати або зупиняти сервіси, що належать плагіну, разом із Gateway
- `cron_changed` — спостерігати зміни життєвого циклу cron, що належать gateway (додано, оновлено, видалено, запущено, завершено, заплановано)
- **`before_install`** — переглядати сканування встановлення skill або плагіна й за потреби блокувати
## Політика викликів інструментів
@ -126,9 +128,9 @@ export default definePluginEntry({
- необов’язковий `event.runId`
- необов’язковий `event.toolCallId`
- поля контексту, такі як `ctx.agentId`, `ctx.sessionKey`, `ctx.sessionId`,
`ctx.runId`, `ctx.jobId` (встановлюється для запусків, ініційованих cron), і діагностичний `ctx.trace`
`ctx.runId`, `ctx.jobId` (задано для запусків, керованих cron), і діагностичний `ctx.trace`
Він може повертати:
Може повертати:
```typescript
type BeforeToolCallResult = {
@ -151,85 +153,44 @@ type BeforeToolCallResult = {
Правила:
- `block: true` є термінальним і пропускає обробники з нижчим пріоритетом.
- `block: false` вважається відсутністю рішення.
- `block: true` є кінцевим рішенням і пропускає обробники з нижчим пріоритетом.
- `block: false` трактується як відсутність рішення.
- `params` переписує параметри інструмента для виконання.
- `requireApproval` призупиняє запуск агента і запитує користувача через схвалення plugin.
Команда `/approve` може схвалювати і exec-, і plugin-схвалення.
- `block: true` з нижчим пріоритетом усе ще може заблокувати після того, як хук із вищим пріоритетом
запросив схвалення.
- `onResolution` отримує підсумкове рішення щодо схвалення — `allow-once`,
`allow-always`, `deny`, `timeout` або `cancelled`.
- `requireApproval` призупиняє запуск агента й запитує користувача через схвалення plugin. Команда `/approve` може схвалювати як exec, так і схвалення plugin.
- `block: true` з нижчим пріоритетом усе ще може заблокувати виконання після того, як хук із вищим пріоритетом запросив схвалення.
- `onResolution` отримує вирішене рішення щодо схвалення — `allow-once`, `allow-always`, `deny`, `timeout` або `cancelled`.
Вбудовані plugin, яким потрібна політика на рівні хоста, можуть реєструвати довірені політики інструментів
за допомогою `api.registerTrustedToolPolicy(...)`. Вони виконуються до звичайних
хуків `before_tool_call` і до рішень зовнішніх plugin. Використовуйте їх лише
для довірених на рівні хоста обмежень, таких як політика робочого простору, контроль бюджету або
безпека зарезервованих робочих процесів. Зовнішні plugin мають використовувати звичайні хуки `before_tool_call`.
Вбудовані plugins, яким потрібна політика рівня хоста, можуть реєструвати довірені політики інструментів за допомогою `api.registerTrustedToolPolicy(...)`. Вони виконуються перед звичайними хуками `before_tool_call` і перед рішеннями зовнішніх plugin. Використовуйте їх лише для довірених хостом обмежень, як-от політика робочого простору, контроль бюджету або безпека зарезервованих workflow. Зовнішні plugins мають використовувати звичайні хуки `before_tool_call`.
### Збереження результатів інструментів
Результати інструментів можуть містити структуровані `details` для рендерингу в UI, діагностики,
маршрутизації медіа або метаданих, якими володіє plugin. Розглядайте `details` як метадані виконання,
а не як вміст prompt:
Результати інструментів можуть містити структуровані `details` для рендерингу UI, діагностики, маршрутизації медіа або метаданих, що належать plugin. Розглядайте `details` як runtime-метадані, а не як вміст prompt:
- OpenClaw видаляє `toolResult.details` перед повторним програванням провайдеру та перед входом Compaction,
щоб метадані не ставали контекстом моделі.
- Збережені записи сесії містять лише обмежені `details`. Надмірно великі details
замінюються компактним підсумком і `persistedDetailsTruncated: true`.
- `tool_result_persist` і `before_message_write` виконуються до фінального
обмеження збереження. Усе ж хуки мають повертати невеликі `details` і уникати
розміщення тексту, важливого для prompt, лише в `details`; вивід інструмента, видимий моделі,
слід поміщати в `content`.
- OpenClaw вилучає `toolResult.details` перед повторним відтворенням у provider і вхідними даними compaction, щоб метадані не потрапляли в контекст моделі.
- Збережені записи сесії залишають лише обмежені `details`. Завеликі details замінюються компактним підсумком і `persistedDetailsTruncated: true`.
- `tool_result_persist` і `before_message_write` виконуються перед фінальним обмеженням збереження. Хуки все одно мають зберігати повернені `details` малими й уникати розміщення тексту, важливого для prompt, лише в `details`; вивід інструмента, видимий моделі, розміщуйте в `content`.
## Хуки prompt і моделі
Для нових plugin використовуйте хуки, специфічні для фази:
Для нових plugins використовуйте хуки, специфічні для фази:
- `before_model_resolve`: отримує лише поточний prompt і метадані вкладень.
Поверніть `providerOverride` або `modelOverride`.
- `agent_turn_prepare`: отримує поточний prompt, підготовлені повідомлення сесії
і будь-які ін’єкції, поставлені в чергу рівно один раз і вилучені для цієї сесії. Поверніть
`prependContext` або `appendContext`.
- `before_prompt_build`: отримує поточний prompt і повідомлення сесії.
Поверніть `prependContext`, `appendContext`, `systemPrompt`,
`prependSystemContext` або `appendSystemContext`.
- `heartbeat_prompt_contribution`: виконується лише для heartbeat-ходів і повертає
`prependContext` або `appendContext`. Він призначений для фонових моніторів,
яким потрібно підсумувати поточний стан без зміни ходів, ініційованих користувачем.
- `before_model_resolve`: отримує лише поточний prompt і метадані вкладень. Поверніть `providerOverride` або `modelOverride`.
- `agent_turn_prepare`: отримує поточний prompt, підготовлені повідомлення сесії та будь-які інʼєкції, поставлені в чергу точно один раз і вибрані для цієї сесії. Поверніть `prependContext` або `appendContext`.
- `before_prompt_build`: отримує поточний prompt і повідомлення сесії. Поверніть `prependContext`, `appendContext`, `systemPrompt`, `prependSystemContext` або `appendSystemContext`.
- `heartbeat_prompt_contribution`: виконується лише для ходів Heartbeat і повертає `prependContext` або `appendContext`. Він призначений для фонових моніторів, яким потрібно підсумовувати поточний стан без зміни ходів, ініційованих користувачем.
`before_agent_start` залишається для сумісності. Віддавайте перевагу явним хукам вище,
щоб ваш plugin не залежав від застарілої об’єднаної фази.
`before_agent_start` залишається для сумісності. Надавайте перевагу явним хукам вище, щоб ваш plugin не залежав від застарілої обʼєднаної фази.
`before_agent_start` і `agent_end` містять `event.runId`, коли OpenClaw може
ідентифікувати активний запуск. Це саме значення також доступне в `ctx.runId`.
Запуски, ініційовані Cron, також надають `ctx.jobId` (ідентифікатор вихідного cron-завдання), щоб
хуки plugin могли прив’язувати метрики, побічні ефекти або стан до конкретного запланованого
завдання.
`before_agent_start` і `agent_end` містять `event.runId`, коли OpenClaw може визначити активний запуск. Те саме значення також доступне в `ctx.runId`. Запуски, керовані Cron, також надають `ctx.jobId` (ідентифікатор вихідного cron-завдання), щоб хуки plugin могли привʼязувати метрики, побічні ефекти або стан до конкретного запланованого завдання.
`agent_end` — це хук спостереження, який виконується у режимі fire-and-forget після ходу. Runner
хуків застосовує тайм-аут у 30 секунд, щоб завислий plugin або embedding-
endpoint не могли залишити promise хука назавжди в очікуванні. Тайм-аут логуються, і
OpenClaw продовжує роботу; це не скасовує мережеву роботу plugin,
якщо plugin також не використовує власний сигнал abort.
`agent_end` є хуком спостереження й виконується за принципом fire-and-forget після ходу. Виконавець хуків застосовує таймаут 30 секунд, щоб завислий plugin або endpoint embedding не залишив promise хуку в очікуванні назавжди. Таймаут записується в журнал, і OpenClaw продовжує роботу; він не скасовує мережеву роботу, що належить plugin, якщо plugin також не використовує власний сигнал abort.
Використовуйте `model_call_started` і `model_call_ended` для телеметрії викликів провайдера,
яка не повинна отримувати сирі prompt, історію, відповіді, заголовки, тіла
запитів або request ID провайдера. Ці хуки містять стабільні метадані, такі як
`runId`, `callId`, `provider`, `model`, необов’язкові `api`/`transport`,
фінальні `durationMs`/`outcome` і `upstreamRequestIdHash`, коли OpenClaw може отримати
обмежений хеш request-id провайдера.
Використовуйте `model_call_started` і `model_call_ended` для телеметрії викликів provider, яка не повинна отримувати сирі prompts, історію, відповіді, headers, тіла запитів або ідентифікатори запитів provider. Ці хуки містять стабільні метадані, як-от `runId`, `callId`, `provider`, `model`, необовʼязкові `api`/`transport`, кінцеві `durationMs`/`outcome` і `upstreamRequestIdHash`, коли OpenClaw може вивести обмежений хеш request-id provider.
`before_agent_finalize` виконується лише тоді, коли harness збирається прийняти природну
фінальну відповідь асистента. Це не шлях скасування `/stop`, і він не виконується,
коли користувач перериває хід. Поверніть `{ action: "revise", reason }`, щоб
попросити harness зробити ще один прохід моделі перед фіналізацією, `{ action:
"finalize", reason? }`, щоб примусово фіналізувати, або не повертайте результат,
щоб продовжити. Вбудовані в Codex хуки `Stop` передаються в цей хук як рішення OpenClaw
`before_agent_finalize`.
`before_agent_finalize` виконується лише тоді, коли harness збирається прийняти природну фінальну відповідь асистента. Це не шлях скасування `/stop`, і він не виконується, коли користувач перериває хід. Поверніть `{ action: "revise", reason }`, щоб попросити harness виконати ще один прохід моделі перед фіналізацією, `{ action:
"finalize", reason? }`, щоб примусово фіналізувати, або не повертайте результат, щоб продовжити. Нативні хуки Codex `Stop` передаються в цей хук як рішення OpenClaw `before_agent_finalize`.
Невбудовані plugin, яким потрібні `llm_input`, `llm_output`,
`before_agent_finalize` або `agent_end`, мають задати:
Невбудовані plugins, яким потрібні `llm_input`, `llm_output`, `before_agent_finalize` або `agent_end`, мають установити:
```json
{
@ -245,100 +206,94 @@ OpenClaw продовжує роботу; це не скасовує мереж
}
```
Хуки, що змінюють prompt, і стійкі ін’єкції наступного ходу можна вимкнути для кожного plugin
через `plugins.entries.<id>.hooks.allowPromptInjection=false`.
Хуки, що змінюють prompt, і довговічні інʼєкції наступного ходу можна вимкнути для окремого plugin за допомогою `plugins.entries.<id>.hooks.allowPromptInjection=false`.
### Розширення сесії та інєкції наступного ходу
### Розширення сесії та інʼєкції наступного ходу
Plugin для workflow можуть зберігати невеликий JSON-сумісний стан сесії за допомогою
`api.registerSessionExtension(...)` і оновлювати його через метод Gateway
`sessions.pluginPatch`. Рядки сесій проєктують стан зареєстрованого розширення через
`pluginExtensions`, даючи змогу Control UI та іншим клієнтам відображати
стан, що належить plugin, без знання внутрішньої логіки plugin.
Workflow plugins можуть зберігати невеликий JSON-сумісний стан сесії за допомогою `api.registerSessionExtension(...)` і оновлювати його через метод Gateway `sessions.pluginPatch`. Рядки сесії проєктують зареєстрований стан розширення через `pluginExtensions`, даючи Control UI та іншим клієнтам змогу рендерити статус, що належить plugin, без знання внутрішньої реалізації plugin.
Використовуйте `api.enqueueNextTurnInjection(...)`, коли plugin має передати стійкий контекст
до наступного ходу моделі рівно один раз. OpenClaw вилучає поставлені в чергу ін’єкції перед
хуками prompt, відкидає прострочені ін’єкції та усуває дублікати за `idempotencyKey`
для кожного plugin. Це правильна точка розширення для відновлення після схвалень, підсумків політик,
дельт фонових моніторів і продовжень команд, які мають бути видимі
моделі на наступному ході, але не повинні ставати постійним текстом системного prompt.
Використовуйте `api.enqueueNextTurnInjection(...)`, коли plugin потрібен довговічний контекст, який має потрапити до наступного ходу моделі рівно один раз. OpenClaw вибирає поставлені в чергу інʼєкції перед хуками prompt, відкидає прострочені інʼєкції та дедуплікує за `idempotencyKey` для кожного plugin. Це правильний шов для відновлень після схвалення, підсумків політик, дельт фонових моніторів і продовжень команд, які мають бути видимі моделі на наступному ході, але не повинні ставати постійним текстом system prompt.
Семантика очищення є частиною контракту. Зворотні виклики очищення розширень сесії та очищення життєвого циклу runtime отримують `reset`, `delete`, `disable` або
`restart`. Хост видаляє стан постійного розширення сесії та очікувані ін’єкції наступного ходу,
що належать plugin, для `reset`/`delete`/`disable`; `restart` зберігає стійкий стан сесії, тоді як зворотні виклики очищення дають plugin змогу звільнити завдання планувальника,
контекст запуску та інші зовнішні ресурси старого покоління runtime.
Семантика очищення є частиною контракту. Очищення розширень сесії та callbacks очищення життєвого циклу runtime отримують `reset`, `delete`, `disable` або `restart`. Хост видаляє постійний стан розширення сесії plugin-власника та очікувані інʼєкції наступного ходу для reset/delete/disable; restart зберігає довговічний стан сесії, тоді як callbacks очищення дають plugins змогу звільняти завдання scheduler, контекст запуску та інші позасмугові ресурси для старого покоління runtime.
## Хуки повідомлень
Використовуйте хуки повідомлень для маршрутизації на рівні каналу та політики доставки:
- `message_received`: спостерігати вхідний вміст, відправника, `threadId`, `messageId`,
`senderId`, необов’язкову кореляцію запуску/сесії та метадані.
- `message_sending`: переписати `content` або повернути `{ cancel: true }`.
- `message_sent`: спостерігати фінальний успіх або невдачу.
- `message_received`: спостерігає вхідний вміст, відправника, `threadId`, `messageId`, `senderId`, необовʼязкову кореляцію запуску/сесії та метадані.
- `message_sending`: переписує `content` або повертає `{ cancel: true }`.
- `message_sent`: спостерігає фінальний успіх або невдачу.
Для TTS-відповідей лише з аудіо `content` може містити прихований озвучений транскрипт,
навіть якщо payload каналу не має видимого тексту/підпису. Переписування цього
`content` оновлює лише транскрипт, видимий хуку; він не відображається як
підпис медіа.
Для audio-only TTS-відповідей `content` може містити прихований озвучений transcript, навіть коли payload каналу не має видимого тексту/caption. Переписування цього `content` оновлює лише transcript, видимий хукам; він не рендериться як media caption.
Контексти хуків повідомлень надають стабільні поля кореляції, коли вони доступні:
`ctx.sessionKey`, `ctx.runId`, `ctx.messageId`, `ctx.senderId`, `ctx.trace`,
`ctx.traceId`, `ctx.spanId`, `ctx.parentSpanId` і `ctx.callDepth`. Віддавайте перевагу
цим полям першого класу, перш ніж читати застарілі метадані.
`ctx.traceId`, `ctx.spanId`, `ctx.parentSpanId` і `ctx.callDepth`. Віддавайте
перевагу цим полям першого класу перед читанням застарілих метаданих.
Віддавайте перевагу типізованим полям `threadId` і `replyToId` перед використанням
метаданих, специфічних для каналу.
Віддавайте перевагу типізованим полям `threadId` і `replyToId` перед
використанням метаданих, специфічних для каналу.
Правила рішень:
Правила ухвалення рішень:
- `message_sending` з `cancel: true` є термінальним.
- `message_sending` з `cancel: false` вважається відсутністю рішення.
- Переписаний `content` передається хукам із нижчим пріоритетом, якщо пізніший хук
не скасує доставку.
- Переписаний `content` продовжує передаватися хукам нижчого пріоритету, якщо
пізніший хук не скасує доставлення.
## Хуки встановлення
## Установлення хуків
`before_install` виконується після вбудованого сканування встановлень skill і plugin.
Поверніть додаткові результати перевірки або `{ block: true, blockReason }`, щоб зупинити
`before_install` виконується після вбудованого сканування для встановлення Skills і Plugin.
Поверніть додаткові знахідки або `{ block: true, blockReason }`, щоб зупинити
встановлення.
`block: true` є термінальним. `block: false` вважається відсутністю рішення.
## Життєвий цикл Gateway
Використовуйте `gateway_start` для сервісів plugin, яким потрібен стан, що належить Gateway. Контекст
надає `ctx.config`, `ctx.workspaceDir` і `ctx.getCron?.()` для перевірки й оновлення
cron. Використовуйте `gateway_stop` для очищення довготривалих ресурсів.
Використовуйте `gateway_start` для сервісів Plugin, яким потрібен стан, що належить Gateway. Контекст надає `ctx.config`, `ctx.workspaceDir` і `ctx.getCron?.()` для
перевірки та оновлення Cron. Використовуйте `gateway_stop`, щоб очищати довготривалі
ресурси.
Не покладайтеся на внутрішній хук `gateway:startup` для runtime-сервісів, що належать plugin.
Не покладайтеся на внутрішній хук `gateway:startup` для runtime-сервісів, що належать Plugin.
`cron_changed` спрацьовує для подій життєвого циклу Cron, що належать Gateway, з типізованим
payload події, який охоплює причини `added`, `updated`, `removed`, `started`, `finished`
і `scheduled`. Подія містить знімок `PluginHookGatewayCronJob`
(зокрема `state.nextRunAtMs`, `state.lastRunStatus` і
`state.lastError`, коли наявні), а також `PluginHookGatewayCronDeliveryStatus`
зі значеннями `not-requested` | `delivered` | `not-delivered` | `unknown`. Події видалення
все одно містять знімок видаленого завдання, щоб зовнішні планувальники могли
узгодити стан. Використовуйте `ctx.getCron?.()` і `ctx.config` із runtime-контексту
під час синхронізації зовнішніх планувальників пробудження та залишайте OpenClaw
джерелом істини для перевірок настання строку й виконання.
## Майбутні застарівання
Кілька поверхонь, суміжних із хуками, є застарілими, але все ще підтримуються. Перейдіть
на нові варіанти до наступного мажорного релізу:
Кілька поверхонь, суміжних із хуками, застаріли, але все ще підтримуються. Перейдіть
на нові підходи до наступного мажорного випуску:
- **Конверти каналів у відкритому тексті** в обробниках `inbound_claim` і `message_received`.
- **Plaintext channel envelopes** в обробниках `inbound_claim` і `message_received`.
Читайте `BodyForAgent` і структуровані блоки контексту користувача
замість розбору плоского тексту конверта. Див.
[Конверти каналів у відкритому тексті → BodyForAgent](/uk/plugins/sdk-migration#active-deprecations).
- **`before_agent_start`** залишається для сумісності. Нові plugin повинні використовувати
замість розбору плоского тексту envelope. Див.
[Plaintext channel envelopes → BodyForAgent](/uk/plugins/sdk-migration#active-deprecations).
- **`before_agent_start`** лишається для сумісності. Нові Plugin мають використовувати
`before_model_resolve` і `before_prompt_build` замість об’єднаної
фази.
- **`onResolution` у `before_tool_call`** тепер використовує типізоване
об’єднання `PluginApprovalResolution` (`allow-once` / `allow-always` / `deny` /
- **`onResolution` у `before_tool_call`** тепер використовує типізований
union `PluginApprovalResolution` (`allow-once` / `allow-always` / `deny` /
`timeout` / `cancelled`) замість довільного `string`.
Повний список — реєстрація можливостей пам’яті, профіль thinking провайдера,
зовнішні провайдери автентифікації, типи виявлення провайдера, runtime-аксесори завдань
і перейменування `command-auth``command-status` — див. у
Повний список — реєстрація memory capability, профіль мислення провайдера,
зовнішні провайдери автентифікації, типи виявлення провайдерів, accessors runtime завдань
і перейменування `command-auth``command-status` — див.
[Міграція Plugin SDK → Активні застарівання](/uk/plugins/sdk-migration#active-deprecations).
## Пов’язане
- [Міграція Plugin SDK](/uk/plugins/sdk-migration) — активні застарівання та часові рамки видалення
- [Створення plugin](/uk/plugins/building-plugins)
- [Міграція Plugin SDK](/uk/plugins/sdk-migration) — активні застарівання та графік видалення
- [Створення Plugin](/uk/plugins/building-plugins)
- [Огляд Plugin SDK](/uk/plugins/sdk-overview)
- [Точки входу Plugin](/uk/plugins/sdk-entrypoints)
- [Внутрішні хуки](/uk/automation/hooks)
- [Внутрішня архітектура plugin](/uk/plugins/architecture-internals)
- [Внутрішня архітектура Plugin](/uk/plugins/architecture-internals)

View File

@ -4,25 +4,25 @@ read_when:
- Вам потрібен довідник усіх методів реєстрації в OpenClawPluginApi
- Ви шукаєте конкретний експорт SDK
sidebarTitle: SDK overview
summary: Карта імпорту, довідник API реєстрації та архітектура SDK
summary: Карта імпортів, довідник API реєстрації та архітектура SDK
title: Огляд Plugin SDK
x-i18n:
generated_at: "2026-04-28T11:20:02Z"
generated_at: "2026-04-28T12:00:02Z"
model: gpt-5.5
provider: openai
source_hash: c45d0ef57427b89a51b872b54b2c3ef2674c27d22d7e7744809ed35d1b1d02af
source_hash: 0c3bd7ae2ca2fbf351442bfd073450b72368e1ab833dbbdccfbe569db5346ce9
source_path: plugins/sdk-overview.md
workflow: 16
---
SDK плагінів є типізованим контрактом між плагінами та ядром. Ця сторінка є
довідником щодо **того, що імпортувати** і **що можна реєструвати**.
довідником про **що імпортувати** та **що можна реєструвати**.
<Tip>
Шукаєте натомість практичний посібник? Почніть із [створення плагінів](/uk/plugins/building-plugins), використовуйте [плагіни каналів](/uk/plugins/sdk-channel-plugins) для плагінів каналів, [плагіни провайдерів](/uk/plugins/sdk-provider-plugins) для плагінів провайдерів і [хуки Plugin](/uk/plugins/hooks) для плагінів інструментів або хуків життєвого циклу.
Шукаєте натомість практичний посібник? Почніть із [Створення плагінів](/uk/plugins/building-plugins), використовуйте [Плагіни каналів](/uk/plugins/sdk-channel-plugins) для плагінів каналів, [Плагіни провайдерів](/uk/plugins/sdk-provider-plugins) для плагінів провайдерів і [Хуки Plugin](/uk/plugins/hooks) для плагінів інструментів або хуків життєвого циклу.
</Tip>
## Угода імпорту
## Угода щодо імпорту
Завжди імпортуйте з конкретного підшляху:
@ -33,157 +33,157 @@ import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core";
Кожен підшлях є невеликим самодостатнім модулем. Це зберігає швидкий запуск і
запобігає проблемам із циклічними залежностями. Для специфічних для каналу помічників входу/збирання
надавайте перевагу `openclaw/plugin-sdk/channel-core`; залишайте `openclaw/plugin-sdk/core` для
ширшої парасолькової поверхні та спільних помічників, як-от
віддавайте перевагу `openclaw/plugin-sdk/channel-core`; залишайте `openclaw/plugin-sdk/core` для
ширшої загальної поверхні та спільних помічників, як-от
`buildChannelConfigSchema`.
Для конфігурації каналу публікуйте JSON Schema, якою володіє канал, через
`openclaw.plugin.json#channelConfigs`. Підшлях `plugin-sdk/channel-config-schema`
призначений для спільних примітивів схем і загального конструктора. Вбудовані
призначений для спільних примітивів схем і універсального збирача. Вбудовані
плагіни OpenClaw використовують `plugin-sdk/bundled-channel-config-schema` для збережених
схем вбудованих каналів. Застарілі експорти сумісності залишаються в
`plugin-sdk/channel-config-schema-legacy`; жоден підшлях вбудованих схем не є
`plugin-sdk/channel-config-schema-legacy`; жоден із підшляхів вбудованих схем не є
шаблоном для нових плагінів.
<Warning>
Не імпортуйте брендовані провайдером або каналом зручні шви (наприклад
Не імпортуйте провайдеро- або канально-брендовані зручні шви (наприклад
`openclaw/plugin-sdk/slack`, `.../discord`, `.../signal`, `.../whatsapp`).
Вбудовані плагіни компонують загальні підшляхи SDK усередині власних барелів `api.ts` /
Вбудовані плагіни компонують універсальні підшляхи SDK усередині власних барелів `api.ts` /
`runtime-api.ts`; споживачі ядра мають або використовувати ці локальні для плагіна
барели, або додати вузький загальний контракт SDK, коли потреба справді є
барели, або додати вузький універсальний контракт SDK, коли потреба справді є
міжканальною.
Невеликий набір допоміжних швів для вбудованих плагінів усе ще з'являється у згенерованій карті
експортів, коли вони мають відстежене використання власником. Вони існують лише для
супроводу вбудованих плагінів і не рекомендовані як шляхи імпорту для нових сторонніх
Невеликий набір допоміжних швів для вбудованих плагінів усе ще з’являється в згенерованій мапі експортів,
коли для них відстежено використання власником. Вони існують лише для супроводу вбудованих плагінів
і не рекомендовані як шляхи імпорту для нових сторонніх
плагінів.
</Warning>
## Довідник підшляхів
SDK плагінів надається як набір вузьких підшляхів, згрупованих за областями (вхід
плагіна, канал, провайдер, автентифікація, середовище виконання, можливість, пам'ять і зарезервовані
помічники вбудованих плагінів). Повний каталог, згрупований і з посиланнями, див.
у [підшляхах SDK Plugin](/uk/plugins/sdk-subpaths).
SDK плагінів експонується як набір вузьких підшляхів, згрупованих за областями (вхід
плагіна, канал, провайдер, автентифікація, runtime, можливість, пам’ять і зарезервовані
помічники вбудованих плагінів). Повний каталог — згрупований і з посиланнями — див.
[Підшляхи Plugin SDK](/uk/plugins/sdk-subpaths).
Згенерований список із понад 200 підшляхів міститься в `scripts/lib/plugin-sdk-entrypoints.json`.
## API реєстрації
Зворотний виклик `register(api)` отримує об'єкт `OpenClawPluginApi` з такими
Колбек `register(api)` отримує обєкт `OpenClawPluginApi` з такими
методами:
### Реєстрація можливостей
| Метод | Що він реєструє |
| Метод | Що він реєструє |
| ------------------------------------------------ | ------------------------------------- |
| `api.registerProvider(...)` | Текстове виведення (LLM) |
| `api.registerProvider(...)` | Текстове виведення (LLM) |
| `api.registerAgentHarness(...)` | Експериментальний низькорівневий виконавець агента |
| `api.registerCliBackend(...)` | Локальний бекенд виведення CLI |
| `api.registerChannel(...)` | Канал обміну повідомленнями |
| `api.registerSpeechProvider(...)` | Синтез тексту в мовлення / STT |
| `api.registerCliBackend(...)` | Локальний CLI-бекенд виведення |
| `api.registerChannel(...)` | Канал обміну повідомленнями |
| `api.registerSpeechProvider(...)` | Text-to-speech / STT-синтез |
| `api.registerRealtimeTranscriptionProvider(...)` | Потокова транскрипція в реальному часі |
| `api.registerRealtimeVoiceProvider(...)` | Дуплексні голосові сеанси в реальному часі |
| `api.registerMediaUnderstandingProvider(...)` | Аналіз зображень/аудіо/відео |
| `api.registerImageGenerationProvider(...)` | Генерація зображень |
| `api.registerMusicGenerationProvider(...)` | Генерація музики |
| `api.registerVideoGenerationProvider(...)` | Генерація відео |
| `api.registerWebFetchProvider(...)` | Провайдер веботримання / скрейпінгу |
| `api.registerWebSearchProvider(...)` | Вебпошук |
| `api.registerRealtimeVoiceProvider(...)` | Дуплексні голосові сесії в реальному часі |
| `api.registerMediaUnderstandingProvider(...)` | Аналіз зображень/аудіо/відео |
| `api.registerImageGenerationProvider(...)` | Генерація зображень |
| `api.registerMusicGenerationProvider(...)` | Генерація музики |
| `api.registerVideoGenerationProvider(...)` | Генерація відео |
| `api.registerWebFetchProvider(...)` | Провайдер веб-отримання / скрейпінгу |
| `api.registerWebSearchProvider(...)` | Вебпошук |
### Інструменти та команди
| Метод | Що він реєструє |
| Метод | Що він реєструє |
| ------------------------------- | --------------------------------------------- |
| `api.registerTool(tool, opts?)` | Інструмент агента (обов'язковий або `{ optional: true }`) |
| `api.registerCommand(def)` | Користувацька команда (обходить LLM) |
| `api.registerTool(tool, opts?)` | Інструмент агента (обовязковий або `{ optional: true }`) |
| `api.registerCommand(def)` | Користувацька команда (оминає LLM) |
Команди плагіна можуть задавати `agentPromptGuidance`, коли агенту потрібна коротка
підказка маршрутизації, що належить команді. Тримайте цей текст про саму команду; не додавайте
специфічну для провайдера чи плагіна політику до конструкторів промптів ядра.
Команди плагінів можуть задавати `agentPromptGuidance`, коли агенту потрібна коротка,
керована командою підказка маршрутизації. Тримайте цей текст про саму команду; не додавайте
політику, специфічну для провайдера або плагіна, до збирачів промптів ядра.
### Інфраструктура
| Метод | Що він реєструє |
| Метод | Що він реєструє |
| ---------------------------------------------- | --------------------------------------- |
| `api.registerHook(events, handler, opts?)` | Хук події |
| `api.registerHttpRoute(params)` | HTTP-ендпоїнт Gateway |
| `api.registerGatewayMethod(name, handler)` | RPC-метод Gateway |
| `api.registerGatewayDiscoveryService(service)` | Оголошувач локального виявлення Gateway |
| `api.registerCli(registrar, opts?)` | Підкоманда CLI |
| `api.registerService(service)` | Фонова служба |
| `api.registerInteractiveHandler(registration)` | Інтерактивний обробник |
| `api.registerAgentToolResultMiddleware(...)` | Проміжне ПЗ результатів інструментів середовища виконання |
| `api.registerMemoryPromptSupplement(builder)` | Адитивний розділ промпта поруч із пам'яттю |
| `api.registerMemoryCorpusSupplement(adapter)` | Адитивний корпус пошуку/читання пам'яті |
| `api.registerHook(events, handler, opts?)` | Хук події |
| `api.registerHttpRoute(params)` | HTTP-ендпойнт Gateway |
| `api.registerGatewayMethod(name, handler)` | RPC-метод Gateway |
| `api.registerGatewayDiscoveryService(service)` | Локальний рекламодавець виявлення Gateway |
| `api.registerCli(registrar, opts?)` | Підкоманда CLI |
| `api.registerService(service)` | Фоновий сервіс |
| `api.registerInteractiveHandler(registration)` | Інтерактивний обробник |
| `api.registerAgentToolResultMiddleware(...)` | Runtime middleware результатів інструментів |
| `api.registerMemoryPromptSupplement(builder)` | Додатковий суміжний із пам’яттю розділ промпта |
| `api.registerMemoryCorpusSupplement(adapter)` | Додатковий корпус пошуку/читання пам’яті |
### Хост-хуки для плагінів робочих процесів
### Хостові хуки для плагінів workflow
Хост-хуки є швами SDK для плагінів, яким потрібно брати участь у життєвому циклі
хоста, а не лише додавати провайдера, канал або інструмент. Вони є
загальними контрактами; Plan Mode може їх використовувати, але так само можуть робочі процеси затвердження,
шлюзи політик робочого простору, фонові монітори, майстри налаштування й супутні UI
плагіни.
Хостові хуки — це шви SDK для плагінів, яким потрібно брати участь у життєвому циклі хоста,
а не лише додавати провайдера, канал або інструмент. Це
універсальні контракти; Plan Mode може їх використовувати, але так само можуть workflow затвердження,
гейти політик робочого простору, фонові монітори, майстри налаштування та супровідні UI-плагіни.
| Метод | Контракт, яким він володіє |
| Метод | Контракт, яким він володіє |
| ------------------------------------------------------------------------ | --------------------------------------------------------------------------------- |
| `api.registerSessionExtension(...)` | Належний плагіну JSON-сумісний стан сеансу, проєктований через сеанси Gateway |
| `api.enqueueNextTurnInjection(...)` | Довговічний контекст рівно-один-раз, введений у наступний хід агента для одного сеансу |
| `api.registerTrustedToolPolicy(...)` | Політика інструментів до плагінів для вбудованих/довірених, яка може блокувати або переписувати параметри інструментів |
| `api.registerToolMetadata(...)` | Метадані відображення каталогу інструментів без зміни реалізації інструмента |
| `api.registerCommand(...)` | Команди з областю дії плагіна; результати команд можуть задавати `continueAgent: true` |
| `api.registerControlUiDescriptor(...)` | Дескриптори внеску Control UI для поверхонь сеансу, інструмента, запуску або налаштувань |
| `api.registerRuntimeLifecycle(...)` | Зворотні виклики очищення для належних плагіну ресурсів середовища виконання на шляхах скидання/видалення/перезавантаження |
| `api.registerAgentEventSubscription(...)` | Санітизовані підписки на події для стану робочого процесу та моніторів |
| `api.setRunContext(...)` / `getRunContext(...)` / `clearRunContext(...)` | Тимчасовий стан плагіна на запуск, очищений під час термінального життєвого циклу запуску |
| `api.registerSessionSchedulerJob(...)` | Належні плагіну записи завдань планувальника сеансів із детермінованим очищенням |
| `api.registerSessionExtension(...)` | Стан сесії, яким володіє плагін і який сумісний із JSON, проєктований через сесії Gateway |
| `api.enqueueNextTurnInjection(...)` | Стійкий контекст exactly-once, вставлений у наступний хід агента для однієї сесії |
| `api.registerTrustedToolPolicy(...)` | Вбудована/довірена політика інструментів до плагінів, що може блокувати або переписувати параметри інструмента |
| `api.registerToolMetadata(...)` | Метадані відображення каталогу інструментів без зміни реалізації інструмента |
| `api.registerCommand(...)` | Обмежені за областю команди плагіна; результати команди можуть задавати `continueAgent: true` |
| `api.registerControlUiDescriptor(...)` | Дескриптори внесків Control UI для поверхонь сесії, інструмента, запуску або налаштувань |
| `api.registerRuntimeLifecycle(...)` | Колбеки очищення для runtime-ресурсів, якими володіє плагін, на шляхах reset/delete/reload |
| `api.registerAgentEventSubscription(...)` | Санітизовані підписки на події для стану workflow і моніторів |
| `api.setRunContext(...)` / `getRunContext(...)` / `clearRunContext(...)` | Чернетковий стан плагіна на один запуск, очищений у кінцевому життєвому циклі запуску |
| `api.registerSessionSchedulerJob(...)` | Записи завдань планувальника сесій, якими володіє плагін, із детермінованим очищенням |
Контракти навмисно розділяють повноваження:
- Зовнішні плагіни можуть володіти розширеннями сеансу, UI-дескрипторами, командами, метаданими інструментів, ін'єкціями наступного ходу та звичайними хуками.
- Довірені політики інструментів виконуються перед звичайними хуками `before_tool_call` і доступні лише вбудованим плагінам, оскільки вони беруть участь у політиці безпеки хоста.
- Зарезервоване володіння командами доступне лише вбудованим плагінам. Зовнішні плагіни мають використовувати власні назви команд або псевдоніми.
- Зовнішні плагіни можуть володіти розширеннями сесій, UI-дескрипторами, командами, метаданими інструментів, ін’єкціями наступного ходу та звичайними хуками.
- Довірені політики інструментів виконуються перед звичайними хуками `before_tool_call` і є лише вбудованими, бо беруть участь у політиці безпеки хоста.
- Зарезервоване володіння командами є лише вбудованим. Зовнішні плагіни мають використовувати
власні назви команд або псевдоніми.
- `allowPromptInjection=false` вимикає хуки, що змінюють промпт, зокрема
`agent_turn_prepare`, `before_prompt_build`, `heartbeat_prompt_contribution`,
поля промпта зі спадкового `before_agent_start` та
поля промпта зі спадкового `before_agent_start` і
`enqueueNextTurnInjection`.
Приклади споживачів поза Plan:
Приклади споживачів, що не належать до Plan:
| Архетип Plugin | Використані хуки |
| ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- |
| Робочий процес затвердження | Розширення сеансу, продовження команди, ін'єкція наступного ходу, UI-дескриптор |
| Шлюз політики бюджету/робочого простору | Довірена політика інструментів, метадані інструментів, проєкція сеансу |
| Фоновий монітор життєвого циклу | Очищення життєвого циклу середовища виконання, підписка на події агента, володіння/очищення планувальника сеансів, внесок промпта Heartbeat, UI-дескриптор |
| Майстер налаштування або онбордингу | Розширення сеансу, команди з областю дії, дескриптор Control UI |
| Архетип плагіна | Використані хуки |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| Workflow затвердження | Розширення сесії, продовження команди, ін’єкція наступного ходу, UI-дескриптор |
| Гейт політики бюджету/робочого простору | Довірена політика інструментів, метадані інструментів, проєкція сесії |
| Фоновий монітор життєвого циклу | Очищення життєвого циклу runtime, підписка на події агента, володіння/очищення планувальника сесій, внесок до промпта Heartbeat, UI-дескриптор |
| Майстер налаштування або онбордингу | Розширення сесії, обмежені за областю команди, дескриптор Control UI |
<Note>
Зарезервовані простори назв адміністрування ядра (`config.*`, `exec.approvals.*`, `wizard.*`,
Зарезервовані простори імен адміністратора ядра (`config.*`, `exec.approvals.*`, `wizard.*`,
`update.*`) завжди залишаються `operator.admin`, навіть якщо плагін намагається призначити
вужчу область дії методу Gateway. Надавайте перевагу специфічним для плагіна префіксам для
вужчу область методу gateway. Віддавайте перевагу специфічним для плагіна префіксам для
методів, якими володіє плагін.
</Note>
<Accordion title="Коли використовувати проміжне ПЗ результатів інструментів">
<Accordion title="Коли використовувати middleware результатів інструментів">
Вбудовані плагіни можуть використовувати `api.registerAgentToolResultMiddleware(...)`, коли
їм потрібно переписати результат інструмента після виконання і до того, як середовище виконання
передасть цей результат назад у модель. Це довірений нейтральний до середовища виконання
їм потрібно переписати результат інструмента після виконання й до того, як runtime
передасть цей результат назад у модель. Це довірений runtime-нейтральний
шов для асинхронних редукторів виводу, таких як tokenjuice.
Вбудовані плагіни мають оголошувати `contracts.agentToolResultMiddleware` для кожного
цільового середовища виконання, наприклад `["pi", "codex"]`. Зовнішні плагіни
не можуть реєструвати це проміжне ПЗ; залишайте звичайні хуки плагінів OpenClaw для роботи,
яка не потребує таймінгу результату інструмента перед моделлю. Старий вбудований шлях
реєстрації фабрики розширень лише для Pi видалено.
цільового runtime, наприклад `["pi", "codex"]`. Зовнішні плагіни
не можуть реєструвати це middleware; залишайте звичайні хуки плагінів OpenClaw для роботи,
яка не потребує таймінгу результатів інструментів перед моделлю. Старий лише Pi-вбудований
шлях реєстрації фабрики розширення було видалено.
</Accordion>
### Реєстрація виявлення Gateway
`api.registerGatewayDiscoveryService(...)` дає плагіну змогу оголошувати активний
Gateway у локальному транспорті виявлення, як-от mDNS/Bonjour. OpenClaw викликає
службу під час запуску Gateway, коли локальне виявлення ввімкнено, передає
поточні порти Gateway і несекретні TXT-підказки, а також викликає повернений
обробник `stop` під час завершення роботи Gateway.
`api.registerGatewayDiscoveryService(...)` дає змогу плагіну рекламувати активний
Gateway у локальному транспорті виявлення, такому як mDNS/Bonjour. OpenClaw викликає
сервіс під час запуску Gateway, коли локальне виявлення ввімкнено, передає
поточні порти Gateway і несекретні дані підказок TXT, а також викликає повернений
обробник `stop` під час вимкнення Gateway.
```typescript
api.registerGatewayDiscoveryService({
@ -199,21 +199,21 @@ api.registerGatewayDiscoveryService({
});
```
Плагіни виявлення Gateway не повинні вважати оголошені TXT-значення секретами або
автентифікацією. Виявлення є підказкою маршрутизації; автентифікація Gateway і закріплення TLS усе ще
відповідають за довіру.
Плагіни виявлення Gateway не повинні трактувати рекламовані значення TXT як секрети або
автентифікацію. Виявлення є підказкою маршрутизації; довірою все ще володіють
автентифікація Gateway і TLS pinning.
### Метадані реєстрації CLI
`api.registerCli(registrar, opts?)` приймає два види метаданих верхнього рівня:
- `commands`: явні корені команд, якими володіє реєстратор
- `descriptors`: дескриптори команд часу розбору, які використовуються для кореневої довідки CLI,
маршрутизації та ледачої реєстрації CLI плагіна
- `commands`: явні корені команд, якими володіє registrar
- `descriptors`: дескриптори команд часу парсингу, що використовуються для кореневої довідки CLI,
маршрутизації та лінивої реєстрації CLI плагіна
Якщо ви хочете, щоб команда Plugin залишалася ліниво завантажуваною у звичайному кореневому шляху CLI,
надайте `descriptors`, які покривають кожен кореневий елемент команди верхнього рівня, відкритий цим
реєстратором.
Якщо ви хочете, щоб команда Plugin залишалася lazy-loaded у звичайному кореневому шляху CLI,
надайте `descriptors`, які охоплюють кожен кореневий top-level command, що його відкриває цей
реєстратор.
```typescript
api.registerCli(
@ -233,97 +233,97 @@ api.registerCli(
);
```
Використовуйте `commands` окремо лише тоді, коли вам не потрібна лінива коренева реєстрація CLI.
Цей енергійний шлях сумісності й надалі підтримується, але він не встановлює
заповнювачі на основі дескрипторів для лінивого завантаження під час розбору.
Використовуйте лише `commands` тільки тоді, коли вам не потрібна lazy root CLI registration.
Цей eager compatibility path залишається підтримуваним, але він не встановлює
descriptor-backed placeholders для lazy loading під час parsing.
### Реєстрація бекенда CLI
### Реєстрація бекенду CLI
`api.registerCliBackend(...)` дає змогу Plugin володіти конфігурацією за замовчуванням для локального
бекенда AI CLI, такого як `codex-cli`.
`api.registerCliBackend(...)` дає змогу Plugin володіти типовою конфігурацією для локального
AI CLI backend, такого як `codex-cli`.
- `id` бекенда стає префіксом провайдера в посиланнях на моделі на кшталт `codex-cli/gpt-5`.
- `config` бекенда використовує ту саму форму, що й `agents.defaults.cliBackends.<id>`.
- Конфігурація користувача все одно має пріоритет. OpenClaw об’єднує `agents.defaults.cliBackends.<id>` поверх
стандартного значення Plugin перед запуском CLI.
- Використовуйте `normalizeConfig`, коли бекенду потрібні переписування сумісності після об’єднання
(наприклад, нормалізація старих форм прапорців).
- Backend `id` стає provider prefix у model refs на кшталт `codex-cli/gpt-5`.
- Backend `config` використовує ту саму форму, що й `agents.defaults.cliBackends.<id>`.
- Конфігурація користувача все одно має пріоритет. OpenClaw зливає `agents.defaults.cliBackends.<id>` поверх
типового значення Plugin перед запуском CLI.
- Використовуйте `normalizeConfig`, коли backend потребує compatibility rewrites після merge
(наприклад, нормалізації старих форм прапорців).
### Ексклюзивні слоти
| Метод | Що він реєструє |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `api.registerContextEngine(id, factory)` | Рушій контексту (один активний за раз). Зворотний виклик `assemble()` отримує `availableTools` і `citationsMode`, щоб рушій міг адаптувати доповнення підказки. |
| `api.registerMemoryCapability(capability)` | Уніфікована можливість пам’яті |
| `api.registerMemoryPromptSection(builder)` | Побудовник розділу підказки пам’яті |
| `api.registerMemoryFlushPlan(resolver)` | Резолвер плану скидання пам’яті |
| `api.registerMemoryRuntime(runtime)` | Адаптер середовища виконання пам’яті |
| Метод | Що він реєструє |
| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `api.registerContextEngine(id, factory)` | Context engine (один активний одночасно). Callback `assemble()` отримує `availableTools` і `citationsMode`, щоб engine міг адаптувати доповнення до prompt. |
| `api.registerMemoryCapability(capability)` | Уніфікована можливість пам’яті |
| `api.registerMemoryPromptSection(builder)` | Builder секції prompt пам’яті |
| `api.registerMemoryFlushPlan(resolver)` | Resolver плану flush пам’яті |
| `api.registerMemoryRuntime(runtime)` | Runtime adapter пам’яті |
### Адаптери вбудовувань пам’яті
### Адаптери embedding пам’яті
| Метод | Що він реєструє |
| ---------------------------------------------- | -------------------------------------------- |
| `api.registerMemoryEmbeddingProvider(adapter)` | Адаптер вбудовувань пам’яті для активного Plugin |
| Метод | Що він реєструє |
| ---------------------------------------------- | ------------------------------------------------ |
| `api.registerMemoryEmbeddingProvider(adapter)` | Адаптер embedding пам’яті для активного Plugin |
- `registerMemoryCapability` є рекомендованим ексклюзивним API для Plugin пам’яті.
- `registerMemoryCapability` є пріоритетним ексклюзивним API для memory-plugin.
- `registerMemoryCapability` також може відкривати `publicArtifacts.listArtifacts(...)`,
щоб супутні Plugin могли споживати експортовані артефакти пам’яті через
`openclaw/plugin-sdk/memory-host-core` замість звернення до приватної структури
конкретного Plugin пам’яті.
щоб супровідні plugins могли споживати експортовані artifacts пам’яті через
`openclaw/plugin-sdk/memory-host-core` замість доступу до приватної структури конкретного
memory plugin.
- `registerMemoryPromptSection`, `registerMemoryFlushPlan` і
`registerMemoryRuntime` — це сумісні зі спадщиною ексклюзивні API для Plugin пам’яті.
- `MemoryFlushPlan.model` може закріпити хід скидання за точним посиланням
`provider/model`, таким як `ollama/qwen3:8b`, без успадкування активного ланцюга
резервних варіантів.
- `registerMemoryEmbeddingProvider` дає активному Plugin пам’яті змогу зареєструвати один
або кілька ідентифікаторів адаптерів вбудовувань (наприклад, `openai`, `gemini` або власний
ідентифікатор, визначений Plugin).
`registerMemoryRuntime` є legacy-compatible ексклюзивними API для memory-plugin.
- `MemoryFlushPlan.model` може прив’язати flush turn до точного посилання `provider/model`,
такого як `ollama/qwen3:8b`, без успадкування активного fallback chain.
- `registerMemoryEmbeddingProvider` дає активному memory plugin змогу зареєструвати один
або більше id адаптерів embedding (наприклад, `openai`, `gemini` або custom
plugin-defined id).
- Конфігурація користувача, така як `agents.defaults.memorySearch.provider` і
`agents.defaults.memorySearch.fallback`, розв’язується відносно цих зареєстрованих
ідентифікаторів адаптерів.
`agents.defaults.memorySearch.fallback`, resolve проти цих зареєстрованих
id адаптерів.
### Події та життєвий цикл
| Метод | Що він робить |
| -------------------------------------------- | ------------------------------ |
| `api.on(hookName, handler, opts?)` | Типізований хук життєвого циклу |
| `api.onConversationBindingResolved(handler)` | Зворотний виклик прив’язки розмови |
| Метод | Що він робить |
| -------------------------------------------- | -------------------------------- |
| `api.on(hookName, handler, opts?)` | Типізований lifecycle hook |
| `api.onConversationBindingResolved(handler)` | Callback прив’язки розмови |
Див. [Хуки Plugin](/uk/plugins/hooks) для прикладів, поширених назв хуків і семантики захисту.
Див. [хуки Plugin](/uk/plugins/hooks) для прикладів, поширених назв hook і семантики guard.
### Семантика рішень хуків
### Семантика рішень hook
- `before_tool_call`: повернення `{ block: true }` є кінцевим. Щойно будь-який обробник встановлює його, обробники з нижчим пріоритетом пропускаються.
- `before_tool_call`: повернення `{ block: false }` трактується як відсутність рішення (так само, як пропуск `block`), а не як перевизначення.
- `before_install`: повернення `{ block: true }` є кінцевим. Щойно будь-який обробник встановлює його, обробники з нижчим пріоритетом пропускаються.
- `before_install`: повернення `{ block: false }` трактується як відсутність рішення (так само, як пропуск `block`), а не як перевизначення.
- `reply_dispatch`: повернення `{ handled: true, ... }` є кінцевим. Щойно будь-який обробник бере відправлення на себе, обробники з нижчим пріоритетом і стандартний шлях відправлення моделі пропускаються.
- `message_sending`: повернення `{ cancel: true }` є кінцевим. Щойно будь-який обробник встановлює його, обробники з нижчим пріоритетом пропускаються.
- `message_sending`: повернення `{ cancel: false }` трактується як відсутність рішення (так само, як пропуск `cancel`), а не як перевизначення.
- `message_received`: використовуйте типізоване поле `threadId`, коли вам потрібна маршрутизація вхідної гілки/теми. Залишайте `metadata` для додаткових даних, специфічних для каналу.
- `message_sending`: використовуйте типізовані поля маршрутизації `replyToId` / `threadId`, перш ніж переходити до специфічних для каналу `metadata`.
- `gateway_start`: використовуйте `ctx.config`, `ctx.workspaceDir` і `ctx.getCron?.()` для стану запуску, яким володіє Gateway, замість покладання на внутрішні хуки `gateway:startup`.
- `before_tool_call`: повернення `{ block: true }` є terminal. Щойно будь-який handler встановлює його, handlers із нижчим пріоритетом пропускаються.
- `before_tool_call`: повернення `{ block: false }` розглядається як відсутність рішення (так само, як omission `block`), а не як override.
- `before_install`: повернення `{ block: true }` є terminal. Щойно будь-який handler встановлює його, handlers із нижчим пріоритетом пропускаються.
- `before_install`: повернення `{ block: false }` розглядається як відсутність рішення (так само, як omission `block`), а не як override.
- `reply_dispatch`: повернення `{ handled: true, ... }` є terminal. Щойно будь-який handler claims dispatch, handlers із нижчим пріоритетом і default model dispatch path пропускаються.
- `message_sending`: повернення `{ cancel: true }` є terminal. Щойно будь-який handler встановлює його, handlers із нижчим пріоритетом пропускаються.
- `message_sending`: повернення `{ cancel: false }` розглядається як відсутність рішення (так само, як omission `cancel`), а не як override.
- `message_received`: використовуйте типізоване поле `threadId`, коли вам потрібна маршрутизація вхідного thread/topic. Залишайте `metadata` для channel-specific extras.
- `message_sending`: використовуйте типізовані поля маршрутизації `replyToId` / `threadId` перед fallback до channel-specific `metadata`.
- `gateway_start`: використовуйте `ctx.config`, `ctx.workspaceDir` і `ctx.getCron?.()` для startup state, яким володіє Gateway, замість покладання на внутрішні hooks `gateway:startup`.
- `cron_changed`: спостерігайте за змінами життєвого циклу cron, яким володіє Gateway. Використовуйте `event.job?.state?.nextRunAtMs` і `ctx.getCron?.()` під час синхронізації зовнішніх wake schedulers, і залишайте OpenClaw джерелом істини для due checks та виконання.
### Поля об’єкта API
| Поле | Тип | Опис |
| ------------------------ | ------------------------- | -------------------------------------------------------------------------------------------- |
| `api.id` | `string` | Ідентифікатор Plugin |
| `api.name` | `string` | Відображувана назва |
| `api.version` | `string?` | Версія Plugin (необов’язково) |
| `api.description` | `string?` | Опис Plugin (необов’язково) |
| `api.source` | `string` | Шлях до джерела Plugin |
| `api.rootDir` | `string?` | Кореневий каталог Plugin (необов’язково) |
| `api.config` | `OpenClawConfig` | Поточний знімок конфігурації (активний знімок середовища виконання в пам’яті, коли доступний) |
| `api.pluginConfig` | `Record<string, unknown>` | Конфігурація, специфічна для Plugin, з `plugins.entries.<id>.config` |
| `api.runtime` | `PluginRuntime` | [Помічники середовища виконання](/uk/plugins/sdk-runtime) |
| `api.logger` | `PluginLogger` | Логер з областю дії (`debug`, `info`, `warn`, `error`) |
| `api.registrationMode` | `PluginRegistrationMode` | Поточний режим завантаження; `"setup-runtime"` — це легке вікно запуску/налаштування перед повним входом |
| `api.resolvePath(input)` | `(string) => string` | Розв’язує шлях відносно кореня Plugin |
| Поле | Тип | Опис |
| ------------------------ | ------------------------- | ------------------------------------------------------------------------------------------------- |
| `api.id` | `string` | Id Plugin |
| `api.name` | `string` | Відображувана назва |
| `api.version` | `string?` | Версія Plugin (опційно) |
| `api.description` | `string?` | Опис Plugin (опційно) |
| `api.source` | `string` | Шлях джерела Plugin |
| `api.rootDir` | `string?` | Кореневий каталог Plugin (опційно) |
| `api.config` | `OpenClawConfig` | Поточний snapshot конфігурації (активний in-memory runtime snapshot, коли доступний) |
| `api.pluginConfig` | `Record<string, unknown>` | Конфігурація, специфічна для Plugin, з `plugins.entries.<id>.config` |
| `api.runtime` | `PluginRuntime` | [Runtime helpers](/uk/plugins/sdk-runtime) |
| `api.logger` | `PluginLogger` | Scoped logger (`debug`, `info`, `warn`, `error`) |
| `api.registrationMode` | `PluginRegistrationMode` | Поточний режим завантаження; `"setup-runtime"` є lightweight pre-full-entry startup/setup window |
| `api.resolvePath(input)` | `(string) => string` | Resolve path відносно кореня Plugin |
## Внутрішня конвенція модулів
## Внутрішня домовленість щодо модулів
У межах вашого Plugin використовуйте локальні barrel-файли для внутрішніх імпортів:
У межах вашого Plugin використовуйте local barrel files для внутрішніх imports:
```
my-plugin/
@ -335,34 +335,34 @@ my-plugin/
<Warning>
Ніколи не імпортуйте власний Plugin через `openclaw/plugin-sdk/<your-plugin>`
з виробничого коду. Спрямовуйте внутрішні імпорти через `./api.ts` або
`./runtime-api.ts`. Шлях SDK є лише зовнішнім контрактом.
з production code. Спрямовуйте внутрішні imports через `./api.ts` або
`./runtime-api.ts`. Шлях SDK є лише зовнішнім contract.
</Warning>
Публічні поверхні вбудованих Plugin, завантажені через фасад (`api.ts`, `runtime-api.ts`,
`index.ts`, `setup-entry.ts` та подібні публічні вхідні файли), віддають перевагу
активному знімку конфігурації середовища виконання, коли OpenClaw уже запущено. Якщо знімка середовища виконання
ще немає, вони повертаються до розв’язаної конфігурації з файлу на диску.
Фасади запакованих вбудованих Plugin слід завантажувати через завантажувачі фасадів OpenClaw SDK;
прямі імпорти з `dist/extensions/...` оминають поетапні дзеркала залежностей середовища виконання,
які запаковані встановлення використовують для залежностей, що належать Plugin.
Facade-loaded bundled plugin public surfaces (`api.ts`, `runtime-api.ts`,
`index.ts`, `setup-entry.ts` та подібні public entry files) надають перевагу
активному runtime config snapshot, коли OpenClaw уже запущений. Якщо runtime
snapshot ще не існує, вони fallback до resolved config file на диску.
Packaged bundled plugin facades слід завантажувати через facade loaders OpenClaw SDK;
прямі imports з `dist/extensions/...` обходять staged runtime dependency mirrors,
які packaged installs використовують для plugin-owned dependencies.
Provider Plugin можуть відкривати вузький локальний для Plugin контрактний barrel, коли
помічник навмисно специфічний для провайдера й поки не належить до універсального підшляху SDK.
Вбудовані приклади:
Provider plugins можуть відкривати вузький plugin-local contract barrel, коли
helper навмисно provider-specific і ще не належить до generic SDK
subpath. Bundled examples:
- **Anthropic**: публічний шов `api.ts` / `contract-api.ts` для Claude
beta-header і stream-помічників `service_tier`.
- **`@openclaw/openai-provider`**: `api.ts` експортує побудовники провайдера,
помічники моделей за замовчуванням і побудовники провайдера реального часу.
- **`@openclaw/openrouter-provider`**: `api.ts` експортує побудовник провайдера
разом із помічниками онбордингу/конфігурації.
- **Anthropic**: публічний seam `api.ts` / `contract-api.ts` для Claude
beta-header і stream helpers `service_tier`.
- **`@openclaw/openai-provider`**: `api.ts` експортує provider builders,
default-model helpers і realtime provider builders.
- **`@openclaw/openrouter-provider`**: `api.ts` експортує provider builder
плюс onboarding/config helpers.
<Warning>
Виробничий код розширення також має уникати імпортів `openclaw/plugin-sdk/<other-plugin>`.
Якщо помічник справді спільний, підніміть його до нейтрального підшляху SDK,
такого як `openclaw/plugin-sdk/speech`, `.../provider-model-shared` або інша
поверхня, орієнтована на можливості, замість зв’язування двох Plugin між собою.
Production code розширення також має уникати imports `openclaw/plugin-sdk/<other-plugin>`.
Якщо helper справді спільний, підвищте його до нейтрального SDK subpath,
такого як `openclaw/plugin-sdk/speech`, `.../provider-model-shared` або іншої
capability-oriented surface замість coupling двох plugins разом.
</Warning>
## Пов’язане
@ -371,19 +371,19 @@ Provider Plugin можуть відкривати вузький локальн
<Card title="Точки входу" icon="door-open" href="/uk/plugins/sdk-entrypoints">
Параметри `definePluginEntry` і `defineChannelPluginEntry`.
</Card>
<Card title="Помічники середовища виконання" icon="gears" href="/uk/plugins/sdk-runtime">
Повний довідник простору імен `api.runtime`.
<Card title="Runtime helpers" icon="gears" href="/uk/plugins/sdk-runtime">
Повний довідник namespace `api.runtime`.
</Card>
<Card title="Налаштування й конфігурація" icon="sliders" href="/uk/plugins/sdk-setup">
Пакування, маніфести та схеми конфігурації.
<Card title="Налаштування та конфігурація" icon="sliders" href="/uk/plugins/sdk-setup">
Packaging, manifests і config schemas.
</Card>
<Card title="Тестування" icon="vial" href="/uk/plugins/sdk-testing">
Тестові утиліти та правила lint.
Test utilities і lint rules.
</Card>
<Card title="Міграція SDK" icon="arrows-turn-right" href="/uk/plugins/sdk-migration">
Міграція із застарілих поверхонь.
Міграція з deprecated surfaces.
</Card>
<Card title="Внутрішня архітектура Plugin" icon="diagram-project" href="/uk/plugins/architecture">
Поглиблена архітектура та модель можливостей.
Глибока архітектура та capability model.
</Card>
</CardGroup>