chore(i18n): refresh uk translations
This commit is contained in:
parent
310a3bfe5a
commit
9767f56101
@ -1,38 +1,38 @@
|
||||
---
|
||||
read_when:
|
||||
- Вам потрібен надійний резервний варіант, коли постачальники API дають збій
|
||||
- Ви запускаєте Codex CLI або інші локальні CLI зі ШІ та хочете повторно використовувати їх
|
||||
- Ви хочете зрозуміти loopback-міст MCP для доступу до інструментів бекенду CLI
|
||||
summary: 'Бекенди CLI: локальний резервний варіант CLI для ШІ з необов’язковим мостом інструментів MCP'
|
||||
- Вам потрібен надійний резервний варіант на випадок збоїв у постачальників API
|
||||
- Ви запускаєте Codex CLI або інші локальні CLI для ШІ й хочете повторно їх використовувати
|
||||
- Ви хочете зрозуміти петльовий міст MCP для доступу CLI до інструментів бекенду
|
||||
summary: 'Бекенди CLI: локальний резервний CLI для ШІ з необов’язковим мостом інструментів MCP'
|
||||
title: Бекенди CLI
|
||||
x-i18n:
|
||||
generated_at: "2026-05-02T08:25:28Z"
|
||||
generated_at: "2026-05-04T18:18:44Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: f343469d6a42dc6146196355dc2ba3feed045515c3d8446941b90971aadc9a16
|
||||
source_hash: 55534c48c5e226857b9320fd369416583e5c2efc80eabd4746f939afdd027dc1
|
||||
source_path: gateway/cli-backends.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
OpenClaw може запускати **локальні AI CLI** як **текстовий резервний варіант**, коли API-провайдери недоступні,
|
||||
обмежені за лімітом запитів або тимчасово працюють некоректно. Це навмисно консервативний підхід:
|
||||
мають обмеження швидкості або тимчасово працюють некоректно. Це навмисно консервативний підхід:
|
||||
|
||||
- **Інструменти OpenClaw не ін’єктуються напряму**, але бекенди з `bundleMcp: true`
|
||||
- **Інструменти OpenClaw не впроваджуються напряму**, але бекенди з `bundleMcp: true`
|
||||
можуть отримувати інструменти gateway через loopback MCP-міст.
|
||||
- **JSONL-стримінг** для CLI, які його підтримують.
|
||||
- **Сесії підтримуються** (тому подальші ходи залишаються узгодженими).
|
||||
- **JSONL-потокове передавання** для CLI, які це підтримують.
|
||||
- **Сесії підтримуються** (тому наступні звернення залишаються узгодженими).
|
||||
- **Зображення можна передавати наскрізно**, якщо CLI приймає шляхи до зображень.
|
||||
|
||||
Це розроблено як **запобіжний механізм**, а не як основний шлях. Використовуйте його, коли вам
|
||||
потрібні текстові відповіді, що «завжди працюють», без залежності від зовнішніх API.
|
||||
Це задумано як **страхувальна сітка**, а не основний шлях. Використовуйте це, коли вам
|
||||
потрібні текстові відповіді, які «завжди працюють», без залежності від зовнішніх API.
|
||||
|
||||
Якщо вам потрібне повноцінне середовище виконання harness із керуванням сесіями ACP, фоновими завданнями,
|
||||
прив’язкою потоків/розмов і постійними зовнішніми сесіями кодування, натомість використовуйте
|
||||
Якщо вам потрібне повноцінне середовище виконання harness з керуванням сесіями ACP, фоновими завданнями,
|
||||
прив’язуванням потоків/розмов і сталими зовнішніми coding-сесіями, використовуйте
|
||||
[ACP Agents](/uk/tools/acp-agents). CLI-бекенди не є ACP.
|
||||
|
||||
## Простий швидкий старт для початківців
|
||||
## Швидкий старт для початківців
|
||||
|
||||
Ви можете використовувати Codex CLI **без жодної конфігурації** (вбудований OpenAI Plugin
|
||||
Ви можете використовувати Codex CLI **без будь-якої конфігурації** (вбудований OpenAI plugin
|
||||
реєструє стандартний бекенд):
|
||||
|
||||
```bash
|
||||
@ -56,16 +56,16 @@ openclaw agent --message "hi" --model codex-cli/gpt-5.5
|
||||
}
|
||||
```
|
||||
|
||||
Це все. Жодних ключів, жодної додаткової конфігурації автентифікації, окрім самого CLI, не потрібно.
|
||||
Ось і все. Не потрібні ключі чи додаткова конфігурація автентифікації, окрім самої CLI.
|
||||
|
||||
Якщо ви використовуєте вбудований CLI-бекенд як **основного провайдера повідомлень** на
|
||||
gateway-хості, OpenClaw тепер автоматично завантажує вбудований Plugin-власник, коли ваша конфігурація
|
||||
явно посилається на цей бекенд у посиланні на модель або в
|
||||
gateway-хості, OpenClaw тепер автоматично завантажує власницький вбудований plugin, коли ваша конфігурація
|
||||
явно посилається на цей бекенд у model ref або в
|
||||
`agents.defaults.cliBackends`.
|
||||
|
||||
## Використання як резервного варіанта
|
||||
|
||||
Додайте CLI-бекенд до списку резервних варіантів, щоб він запускався лише тоді, коли основні моделі не спрацюють:
|
||||
Додайте CLI-бекенд до свого списку резервних варіантів, щоб він запускався лише тоді, коли основні моделі не спрацьовують:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -86,20 +86,20 @@ gateway-хості, OpenClaw тепер автоматично завантаж
|
||||
|
||||
Примітки:
|
||||
|
||||
- Якщо ви використовуєте `agents.defaults.models` (allowlist), ви також маєте включити туди моделі свого CLI-бекенда.
|
||||
- Якщо основний провайдер не спрацює (автентифікація, ліміти запитів, тайм-аути), OpenClaw
|
||||
спробує CLI-бекенд наступним.
|
||||
- Якщо ви використовуєте `agents.defaults.models` (список дозволених), ви також маєте включити туди моделі свого CLI-бекенда.
|
||||
- Якщо основний провайдер зазнає збою (автентифікація, обмеження швидкості, тайм-аути), OpenClaw
|
||||
далі спробує CLI-бекенд.
|
||||
|
||||
## Огляд конфігурації
|
||||
|
||||
Усі CLI-бекенди розташовані в:
|
||||
Усі CLI-бекенди розміщуються в:
|
||||
|
||||
```
|
||||
agents.defaults.cliBackends
|
||||
```
|
||||
|
||||
Кожен запис має ключ у вигляді **ідентифікатора провайдера** (наприклад, `codex-cli`, `my-cli`).
|
||||
Ідентифікатор провайдера стає лівою частиною вашого посилання на модель:
|
||||
Кожен запис має ключ **ідентифікатора провайдера** (наприклад, `codex-cli`, `my-cli`).
|
||||
Ідентифікатор провайдера стає лівою частиною вашого model ref:
|
||||
|
||||
```
|
||||
<provider>/<model>
|
||||
@ -148,45 +148,51 @@ agents.defaults.cliBackends
|
||||
## Як це працює
|
||||
|
||||
1. **Вибирає бекенд** на основі префікса провайдера (`codex-cli/...`).
|
||||
2. **Створює системний промпт** з використанням того самого промпта OpenClaw і контексту workspace.
|
||||
2. **Створює системний prompt** з використанням того самого prompt OpenClaw і контексту робочої області.
|
||||
3. **Виконує CLI** з ідентифікатором сесії (якщо підтримується), щоб історія залишалася узгодженою.
|
||||
Вбудований бекенд `claude-cli` підтримує процес Claude stdio активним для кожної
|
||||
сесії OpenClaw і надсилає подальші ходи через stream-json stdin.
|
||||
Вбудований бекенд `claude-cli` підтримує процес Claude stdio живим для кожної
|
||||
сесії OpenClaw і надсилає наступні звернення через stream-json stdin.
|
||||
4. **Розбирає вивід** (JSON або звичайний текст) і повертає фінальний текст.
|
||||
5. **Зберігає ідентифікатори сесій** для кожного бекенда, щоб подальші ходи повторно використовували ту саму CLI-сесію.
|
||||
5. **Зберігає ідентифікатори сесій** для кожного бекенда, щоб наступні звернення повторно використовували ту саму CLI-сесію.
|
||||
|
||||
<Note>
|
||||
Вбудований бекенд Anthropic `claude-cli` знову підтримується. Співробітники Anthropic
|
||||
Вбудований Anthropic-бекенд `claude-cli` знову підтримується. Співробітники Anthropic
|
||||
повідомили нам, що використання Claude CLI у стилі OpenClaw знову дозволене, тому OpenClaw вважає
|
||||
використання `claude -p` санкціонованим для цієї інтеграції, якщо Anthropic не опублікує
|
||||
нову політику.
|
||||
</Note>
|
||||
|
||||
Вбудований бекенд OpenAI `codex-cli` передає системний промпт OpenClaw через
|
||||
Вбудований OpenAI-бекенд `codex-cli` передає системний prompt OpenClaw через
|
||||
перевизначення конфігурації Codex `model_instructions_file` (`-c
|
||||
model_instructions_file="..."`). Codex не надає прапор у стилі Claude
|
||||
`--append-system-prompt`, тому OpenClaw записує зібраний промпт у
|
||||
model_instructions_file="..."`). Codex не надає Claude-подібний
|
||||
прапорець `--append-system-prompt`, тому OpenClaw записує зібраний prompt у
|
||||
тимчасовий файл для кожної нової сесії Codex CLI.
|
||||
|
||||
Вбудований бекенд Anthropic `claude-cli` отримує знімок Skills OpenClaw
|
||||
двома способами: компактний каталог Skills OpenClaw у доданому системному промпті та
|
||||
тимчасовий Claude Code Plugin, переданий із `--plugin-dir`. Plugin містить
|
||||
лише придатні Skills для цього агента/сесії, тому нативний резолвер Skills Claude Code
|
||||
Вбудований Anthropic-бекенд `claude-cli` отримує знімок Skills OpenClaw
|
||||
двома способами: компактний каталог Skills OpenClaw у доданому системному prompt і
|
||||
тимчасовий Claude Code plugin, переданий через `--plugin-dir`. Plugin містить
|
||||
лише придатні Skills для цього агента/сесії, тому нативний розпізнавач Skills Claude Code
|
||||
бачить той самий відфільтрований набір, який OpenClaw інакше оголосив би в
|
||||
промпті. Перевизначення env/API-ключів Skills OpenClaw все одно застосовує до
|
||||
prompt. Перевизначення env/API-ключів Skills усе ще застосовуються OpenClaw до
|
||||
середовища дочірнього процесу для запуску.
|
||||
|
||||
Claude CLI також має власний неінтерактивний режим дозволів. OpenClaw відображає його
|
||||
на наявну політику виконання замість додавання специфічної для Claude конфігурації: коли
|
||||
ефективна запитана політика виконання є YOLO (`tools.exec.security: "full"` і
|
||||
на наявну політику exec замість додавання конфігурації, специфічної для Claude: коли
|
||||
ефективна запитана політика exec є YOLO (`tools.exec.security: "full"` і
|
||||
`tools.exec.ask: "off"`), OpenClaw додає `--permission-mode bypassPermissions`.
|
||||
Налаштування `agents.list[].tools.exec` для окремого агента перевизначають глобальні `tools.exec` для
|
||||
цього агента. Щоб примусово задати інший режим Claude, встановіть явні сирі аргументи бекенда,
|
||||
наприклад `--permission-mode default` або `--permission-mode acceptEdits` у
|
||||
`agents.defaults.cliBackends.claude-cli.args` і відповідних `resumeArgs`.
|
||||
такі як `--permission-mode default` або `--permission-mode acceptEdits`, у
|
||||
`agents.defaults.cliBackends.claude-cli.args` і відповідні `resumeArgs`.
|
||||
|
||||
Вбудований Anthropic-бекенд `claude-cli` також відображає рівні OpenClaw `/think`
|
||||
на нативний прапорець Claude Code `--effort` для рівнів, відмінних від off. `minimal` і
|
||||
`low` відображаються на `low`, `adaptive` і `medium` відображаються на `medium`, а `high`,
|
||||
`xhigh` і `max` відображаються напряму. Іншим CLI-бекендам потрібен їхній власницький plugin, щоб
|
||||
оголосити еквівалентний argv-мапер, перш ніж `/think` зможе впливати на породжений CLI.
|
||||
|
||||
Перш ніж OpenClaw зможе використовувати вбудований бекенд `claude-cli`, сам Claude Code
|
||||
уже має бути авторизований на тому самому хості:
|
||||
має вже бути автентифікований на тому самому хості:
|
||||
|
||||
```bash
|
||||
claude auth login
|
||||
@ -201,93 +207,94 @@ openclaw models auth login --provider anthropic --method cli --set-default
|
||||
|
||||
- Якщо CLI підтримує сесії, задайте `sessionArg` (наприклад, `--session-id`) або
|
||||
`sessionArgs` (placeholder `{sessionId}`), коли ідентифікатор потрібно вставити
|
||||
в кілька прапорів.
|
||||
- Якщо CLI використовує **підкоманду відновлення** з іншими прапорами, задайте
|
||||
`resumeArgs` (замінює `args` під час відновлення) і за потреби `resumeOutput`
|
||||
(для відновлень не у форматі JSON).
|
||||
в кілька прапорців.
|
||||
- Якщо CLI використовує **підкоманду resume** з іншими прапорцями, задайте
|
||||
`resumeArgs` (замінює `args` під час відновлення) і, за потреби, `resumeOutput`
|
||||
(для не-JSON відновлень).
|
||||
- `sessionMode`:
|
||||
- `always`: завжди надсилати ідентифікатор сесії (новий UUID, якщо збереженого немає).
|
||||
- `always`: завжди надсилати ідентифікатор сесії (новий UUID, якщо нічого не збережено).
|
||||
- `existing`: надсилати ідентифікатор сесії лише якщо його було збережено раніше.
|
||||
- `none`: ніколи не надсилати ідентифікатор сесії.
|
||||
- `claude-cli` за замовчуванням використовує `liveSession: "claude-stdio"`, `output: "jsonl"`,
|
||||
і `input: "stdin"`, щоб подальші ходи повторно використовували активний live-процес Claude.
|
||||
Теплий stdio тепер є стандартом, зокрема для користувацьких конфігурацій,
|
||||
які не вказують транспортні поля. Якщо Gateway перезапускається або idle-процес
|
||||
і `input: "stdin"`, щоб наступні звернення повторно використовували живий процес Claude, поки
|
||||
він активний. Теплий stdio тепер є стандартним, зокрема для користувацьких конфігурацій,
|
||||
які не вказують транспортні поля. Якщо Gateway перезапускається або неактивний процес
|
||||
завершується, OpenClaw відновлюється зі збереженого ідентифікатора сесії Claude. Збережені
|
||||
ідентифікатори сесій перевіряються щодо наявного читабельного project transcript перед
|
||||
ідентифікатори сесій перевіряються щодо наявного читабельного transcript проєкту перед
|
||||
відновленням, тому фантомні прив’язки очищаються з `reason=transcript-missing`
|
||||
замість мовчазного старту нової сесії Claude CLI під `--resume`.
|
||||
- Live-сесії Claude зберігають обмежені захисні ліміти JSONL-виводу. Стандартні значення дозволяють до
|
||||
8 MiB і 20 000 сирих JSONL-рядків на хід. Ходи Claude з великою кількістю інструментів можуть збільшити
|
||||
замість тихого запуску нової сесії Claude CLI з `--resume`.
|
||||
- Живі сесії Claude зберігають обмежені захисні ліміти JSONL-виводу. Стандартні значення дозволяють до
|
||||
8 MiB і 20,000 сирих JSONL-рядків на звернення. Звернення Claude з великою кількістю інструментів можуть підвищити
|
||||
їх для кожного бекенда через
|
||||
`agents.defaults.cliBackends.claude-cli.reliability.outputLimits.maxTurnRawChars`
|
||||
і `maxTurnLines`; OpenClaw обмежує ці налаштування до 64 MiB і 100 000
|
||||
і `maxTurnLines`; OpenClaw обмежує ці налаштування до 64 MiB і 100,000
|
||||
рядків.
|
||||
- Збережені CLI-сесії є безперервністю, якою володіє провайдер. Неявне щоденне скидання сесії
|
||||
- Збережені CLI-сесії є безперервністю, що належить провайдеру. Неявне щоденне скидання сесії
|
||||
їх не перериває; `/reset` і явні політики `session.reset` усе ще
|
||||
діють.
|
||||
це роблять.
|
||||
|
||||
Примітки щодо серіалізації:
|
||||
|
||||
- `serialize: true` зберігає впорядкованість запусків у тому самому lane.
|
||||
- Більшість CLI серіалізуються в одному lane провайдера.
|
||||
- OpenClaw відкидає повторне використання збереженої CLI-сесії, коли змінюється вибрана автентифікаційна ідентичність,
|
||||
зокрема змінений ідентифікатор auth profile, статичний API-ключ, статичний токен або ідентичність OAuth-акаунта,
|
||||
якщо CLI її надає. Ротація OAuth access і refresh token не перериває збережену CLI-сесію. Якщо CLI не надає
|
||||
стабільний ідентифікатор OAuth-акаунта, OpenClaw дозволяє цьому CLI самостійно застосовувати дозволи відновлення.
|
||||
- OpenClaw відкидає повторне використання збереженої CLI-сесії, коли змінюється вибрана auth-ідентичність,
|
||||
зокрема змінений auth profile id, статичний API key, статичний token або ідентичність
|
||||
облікового запису OAuth, якщо CLI її надає. Ротація access і refresh token OAuth
|
||||
не перериває збережену CLI-сесію. Якщо CLI не надає
|
||||
стабільний OAuth account id, OpenClaw дозволяє цій CLI самостійно застосовувати дозволи відновлення.
|
||||
|
||||
## Резервний prelude із сесій claude-cli
|
||||
## Резервна преамбула із сесій claude-cli
|
||||
|
||||
Коли спроба `claude-cli` переходить на резервного кандидата, що не є CLI, у
|
||||
[`agents.defaults.model.fallbacks`](/uk/concepts/model-failover), OpenClaw ініціалізує
|
||||
наступну спробу контекстним prelude, отриманим із локального
|
||||
JSONL-транскрипту Claude Code в `~/.claude/projects/`. Без цього seed резервний
|
||||
провайдер стартував би з порожнього контексту, оскільки власний транскрипт сесії OpenClaw порожній
|
||||
Коли спроба `claude-cli` переходить на не-CLI кандидата в
|
||||
[`agents.defaults.model.fallbacks`](/uk/concepts/model-failover), OpenClaw засіває
|
||||
наступну спробу контекстною преамбулою, отриманою з локального
|
||||
JSONL transcript Claude Code у `~/.claude/projects/`. Без цього seed резервний
|
||||
провайдер стартував би з чистого стану, бо власний session transcript OpenClaw порожній
|
||||
для запусків `claude-cli`.
|
||||
|
||||
- Prelude віддає перевагу найновішому резюме `/compact` або маркеру `compact_boundary`,
|
||||
а потім додає найостанніші ходи після boundary у межах бюджету символів.
|
||||
Ходи до boundary відкидаються, бо резюме вже їх представляє.
|
||||
- Tool blocks згортаються до компактних підказок `(tool call: name)` і
|
||||
`(tool result: …)`, щоб чесно утримувати бюджет промпта. Резюме
|
||||
позначається як `(truncated)`, якщо воно переповнюється.
|
||||
- Резервні переходи з `claude-cli` на `claude-cli` у межах того самого провайдера покладаються на власний
|
||||
`--resume` Claude і пропускають prelude.
|
||||
- Seed повторно використовує наявну валідацію шляху до session-file Claude, тому
|
||||
довільні шляхи не можуть бути прочитані.
|
||||
- Преамбула віддає перевагу найновішому summary `/compact` або маркеру `compact_boundary`,
|
||||
а потім додає найсвіжіші звернення після boundary до бюджету символів.
|
||||
Звернення до boundary відкидаються, бо summary вже їх представляє.
|
||||
- Блоки інструментів об’єднуються в компактні підказки `(tool call: name)` і
|
||||
`(tool result: …)`, щоб зберегти prompt budget реалістичним. Summary позначається
|
||||
`(truncated)`, якщо воно переповнюється.
|
||||
- Резервні переходи same-provider `claude-cli` до `claude-cli` покладаються на власний
|
||||
`--resume` Claude і пропускають преамбулу.
|
||||
- Seed повторно використовує наявну перевірку шляху до session-file Claude, тому
|
||||
довільні шляхи не можна прочитати.
|
||||
|
||||
## Зображення (наскрізне передавання)
|
||||
|
||||
Якщо ваш CLI приймає шляхи до зображень, задайте `imageArg`:
|
||||
Якщо ваша CLI приймає шляхи до зображень, задайте `imageArg`:
|
||||
|
||||
```json5
|
||||
imageArg: "--image",
|
||||
imageMode: "repeat"
|
||||
```
|
||||
|
||||
OpenClaw записуватиме base64-зображення у тимчасові файли. Якщо `imageArg` задано, ці
|
||||
шляхи передаються як аргументи CLI. Якщо `imageArg` відсутній, OpenClaw додає
|
||||
шляхи до файлів у промпт (ін’єкція шляху), чого достатньо для CLI, які автоматично
|
||||
OpenClaw запише base64-зображення у тимчасові файли. Якщо `imageArg` задано, ці
|
||||
шляхи передаються як CLI-аргументи. Якщо `imageArg` відсутній, OpenClaw додає
|
||||
шляхи до файлів у prompt (ін’єкція шляху), чого достатньо для CLI, які автоматично
|
||||
завантажують локальні файли зі звичайних шляхів.
|
||||
|
||||
## Входи / виходи
|
||||
## Вхідні дані / вивід
|
||||
|
||||
- `output: "json"` (за замовчуванням) намагається розібрати JSON і витягти текст + ідентифікатор сесії.
|
||||
- `output: "json"` (стандартно) намагається розібрати JSON і витягнути текст + ідентифікатор сесії.
|
||||
- Для JSON-виводу Gemini CLI OpenClaw читає текст відповіді з `response` і
|
||||
usage зі `stats`, коли `usage` відсутній або порожній.
|
||||
- `output: "jsonl"` розбирає JSONL-потоки (наприклад, Codex CLI `--json`) і витягує фінальне повідомлення агента разом з ідентифікаторами сесії,
|
||||
якщо вони наявні.
|
||||
- `output: "jsonl"` розбирає JSONL-потоки (наприклад, Codex CLI `--json`) і витягує фінальне повідомлення агента плюс
|
||||
ідентифікатори сесії, якщо вони наявні.
|
||||
- `output: "text"` трактує stdout як фінальну відповідь.
|
||||
|
||||
Режими введення:
|
||||
|
||||
- `input: "arg"` (за замовчуванням) передає промпт як останній аргумент CLI.
|
||||
- `input: "stdin"` надсилає промпт через stdin.
|
||||
- Якщо промпт дуже довгий і `maxPromptArgChars` задано, використовується stdin.
|
||||
- `input: "arg"` (стандартно) передає prompt як останній CLI-аргумент.
|
||||
- `input: "stdin"` надсилає prompt через stdin.
|
||||
- Якщо prompt дуже довгий і задано `maxPromptArgChars`, використовується stdin.
|
||||
|
||||
## Стандартні значення (належать Plugin)
|
||||
## Стандартні значення (належать plugin)
|
||||
|
||||
Вбудований OpenAI Plugin також реєструє стандартні значення для `codex-cli`:
|
||||
Вбудований OpenAI plugin також реєструє стандартне значення для `codex-cli`:
|
||||
|
||||
- `command: "codex"`
|
||||
- `args: ["exec","--json","--color","never","--sandbox","workspace-write","--skip-git-repo-check"]`
|
||||
@ -298,7 +305,7 @@ OpenClaw записуватиме base64-зображення у тимчасо
|
||||
- `imageArg: "--image"`
|
||||
- `sessionMode: "existing"`
|
||||
|
||||
Вбудований Google Plugin також реєструє стандартні значення для `google-gemini-cli`:
|
||||
Вбудований Google plugin також реєструє стандартне значення для `google-gemini-cli`:
|
||||
|
||||
- `command: "gemini"`
|
||||
- `args: ["--output-format", "json", "--prompt", "{prompt}"]`
|
||||
@ -315,26 +322,26 @@ OpenClaw записуватиме base64-зображення у тимчасо
|
||||
|
||||
Примітки щодо JSON Gemini CLI:
|
||||
|
||||
- Текст відповіді читається з JSON-поля `response`.
|
||||
- Usage використовує fallback до `stats`, коли `usage` відсутній або порожній.
|
||||
- Текст відповіді зчитується з JSON-поля `response`.
|
||||
- Використання повертається до `stats`, коли `usage` відсутнє або порожнє.
|
||||
- `stats.cached` нормалізується в OpenClaw `cacheRead`.
|
||||
- Якщо `stats.input` відсутній, OpenClaw виводить input tokens із
|
||||
- Якщо `stats.input` відсутнє, OpenClaw виводить вхідні токени з
|
||||
`stats.input_tokens - stats.cached`.
|
||||
|
||||
Перевизначайте лише за потреби (поширений випадок: абсолютний шлях `command`).
|
||||
Перевизначайте лише за потреби (поширене: абсолютний шлях `command`).
|
||||
|
||||
## Стандартні значення, що належать Plugin
|
||||
## Типові значення, що належать Plugin
|
||||
|
||||
Стандартні значення CLI-бекендів тепер є частиною поверхні Plugin:
|
||||
Типові значення бекенда CLI тепер є частиною поверхні plugin:
|
||||
|
||||
- Plugins реєструють їх за допомогою `api.registerCliBackend(...)`.
|
||||
- Backend `id` стає префіксом провайдера в посиланнях на моделі.
|
||||
- Конфігурація користувача в `agents.defaults.cliBackends.<id>` досі перевизначає стандартне значення Plugin.
|
||||
- Очищення конфігурації, специфічної для backend, залишається у власності Plugin через необов’язковий hook
|
||||
`normalizeConfig`.
|
||||
- Плагіни реєструють їх за допомогою `api.registerCliBackend(...)`.
|
||||
- `id` бекенда стає префіксом провайдера в посиланнях на моделі.
|
||||
- Користувацька конфігурація в `agents.defaults.cliBackends.<id>` і далі перевизначає типове значення plugin.
|
||||
- Очищення конфігурації, специфічної для бекенда, залишається у власності plugin через необов’язковий
|
||||
хук `normalizeConfig`.
|
||||
|
||||
Plugins, яким потрібні невеликі шими сумісності prompt/message, можуть оголошувати
|
||||
двонапрямні текстові перетворення без заміни провайдера або CLI backend:
|
||||
Плагіни, яким потрібні невеликі шими сумісності промптів/повідомлень, можуть оголошувати
|
||||
двонапрямні текстові перетворення без заміни провайдера або бекенда CLI:
|
||||
|
||||
```typescript
|
||||
api.registerTextTransforms({
|
||||
@ -351,65 +358,65 @@ api.registerTextTransforms({
|
||||
});
|
||||
```
|
||||
|
||||
`input` переписує системний prompt і prompt користувача, передані до CLI. `output`
|
||||
переписує потокові дельти помічника та розібраний фінальний текст до того, як OpenClaw обробить
|
||||
власні керівні маркери й доставку в канал.
|
||||
`input` переписує системний промпт і користувацький промпт, передані до CLI. `output`
|
||||
переписує потокові дельти асистента й розібраний фінальний текст до того, як OpenClaw обробить
|
||||
власні керівні маркери та доставку в канал.
|
||||
|
||||
Для CLI, що виводять JSONL, сумісний із Claude Code stream-json, задайте
|
||||
`jsonlDialect: "claude-stream-json"` у конфігурації цього backend.
|
||||
Для CLI, які виводять сумісний із Claude Code stream-json JSONL, встановіть
|
||||
`jsonlDialect: "claude-stream-json"` у конфігурації цього бекенда.
|
||||
|
||||
## Об’єднання MCP-накладень
|
||||
## Оверлеї MCP для пакета
|
||||
|
||||
CLI backends **не** отримують виклики інструментів OpenClaw напряму, але backend може
|
||||
увімкнути згенероване накладення конфігурації MCP за допомогою `bundleMcp: true`.
|
||||
Бекенди CLI **не** отримують виклики інструментів OpenClaw напряму, але бекенд може
|
||||
увімкнути згенерований оверлей конфігурації MCP за допомогою `bundleMcp: true`.
|
||||
|
||||
Поточна вбудована поведінка:
|
||||
|
||||
- `claude-cli`: згенерований файл суворої конфігурації MCP
|
||||
- `claude-cli`: згенерований строгий файл конфігурації MCP
|
||||
- `codex-cli`: вбудовані перевизначення конфігурації для `mcp_servers`; згенерований
|
||||
OpenClaw loopback server позначено режимом схвалення інструментів на рівні сервера Codex,
|
||||
щоб MCP-виклики не могли зупинитися на локальних запитах схвалення
|
||||
loopback-сервер OpenClaw позначається режимом схвалення інструментів Codex для кожного сервера,
|
||||
щоб виклики MCP не зупинялися на локальних запитах схвалення
|
||||
- `google-gemini-cli`: згенерований файл системних налаштувань Gemini
|
||||
|
||||
Коли об’єднання MCP увімкнено, OpenClaw:
|
||||
Коли MCP для пакета увімкнено, OpenClaw:
|
||||
|
||||
- запускає loopback HTTP MCP server, який відкриває gateway tools для процесу CLI
|
||||
- автентифікує міст за допомогою токена на сеанс (`OPENCLAW_MCP_TOKEN`)
|
||||
- обмежує доступ до інструментів поточним сеансом, обліковим записом і контекстом каналу
|
||||
- завантажує увімкнені bundle-MCP servers для поточного workspace
|
||||
- об’єднує їх із будь-якою наявною формою backend MCP config/settings
|
||||
- переписує конфігурацію запуску, використовуючи режим інтеграції, що належить backend, із власницького Plugin
|
||||
- запускає loopback HTTP MCP-сервер, який надає інструменти gateway процесу CLI
|
||||
- автентифікує міст за допомогою токена для кожної сесії (`OPENCLAW_MCP_TOKEN`)
|
||||
- обмежує доступ до інструментів поточною сесією, обліковим записом і контекстом каналу
|
||||
- завантажує увімкнені bundle-MCP сервери для поточного workspace
|
||||
- об’єднує їх із будь-якою наявною формою MCP-конфігурації/налаштувань бекенда
|
||||
- переписує конфігурацію запуску, використовуючи режим інтеграції, що належить бекенду з extension-власника
|
||||
|
||||
Якщо MCP servers не ввімкнено, OpenClaw все одно впроваджує сувору конфігурацію, коли
|
||||
backend вмикає bundle MCP, щоб фонові запуски залишалися ізольованими.
|
||||
Якщо жоден MCP-сервер не увімкнено, OpenClaw усе одно ін’єктує строгу конфігурацію, коли
|
||||
бекенд увімкнув MCP для пакета, щоб фонові запуски залишалися ізольованими.
|
||||
|
||||
Сеансові вбудовані MCP runtimes кешуються для повторного використання в межах сеансу, а потім
|
||||
очищаються після `mcp.sessionIdleTtlMs` мілісекунд простою (за замовчуванням 10
|
||||
хвилин; задайте `0`, щоб вимкнути). Одноразові вбудовані запуски, як-от auth probes,
|
||||
slug generation і active-memory recall request cleanup, завершуються наприкінці запуску, щоб stdio
|
||||
children і Streamable HTTP/SSE streams не жили довше за сам запуск.
|
||||
Сеансово-обмежені вбудовані середовища виконання MCP кешуються для повторного використання в межах сесії, а потім
|
||||
очищаються після `mcp.sessionIdleTtlMs` мілісекунд простою (типово 10
|
||||
хвилин; встановіть `0`, щоб вимкнути). Одноразові вбудовані запуски, як-от перевірки автентифікації,
|
||||
генерація slug і запити на пригадування active-memory, очищуються наприкінці запуску, щоб stdio
|
||||
дочірні процеси та потоки Streamable HTTP/SSE не жили довше за сам запуск.
|
||||
|
||||
## Обмеження
|
||||
|
||||
- **Немає прямих викликів інструментів OpenClaw.** OpenClaw не впроваджує виклики інструментів у
|
||||
протокол CLI backend. Backends бачать gateway tools лише тоді, коли вмикають
|
||||
- **Немає прямих викликів інструментів OpenClaw.** OpenClaw не ін’єктує виклики інструментів у
|
||||
протокол бекенда CLI. Бекенди бачать інструменти gateway лише тоді, коли вмикають
|
||||
`bundleMcp: true`.
|
||||
- **Streaming залежить від backend.** Деякі backends транслюють JSONL; інші буферизують
|
||||
- **Потокове передавання залежить від бекенда.** Деякі бекенди передають JSONL потоком; інші буферизують
|
||||
до завершення.
|
||||
- **Структуровані виводи** залежать від формату JSON у CLI.
|
||||
- **Сеанси Codex CLI** поновлюються через текстовий вивід (без JSONL), який менш
|
||||
структурований, ніж початковий запуск `--json`. Сеанси OpenClaw все одно працюють
|
||||
- **Структуровані виводи** залежать від JSON-формату CLI.
|
||||
- **Сесії Codex CLI** відновлюються через текстовий вивід (без JSONL), який менш
|
||||
структурований, ніж початковий запуск із `--json`. Сесії OpenClaw усе одно працюють
|
||||
нормально.
|
||||
|
||||
## Усунення несправностей
|
||||
|
||||
- **CLI не знайдено**: задайте `command` як повний шлях.
|
||||
- **CLI не знайдено**: встановіть для `command` повний шлях.
|
||||
- **Неправильна назва моделі**: використовуйте `modelAliases`, щоб зіставити `provider/model` → модель CLI.
|
||||
- **Немає безперервності сеансу**: переконайтеся, що `sessionArg` задано, а `sessionMode` не є
|
||||
`none` (Codex CLI наразі не може поновлюватися з JSON-виводом).
|
||||
- **Зображення ігноруються**: задайте `imageArg` (і перевірте, що CLI підтримує шляхи до файлів).
|
||||
- **Немає неперервності сесії**: переконайтеся, що `sessionArg` задано, а `sessionMode` не дорівнює
|
||||
`none` (Codex CLI наразі не може відновлюватися з JSON-виводом).
|
||||
- **Зображення ігноруються**: встановіть `imageArg` (і перевірте, що CLI підтримує шляхи до файлів).
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Gateway runbook](/uk/gateway)
|
||||
- [Runbook Gateway](/uk/gateway)
|
||||
- [Локальні моделі](/uk/gateway/local-models)
|
||||
|
||||
@ -1,36 +1,35 @@
|
||||
---
|
||||
read_when:
|
||||
- Потрібно знати, з якого підшляху SDK імпортувати
|
||||
- Вам потрібна довідка щодо всіх методів реєстрації в OpenClawPluginApi
|
||||
- Вам потрібна довідка про всі методи реєстрації в OpenClawPluginApi
|
||||
- Ви шукаєте конкретний експорт SDK
|
||||
sidebarTitle: Plugin SDK overview
|
||||
summary: Карта імпортів, довідник API реєстрації та архітектура SDK
|
||||
summary: Мапа імпортів, довідник API реєстрації та архітектура SDK
|
||||
title: Огляд Plugin SDK
|
||||
x-i18n:
|
||||
generated_at: "2026-05-02T02:49:22Z"
|
||||
generated_at: "2026-05-04T18:18:33Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: be5fa531e603fb6d87f84e3193ebd61be1431b57b8f284871ae15f34ca93fc69
|
||||
source_hash: 8187e7d4cfb9d6fb19bbdebfbaea0bb4d98fa5cea4742d0f82a765ae5bc60127
|
||||
source_path: plugins/sdk-overview.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
SDK плагінів — це типізований контракт між плагінами та ядром. Ця сторінка є
|
||||
довідником щодо **того, що імпортувати** і **того, що можна реєструвати**.
|
||||
SDK для плагінів є типізованим контрактом між плагінами та ядром. Ця сторінка є
|
||||
довідником про **що імпортувати** і **що можна реєструвати**.
|
||||
|
||||
<Note>
|
||||
Ця сторінка призначена для авторів плагінів, які використовують
|
||||
`openclaw/plugin-sdk/*` всередині OpenClaw. Для зовнішніх застосунків,
|
||||
скриптів, панелей керування, завдань CI та розширень IDE, які хочуть запускати
|
||||
агентів через Gateway, натомість використовуйте
|
||||
[SDK застосунків OpenClaw](/uk/concepts/openclaw-sdk) і пакет `@openclaw/sdk`.
|
||||
Ця сторінка призначена для авторів плагінів, які використовують `openclaw/plugin-sdk/*` всередині
|
||||
OpenClaw. Для зовнішніх застосунків, скриптів, панелей керування, CI-завдань і розширень IDE,
|
||||
які хочуть запускати агентів через Gateway, натомість використовуйте
|
||||
[OpenClaw App SDK](/uk/concepts/openclaw-sdk) і пакет `@openclaw/sdk`.
|
||||
</Note>
|
||||
|
||||
<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>
|
||||
|
||||
## Угода щодо імпорту
|
||||
## Угода про імпорт
|
||||
|
||||
Завжди імпортуйте з конкретного підшляху:
|
||||
|
||||
@ -39,85 +38,82 @@ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
|
||||
import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core";
|
||||
```
|
||||
|
||||
Кожен підшлях — це невеликий самодостатній модуль. Це забезпечує швидкий запуск
|
||||
і запобігає проблемам із циклічними залежностями. Для допоміжних засобів
|
||||
входу/збирання, специфічних для каналів, віддавайте перевагу
|
||||
`openclaw/plugin-sdk/channel-core`; залишайте `openclaw/plugin-sdk/core` для
|
||||
ширшої спільної поверхні та спільних допоміжних засобів, як-от
|
||||
`buildChannelConfigSchema`.
|
||||
Кожен підшлях є невеликим самодостатнім модулем. Це прискорює запуск і
|
||||
запобігає проблемам із циклічними залежностями. Для помічників входу/збірки,
|
||||
специфічних для каналів, віддавайте перевагу `openclaw/plugin-sdk/channel-core`;
|
||||
залишайте `openclaw/plugin-sdk/core` для ширшої поверхні-парасолі та спільних
|
||||
помічників, таких як `buildChannelConfigSchema`.
|
||||
|
||||
Для конфігурації каналу публікуйте JSON Schema, що належить каналу, через
|
||||
`openclaw.plugin.json#channelConfigs`. Підшлях `plugin-sdk/channel-config-schema`
|
||||
призначений для спільних примітивів схеми та загального збирача. Вбудовані
|
||||
призначений для спільних примітивів схем і загального builder. Вбудовані
|
||||
плагіни 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` / `runtime-api.ts`; споживачі ядра мають або використовувати ці
|
||||
локальні для плагіна барелі, або додати вузький загальний контракт SDK, коли
|
||||
потреба справді є міжканальною.
|
||||
Вбудовані плагіни компонують загальні підшляхи SDK у власних барелях `api.ts` /
|
||||
`runtime-api.ts`; споживачі ядра мають або використовувати ці локальні для
|
||||
плагіна барелі, або додати вузький загальний контракт SDK, коли потреба справді
|
||||
є міжканальною.
|
||||
|
||||
Невеликий набір допоміжних швів вбудованих плагінів досі з’являється у
|
||||
згенерованій мапі експортів, коли для них відстежено використання власником.
|
||||
Невеликий набір допоміжних швів вбудованих плагінів усе ще з’являється у
|
||||
згенерованій мапі експортів, коли вони мають відстежене використання власником.
|
||||
Вони існують лише для супроводу вбудованих плагінів і не рекомендовані як шляхи
|
||||
імпорту для нових сторонніх плагінів.
|
||||
|
||||
`openclaw/plugin-sdk/discord` і `openclaw/plugin-sdk/telegram-account` також
|
||||
збережені як застарілі фасади сумісності для відстеженого використання
|
||||
власником. Не копіюйте ці шляхи імпорту в нові плагіни; натомість
|
||||
використовуйте ін’єктовані runtime-допоміжні засоби та загальні підшляхи SDK
|
||||
каналів.
|
||||
власником. Не копіюйте ці шляхи імпорту в нові плагіни; натомість використовуйте
|
||||
ін’єктовані runtime-помічники та загальні підшляхи SDK каналів.
|
||||
</Warning>
|
||||
|
||||
## Довідник підшляхів
|
||||
|
||||
SDK плагінів надається як набір вузьких підшляхів, згрупованих за областями
|
||||
(вхід плагіна, канал, провайдер, автентифікація, runtime, можливості, пам’ять і
|
||||
зарезервовані допоміжні засоби вбудованих плагінів). Повний каталог —
|
||||
згрупований і з посиланнями — дивіться в
|
||||
[підшляхах SDK Plugin](/uk/plugins/sdk-subpaths).
|
||||
SDK для плагінів надається як набір вузьких підшляхів, згрупованих за сферами
|
||||
(вхід плагіна, канал, провайдер, автентифікація, runtime, capability, пам’ять і
|
||||
зарезервовані помічники вбудованих плагінів). Повний каталог, згрупований і
|
||||
пов’язаний посиланнями, дивіться в [Підшляхи SDK для плагінів](/uk/plugins/sdk-subpaths).
|
||||
|
||||
Згенерований список із понад 200 підшляхів міститься в `scripts/lib/plugin-sdk-entrypoints.json`.
|
||||
|
||||
## API реєстрації
|
||||
|
||||
Зворотний виклик `register(api)` отримує об’єкт `OpenClawPluginApi` з такими
|
||||
Callback `register(api)` отримує об’єкт `OpenClawPluginApi` з такими
|
||||
методами:
|
||||
|
||||
### Реєстрація можливостей
|
||||
### Реєстрація capability
|
||||
|
||||
| Метод | Що він реєструє |
|
||||
| ------------------------------------------------ | --------------------------------------- |
|
||||
| `api.registerProvider(...)` | Текстове виведення (LLM) |
|
||||
| `api.registerAgentHarness(...)` | Експериментальний низькорівневий виконавець агента |
|
||||
| `api.registerCliBackend(...)` | Локальний backend виведення CLI |
|
||||
| `api.registerChannel(...)` | Канал обміну повідомленнями |
|
||||
| `api.registerSpeechProvider(...)` | Перетворення тексту на мовлення / синтез STT |
|
||||
| `api.registerProvider(...)` | Текстовий inference (LLM) |
|
||||
| `api.registerAgentHarness(...)` | Експериментальний низькорівневий виконавець агентів |
|
||||
| `api.registerCliBackend(...)` | Локальний CLI inference backend |
|
||||
| `api.registerChannel(...)` | Канал повідомлень |
|
||||
| `api.registerSpeechProvider(...)` | Синтез text-to-speech / STT |
|
||||
| `api.registerRealtimeTranscriptionProvider(...)` | Потокова транскрипція в реальному часі |
|
||||
| `api.registerRealtimeVoiceProvider(...)` | Дуплексні голосові сесії в реальному часі |
|
||||
| `api.registerRealtimeVoiceProvider(...)` | Дуплексні голосові сеанси в реальному часі |
|
||||
| `api.registerMediaUnderstandingProvider(...)` | Аналіз зображень/аудіо/відео |
|
||||
| `api.registerImageGenerationProvider(...)` | Генерація зображень |
|
||||
| `api.registerMusicGenerationProvider(...)` | Генерація музики |
|
||||
| `api.registerVideoGenerationProvider(...)` | Генерація відео |
|
||||
| `api.registerWebFetchProvider(...)` | Провайдер web fetch / scraping |
|
||||
| `api.registerWebFetchProvider(...)` | Провайдер web fetch / scrape |
|
||||
| `api.registerWebSearchProvider(...)` | Вебпошук |
|
||||
|
||||
### Інструменти та команди
|
||||
|
||||
| Метод | Що він реєструє |
|
||||
| ------------------------------- | ---------------------------------------------- |
|
||||
| Метод | Що він реєструє |
|
||||
| ----------------------------- | -------------------------------------------- |
|
||||
| `api.registerTool(tool, opts?)` | Інструмент агента (обов’язковий або `{ optional: true }`) |
|
||||
| `api.registerCommand(def)` | Користувацька команда (оминає LLM) |
|
||||
| `api.registerCommand(def)` | Користувацька команда (оминає LLM) |
|
||||
|
||||
Команди плагінів можуть задавати `agentPromptGuidance`, коли агенту потрібна
|
||||
коротка підказка маршрутизації, що належить команді. Тримайте цей текст про саму
|
||||
команду; не додавайте політику, специфічну для провайдера або плагіна, до
|
||||
збирачів prompt у ядрі.
|
||||
коротка підказка маршрутизації, що належить команді. Тримайте цей текст про
|
||||
саму команду; не додавайте політики, специфічної для провайдера або плагіна, до
|
||||
builder prompt ядра.
|
||||
|
||||
### Інфраструктура
|
||||
|
||||
@ -125,80 +121,87 @@ SDK плагінів надається як набір вузьких підш
|
||||
| ---------------------------------------------- | --------------------------------------- |
|
||||
| `api.registerHook(events, handler, opts?)` | Хук події |
|
||||
| `api.registerHttpRoute(params)` | HTTP endpoint Gateway |
|
||||
| `api.registerGatewayMethod(name, handler)` | Метод RPC Gateway |
|
||||
| `api.registerGatewayDiscoveryService(service)` | Рекламодавець виявлення локального 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)` | Адитивний розділ prompt поруч із пам’яттю |
|
||||
| `api.registerMemoryCorpusSupplement(adapter)` | Адитивний корпус пошуку/читання пам’яті |
|
||||
| `api.registerMemoryPromptSupplement(builder)` | Додатковий розділ prompt поруч із пам’яттю |
|
||||
| `api.registerMemoryCorpusSupplement(adapter)` | Додатковий корпус пошуку/читання пам’яті |
|
||||
|
||||
### Хостові хуки для workflow-плагінів
|
||||
### Хуки хоста для плагінів workflow
|
||||
|
||||
Хостові хуки — це шви SDK для плагінів, яким потрібно брати участь у життєвому
|
||||
Хуки хоста є швами SDK для плагінів, яким потрібно брати участь у життєвому
|
||||
циклі хоста, а не лише додавати провайдера, канал або інструмент. Це загальні
|
||||
контракти; Plan Mode може їх використовувати, але так само можуть workflow
|
||||
погоджень, policy gates робочого простору, фонові монітори, майстри
|
||||
налаштування та супровідні UI-плагіни.
|
||||
контракти; режим Plan може їх використовувати, але так само можуть workflow
|
||||
затверджень, шлюзи політики workspace, фонові монітори, майстри налаштування та
|
||||
супровідні UI-плагіни.
|
||||
|
||||
| Метод | Контракт, яким він володіє |
|
||||
| ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `api.registerSessionExtension(...)` | Стан сесії, що належить плагіну, сумісний із JSON і проєктується через сесії Gateway |
|
||||
| `api.enqueueNextTurnInjection(...)` | Стійкий рівно-один-раз контекст, ін’єктований у наступний хід агента для однієї сесії |
|
||||
| `api.registerTrustedToolPolicy(...)` | Політика інструментів вбудованого/довіреного pre-plugin, яка може блокувати або переписувати параметри інструменту |
|
||||
| `api.registerToolMetadata(...)` | Метадані відображення каталогу інструментів без зміни реалізації інструменту |
|
||||
| `api.registerCommand(...)` | Обмежені за областю команди плагінів; результати команд можуть задавати `continueAgent: true`; нативні команди Discord підтримують `descriptionLocalizations` |
|
||||
| `api.registerControlUiDescriptor(...)` | Дескриптори внеску Control UI для поверхонь сесії, інструменту, запуску або налаштувань |
|
||||
| `api.registerRuntimeLifecycle(...)` | Зворотні виклики очищення для runtime-ресурсів, що належать плагіну, на шляхах reset/delete/reload |
|
||||
| `api.registerAgentEventSubscription(...)` | Санітизовані підписки на події для стану workflow та моніторів |
|
||||
| `api.setRunContext(...)` / `getRunContext(...)` / `clearRunContext(...)` | Чернетковий стан плагіна для окремого запуску, очищений під час термінального життєвого циклу запуску |
|
||||
| `api.registerSessionSchedulerJob(...)` | Записи завдань планувальника сесій, що належать плагіну, з детермінованим очищенням |
|
||||
| ------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `api.registerSessionExtension(...)` | JSON-сумісний стан сеансу, що належить плагіну та проєктується через сеанси Gateway |
|
||||
| `api.enqueueNextTurnInjection(...)` | Стійкий exactly-once контекст, ін’єктований у наступний хід агента для одного сеансу |
|
||||
| `api.registerTrustedToolPolicy(...)` | Політика інструментів pre-plugin для вбудованих/довірених плагінів, яка може блокувати або переписувати параметри інструмента |
|
||||
| `api.registerToolMetadata(...)` | Метадані відображення каталогу інструментів без зміни реалізації інструмента |
|
||||
| `api.registerCommand(...)` | Обмежені плагіном команди; результати команд можуть задавати `continueAgent: true`; нативні команди Discord підтримують `descriptionLocalizations` |
|
||||
| `api.registerControlUiDescriptor(...)` | Дескриптори внесків Control UI для поверхонь сеансу, інструмента, запуску або налаштувань |
|
||||
| `api.registerRuntimeLifecycle(...)` | Callback-и очищення для runtime-ресурсів, що належать плагіну, на шляхах reset/delete/reload |
|
||||
| `api.registerAgentEventSubscription(...)` | Санітизовані підписки на події для стану workflow і моніторів |
|
||||
| `api.setRunContext(...)` / `getRunContext(...)` / `clearRunContext(...)` | Тимчасовий стан плагіна для окремого запуску, що очищується під час термінального життєвого циклу запуску |
|
||||
| `api.registerSessionSchedulerJob(...)` | Записи завдань планувальника сеансів, що належать плагіну, з детермінованим очищенням |
|
||||
|
||||
Контракти навмисно розділяють повноваження:
|
||||
|
||||
- Зовнішні плагіни можуть володіти розширеннями сесій, дескрипторами UI, командами, метаданими інструментів, ін’єкціями наступного ходу та звичайними хуками.
|
||||
- Довірені політики інструментів виконуються перед звичайними хуками `before_tool_call` і доступні лише вбудованим плагінам, бо вони беруть участь у політиці безпеки хоста.
|
||||
- Зарезервоване володіння командами доступне лише вбудованим плагінам. Зовнішні плагіни мають використовувати власні назви команд або псевдоніми.
|
||||
- `allowPromptInjection=false` вимикає хуки, що змінюють prompt, включно з `agent_turn_prepare`, `before_prompt_build`, `heartbeat_prompt_contribution`, полями prompt із застарілого `before_agent_start` та `enqueueNextTurnInjection`.
|
||||
- Зовнішні плагіни можуть володіти розширеннями сеансів, дескрипторами UI,
|
||||
командами, метаданими інструментів, ін’єкціями наступного ходу та звичайними
|
||||
хуками.
|
||||
- Довірені політики інструментів виконуються перед звичайними хуками
|
||||
`before_tool_call` і доступні лише для вбудованих плагінів, оскільки беруть
|
||||
участь у політиці безпеки хоста.
|
||||
- Зарезервоване володіння командами доступне лише для вбудованих плагінів.
|
||||
Зовнішні плагіни мають використовувати власні назви команд або псевдоніми.
|
||||
- `allowPromptInjection=false` вимикає хуки, що змінюють prompt, включно з
|
||||
`agent_turn_prepare`, `before_prompt_build`, `heartbeat_prompt_contribution`,
|
||||
полями prompt із застарілого `before_agent_start` і
|
||||
`enqueueNextTurnInjection`.
|
||||
|
||||
Приклади споживачів, не пов’язаних із Plan:
|
||||
Приклади споживачів, що не належать до Plan:
|
||||
|
||||
| Архетип плагіна | Використані хуки |
|
||||
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Workflow погодження | Розширення сесії, продовження команди, ін’єкція наступного ходу, дескриптор UI |
|
||||
| Policy gate бюджету/робочого простору | Довірена політика інструментів, метадані інструментів, проєкція сесії |
|
||||
| Фоновий монітор життєвого циклу | Очищення runtime-життєвого циклу, підписка на події агента, володіння/очищення планувальника сесій, внесок heartbeat prompt, дескриптор UI |
|
||||
| Майстер налаштування або onboarding | Розширення сесії, scoped-команди, дескриптор Control UI |
|
||||
| Архетип плагіна | Використані хуки |
|
||||
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| Workflow затвердження | Розширення сеансу, продовження команди, ін’єкція наступного ходу, дескриптор UI |
|
||||
| Шлюз політики бюджету/workspace | Довірена політика інструментів, метадані інструментів, проєкція сеансу |
|
||||
| Фоновий монітор життєвого циклу | Очищення runtime lifecycle, підписка на події агента, володіння/очищення планувальника сеансів, внесок heartbeat prompt, дескриптор UI |
|
||||
| Майстер налаштування або onboarding | Розширення сеансу, обмежені команди, дескриптор Control UI |
|
||||
|
||||
<Note>
|
||||
Зарезервовані простори імен адміністрування ядра (`config.*`,
|
||||
`exec.approvals.*`, `wizard.*`, `update.*`) завжди залишаються
|
||||
`operator.admin`, навіть якщо плагін намагається призначити вужчу область
|
||||
методу gateway. Віддавайте перевагу префіксам, специфічним для плагіна, для
|
||||
Зарезервовані простори імен адміністратора ядра (`config.*`, `exec.approvals.*`, `wizard.*`,
|
||||
`update.*`) завжди залишаються `operator.admin`, навіть якщо плагін намагається призначити
|
||||
вужчий scope методу Gateway. Віддавайте перевагу префіксам, специфічним для плагіна, для
|
||||
методів, що належать плагіну.
|
||||
</Note>
|
||||
|
||||
<Accordion title="Коли використовувати middleware результатів інструментів">
|
||||
Вбудовані плагіни можуть використовувати `api.registerAgentToolResultMiddleware(...)`, коли
|
||||
їм потрібно переписати результат інструменту після виконання і до того, як runtime
|
||||
передасть цей результат назад у модель. Це довірений runtime-нейтральний
|
||||
шов для асинхронних редукторів виводу, таких як tokenjuice.
|
||||
їм потрібно переписати результат інструмента після виконання і до того, як runtime
|
||||
передасть цей результат назад у модель. Це довірений runtime-нейтральний шов
|
||||
для асинхронних редукторів виводу, таких як tokenjuice.
|
||||
|
||||
Вбудовані плагіни мають оголошувати `contracts.agentToolResultMiddleware` для
|
||||
кожного цільового runtime, наприклад `["pi", "codex"]`. Зовнішні плагіни
|
||||
не можуть реєструвати цей middleware; залишайте звичайні хуки плагінів OpenClaw для роботи,
|
||||
якій не потрібен timing результатів інструментів перед моделлю. Старий шлях
|
||||
реєстрації вбудованої фабрики розширень лише для Pi було вилучено.
|
||||
Вбудовані плагіни мають оголошувати `contracts.agentToolResultMiddleware` для кожного
|
||||
цільового runtime, наприклад `["pi", "codex"]`. Зовнішні плагіни
|
||||
не можуть реєструвати це middleware; залишайте звичайні хуки плагінів OpenClaw для роботи,
|
||||
якій не потрібен timing результату інструмента перед моделлю. Старий шлях реєстрації
|
||||
вбудованої фабрики розширень лише для Pi було видалено.
|
||||
</Accordion>
|
||||
|
||||
### Реєстрація виявлення Gateway
|
||||
|
||||
`api.registerGatewayDiscoveryService(...)` дає плагіну змогу оголошувати активний
|
||||
Gateway у локальному транспорті виявлення, як-от mDNS/Bonjour. OpenClaw викликає
|
||||
службу під час запуску Gateway, коли локальне виявлення ввімкнено, передає
|
||||
поточні порти Gateway і несекретні підказки TXT, а під час завершення роботи
|
||||
Gateway викликає повернений обробник `stop`.
|
||||
`api.registerGatewayDiscoveryService(...)` дає змогу Plugin оголошувати активний
|
||||
Gateway у локальному транспорті виявлення, такому як mDNS/Bonjour. OpenClaw викликає
|
||||
сервіс під час запуску Gateway, коли локальне виявлення ввімкнено, передає
|
||||
поточні порти Gateway і несекретні дані підказок TXT, а також викликає повернений
|
||||
обробник `stop` під час завершення роботи Gateway.
|
||||
|
||||
```typescript
|
||||
api.registerGatewayDiscoveryService({
|
||||
@ -214,9 +217,9 @@ api.registerGatewayDiscoveryService({
|
||||
});
|
||||
```
|
||||
|
||||
Плагіни виявлення Gateway не повинні вважати оголошені значення TXT секретами чи
|
||||
автентифікацією. Виявлення — це підказка для маршрутизації; автентифікація
|
||||
Gateway і прив’язування TLS усе ще відповідають за довіру.
|
||||
Plugin-и виявлення Gateway не повинні трактувати оголошені значення TXT як секрети або
|
||||
автентифікацію. Виявлення є підказкою маршрутизації; автентифікація Gateway і прив’язування TLS
|
||||
і далі відповідають за довіру.
|
||||
|
||||
### Метадані реєстрації CLI
|
||||
|
||||
@ -224,11 +227,11 @@ Gateway і прив’язування TLS усе ще відповідають
|
||||
|
||||
- `commands`: явні корені команд, якими володіє реєстратор
|
||||
- `descriptors`: дескриптори команд під час розбору, що використовуються для довідки кореневого CLI,
|
||||
маршрутизації та лінивої реєстрації CLI плагіна
|
||||
маршрутизації та лінивої реєстрації CLI Plugin
|
||||
|
||||
Якщо ви хочете, щоб команда плагіна лишалася ліниво завантажуваною у звичайному
|
||||
шляху кореневого CLI, надайте `descriptors`, які охоплюють кожен корінь команди
|
||||
верхнього рівня, відкритий цим реєстратором.
|
||||
Якщо потрібно, щоб команда Plugin залишалася ліниво завантажуваною у звичайному шляху кореневого CLI,
|
||||
надайте `descriptors`, які охоплюють кожен корінь команди верхнього рівня, що відкриває цей
|
||||
реєстратор.
|
||||
|
||||
```typescript
|
||||
api.registerCli(
|
||||
@ -248,100 +251,100 @@ api.registerCli(
|
||||
);
|
||||
```
|
||||
|
||||
Використовуйте лише `commands` тільки тоді, коли вам не потрібна лінива
|
||||
реєстрація кореневого CLI. Цей нетерплячий шлях сумісності й надалі
|
||||
підтримується, але він не встановлює заповнювачі на основі дескрипторів для
|
||||
лінивого завантаження під час розбору.
|
||||
Використовуйте `commands` окремо лише тоді, коли вам не потрібна лінива реєстрація кореневого CLI.
|
||||
Цей шлях активної сумісності й надалі підтримується, але він не встановлює
|
||||
заповнювачі на основі дескрипторів для лінивого завантаження під час розбору.
|
||||
|
||||
### Реєстрація бекенда CLI
|
||||
### Реєстрація бекенду CLI
|
||||
|
||||
`api.registerCliBackend(...)` дає плагіну змогу володіти типовою конфігурацією
|
||||
для локального бекенда AI CLI, як-от `codex-cli`.
|
||||
`api.registerCliBackend(...)` дає змогу Plugin володіти типовою конфігурацією для локального
|
||||
бекенду AI CLI, такого як `codex-cli`.
|
||||
|
||||
- `id` бекенда стає префіксом провайдера в посиланнях на моделі, як-от `codex-cli/gpt-5`.
|
||||
- `config` бекенда використовує ту саму форму, що й `agents.defaults.cliBackends.<id>`.
|
||||
- `id` бекенду стає префіксом провайдера в посиланнях на моделі, як-от `codex-cli/gpt-5`.
|
||||
- `config` бекенду використовує ту саму форму, що й `agents.defaults.cliBackends.<id>`.
|
||||
- Конфігурація користувача все одно має пріоритет. OpenClaw об’єднує `agents.defaults.cliBackends.<id>` поверх
|
||||
типового значення плагіна перед запуском CLI.
|
||||
типових налаштувань Plugin перед запуском CLI.
|
||||
- Використовуйте `normalizeConfig`, коли бекенду потрібні переписування сумісності після об’єднання
|
||||
(наприклад, нормалізація старих форм прапорців).
|
||||
- Використовуйте `resolveExecutionArgs` для переписування argv в межах запиту, яке належить до
|
||||
діалекту CLI, наприклад зіставлення рівнів мислення OpenClaw із нативним прапорцем зусилля.
|
||||
|
||||
### Ексклюзивні слоти
|
||||
|
||||
| Метод | Що реєструє |
|
||||
| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `api.registerContextEngine(id, factory)` | Двигун контексту (один активний одночасно). Зворотний виклик `assemble()` отримує `availableTools` і `citationsMode`, щоб двигун міг адаптувати додатки до промпта. |
|
||||
| `api.registerMemoryCapability(capability)` | Уніфікована можливість пам’яті |
|
||||
| `api.registerMemoryPromptSection(builder)` | Побудовник розділу промпта пам’яті |
|
||||
| `api.registerMemoryFlushPlan(resolver)` | Резолвер плану скидання пам’яті |
|
||||
| Метод | Що реєструє |
|
||||
| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `api.registerContextEngine(id, factory)` | Рушій контексту (активний один за раз). Callback `assemble()` отримує `availableTools` і `citationsMode`, щоб рушій міг адаптувати доповнення до промпта. |
|
||||
| `api.registerMemoryCapability(capability)` | Уніфікована можливість пам’яті |
|
||||
| `api.registerMemoryPromptSection(builder)` | Побудовник секції промпта пам’яті |
|
||||
| `api.registerMemoryFlushPlan(resolver)` | Resolver плану скидання пам’яті |
|
||||
| `api.registerMemoryRuntime(runtime)` | Адаптер середовища виконання пам’яті |
|
||||
|
||||
### Адаптери вбудовування пам’яті
|
||||
### Адаптери embedding пам’яті
|
||||
|
||||
| Метод | Що реєструє |
|
||||
| ---------------------------------------------- | ----------------------------------------- |
|
||||
| `api.registerMemoryEmbeddingProvider(adapter)` | Адаптер вбудовування пам’яті для активного плагіна |
|
||||
| Метод | Що реєструє |
|
||||
| ---------------------------------------------- | ------------------------------------------ |
|
||||
| `api.registerMemoryEmbeddingProvider(adapter)` | Адаптер embedding пам’яті для активного Plugin |
|
||||
|
||||
- `registerMemoryCapability` — бажаний ексклюзивний API плагіна пам’яті.
|
||||
- `registerMemoryCapability` є рекомендованим API ексклюзивного Plugin пам’яті.
|
||||
- `registerMemoryCapability` також може відкривати `publicArtifacts.listArtifacts(...)`,
|
||||
щоб супровідні плагіни могли споживати експортовані артефакти пам’яті через
|
||||
`openclaw/plugin-sdk/memory-host-core`, а не звертатися до приватної структури
|
||||
конкретного плагіна пам’яті.
|
||||
щоб супутні Plugin могли споживати експортовані артефакти пам’яті через
|
||||
`openclaw/plugin-sdk/memory-host-core`, а не звертатися до приватної структури конкретного
|
||||
Plugin пам’яті.
|
||||
- `registerMemoryPromptSection`, `registerMemoryFlushPlan` і
|
||||
`registerMemoryRuntime` — ексклюзивні API плагіна пам’яті зі спадковою сумісністю.
|
||||
`registerMemoryRuntime` є API ексклюзивного Plugin пам’яті із сумісністю зі спадщиною.
|
||||
- `MemoryFlushPlan.model` може закріпити хід скидання за точним посиланням
|
||||
`provider/model`, як-от `ollama/qwen3:8b`, без успадкування активного ланцюжка
|
||||
резервних варіантів.
|
||||
- `registerMemoryEmbeddingProvider` дає активному плагіну пам’яті змогу
|
||||
зареєструвати один або кілька ідентифікаторів адаптерів вбудовування
|
||||
(наприклад `openai`, `gemini` або власний ідентифікатор, визначений плагіном).
|
||||
`provider/model`, таким як `ollama/qwen3:8b`, без успадкування активного fallback
|
||||
ланцюжка.
|
||||
- `registerMemoryEmbeddingProvider` дає змогу активному Plugin пам’яті зареєструвати один
|
||||
або кілька id адаптерів embedding (наприклад `openai`, `gemini` або власний
|
||||
id, визначений Plugin).
|
||||
- Конфігурація користувача, як-от `agents.defaults.memorySearch.provider` і
|
||||
`agents.defaults.memorySearch.fallback`, розв’язується відносно цих
|
||||
зареєстрованих ідентифікаторів адаптерів.
|
||||
`agents.defaults.memorySearch.fallback`, зіставляється з цими зареєстрованими
|
||||
id адаптерів.
|
||||
|
||||
### Події та життєвий цикл
|
||||
|
||||
| Метод | Що робить |
|
||||
| -------------------------------------------- | ------------------------------- |
|
||||
| `api.on(hookName, handler, opts?)` | Типізований хук життєвого циклу |
|
||||
| `api.onConversationBindingResolved(handler)` | Зворотний виклик прив’язки розмови |
|
||||
| Метод | Що робить |
|
||||
| -------------------------------------------- | ------------------------------ |
|
||||
| `api.on(hookName, handler, opts?)` | Типізований hook життєвого циклу |
|
||||
| `api.onConversationBindingResolved(handler)` | Callback прив’язки розмови |
|
||||
|
||||
Див. [хуки плагінів](/uk/plugins/hooks), щоб знайти приклади, поширені назви хуків
|
||||
і семантику запобіжників.
|
||||
Див. [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` для додаткових даних, специфічних для каналу.
|
||||
- `before_tool_call`: повернення `{ block: true }` є термінальним. Щойно будь-який обробник установлює його, обробники з нижчим пріоритетом пропускаються.
|
||||
- `before_tool_call`: повернення `{ block: false }` трактується як відсутність рішення (те саме, що пропустити `block`), а не як перевизначення.
|
||||
- `before_install`: повернення `{ block: true }` є термінальним. Щойно будь-який обробник установлює його, обробники з нижчим пріоритетом пропускаються.
|
||||
- `before_install`: повернення `{ block: false }` трактується як відсутність рішення (те саме, що пропустити `block`), а не як перевизначення.
|
||||
- `reply_dispatch`: повернення `{ handled: true, ... }` є термінальним. Щойно будь-який обробник заявляє dispatch, обробники з нижчим пріоритетом і типовий шлях dispatch моделі пропускаються.
|
||||
- `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`.
|
||||
- `cron_changed`: спостерігайте за змінами життєвого циклу cron, яким володіє Gateway. Використовуйте `event.job?.state?.nextRunAtMs` і `ctx.getCron?.()` під час синхронізації зовнішніх планувальників пробудження, а OpenClaw залишайте джерелом істини для перевірок строків і виконання.
|
||||
- `gateway_start`: використовуйте `ctx.config`, `ctx.workspaceDir` і `ctx.getCron?.()` для стану запуску, яким володіє gateway, замість покладання на внутрішні hooks `gateway:startup`.
|
||||
- `cron_changed`: спостерігайте за змінами життєвого циклу cron, яким володіє gateway. Використовуйте `event.job?.state?.nextRunAtMs` і `ctx.getCron?.()` під час синхронізації зовнішніх планувальників пробудження, а OpenClaw залишайте джерелом істини для перевірок строків і виконання.
|
||||
|
||||
### Поля об’єкта API
|
||||
|
||||
| Поле | Тип | Опис |
|
||||
| ------------------------ | ------------------------- | ------------------------------------------------------------------------------------------- |
|
||||
| `api.id` | `string` | Ідентифікатор плагіна |
|
||||
| `api.name` | `string` | Відображувана назва |
|
||||
| `api.version` | `string?` | Версія плагіна (необов’язково) |
|
||||
| `api.description` | `string?` | Опис плагіна (необов’язково) |
|
||||
| `api.source` | `string` | Шлях до джерела плагіна |
|
||||
| `api.rootDir` | `string?` | Кореневий каталог плагіна (необов’язково) |
|
||||
| `api.config` | `OpenClawConfig` | Поточний знімок конфігурації (активний знімок середовища виконання в пам’яті, коли доступний) |
|
||||
| `api.pluginConfig` | `Record<string, unknown>` | Конфігурація, специфічна для плагіна, з `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` | Розв’язати шлях відносно кореня плагіна |
|
||||
| Поле | Тип | Опис |
|
||||
| ------------------------ | ------------------------- | ---------------------------------------------------------------------------------------------- |
|
||||
| `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` | Поточний знімок конфігурації (активний знімок runtime в пам’яті, коли доступний) |
|
||||
| `api.pluginConfig` | `Record<string, unknown>` | Специфічна для Plugin конфігурація з `plugins.entries.<id>.config` |
|
||||
| `api.runtime` | `PluginRuntime` | [Допоміжні засоби runtime](/uk/plugins/sdk-runtime) |
|
||||
| `api.logger` | `PluginLogger` | Scoped logger (`debug`, `info`, `warn`, `error`) |
|
||||
| `api.registrationMode` | `PluginRegistrationMode` | Поточний режим завантаження; `"setup-runtime"` — це легке вікно запуску/налаштування до повного entry |
|
||||
| `api.resolvePath(input)` | `(string) => string` | Resolve path відносно кореня Plugin |
|
||||
|
||||
## Внутрішня домовленість щодо модулів
|
||||
## Конвенція внутрішніх модулів
|
||||
|
||||
У своєму плагіні використовуйте локальні barrel-файли для внутрішніх імпортів:
|
||||
У межах вашого Plugin використовуйте локальні barrel-файли для внутрішніх імпортів:
|
||||
|
||||
```
|
||||
my-plugin/
|
||||
@ -352,57 +355,56 @@ my-plugin/
|
||||
```
|
||||
|
||||
<Warning>
|
||||
Ніколи не імпортуйте власний плагін через `openclaw/plugin-sdk/<your-plugin>`
|
||||
з виробничого коду. Спрямовуйте внутрішні імпорти через `./api.ts` або
|
||||
`./runtime-api.ts`. Шлях SDK — це лише зовнішній контракт.
|
||||
Ніколи не імпортуйте власний Plugin через `openclaw/plugin-sdk/<your-plugin>`
|
||||
з production-коду. Спрямовуйте внутрішні імпорти через `./api.ts` або
|
||||
`./runtime-api.ts`. Шлях SDK є лише зовнішнім контрактом.
|
||||
</Warning>
|
||||
|
||||
Публічні поверхні вбудованого плагіна, завантажені через фасад (`api.ts`, `runtime-api.ts`,
|
||||
`index.ts`, `setup-entry.ts` і подібні публічні вхідні файли), віддають перевагу
|
||||
активному знімку конфігурації середовища виконання, коли OpenClaw уже працює. Якщо знімка
|
||||
середовища виконання ще немає, вони повертаються до розв’язаної конфігурації на диску.
|
||||
Фасади упакованих вбудованих плагінів слід завантажувати через фасадні завантажувачі
|
||||
плагінів OpenClaw; прямі імпорти з `dist/extensions/...` обходять маніфест
|
||||
і перевірки бічного середовища виконання, які упаковані встановлення використовують
|
||||
для коду, яким володіє плагін.
|
||||
Публічні поверхні bundled Plugin, завантажені через facade (`api.ts`, `runtime-api.ts`,
|
||||
`index.ts`, `setup-entry.ts` і подібні публічні entry-файли), віддають перевагу
|
||||
активному знімку runtime config, коли OpenClaw уже працює. Якщо знімка runtime
|
||||
ще немає, вони повертаються до розв’язаної конфігурації на диску.
|
||||
Упаковані facades bundled Plugin мають завантажуватися через facade loaders Plugin
|
||||
OpenClaw; прямі імпорти з `dist/extensions/...` оминають маніфест
|
||||
і перевірки runtime sidecar, які встановлення пакетів використовують для коду, яким володіє Plugin.
|
||||
|
||||
Плагіни провайдерів можуть відкривати вузький локальний для плагіна контрактний
|
||||
barrel-файл, коли допоміжний засіб навмисно специфічний для провайдера й поки що
|
||||
не належить до загального підшляху SDK. Вбудовані приклади:
|
||||
Provider Plugin можуть відкривати вузький локальний для Plugin barrel контракту, коли
|
||||
helper навмисно є специфічним для провайдера і ще не належить до загального підшляху SDK.
|
||||
Bundled приклади:
|
||||
|
||||
- **Anthropic**: публічний шов `api.ts` / `contract-api.ts` для Claude
|
||||
beta-header і потокових допоміжних засобів `service_tier`.
|
||||
- **`@openclaw/openai-provider`**: `api.ts` експортує побудовники провайдерів,
|
||||
допоміжні засоби типових моделей і побудовники провайдерів реального часу.
|
||||
- **`@openclaw/openrouter-provider`**: `api.ts` експортує побудовник провайдера
|
||||
разом із допоміжними засобами онбордингу/конфігурації.
|
||||
- **Anthropic**: публічний seam `api.ts` / `contract-api.ts` для Claude
|
||||
beta-header і helpers потоків `service_tier`.
|
||||
- **`@openclaw/openai-provider`**: `api.ts` експортує provider builders,
|
||||
helpers типової моделі та realtime provider builders.
|
||||
- **`@openclaw/openrouter-provider`**: `api.ts` експортує provider builder
|
||||
плюс helpers onboarding/config.
|
||||
|
||||
<Warning>
|
||||
Виробничий код розширення також має уникати імпортів `openclaw/plugin-sdk/<other-plugin>`.
|
||||
Якщо допоміжний засіб справді спільний, просуньте його до нейтрального підшляху SDK,
|
||||
як-от `openclaw/plugin-sdk/speech`, `.../provider-model-shared` або іншої
|
||||
поверхні, орієнтованої на можливості, замість зв’язування двох плагінів між собою.
|
||||
Production-коду Extension також слід уникати імпортів `openclaw/plugin-sdk/<other-plugin>`.
|
||||
Якщо helper справді спільний, підніміть його до нейтрального підшляху SDK,
|
||||
такого як `openclaw/plugin-sdk/speech`, `.../provider-model-shared` або інша
|
||||
поверхня, орієнтована на capability, замість зв’язування двох Plugin між собою.
|
||||
</Warning>
|
||||
|
||||
## Пов’язане
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Точки входу" icon="door-open" href="/uk/plugins/sdk-entrypoints">
|
||||
Параметри `definePluginEntry` і `defineChannelPluginEntry`.
|
||||
Опції `definePluginEntry` і `defineChannelPluginEntry`.
|
||||
</Card>
|
||||
<Card title="Допоміжні засоби середовища виконання" icon="gears" href="/uk/plugins/sdk-runtime">
|
||||
Повний довідник простору імен `api.runtime`.
|
||||
Повна довідка простору імен `api.runtime`.
|
||||
</Card>
|
||||
<Card title="Налаштування та конфігурація" icon="sliders" href="/uk/plugins/sdk-setup">
|
||||
Пакування, маніфести та схеми конфігурації.
|
||||
</Card>
|
||||
<Card title="Тестування" icon="vial" href="/uk/plugins/sdk-testing">
|
||||
Тестові утиліти та правила лінтингу.
|
||||
Утиліти для тестування та правила lint.
|
||||
</Card>
|
||||
<Card title="Міграція SDK" icon="arrows-turn-right" href="/uk/plugins/sdk-migration">
|
||||
Міграція із застарілих поверхонь.
|
||||
</Card>
|
||||
<Card title="Внутрішні механізми Plugin" icon="diagram-project" href="/uk/plugins/architecture">
|
||||
Глибока архітектура та модель можливостей.
|
||||
<Card title="Внутрішній устрій Plugin" icon="diagram-project" href="/uk/plugins/architecture">
|
||||
Поглиблена архітектура та модель можливостей.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
---
|
||||
read_when:
|
||||
- Налаштування розбору директив мислення, швидкого режиму або докладного режиму чи їхніх значень за замовчуванням
|
||||
- Налаштування парсингу або стандартних значень для мислення, швидкого режиму чи докладної директиви
|
||||
summary: Синтаксис директив для /think, /fast, /verbose, /trace і видимості міркувань
|
||||
title: Рівні мислення
|
||||
x-i18n:
|
||||
generated_at: "2026-05-04T00:48:56Z"
|
||||
generated_at: "2026-05-04T18:18:28Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 6fa1b0a2b5f7b93a706488c3ad39dfe08c08eed0bdd30880eb4c07d730ee4d4f
|
||||
source_hash: fcd1cd76ca5d0b08656e0629df656ad8aa037201d8de68093b3e46eb0708f811
|
||||
source_path: tools/thinking.md
|
||||
workflow: 16
|
||||
---
|
||||
@ -20,124 +20,125 @@ x-i18n:
|
||||
- low → “think hard”
|
||||
- medium → “think harder”
|
||||
- high → “ultrathink” (максимальний бюджет)
|
||||
- xhigh → “ultrathink+” (моделі GPT-5.2+ і Codex, а також effort Anthropic Claude Opus 4.7)
|
||||
- adaptive → адаптивне мислення, кероване провайдером (підтримується для Claude 4.6 на Anthropic/Bedrock, Anthropic Claude Opus 4.7 і динамічного мислення Google Gemini)
|
||||
- max → максимальне reasoning провайдера (Anthropic Claude Opus 4.7; Ollama відображає це на свій найвищий нативний effort `think`)
|
||||
- `x-high`, `x_high`, `extra-high`, `extra high` і `extra_high` відображаються на `xhigh`.
|
||||
- `highest` відображається на `high`.
|
||||
- Примітки щодо провайдерів:
|
||||
- Меню й засоби вибору мислення керуються профілем провайдера. Provider plugins оголошують точний набір рівнів для вибраної моделі, включно з мітками на кшталт бінарного `on`.
|
||||
- `adaptive`, `xhigh` і `max` рекламуються лише для профілів провайдера/моделі, які їх підтримують. Введені директиви для непідтримуваних рівнів відхиляються з чинними параметрами цієї моделі.
|
||||
- xhigh → “ultrathink+” (моделі GPT-5.2+ і Codex, а також Anthropic Claude Opus 4.7 effort)
|
||||
- adaptive → адаптивне мислення, кероване провайдером (підтримується для Claude 4.6 в Anthropic/Bedrock, Anthropic Claude Opus 4.7 і Google Gemini dynamic thinking)
|
||||
- max → максимальне міркування провайдера (Anthropic Claude Opus 4.7; Ollama зіставляє це зі своїм найвищим нативним рівнем `think`)
|
||||
- `x-high`, `x_high`, `extra-high`, `extra high` і `extra_high` зіставляються з `xhigh`.
|
||||
- `highest` зіставляється з `high`.
|
||||
- Нотатки щодо провайдерів:
|
||||
- Меню та вибір мислення керуються профілем провайдера. Provider plugins оголошують точний набір рівнів для вибраної моделі, зокрема мітки на кшталт бінарного `on`.
|
||||
- `adaptive`, `xhigh` і `max` рекламуються лише для профілів провайдера/моделі, які їх підтримують. Типізовані директиви для непідтримуваних рівнів відхиляються з коректними параметрами для цієї моделі.
|
||||
- Наявні збережені непідтримувані рівні перепризначаються за рангом профілю провайдера. `adaptive` повертається до `medium` на неадаптивних моделях, а `xhigh` і `max` повертаються до найбільшого підтримуваного не-`off` рівня для вибраної моделі.
|
||||
- Моделі Anthropic Claude 4.6 за замовчуванням використовують `adaptive`, якщо явний рівень мислення не задано.
|
||||
- Anthropic Claude Opus 4.7 не використовує адаптивне мислення за замовчуванням. Його API effort за замовчуванням лишається у власності провайдера, якщо ви явно не задасте рівень мислення.
|
||||
- Anthropic Claude Opus 4.7 відображає `/think xhigh` на адаптивне мислення плюс `output_config.effort: "xhigh"`, оскільки `/think` є директивою мислення, а `xhigh` є налаштуванням effort Opus 4.7.
|
||||
- Anthropic Claude Opus 4.7 також надає `/think max`; це відображається на той самий шлях максимального effort, що належить провайдеру.
|
||||
- Моделі DeepSeek V4 надають `/think xhigh|max`; обидва відображаються на DeepSeek `reasoning_effort: "max"`, тоді як нижчі не-`off` рівні відображаються на `high`.
|
||||
- Моделі Ollama з підтримкою мислення надають `/think low|medium|high|max`; `max` відображається на нативний `think: "high"`, оскільки нативний API Ollama приймає рядки effort `low`, `medium` і `high`.
|
||||
- Моделі OpenAI GPT відображають `/think` через підтримку effort у специфічному для моделі Responses API. `/think off` надсилає `reasoning.effort: "none"` лише тоді, коли цільова модель це підтримує; інакше OpenClaw пропускає вимкнене reasoning-навантаження замість надсилання непідтримуваного значення.
|
||||
- Власні записи каталогу, сумісні з OpenAI, можуть увімкнути `/think xhigh`, задавши `models.providers.<provider>.models[].compat.supportedReasoningEfforts` так, щоб він містив `"xhigh"`. Це використовує ті самі compat-метадані, що відображають вихідні OpenAI reasoning effort payloads, тож меню, перевірка сесії, CLI агента й `llm-task` узгоджуються з поведінкою транспорту.
|
||||
- Застарілі налаштовані посилання OpenRouter Hunter Alpha пропускають ін’єкцію reasoning через проксі, оскільки цей виведений з експлуатації маршрут міг повертати текст фінальної відповіді через поля reasoning.
|
||||
- Google Gemini відображає `/think adaptive` на динамічне мислення Gemini, що належить провайдеру. Запити Gemini 3 пропускають фіксований `thinkingLevel`, тоді як запити Gemini 2.5 надсилають `thinkingBudget: -1`; фіксовані рівні все одно відображаються на найближчий Gemini `thinkingLevel` або бюджет для цієї сім’ї моделей.
|
||||
- MiniMax (`minimax/*`) на Anthropic-сумісному потоковому шляху за замовчуванням використовує `thinking: { type: "disabled" }`, якщо ви явно не задасте мислення в параметрах моделі або параметрах запиту. Це запобігає витоку дельт `reasoning_content` з ненативного формату потоку Anthropic від MiniMax.
|
||||
- Z.AI (`zai/*`) підтримує лише бінарне мислення (`on`/`off`). Будь-який рівень, що не є `off`, вважається `on` (відображається на `low`).
|
||||
- Moonshot (`moonshot/*`) відображає `/think off` на `thinking: { type: "disabled" }`, а будь-який рівень, що не є `off`, на `thinking: { type: "enabled" }`. Коли мислення ввімкнено, Moonshot приймає лише `tool_choice` `auto|none`; OpenClaw нормалізує несумісні значення до `auto`.
|
||||
- Моделі Anthropic Claude 4.6 за замовчуванням використовують `adaptive`, коли явний рівень мислення не задано.
|
||||
- Anthropic Claude Opus 4.7 не використовує адаптивне мислення за замовчуванням. Його типовий API effort лишається під контролем провайдера, якщо ви явно не задасте рівень мислення.
|
||||
- Anthropic Claude Opus 4.7 зіставляє `/think xhigh` з адаптивним мисленням плюс `output_config.effort: "xhigh"`, тому що `/think` є директивою мислення, а `xhigh` є налаштуванням effort для Opus 4.7.
|
||||
- Anthropic Claude Opus 4.7 також надає `/think max`; це зіставляється з тим самим шляхом максимального effort, керованим провайдером.
|
||||
- Моделі DeepSeek V4 надають `/think xhigh|max`; обидва зіставляються з DeepSeek `reasoning_effort: "max"`, тоді як нижчі не-`off` рівні зіставляються з `high`.
|
||||
- Моделі Ollama з підтримкою мислення надають `/think low|medium|high|max`; `max` зіставляється з нативним `think: "high"`, тому що нативний API Ollama приймає рядки effort `low`, `medium` і `high`.
|
||||
- Моделі OpenAI GPT зіставляють `/think` через підтримку effort у Responses API, специфічну для моделі. `/think off` надсилає `reasoning.effort: "none"` лише тоді, коли цільова модель це підтримує; інакше OpenClaw пропускає вимкнене корисне навантаження міркування замість надсилання непідтримуваного значення.
|
||||
- Користувацькі сумісні з OpenAI записи каталогу можуть увімкнути підтримку `/think xhigh`, задавши `models.providers.<provider>.models[].compat.supportedReasoningEfforts` так, щоб він містив `"xhigh"`. Це використовує ті самі метадані сумісності, які зіставляють вихідні корисні навантаження OpenAI reasoning effort, тож меню, валідація сеансу, agent CLI і `llm-task` узгоджуються з поведінкою транспорту.
|
||||
- Застарілі налаштовані посилання OpenRouter Hunter Alpha пропускають інʼєкцію проксі-міркування, тому що цей вилучений маршрут міг повертати текст фінальної відповіді через поля міркування.
|
||||
- Google Gemini зіставляє `/think adaptive` з керованим провайдером dynamic thinking Gemini. Запити Gemini 3 пропускають фіксований `thinkingLevel`, тоді як запити Gemini 2.5 надсилають `thinkingBudget: -1`; фіксовані рівні й далі зіставляються з найближчим Gemini `thinkingLevel` або бюджетом для цієї сімʼї моделей.
|
||||
- MiniMax (`minimax/*`) на Anthropic-сумісному потоковому шляху за замовчуванням використовує `thinking: { type: "disabled" }`, якщо ви явно не задасте мислення в параметрах моделі або параметрах запиту. Це запобігає витоку дельт `reasoning_content` із ненативного потокового формату Anthropic від MiniMax.
|
||||
- Z.AI (`zai/*`) підтримує лише бінарне мислення (`on`/`off`). Будь-який не-`off` рівень вважається `on` (зіставляється з `low`).
|
||||
- Moonshot (`moonshot/*`) зіставляє `/think off` з `thinking: { type: "disabled" }`, а будь-який не-`off` рівень з `thinking: { type: "enabled" }`. Коли мислення увімкнене, Moonshot приймає лише `tool_choice` `auto|none`; OpenClaw нормалізує несумісні значення до `auto`.
|
||||
|
||||
## Порядок вирішення
|
||||
## Порядок визначення
|
||||
|
||||
1. Вбудована директива в повідомленні (застосовується лише до цього повідомлення).
|
||||
2. Перевизначення сесії (задається надсиланням повідомлення, що містить лише директиву).
|
||||
3. Стандартне значення для окремого агента (`agents.list[].thinkingDefault` у конфігурації).
|
||||
4. Глобальне стандартне значення (`agents.defaults.thinkingDefault` у конфігурації).
|
||||
5. Резервний варіант: стандартне значення, оголошене провайдером, коли доступне; інакше моделі з підтримкою reasoning вирішуються в `medium` або найближчий підтримуваний не-`off` рівень для цієї моделі, а моделі без reasoning лишаються `off`.
|
||||
2. Перевизначення сеансу (задається надсиланням повідомлення лише з директивою).
|
||||
3. Типове значення для агента (`agents.list[].thinkingDefault` у конфігурації).
|
||||
4. Глобальне типове значення (`agents.defaults.thinkingDefault` у конфігурації).
|
||||
5. Резервний варіант: оголошене провайдером типове значення, якщо доступне; інакше моделі з підтримкою міркування визначаються як `medium` або найближчий підтримуваний не-`off` рівень для цієї моделі, а моделі без міркування лишаються `off`.
|
||||
|
||||
## Задання стандартного значення сесії
|
||||
## Налаштування типового значення сеансу
|
||||
|
||||
- Надішліть повідомлення, яке містить **лише** директиву (пробіли дозволені), наприклад `/think:medium` або `/t high`.
|
||||
- Це закріплюється для поточної сесії (за замовчуванням для кожного відправника); очищується через `/think:off` або скидання сесії через бездіяльність.
|
||||
- Надсилається відповідь-підтвердження (`Thinking level set to high.` / `Thinking disabled.`). Якщо рівень недійсний (наприклад, `/thinking big`), команда відхиляється з підказкою, а стан сесії лишається без змін.
|
||||
- Це закріплюється для поточного сеансу (типово для кожного відправника); очищується через `/think:off` або скидання після простою сеансу.
|
||||
- Надсилається відповідь-підтвердження (`Thinking level set to high.` / `Thinking disabled.`). Якщо рівень некоректний (наприклад, `/thinking big`), команда відхиляється з підказкою, а стан сеансу лишається незмінним.
|
||||
- Надішліть `/think` (або `/think:`) без аргументу, щоб побачити поточний рівень мислення.
|
||||
|
||||
## Застосування агентом
|
||||
## Застосування за агентом
|
||||
|
||||
- **Вбудований Pi**: вирішений рівень передається до середовища виконання агента Pi в межах процесу.
|
||||
- **Вбудований Pi**: визначений рівень передається в рантайм агента Pi в межах процесу.
|
||||
- **Бекенд Claude CLI**: не-`off` рівні передаються в Claude Code як `--effort` під час використання `claude-cli`; див. [CLI-бекенди](/uk/gateway/cli-backends).
|
||||
|
||||
## Швидкий режим (/fast)
|
||||
|
||||
- Рівні: `on|off`.
|
||||
- Повідомлення лише з директивою перемикає перевизначення швидкого режиму сесії та відповідає `Fast mode enabled.` / `Fast mode disabled.`.
|
||||
- Повідомлення лише з директивою перемикає перевизначення швидкого режиму сеансу й відповідає `Fast mode enabled.` / `Fast mode disabled.`.
|
||||
- Надішліть `/fast` (або `/fast status`) без режиму, щоб побачити поточний ефективний стан швидкого режиму.
|
||||
- OpenClaw вирішує швидкий режим у такому порядку:
|
||||
1. Вбудований/лише директивний `/fast on|off`
|
||||
2. Перевизначення сесії
|
||||
3. Стандартне значення для окремого агента (`agents.list[].fastModeDefault`)
|
||||
4. Конфігурація для окремої моделі: `agents.defaults.models["<provider>/<model>"].params.fastMode`
|
||||
- OpenClaw визначає швидкий режим у такому порядку:
|
||||
1. Вбудована директива або повідомлення лише з директивою `/fast on|off`
|
||||
2. Перевизначення сеансу
|
||||
3. Типове значення для агента (`agents.list[].fastModeDefault`)
|
||||
4. Конфігурація для моделі: `agents.defaults.models["<provider>/<model>"].params.fastMode`
|
||||
5. Резервний варіант: `off`
|
||||
- Для `openai/*` швидкий режим відображається на пріоритетну обробку OpenAI шляхом надсилання `service_tier=priority` у підтримуваних запитах Responses.
|
||||
- Для `openai/*` швидкий режим зіставляється з пріоритетною обробкою OpenAI через надсилання `service_tier=priority` у підтримуваних запитах Responses.
|
||||
- Для `openai-codex/*` швидкий режим надсилає той самий прапорець `service_tier=priority` у Codex Responses. OpenClaw зберігає один спільний перемикач `/fast` для обох шляхів автентифікації.
|
||||
- Для прямих публічних запитів `anthropic/*`, включно з OAuth-автентифікованим трафіком, надісланим до `api.anthropic.com`, швидкий режим відображається на рівні сервісу Anthropic: `/fast on` задає `service_tier=auto`, `/fast off` задає `service_tier=standard_only`.
|
||||
- Для прямих публічних запитів `anthropic/*`, зокрема OAuth-автентифікованого трафіку, надісланого до `api.anthropic.com`, швидкий режим зіставляється з рівнями сервісу Anthropic: `/fast on` задає `service_tier=auto`, `/fast off` задає `service_tier=standard_only`.
|
||||
- Для `minimax/*` на Anthropic-сумісному шляху `/fast on` (або `params.fastMode: true`) переписує `MiniMax-M2.7` на `MiniMax-M2.7-highspeed`.
|
||||
- Явні параметри моделі Anthropic `serviceTier` / `service_tier` перевизначають стандартне значення швидкого режиму, коли задано обидва. OpenClaw все одно пропускає ін’єкцію рівня сервісу Anthropic для не-Anthropic базових URL проксі.
|
||||
- `/status` показує `Fast` лише коли швидкий режим увімкнено.
|
||||
- Явні параметри моделі Anthropic `serviceTier` / `service_tier` перевизначають типове значення швидкого режиму, коли задано обидва. OpenClaw і далі пропускає інʼєкцію рівня сервісу Anthropic для базових URL проксі, які не є Anthropic.
|
||||
- `/status` показує `Fast` лише тоді, коли швидкий режим увімкнено.
|
||||
|
||||
## Докладні директиви (/verbose або /v)
|
||||
## Директиви докладності (/verbose або /v)
|
||||
|
||||
- Рівні: `on` (мінімальний) | `full` | `off` (за замовчуванням).
|
||||
- Повідомлення лише з директивою перемикає докладність сесії та відповідає `Verbose logging enabled.` / `Verbose logging disabled.`; недійсні рівні повертають підказку без зміни стану.
|
||||
- `/verbose off` зберігає явне перевизначення сесії; очистьте його через UI Sessions, вибравши `inherit`.
|
||||
- Вбудована директива впливає лише на це повідомлення; інакше застосовуються стандартні значення сесії/глобальні стандартні значення.
|
||||
- Рівні: `on` (мінімальний) | `full` | `off` (типово).
|
||||
- Повідомлення лише з директивою перемикає докладність сеансу й відповідає `Verbose logging enabled.` / `Verbose logging disabled.`; некоректні рівні повертають підказку без зміни стану.
|
||||
- `/verbose off` зберігає явне перевизначення сеансу; очистьте його через UI сеансів, вибравши `inherit`.
|
||||
- Вбудована директива впливає лише на це повідомлення; інакше застосовуються типові значення сеансу/глобальні типові значення.
|
||||
- Надішліть `/verbose` (або `/verbose:`) без аргументу, щоб побачити поточний рівень докладності.
|
||||
- Коли докладність увімкнена, агенти, що видають структуровані результати інструментів (Pi, інші JSON-агенти), надсилають кожен виклик інструмента назад як окреме повідомлення лише з метаданими, з префіксом `<emoji> <tool-name>: <arg>`, коли доступно. Ці підсумки інструментів надсилаються одразу після запуску кожного інструмента (окремі бульбашки), а не як потокові дельти.
|
||||
- Підсумки помилок інструментів лишаються видимими у звичайному режимі, але необроблені суфікси деталей помилок приховані, якщо докладність не є `on` або `full`.
|
||||
- Коли докладність має значення `full`, виходи інструментів також пересилаються після завершення (окрема бульбашка, обрізана до безпечної довжини). Якщо перемкнути `/verbose on|full|off`, поки виконання триває, наступні бульбашки інструментів враховують нове налаштування.
|
||||
- `agents.defaults.toolProgressDetail` керує формою підсумків інструментів `/verbose` і рядків інструментів у чернетці прогресу. Використовуйте `"explain"` (за замовчуванням) для компактних людських міток, як-от `🛠️ Exec: checking JS syntax`; використовуйте `"raw"`, коли також потрібно додати необроблену команду/деталі для налагодження. `agents.list[].toolProgressDetail` для окремого агента перевизначає стандартне значення.
|
||||
- Коли докладність увімкнена, агенти, що виводять структуровані результати інструментів (Pi, інші JSON-агенти), надсилають кожен виклик інструмента назад як окреме повідомлення лише з метаданими, з префіксом `<emoji> <tool-name>: <arg>`, коли доступно. Ці підсумки інструментів надсилаються одразу після запуску кожного інструмента (окремі бульбашки), а не як потокові дельти.
|
||||
- Підсумки помилок інструментів лишаються видимими у звичайному режимі, але суфікси з необробленими деталями помилок приховані, якщо докладність не `on` або `full`.
|
||||
- Коли докладність дорівнює `full`, результати інструментів також пересилаються після завершення (окрема бульбашка, обрізана до безпечної довжини). Якщо перемкнути `/verbose on|full|off`, поки виконання триває, наступні бульбашки інструментів врахують нове налаштування.
|
||||
- `agents.defaults.toolProgressDetail` керує формою підсумків інструментів `/verbose` і рядків інструментів у чернетках прогресу. Використовуйте `"explain"` (типово) для компактних зрозумілих міток на кшталт `🛠️ Exec: checking JS syntax`; використовуйте `"raw"`, коли також потрібно додавати необроблену команду/деталі для налагодження. `agents.list[].toolProgressDetail` для окремого агента перевизначає типове значення.
|
||||
- `explain`: `🛠️ Exec: check JS syntax for /tmp/app.js`
|
||||
- `raw`: `🛠️ Exec: check JS syntax for /tmp/app.js, node --check /tmp/app.js`
|
||||
|
||||
## Директиви трасування Plugin (/trace)
|
||||
|
||||
- Рівні: `on` | `off` (за замовчуванням).
|
||||
- Повідомлення лише з директивою перемикає вивід трасування Plugin у сесії та відповідає `Plugin trace enabled.` / `Plugin trace disabled.`.
|
||||
- Вбудована директива впливає лише на це повідомлення; інакше застосовуються стандартні значення сесії/глобальні стандартні значення.
|
||||
- Рівні: `on` | `off` (типово).
|
||||
- Повідомлення лише з директивою перемикає вивід трасування Plugin у сеансі й відповідає `Plugin trace enabled.` / `Plugin trace disabled.`.
|
||||
- Вбудована директива впливає лише на це повідомлення; інакше застосовуються типові значення сеансу/глобальні типові значення.
|
||||
- Надішліть `/trace` (або `/trace:`) без аргументу, щоб побачити поточний рівень трасування.
|
||||
- `/trace` вужчий за `/verbose`: він відкриває лише рядки трасування/налагодження, що належать Plugin, як-от налагоджувальні підсумки Active Memory.
|
||||
- Рядки трасування можуть з’являтися в `/status` і як подальше діагностичне повідомлення після звичайної відповіді асистента.
|
||||
- `/trace` вужчий за `/verbose`: він показує лише рядки трасування/налагодження, що належать Plugin, наприклад підсумки налагодження Active Memory.
|
||||
- Рядки трасування можуть зʼявлятися в `/status` і як подальше діагностичне повідомлення після звичайної відповіді асистента.
|
||||
|
||||
## Видимість reasoning (/reasoning)
|
||||
## Видимість міркування (/reasoning)
|
||||
|
||||
- Рівні: `on|off|stream`.
|
||||
- Повідомлення лише з директивою перемикає, чи показуються блоки мислення у відповідях.
|
||||
- Коли ввімкнено, reasoning надсилається як **окреме повідомлення** з префіксом `Reasoning:`.
|
||||
- `stream` (лише Telegram): потоково передає reasoning у бульбашку чернетки Telegram, поки генерується відповідь, а потім надсилає фінальну відповідь без reasoning.
|
||||
- Коли увімкнено, міркування надсилається як **окреме повідомлення** з префіксом `Reasoning:`.
|
||||
- `stream` (лише Telegram): транслює міркування в чернеткову бульбашку Telegram, поки генерується відповідь, а потім надсилає фінальну відповідь без міркування.
|
||||
- Псевдонім: `/reason`.
|
||||
- Надішліть `/reasoning` (або `/reasoning:`) без аргументу, щоб побачити поточний рівень reasoning.
|
||||
- Порядок вирішення: вбудована директива, потім перевизначення сесії, потім стандартне значення для окремого агента (`agents.list[].reasoningDefault`), потім резервний варіант (`off`).
|
||||
- Надішліть `/reasoning` (або `/reasoning:`) без аргументу, щоб побачити поточний рівень міркування.
|
||||
- Порядок визначення: вбудована директива, потім перевизначення сеансу, потім типове значення для агента (`agents.list[].reasoningDefault`), потім резервний варіант (`off`).
|
||||
|
||||
Некоректні теги reasoning локальної моделі обробляються консервативно. Закриті блоки `<think>...</think>` лишаються прихованими у звичайних відповідях, а незакрите reasoning після вже видимого тексту також приховується. Якщо відповідь повністю обгорнута в один незакритий початковий тег і інакше була б доставлена як порожній текст, OpenClaw видаляє некоректний початковий тег і доставляє решту тексту.
|
||||
Некоректні теги міркування локальних моделей обробляються консервативно. Закриті блоки `<think>...</think>` лишаються прихованими у звичайних відповідях, а незакрите міркування після вже видимого тексту також приховується. Якщо відповідь повністю обгорнута в один незакритий початковий тег і інакше була б доставлена як порожній текст, OpenClaw видаляє некоректний початковий тег і доставляє решту тексту.
|
||||
|
||||
## Пов’язане
|
||||
## Повʼязане
|
||||
|
||||
- Документація підвищеного режиму розміщена в [Підвищений режим](/uk/tools/elevated).
|
||||
- Документація режиму підвищених прав міститься в [Режим підвищених прав](/uk/tools/elevated).
|
||||
|
||||
## Heartbeat
|
||||
|
||||
- Тіло зонду Heartbeat є налаштованим запитом Heartbeat (за замовчуванням: `Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.`). Вбудовані директиви в повідомленні Heartbeat застосовуються як зазвичай (але уникайте зміни стандартних значень сесії з Heartbeat).
|
||||
- Доставка Heartbeat за замовчуванням обмежується лише фінальним payload. Щоб також надсилати окреме повідомлення `Reasoning:` (коли доступне), задайте `agents.defaults.heartbeat.includeReasoning: true` або для окремого агента `agents.list[].heartbeat.includeReasoning: true`.
|
||||
- Тіло зонду Heartbeat є налаштованим запитом heartbeat (типово: `Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.`). Вбудовані директиви в повідомленні heartbeat застосовуються як зазвичай (але уникайте зміни типових значень сеансу з heartbeat).
|
||||
- Доставка Heartbeat за замовчуванням обмежується лише фінальним корисним навантаженням. Щоб також надсилати окреме повідомлення `Reasoning:` (коли доступно), задайте `agents.defaults.heartbeat.includeReasoning: true` або для окремого агента `agents.list[].heartbeat.includeReasoning: true`.
|
||||
|
||||
## UI вебчату
|
||||
|
||||
- Селектор мислення у вебчаті віддзеркалює збережений рівень сесії зі сховища/конфігурації вхідної сесії під час завантаження сторінки.
|
||||
- Вибір іншого рівня негайно записує перевизначення сесії через `sessions.patch`; він не чекає наступного надсилання й не є одноразовим перевизначенням `thinkingOnce`.
|
||||
- Перший параметр завжди `Default (<resolved level>)`, де вирішене стандартне значення походить із профілю мислення провайдера активної моделі сесії плюс та сама резервна логіка, яку використовують `/status` і `session_status`.
|
||||
- Засіб вибору використовує `thinkingLevels`, повернуті рядком/стандартними значеннями сесії Gateway, а `thinkingOptions` зберігається як застарілий список міток. UI браузера не зберігає власного списку regex провайдерів; Plugins володіють наборами рівнів для конкретних моделей.
|
||||
- `/think:<level>` все ще працює й оновлює той самий збережений рівень сесії, тому директиви чату й засіб вибору лишаються синхронізованими.
|
||||
- Селектор мислення вебчату віддзеркалює збережений рівень сеансу зі сховища/конфігурації вхідного сеансу під час завантаження сторінки.
|
||||
- Вибір іншого рівня негайно записує перевизначення сеансу через `sessions.patch`; він не чекає наступного надсилання й не є одноразовим перевизначенням `thinkingOnce`.
|
||||
- Перший параметр завжди `Default (<resolved level>)`, де визначене типове значення береться з профілю мислення провайдера активної моделі сеансу плюс та сама резервна логіка, яку використовують `/status` і `session_status`.
|
||||
- Селектор використовує `thinkingLevels`, повернені рядком/типовими значеннями сеансу Gateway, а `thinkingOptions` збережено як застарілий список міток. UI браузера не зберігає власний список регулярних виразів провайдерів; plugins володіють наборами рівнів, специфічними для моделей.
|
||||
- `/think:<level>` і далі працює та оновлює той самий збережений рівень сеансу, тож директиви чату й селектор лишаються синхронізованими.
|
||||
|
||||
## Профілі провайдерів
|
||||
|
||||
- Plugin-и постачальника можуть надавати `resolveThinkingProfile(ctx)`, щоб визначати підтримувані моделлю рівні та стандартне значення.
|
||||
- Plugin-и постачальника, які проксіюють моделі Claude, мають повторно використовувати `resolveClaudeThinkingProfile(modelId)` з `openclaw/plugin-sdk/provider-model-shared`, щоб прямі каталоги Anthropic і проксі-каталоги залишалися узгодженими.
|
||||
- Кожен рівень профілю має збережений канонічний `id` (`off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `adaptive` або `max`) і може містити відображувану `label`. Бінарні постачальники використовують `{ id: "low", label: "on" }`.
|
||||
- Інструментальні Plugin-и, яким потрібно перевіряти явне перевизначення мислення, мають використовувати `api.runtime.agent.resolveThinkingPolicy({ provider, model })` разом із `api.runtime.agent.normalizeThinkingLevel(...)`; їм не слід зберігати власні списки рівнів постачальників/моделей.
|
||||
- Інструментальні Plugin-и з доступом до налаштованих метаданих користувацьких моделей можуть передавати `catalog` у `resolveThinkingPolicy`, щоб явні увімкнення `compat.supportedReasoningEfforts` враховувалися у перевірці на боці Plugin-а.
|
||||
- Plugin провайдерів можуть надавати `resolveThinkingProfile(ctx)`, щоб визначати підтримувані моделлю рівні та значення за замовчуванням.
|
||||
- Plugin провайдерів, які проксіюють моделі Claude, мають повторно використовувати `resolveClaudeThinkingProfile(modelId)` з `openclaw/plugin-sdk/provider-model-shared`, щоб прямі каталоги Anthropic і проксі-каталоги залишалися узгодженими.
|
||||
- Кожен рівень профілю має збережений канонічний `id` (`off`, `minimal`, `low`, `medium`, `high`, `xhigh`, `adaptive` або `max`) і може містити відображуваний `label`. Бінарні провайдери використовують `{ id: "low", label: "on" }`.
|
||||
- Tool Plugin, яким потрібно перевіряти явне перевизначення мислення, мають використовувати `api.runtime.agent.resolveThinkingPolicy({ provider, model })` разом із `api.runtime.agent.normalizeThinkingLevel(...)`; вони не повинні зберігати власні списки рівнів провайдера/моделі.
|
||||
- Tool Plugin із доступом до налаштованих метаданих користувацької моделі можуть передавати `catalog` у `resolveThinkingPolicy`, щоб opt-in `compat.supportedReasoningEfforts` відображалися у валідації на боці Plugin.
|
||||
- Опубліковані застарілі хуки (`supportsXHighThinking`, `isBinaryThinking` і `resolveDefaultThinkingLevel`) залишаються адаптерами сумісності, але нові користувацькі набори рівнів мають використовувати `resolveThinkingProfile`.
|
||||
- Рядки/стандартні значення Gateway надають `thinkingLevels`, `thinkingOptions` і `thinkingDefault`, щоб клієнти ACP/чату відображали ті самі ідентифікатори та мітки профілів, які використовує перевірка під час виконання.
|
||||
- Рядки/значення за замовчуванням Gateway надають `thinkingLevels`, `thinkingOptions` і `thinkingDefault`, щоб клієнти ACP/чату відображали ті самі ідентифікатори й мітки профілю, які використовує валідація під час виконання.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user