chore(i18n): refresh uk translations
This commit is contained in:
parent
2d6ef795f3
commit
d32062ba16
@ -1,61 +1,61 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете створити новий Plugin для OpenClaw
|
||||
- Вам потрібен короткий посібник із розробки Plugin
|
||||
- Ви додаєте до OpenClaw новий канал, провайдера, інструмент або іншу можливість
|
||||
- Вам потрібен швидкий старт для розробки Plugin
|
||||
- Ви додаєте новий канал, провайдера, інструмент або іншу можливість до OpenClaw
|
||||
sidebarTitle: Getting Started
|
||||
summary: Створіть свій перший Plugin для OpenClaw за кілька хвилин
|
||||
title: Створення плагінів
|
||||
summary: Створіть свій перший Plugin для OpenClaw за лічені хвилини
|
||||
title: Створення Plugin
|
||||
x-i18n:
|
||||
generated_at: "2026-05-02T05:25:37Z"
|
||||
generated_at: "2026-05-02T13:56:49Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 2cf85c1c1c1f6ae6752f7fb8d842a420bffac6ebaf4d64803fb8bb8ab9f6f83c
|
||||
source_hash: f4f810d831db26d1e4efecf691590980b3ba1d958c4b4af3cc6a7ca9ea155a36
|
||||
source_path: plugins/building-plugins.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Плагіни розширюють OpenClaw новими можливостями: каналами, провайдерами моделей,
|
||||
мовленням, транскрипцією в реальному часі, голосом у реальному часі, розумінням медіа, генерацією зображень,
|
||||
генерацією відео, вебзавантаженням, вебпошуком, інструментами агента або будь-якою
|
||||
комбінацією.
|
||||
Plugins розширюють OpenClaw новими можливостями: канали, провайдери моделей,
|
||||
мовлення, транскрибування в реальному часі, голос у реальному часі, розуміння медіа, генерація зображень,
|
||||
генерація відео, отримання вебвмісту, вебпошук, інструменти агента або будь-яка
|
||||
комбінація.
|
||||
|
||||
Вам не потрібно додавати свій плагін до репозиторію OpenClaw. Опублікуйте його в
|
||||
Вам не потрібно додавати свій plugin до репозиторію OpenClaw. Опублікуйте його в
|
||||
[ClawHub](/uk/tools/clawhub), і користувачі встановлять його за допомогою
|
||||
`openclaw plugins install <package-name>`. OpenClaw спершу пробує ClawHub і
|
||||
`openclaw plugins install <package-name>`. OpenClaw спочатку пробує ClawHub і
|
||||
автоматично повертається до npm для пакетів, які все ще використовують розповсюдження через npm.
|
||||
|
||||
## Передумови
|
||||
|
||||
- Node >= 22 і менеджер пакетів (npm або pnpm)
|
||||
- Знайомство з TypeScript (ESM)
|
||||
- Для плагінів у репозиторії: репозиторій клоновано й виконано `pnpm install`. Розробка плагінів
|
||||
із checkout вихідного коду підтримує лише pnpm, оскільки OpenClaw завантажує вбудовані
|
||||
плагіни з workspace-пакетів `extensions/*`.
|
||||
- Для plugins у репозиторії: репозиторій клоновано і виконано `pnpm install`. Розробка plugin
|
||||
з checkout вихідного коду підтримує лише pnpm, тому що OpenClaw завантажує вбудовані
|
||||
plugins із workspace-пакетів `extensions/*`.
|
||||
|
||||
## Який тип плагіна?
|
||||
## Який тип plugin?
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="Плагін каналу" icon="messages-square" href="/uk/plugins/sdk-channel-plugins">
|
||||
<Card title="Plugin каналу" icon="messages-square" href="/uk/plugins/sdk-channel-plugins">
|
||||
Підключіть OpenClaw до платформи обміну повідомленнями (Discord, IRC тощо)
|
||||
</Card>
|
||||
<Card title="Плагін провайдера" icon="cpu" href="/uk/plugins/sdk-provider-plugins">
|
||||
Додайте провайдера моделей (LLM, проксі або власний endpoint)
|
||||
<Card title="Plugin провайдера" icon="cpu" href="/uk/plugins/sdk-provider-plugins">
|
||||
Додайте провайдера моделей (LLM, проксі або власну кінцеву точку)
|
||||
</Card>
|
||||
<Card title="Плагін інструмента / hook" icon="wrench" href="/uk/plugins/hooks">
|
||||
<Card title="Plugin інструменту / hook" icon="wrench" href="/uk/plugins/hooks">
|
||||
Зареєструйте інструменти агента, event hooks або сервіси — продовжуйте нижче
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
Для плагіна каналу, який не гарантовано буде встановлено під час запуску onboarding/setup,
|
||||
Для plugin каналу, який не гарантовано буде встановлений під час onboarding/setup,
|
||||
використовуйте `createOptionalChannelSetupSurface(...)` з
|
||||
`openclaw/plugin-sdk/channel-setup`. Він створює пару setup adapter + wizard,
|
||||
яка повідомляє про вимогу встановлення й завершується без змін під час реальних записів конфігурації,
|
||||
доки плагін не встановлено.
|
||||
`openclaw/plugin-sdk/channel-setup`. Він створює пару адаптер setup + wizard,
|
||||
яка повідомляє про вимогу встановлення і відмовляє безпечно під час реальних записів конфігурації,
|
||||
доки plugin не буде встановлено.
|
||||
|
||||
## Швидкий старт: плагін інструмента
|
||||
## Швидкий старт: plugin інструменту
|
||||
|
||||
Цей walkthrough створює мінімальний плагін, який реєструє інструмент агента. Для плагінів каналів
|
||||
Цей покроковий посібник створює мінімальний plugin, який реєструє інструмент агента. Для plugins каналів
|
||||
і провайдерів є окремі посібники, посилання на які наведено вище.
|
||||
|
||||
<Steps>
|
||||
@ -99,12 +99,12 @@ x-i18n:
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
Кожному плагіну потрібен manifest, навіть без конфігурації. Інструменти, зареєстровані під час виконання,
|
||||
мають бути перелічені в `contracts.tools`, щоб OpenClaw міг визначити відповідальний
|
||||
плагін без завантаження runtime кожного плагіна. Плагіни також мають свідомо оголошувати
|
||||
`activation.onStartup`. У цьому прикладі встановлено значення `true`. Див.
|
||||
Кожному plugin потрібен manifest, навіть без конфігурації. Інструменти, зареєстровані під час виконання,
|
||||
мають бути перелічені в `contracts.tools`, щоб OpenClaw міг знайти власника
|
||||
plugin без завантаження runtime кожного plugin. Plugins також мають свідомо оголошувати
|
||||
`activation.onStartup`. У цьому прикладі встановлено `true`. Див.
|
||||
[Manifest](/uk/plugins/manifest) для повної схеми. Канонічні snippets публікації ClawHub
|
||||
містяться в `docs/snippets/plugin-publish/`.
|
||||
розміщені в `docs/snippets/plugin-publish/`.
|
||||
|
||||
</Step>
|
||||
|
||||
@ -132,15 +132,15 @@ x-i18n:
|
||||
});
|
||||
```
|
||||
|
||||
`definePluginEntry` призначений для плагінів, що не є каналами. Для каналів використовуйте
|
||||
`defineChannelPluginEntry` — див. [Плагіни каналів](/uk/plugins/sdk-channel-plugins).
|
||||
Повні параметри entry point див. у [Entry Points](/uk/plugins/sdk-entrypoints).
|
||||
`definePluginEntry` призначений для plugins, які не є каналами. Для каналів використовуйте
|
||||
`defineChannelPluginEntry` — див. [Plugins каналів](/uk/plugins/sdk-channel-plugins).
|
||||
Повні параметри entry point наведено в [Entry Points](/uk/plugins/sdk-entrypoints).
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Протестуйте й опублікуйте">
|
||||
|
||||
**Зовнішні плагіни:** перевірте та опублікуйте через ClawHub, потім встановіть:
|
||||
**Зовнішні plugins:** перевірте й опублікуйте за допомогою ClawHub, а потім установіть:
|
||||
|
||||
```bash
|
||||
clawhub package publish your-org/your-plugin --dry-run
|
||||
@ -149,10 +149,10 @@ x-i18n:
|
||||
```
|
||||
|
||||
OpenClaw також перевіряє ClawHub перед npm для простих специфікацій пакетів, як-от
|
||||
`@myorg/openclaw-my-plugin`; npm залишається fallback для пакетів, які ще
|
||||
не мігрували до ClawHub.
|
||||
`@myorg/openclaw-my-plugin`; npm залишається fallback для пакетів, які
|
||||
ще не мігрували до ClawHub.
|
||||
|
||||
**Плагіни в репозиторії:** розмістіть у дереві workspace вбудованих плагінів — їх буде автоматично виявлено.
|
||||
**Plugins у репозиторії:** розмістіть під деревом workspace вбудованих plugins — буде знайдено автоматично.
|
||||
|
||||
```bash
|
||||
pnpm test -- <bundled-plugin-root>/my-plugin/
|
||||
@ -161,70 +161,70 @@ x-i18n:
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Можливості плагіна
|
||||
## Можливості Plugin
|
||||
|
||||
Один плагін може зареєструвати будь-яку кількість можливостей через об’єкт `api`:
|
||||
Один plugin може зареєструвати будь-яку кількість можливостей через об'єкт `api`:
|
||||
|
||||
| Можливість | Метод реєстрації | Детальний посібник |
|
||||
| Можливість | Метод реєстрації | Докладний посібник |
|
||||
| ---------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------- |
|
||||
| Текстовий inference (LLM) | `api.registerProvider(...)` | [Плагіни провайдерів](/uk/plugins/sdk-provider-plugins) |
|
||||
| Backend inference для CLI | `api.registerCliBackend(...)` | [Backends CLI](/uk/gateway/cli-backends) |
|
||||
| Канал / повідомлення | `api.registerChannel(...)` | [Плагіни каналів](/uk/plugins/sdk-channel-plugins) |
|
||||
| Мовлення (TTS/STT) | `api.registerSpeechProvider(...)` | [Плагіни провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Транскрипція в реальному часі | `api.registerRealtimeTranscriptionProvider(...)` | [Плагіни провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Голос у реальному часі | `api.registerRealtimeVoiceProvider(...)` | [Плагіни провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Розуміння медіа | `api.registerMediaUnderstandingProvider(...)` | [Плагіни провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Генерація зображень | `api.registerImageGenerationProvider(...)` | [Плагіни провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Генерація музики | `api.registerMusicGenerationProvider(...)` | [Плагіни провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Генерація відео | `api.registerVideoGenerationProvider(...)` | [Плагіни провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Вебзавантаження | `api.registerWebFetchProvider(...)` | [Плагіни провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Вебпошук | `api.registerWebSearchProvider(...)` | [Плагіни провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Middleware результатів інструментів | `api.registerAgentToolResultMiddleware(...)` | [Огляд SDK](/uk/plugins/sdk-overview#registration-api) |
|
||||
| Інструменти агента | `api.registerTool(...)` | Нижче |
|
||||
| Власні команди | `api.registerCommand(...)` | [Entry Points](/uk/plugins/sdk-entrypoints) |
|
||||
| Hooks плагіна | `api.on(...)` | [Hooks плагіна](/uk/plugins/hooks) |
|
||||
| Внутрішні event hooks | `api.registerHook(...)` | [Entry Points](/uk/plugins/sdk-entrypoints) |
|
||||
| HTTP-маршрути | `api.registerHttpRoute(...)` | [Внутрішня архітектура](/uk/plugins/architecture-internals#gateway-http-routes) |
|
||||
| Підкоманди CLI | `api.registerCli(...)` | [Entry Points](/uk/plugins/sdk-entrypoints) |
|
||||
| Текстове inference (LLM) | `api.registerProvider(...)` | [Plugins провайдерів](/uk/plugins/sdk-provider-plugins) |
|
||||
| Backend inference для CLI | `api.registerCliBackend(...)` | [Backends CLI](/uk/gateway/cli-backends) |
|
||||
| Канал / обмін повідомленнями | `api.registerChannel(...)` | [Plugins каналів](/uk/plugins/sdk-channel-plugins) |
|
||||
| Мовлення (TTS/STT) | `api.registerSpeechProvider(...)` | [Plugins провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Транскрибування в реальному часі | `api.registerRealtimeTranscriptionProvider(...)` | [Plugins провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Голос у реальному часі | `api.registerRealtimeVoiceProvider(...)` | [Plugins провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Розуміння медіа | `api.registerMediaUnderstandingProvider(...)` | [Plugins провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Генерація зображень | `api.registerImageGenerationProvider(...)` | [Plugins провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Генерація музики | `api.registerMusicGenerationProvider(...)` | [Plugins провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Генерація відео | `api.registerVideoGenerationProvider(...)` | [Plugins провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Отримання вебвмісту | `api.registerWebFetchProvider(...)` | [Plugins провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Вебпошук | `api.registerWebSearchProvider(...)` | [Plugins провайдерів](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Middleware результатів інструментів | `api.registerAgentToolResultMiddleware(...)` | [Огляд SDK](/uk/plugins/sdk-overview#registration-api) |
|
||||
| Інструменти агента | `api.registerTool(...)` | Нижче |
|
||||
| Власні команди | `api.registerCommand(...)` | [Entry Points](/uk/plugins/sdk-entrypoints) |
|
||||
| Plugin hooks | `api.on(...)` | [Plugin hooks](/uk/plugins/hooks) |
|
||||
| Внутрішні event hooks | `api.registerHook(...)` | [Entry Points](/uk/plugins/sdk-entrypoints) |
|
||||
| HTTP routes | `api.registerHttpRoute(...)` | [Внутрішня архітектура](/uk/plugins/architecture-internals#gateway-http-routes) |
|
||||
| Підкоманди CLI | `api.registerCli(...)` | [Entry Points](/uk/plugins/sdk-entrypoints) |
|
||||
|
||||
Повний API реєстрації див. в [Огляді SDK](/uk/plugins/sdk-overview#registration-api).
|
||||
Повний registration API див. в [Огляд SDK](/uk/plugins/sdk-overview#registration-api).
|
||||
|
||||
Вбудовані плагіни можуть використовувати `api.registerAgentToolResultMiddleware(...)`, коли їм
|
||||
потрібне асинхронне переписування результату інструмента до того, як модель побачить output. Оголошуйте
|
||||
Вбудовані plugins можуть використовувати `api.registerAgentToolResultMiddleware(...)`, коли їм
|
||||
потрібне асинхронне переписування результатів інструментів до того, як модель побачить output. Оголосіть
|
||||
цільові runtimes у `contracts.agentToolResultMiddleware`, наприклад
|
||||
`["pi", "codex"]`. Це довірений seam для вбудованих плагінів; зовнішнім
|
||||
плагінам варто надавати перевагу звичайним hooks плагінів OpenClaw, доки OpenClaw не матиме
|
||||
явної політики довіри для цієї можливості.
|
||||
`["pi", "codex"]`. Це довірений seam для вбудованих plugins; зовнішнім
|
||||
plugins варто віддавати перевагу звичайним hooks OpenClaw plugin, якщо OpenClaw не додасть
|
||||
явної trust policy для цієї можливості.
|
||||
|
||||
Якщо ваш плагін реєструє власні RPC-методи Gateway, тримайте їх у
|
||||
префіксі, специфічному для плагіна. Простори імен core admin (`config.*`,
|
||||
`exec.approvals.*`, `wizard.*`, `update.*`) залишаються зарезервованими й завжди resolve до
|
||||
`operator.admin`, навіть якщо плагін просить вужчий scope.
|
||||
Якщо ваш plugin реєструє власні RPC-методи gateway, тримайте їх на
|
||||
префіксі, специфічному для plugin. Core admin namespaces (`config.*`,
|
||||
`exec.approvals.*`, `wizard.*`, `update.*`) залишаються зарезервованими й завжди розв'язуються до
|
||||
`operator.admin`, навіть якщо plugin просить вужчий scope.
|
||||
|
||||
Семантика guard для hooks, яку варто пам’ятати:
|
||||
Семантика guard для hooks, яку варто пам'ятати:
|
||||
|
||||
- `before_tool_call`: `{ block: true }` є terminal і зупиняє handlers із нижчим пріоритетом.
|
||||
- `before_tool_call`: `{ block: false }` розглядається як відсутність рішення.
|
||||
- `before_tool_call`: `{ requireApproval: true }` призупиняє виконання агента й запитує в користувача схвалення через exec approval overlay, кнопки Telegram, Discord interactions або команду `/approve` на будь-якому каналі.
|
||||
- `before_install`: `{ block: true }` є terminal і зупиняє handlers із нижчим пріоритетом.
|
||||
- `before_install`: `{ block: false }` розглядається як відсутність рішення.
|
||||
- `message_sending`: `{ cancel: true }` є terminal і зупиняє handlers із нижчим пріоритетом.
|
||||
- `message_sending`: `{ cancel: false }` розглядається як відсутність рішення.
|
||||
- `message_received`: надавайте перевагу типізованому полю `threadId`, коли потрібна маршрутизація вхідних thread/topic. Залишайте `metadata` для додаткових даних, специфічних для каналу.
|
||||
- `message_sending`: надавайте перевагу типізованим полям маршрутизації `replyToId` / `threadId` замість ключів metadata, специфічних для каналу.
|
||||
- `before_tool_call`: `{ block: true }` є terminal і зупиняє handlers з нижчим пріоритетом.
|
||||
- `before_tool_call`: `{ block: false }` трактується як відсутність рішення.
|
||||
- `before_tool_call`: `{ requireApproval: true }` призупиняє виконання агента й запитує схвалення користувача через overlay схвалення exec, кнопки Telegram, взаємодії Discord або команду `/approve` у будь-якому каналі.
|
||||
- `before_install`: `{ block: true }` є terminal і зупиняє handlers з нижчим пріоритетом.
|
||||
- `before_install`: `{ block: false }` трактується як відсутність рішення.
|
||||
- `message_sending`: `{ cancel: true }` є terminal і зупиняє handlers з нижчим пріоритетом.
|
||||
- `message_sending`: `{ cancel: false }` трактується як відсутність рішення.
|
||||
- `message_received`: віддавайте перевагу типізованому полю `threadId`, коли потрібна маршрутизація вхідних thread/topic. Залишайте `metadata` для додаткових даних, специфічних для каналу.
|
||||
- `message_sending`: віддавайте перевагу типізованим routing-полям `replyToId` / `threadId` замість ключів metadata, специфічних для каналу.
|
||||
|
||||
Команда `/approve` обробляє як exec approvals, так і approvals плагінів із bounded fallback: коли id exec approval не знайдено, OpenClaw повторює той самий id через approvals плагінів. Forwarding approvals плагінів можна налаштовувати незалежно через `approvals.plugin` у конфігурації.
|
||||
Команда `/approve` обробляє як exec, так і plugin approvals з обмеженим fallback: коли id exec approval не знайдено, OpenClaw повторює той самий id через plugin approvals. Forwarding plugin approval можна налаштувати незалежно через `approvals.plugin` у конфігурації.
|
||||
|
||||
Якщо власний approval plumbing має виявляти той самий bounded fallback-випадок,
|
||||
надавайте перевагу `isApprovalNotFoundError` з `openclaw/plugin-sdk/error-runtime`
|
||||
замість ручного зіставлення рядків про expiry approval.
|
||||
Якщо власна approval plumbing має виявити той самий випадок обмеженого fallback,
|
||||
віддавайте перевагу `isApprovalNotFoundError` з `openclaw/plugin-sdk/error-runtime`
|
||||
замість ручного зіставлення рядків про expiration approval.
|
||||
|
||||
Приклади й довідник hooks див. у [Hooks плагіна](/uk/plugins/hooks).
|
||||
Приклади та довідник hooks див. у [Plugin hooks](/uk/plugins/hooks).
|
||||
|
||||
## Реєстрація інструментів агента
|
||||
|
||||
Інструменти — це типізовані функції, які може викликати LLM. Вони можуть бути обов’язковими (завжди
|
||||
доступними) або опціональними (користувач вмикає їх сам):
|
||||
Інструменти — це типізовані функції, які LLM може викликати. Вони можуть бути обов'язковими (завжди
|
||||
доступні) або необов'язковими (користувач вмикає самостійно):
|
||||
|
||||
```typescript
|
||||
register(api) {
|
||||
@ -254,7 +254,7 @@ register(api) {
|
||||
```
|
||||
|
||||
Кожен інструмент, зареєстрований через `api.registerTool(...)`, також має бути оголошений у
|
||||
manifest плагіна:
|
||||
manifest plugin:
|
||||
|
||||
```json
|
||||
{
|
||||
@ -264,7 +264,12 @@ manifest плагіна:
|
||||
}
|
||||
```
|
||||
|
||||
Користувачі вмикають опціональні інструменти в конфігурації:
|
||||
OpenClaw захоплює й кешує перевірений descriptor із зареєстрованого інструмента,
|
||||
тому plugins не дублюють `description` або дані schema в manifest. Контракт
|
||||
manifest лише оголошує ownership і discovery; виконання все одно викликає
|
||||
живу зареєстровану реалізацію інструмента.
|
||||
|
||||
Користувачі вмикають необов'язкові інструменти в конфігурації:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -272,14 +277,14 @@ manifest плагіна:
|
||||
}
|
||||
```
|
||||
|
||||
- Назви інструментів не повинні конфліктувати з основними інструментами (конфліктні пропускаються)
|
||||
- Інструменти з некоректно сформованими об’єктами реєстрації, зокрема без `parameters`, пропускаються й повідомляються в діагностиці plugin замість того, щоб ламати запуски агента
|
||||
- Назви інструментів не мають конфліктувати з основними інструментами (конфлікти пропускаються)
|
||||
- Інструменти з некоректними об’єктами реєстрації, зокрема без `parameters`, пропускаються й повідомляються в діагностиці plugin замість того, щоб ламати запуски агента
|
||||
- Використовуйте `optional: true` для інструментів із побічними ефектами або додатковими вимогами до бінарних файлів
|
||||
- Користувачі можуть увімкнути всі інструменти з plugin, додавши ідентифікатор plugin до `tools.allow`
|
||||
|
||||
## Реєстрація команд CLI
|
||||
|
||||
Plugins можуть додавати кореневі групи команд `openclaw` за допомогою `api.registerCli`. Надавайте
|
||||
Plugins можуть додавати кореневі групи команд `openclaw` за допомогою `api.registerCli`. Надайте
|
||||
`descriptors` для кожного кореня команди верхнього рівня, щоб OpenClaw міг показувати й маршрутизувати
|
||||
команду без завчасного завантаження кожного середовища виконання plugin.
|
||||
|
||||
@ -332,53 +337,53 @@ import { ... } from "openclaw/plugin-sdk";
|
||||
|
||||
Повний довідник підшляхів див. у [Огляді SDK](/uk/plugins/sdk-overview).
|
||||
|
||||
Усередині свого plugin використовуйте локальні barrel-файли (`api.ts`, `runtime-api.ts`) для
|
||||
внутрішніх імпортів — ніколи не імпортуйте власний plugin через його шлях SDK.
|
||||
У межах вашого plugin використовуйте локальні barrel-файли (`api.ts`, `runtime-api.ts`) для
|
||||
внутрішніх імпортів — ніколи не імпортуйте власний plugin через його SDK-шлях.
|
||||
|
||||
Для provider plugins тримайте специфічні для провайдера допоміжні засоби в цих barrel-файлах кореня пакета,
|
||||
якщо межа не є справді узагальненою. Поточні вбудовані приклади:
|
||||
Для provider plugins тримайте специфічні для провайдера допоміжні функції в цих barrel-файлах кореня пакета,
|
||||
якщо цей seam не є справді універсальним. Поточні вбудовані приклади:
|
||||
|
||||
- Anthropic: обгортки потоків Claude та допоміжні засоби `service_tier` / beta
|
||||
- OpenAI: конструктори провайдера, допоміжні засоби моделей за замовчуванням, realtime-провайдери
|
||||
- OpenRouter: конструктор провайдера та допоміжні засоби onboarding/конфігурації
|
||||
- Anthropic: обгортки потоку Claude та допоміжні функції `service_tier` / beta
|
||||
- OpenAI: побудовники провайдера, допоміжні функції стандартної моделі, realtime-провайдери
|
||||
- OpenRouter: побудовник провайдера плюс допоміжні функції onboarding/config
|
||||
|
||||
Якщо допоміжний засіб корисний лише всередині одного вбудованого пакета провайдера, залишайте його на цій
|
||||
межі кореня пакета замість просування в `openclaw/plugin-sdk/*`.
|
||||
Якщо допоміжна функція корисна лише всередині одного вбудованого пакета провайдера, тримайте її на цьому
|
||||
seam кореня пакета замість просування в `openclaw/plugin-sdk/*`.
|
||||
|
||||
Деякі згенеровані допоміжні межі `openclaw/plugin-sdk/<bundled-id>` досі існують для
|
||||
супроводу вбудованих plugin, коли для них відстежується використання власником. Вважайте їх
|
||||
зарезервованими поверхнями, а не типовим шаблоном для нових сторонніх plugins.
|
||||
Деякі згенеровані допоміжні seam `openclaw/plugin-sdk/<bundled-id>` досі існують для
|
||||
супроводу вбудованих plugins, коли для них відстежується використання власником. Сприймайте їх як
|
||||
зарезервовані поверхні, а не як типовий шаблон для нових сторонніх plugins.
|
||||
|
||||
## Контрольний список перед поданням
|
||||
|
||||
<Check>**package.json** має коректні метадані `openclaw`</Check>
|
||||
<Check>**package.json** має правильні метадані `openclaw`</Check>
|
||||
<Check>Маніфест **openclaw.plugin.json** наявний і валідний</Check>
|
||||
<Check>Точка входу використовує `defineChannelPluginEntry` або `definePluginEntry`</Check>
|
||||
<Check>Усі імпорти використовують сфокусовані шляхи `plugin-sdk/<subpath>`</Check>
|
||||
<Check>Внутрішні імпорти використовують локальні модулі, а не самоімпорти SDK</Check>
|
||||
<Check>Тести проходять (`pnpm test -- <bundled-plugin-root>/my-plugin/`)</Check>
|
||||
<Check>`pnpm check` проходить (для plugins у репозиторії)</Check>
|
||||
<Check>`pnpm check` проходить (plugins усередині репозиторію)</Check>
|
||||
|
||||
## Тестування beta-релізу
|
||||
|
||||
1. Стежте за тегами релізів GitHub у [openclaw/openclaw](https://github.com/openclaw/openclaw/releases) і підпишіться через `Watch` > `Releases`. Beta-теги мають вигляд `v2026.3.N-beta.1`. Також можна ввімкнути сповіщення для офіційного X-акаунта OpenClaw [@openclaw](https://x.com/openclaw), щоб отримувати оголошення про релізи.
|
||||
2. Тестуйте свій plugin з beta-тегом щойно він з’явиться. Вікно до stable зазвичай становить лише кілька годин.
|
||||
3. Після тестування напишіть у гілці свого plugin у каналі Discord `plugin-forum` або `all good`, або що саме зламалося. Якщо гілки ще немає, створіть її.
|
||||
4. Якщо щось зламалося, відкрийте або оновіть issue з назвою `Beta blocker: <plugin-name> - <summary>` і застосуйте мітку `beta-blocker`. Додайте посилання на issue у свою гілку.
|
||||
5. Відкрийте PR до `main` з назвою `fix(<plugin-id>): beta blocker - <summary>` і додайте посилання на issue і в PR, і у свою гілку Discord. Contributors не можуть ставити мітки на PR, тому назва є сигналом на боці PR для maintainers та автоматизації. Блокери з PR зливаються; блокери без PR можуть усе одно потрапити в реліз. Maintainers стежать за цими гілками під час beta-тестування.
|
||||
6. Мовчання означає зелений статус. Якщо ви пропустите це вікно, ваше виправлення, імовірно, потрапить у наступний цикл.
|
||||
1. Стежте за тегами релізів GitHub у [openclaw/openclaw](https://github.com/openclaw/openclaw/releases) і підпишіться через `Watch` > `Releases`. Beta-теги мають вигляд `v2026.3.N-beta.1`. Ви також можете ввімкнути сповіщення для офіційного X-акаунта OpenClaw [@openclaw](https://x.com/openclaw), щоб отримувати оголошення про релізи.
|
||||
2. Протестуйте свій plugin з beta-тегом щойно він з’явиться. Вікно до стабільного релізу зазвичай триває лише кілька годин.
|
||||
3. Напишіть у гілці свого plugin в Discord-каналі `plugin-forum` після тестування: або `all good`, або що зламалося. Якщо у вас ще немає гілки, створіть її.
|
||||
4. Якщо щось ламається, відкрийте або оновіть issue з назвою `Beta blocker: <plugin-name> - <summary>` і застосуйте мітку `beta-blocker`. Додайте посилання на issue у свою гілку.
|
||||
5. Відкрийте PR до `main` з назвою `fix(<plugin-id>): beta blocker - <summary>` і додайте посилання на issue як у PR, так і у своїй гілці Discord. Контриб’ютори не можуть ставити мітки на PR, тому назва є сигналом з боку PR для мейнтейнерів і автоматизації. Блокери з PR зливаються; блокери без PR можуть усе одно потрапити в реліз. Мейнтейнери стежать за цими гілками під час beta-тестування.
|
||||
6. Мовчання означає зелений статус. Якщо ви пропустите це вікно, ваше виправлення, ймовірно, потрапить у наступний цикл.
|
||||
|
||||
## Наступні кроки
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Channel Plugins" icon="messages-square" href="/uk/plugins/sdk-channel-plugins">
|
||||
Створити plugin каналу повідомлень
|
||||
Створіть plugin каналу повідомлень
|
||||
</Card>
|
||||
<Card title="Provider Plugins" icon="cpu" href="/uk/plugins/sdk-provider-plugins">
|
||||
Створити plugin провайдера моделей
|
||||
Створіть plugin провайдера моделей
|
||||
</Card>
|
||||
<Card title="Огляд SDK" icon="book-open" href="/uk/plugins/sdk-overview">
|
||||
Мапа імпортів і довідник API реєстрації
|
||||
Карта імпортів і довідник API реєстрації
|
||||
</Card>
|
||||
<Card title="Допоміжні засоби середовища виконання" icon="settings" href="/uk/plugins/sdk-runtime">
|
||||
TTS, пошук, субагент через api.runtime
|
||||
@ -393,7 +398,7 @@ import { ... } from "openclaw/plugin-sdk";
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Архітектура Plugin](/uk/plugins/architecture) — докладний огляд внутрішньої архітектури
|
||||
- [Архітектура Plugin](/uk/plugins/architecture) — глибокий огляд внутрішньої архітектури
|
||||
- [Огляд SDK](/uk/plugins/sdk-overview) — довідник Plugin SDK
|
||||
- [Маніфест](/uk/plugins/manifest) — формат маніфесту plugin
|
||||
- [Channel Plugins](/uk/plugins/sdk-channel-plugins) — створення plugins каналів
|
||||
|
||||
@ -2,27 +2,27 @@
|
||||
read_when:
|
||||
- Потрібно викликати допоміжні функції ядра з Plugin (TTS, STT, генерація зображень, вебпошук, субагент, вузли)
|
||||
- Ви хочете зрозуміти, що надає api.runtime
|
||||
- Ви звертаєтеся до допоміжних засобів конфігурації, агента або медіа з коду Plugin
|
||||
- Ви отримуєте доступ до допоміжних функцій конфігурації, агента або медіа з коду Plugin
|
||||
sidebarTitle: Runtime helpers
|
||||
summary: api.runtime -- впроваджені допоміжні засоби середовища виконання, доступні для Plugin
|
||||
summary: api.runtime -- інжектовані допоміжні засоби часу виконання, доступні плагінам
|
||||
title: Допоміжні засоби середовища виконання Plugin
|
||||
x-i18n:
|
||||
generated_at: "2026-05-02T12:15:45Z"
|
||||
generated_at: "2026-05-02T13:56:46Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 02c0dc6522e80d4a02b1d3c248fa5ac934888035d435df8b1967861f9dcceb6a
|
||||
source_hash: 26df37a2ad0dcd29648e382eb579b6892068af4dea1c47460cfd379458a8081c
|
||||
source_path: plugins/sdk-runtime.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Довідник для об’єкта `api.runtime`, який впроваджується в кожен plugin під час реєстрації. Використовуйте ці допоміжні функції замість прямого імпорту внутрішніх компонентів хоста.
|
||||
Довідник для об’єкта `api.runtime`, що впроваджується в кожен plugin під час реєстрації. Використовуйте ці допоміжні засоби замість прямого імпорту внутрішніх модулів хоста.
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Channel plugins" href="/uk/plugins/sdk-channel-plugins">
|
||||
Покроковий посібник, який показує використання цих допоміжних функцій у контексті для channel plugins.
|
||||
Покроковий посібник, який показує використання цих допоміжних засобів у контексті для channel plugins.
|
||||
</Card>
|
||||
<Card title="Provider plugins" href="/uk/plugins/sdk-provider-plugins">
|
||||
Покроковий посібник, який показує використання цих допоміжних функцій у контексті для provider plugins.
|
||||
Покроковий посібник, який показує використання цих допоміжних засобів у контексті для provider plugins.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
@ -34,38 +34,33 @@ register(api) {
|
||||
|
||||
## Завантаження й запис конфігурації
|
||||
|
||||
Надавайте перевагу конфігурації, яку вже було передано в активний шлях виклику, наприклад `api.config` під час реєстрації або аргумент `cfg` у callback-функціях каналу чи provider. Це зберігає один знімок процесу протягом роботи замість повторного розбору конфігурації в гарячих шляхах.
|
||||
Надавайте перевагу конфігурації, яку вже передано в активний шлях виклику, наприклад `api.config` під час реєстрації або аргумент `cfg` у callback-функціях каналу/провайдера. Це забезпечує проходження одного знімка процесу через роботу замість повторного розбору конфігурації на гарячих шляхах.
|
||||
|
||||
Використовуйте `api.runtime.config.current()` лише тоді, коли довготривалому обробнику потрібен поточний знімок процесу, а конфігурацію не було передано цій функції. Повернене значення доступне тільки для читання; перед редагуванням створіть копію або скористайтеся допоміжною функцією мутації.
|
||||
Використовуйте `api.runtime.config.current()` лише тоді, коли довгоживучому обробнику потрібен поточний знімок процесу й жодну конфігурацію не було передано в цю функцію. Повернене значення доступне лише для читання; перед редагуванням клонуйте його або використайте допоміжний засіб мутації.
|
||||
|
||||
Фабрики інструментів отримують `ctx.runtimeConfig` разом із `ctx.getRuntimeConfig()`. Використовуйте getter усередині callback-функції `execute` довготривалого інструмента, коли конфігурація може змінитися після створення визначення інструмента.
|
||||
Фабрики інструментів отримують `ctx.runtimeConfig` плюс `ctx.getRuntimeConfig()`. Використовуйте getter усередині callback-функції `execute` довгоживучого інструмента, коли конфігурація може змінитися після створення визначення інструмента.
|
||||
|
||||
Зберігайте зміни через `api.runtime.config.mutateConfigFile(...)` або `api.runtime.config.replaceConfigFile(...)`. Кожен запис має вибрати явну політику `afterWrite`:
|
||||
Зберігайте зміни за допомогою `api.runtime.config.mutateConfigFile(...)` або `api.runtime.config.replaceConfigFile(...)`. Кожен запис має вибрати явну політику `afterWrite`:
|
||||
|
||||
- `afterWrite: { mode: "auto" }` дозволяє механізму перезавантаження Gateway ухвалити рішення.
|
||||
- `afterWrite: { mode: "restart", reason: "..." }` примусово виконує чистий перезапуск, коли автор запису знає, що гаряче перезавантаження небезпечне.
|
||||
- `afterWrite: { mode: "none", reason: "..." }` пригнічує автоматичне перезавантаження або перезапуск лише тоді, коли викликач сам відповідає за подальші дії.
|
||||
- `afterWrite: { mode: "auto" }` дозволяє Gateway reload planner ухвалити рішення.
|
||||
- `afterWrite: { mode: "restart", reason: "..." }` примусово виконує чистий перезапуск, коли writer знає, що гаряче перезавантаження небезпечне.
|
||||
- `afterWrite: { mode: "none", reason: "..." }` пригнічує автоматичне перезавантаження/перезапуск лише тоді, коли викликач сам відповідає за подальші дії.
|
||||
|
||||
Допоміжні функції мутації повертають `afterWrite` разом із типізованим підсумком `followUp`, щоб викликачі могли логувати або тестувати, чи запросили вони перезапуск. Gateway і надалі визначає, коли цей перезапуск фактично відбудеться.
|
||||
Допоміжні засоби мутації повертають `afterWrite` плюс типізований підсумок `followUp`, щоб викликачі могли журналювати або тестувати, чи запитали вони перезапуск. Gateway все ще відповідає за те, коли цей перезапуск фактично відбудеться.
|
||||
|
||||
`api.runtime.config.loadConfig()` і `api.runtime.config.writeConfigFile(...)` є застарілими допоміжними функціями сумісності в межах `runtime-config-load-write`. Вони один раз попереджають під час виконання та залишаються доступними для старих зовнішніх plugins протягом вікна міграції. Вбудовані plugins не повинні їх використовувати; захисні перевірки межі конфігурації завершуються помилкою, якщо код plugin викликає їх або імпортує ці допоміжні функції з підшляхів plugin SDK.
|
||||
`api.runtime.config.loadConfig()` і `api.runtime.config.writeConfigFile(...)` є застарілими допоміжними засобами сумісності в межах `runtime-config-load-write`. Вони один раз попереджають під час виконання й залишаються доступними для старих зовнішніх plugins протягом міграційного вікна. Вбудовані plugins не повинні їх використовувати; guards межі конфігурації завершаться помилкою, якщо код plugin викликає їх або імпортує ці допоміжні засоби з підшляхів plugin SDK.
|
||||
|
||||
Для прямих імпортів SDK використовуйте цільові підшляхи конфігурації замість широкого сумісного barrel
|
||||
`openclaw/plugin-sdk/config-runtime`: `config-types` для
|
||||
типів, `plugin-config-runtime` для перевірок уже завантаженої конфігурації та
|
||||
пошуку точки входу plugin, `runtime-config-snapshot` для поточних знімків процесу, і
|
||||
`config-mutation` для записів. Тести вбудованих plugins мають mock-ати ці цільові
|
||||
підшляхи напряму, а не широкий сумісний barrel.
|
||||
Для прямих імпортів SDK використовуйте сфокусовані підшляхи конфігурації замість широкого compatibility barrel `openclaw/plugin-sdk/config-runtime`: `config-types` для типів, `plugin-config-runtime` для тверджень щодо вже завантаженої конфігурації та пошуку запису plugin, `runtime-config-snapshot` для поточних знімків процесу і `config-mutation` для записів. Тести вбудованих plugins мають mock-ати ці сфокусовані підшляхи напряму, а не широкий compatibility barrel.
|
||||
|
||||
Внутрішній runtime-код OpenClaw рухається в тому самому напрямку: завантажити конфігурацію один раз на межі CLI, Gateway або процесу, а потім передавати це значення далі. Успішні записи мутації оновлюють runtime-знімок процесу й просувають його внутрішню ревізію; довготривалі кеші мають спиратися на runtime-власний ключ кешу, а не серіалізувати конфігурацію локально. Довготривалі runtime-модулі мають сканер із нульовою толерантністю до неявних викликів `loadConfig()`; використовуйте переданий `cfg`, `context.getRuntimeConfig()` запиту або `getRuntimeConfig()` на явній межі процесу.
|
||||
Внутрішній runtime-код OpenClaw має той самий напрям: завантажити конфігурацію один раз на межі CLI, Gateway або процесу, а потім передавати це значення далі. Успішні записи мутацій оновлюють runtime-знімок процесу й просувають його внутрішню ревізію; довгоживучі кеші мають спиратися на runtime-owned ключ кешу, а не серіалізувати конфігурацію локально. Для довгоживучих runtime-модулів діє сканер нульової терпимості до ambient-викликів `loadConfig()`; використовуйте переданий `cfg`, request `context.getRuntimeConfig()` або `getRuntimeConfig()` на явній межі процесу.
|
||||
|
||||
Шляхи виконання provider і каналу мають використовувати активний знімок runtime-конфігурації, а не файловий знімок, повернений для зворотного читання або редагування конфігурації. Файлові знімки зберігають вихідні значення, зокрема маркери SecretRef для UI та записів; callback-функціям provider потрібен розв’язаний runtime-перегляд. Коли допоміжну функцію можуть викликати як з активним вихідним знімком, так і з активним runtime-знімком, перед читанням облікових даних спрямовуйте через `selectApplicableRuntimeConfig()`.
|
||||
Шляхи виконання провайдерів і каналів мають використовувати активний runtime-знімок конфігурації, а не файловий знімок, повернений для читання або редагування конфігурації. Файлові знімки зберігають початкові значення, як-от маркери SecretRef, для UI та записів; callback-функціям провайдера потрібне resolved runtime-представлення. Коли допоміжний засіб може бути викликаний або з активним source-знімком, або з активним runtime-знімком, перед читанням облікових даних маршрутизуйте через `selectApplicableRuntimeConfig()`.
|
||||
|
||||
## Простори імен runtime
|
||||
## Runtime-простори імен
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="api.runtime.agent">
|
||||
Ідентичність агента, каталоги та керування сеансами.
|
||||
Ідентичність агента, каталоги та керування сесіями.
|
||||
|
||||
```typescript
|
||||
// Resolve the agent's working directory
|
||||
@ -109,15 +104,15 @@ register(api) {
|
||||
});
|
||||
```
|
||||
|
||||
`runEmbeddedAgent(...)` — нейтральна допоміжна функція для запуску звичайного ходу агента OpenClaw з коду plugin. Вона використовує те саме розв’язання provider/model і вибір agent-harness, що й відповіді, запущені каналом.
|
||||
`runEmbeddedAgent(...)` — нейтральний допоміжний засіб для запуску звичайного ходу агента OpenClaw з коду plugin. Він використовує ту саму розв’язку провайдера/моделі й вибір agent-harness, що й відповіді, ініційовані каналом.
|
||||
|
||||
`runEmbeddedPiAgent(...)` залишається alias для сумісності.
|
||||
`runEmbeddedPiAgent(...)` залишається alias сумісності.
|
||||
|
||||
`resolveThinkingPolicy(...)` повертає підтримувані рівні мислення provider/model і необов’язкове значення за замовчуванням. Provider plugins володіють профілем, специфічним для моделі, через свої thinking hooks, тому tool plugins мають викликати цю runtime-допоміжну функцію замість імпорту або дублювання списків provider.
|
||||
`resolveThinkingPolicy(...)` повертає підтримувані рівні thinking для провайдера/моделі та необов’язкове значення за замовчуванням. Provider plugins володіють model-specific профілем через свої thinking hooks, тому tool plugins мають викликати цей runtime helper замість імпорту або дублювання списків провайдерів.
|
||||
|
||||
`normalizeThinkingLevel(...)` перетворює користувацький текст, як-от `on`, `x-high` або `extra high`, на канонічний збережений рівень перед перевіркою щодо розв’язаної політики.
|
||||
`normalizeThinkingLevel(...)` перетворює користувацький текст, як-от `on`, `x-high` або `extra high`, на канонічний збережений рівень перед перевіркою щодо resolved policy.
|
||||
|
||||
**Допоміжні функції сховища сеансів** розміщені в `api.runtime.agent.session`:
|
||||
**Допоміжні засоби сховища сесій** розміщені в `api.runtime.agent.session`:
|
||||
|
||||
```typescript
|
||||
const storePath = api.runtime.agent.session.resolveStorePath(cfg);
|
||||
@ -129,11 +124,11 @@ register(api) {
|
||||
const filePath = api.runtime.agent.session.resolveSessionFilePath(cfg, sessionId);
|
||||
```
|
||||
|
||||
Надавайте перевагу `updateSessionStore(...)` або `updateSessionStoreEntry(...)` для runtime-записів. Вони проходять через writer сховища сеансів, яким володіє Gateway, зберігають паралельні оновлення та повторно використовують гарячий кеш. `saveSessionStore(...)` залишається доступним для сумісності та офлайн-перезаписів у стилі технічного обслуговування.
|
||||
Надавайте перевагу `updateSessionStore(...)` або `updateSessionStoreEntry(...)` для runtime-записів. Вони проходять через Gateway-owned writer сховища сесій, зберігають паралельні оновлення та повторно використовують гарячий кеш. `saveSessionStore(...)` залишається доступним для сумісності та offline maintenance-style перезаписів.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="api.runtime.agent.defaults">
|
||||
Константи моделі та provider за замовчуванням:
|
||||
Константи моделі та провайдера за замовчуванням:
|
||||
|
||||
```typescript
|
||||
const model = api.runtime.agent.defaults.model; // e.g. "anthropic/claude-sonnet-4-6"
|
||||
@ -170,14 +165,14 @@ register(api) {
|
||||
```
|
||||
|
||||
<Warning>
|
||||
Перевизначення моделі (`provider`/`model`) потребують згоди оператора через `plugins.entries.<id>.subagent.allowModelOverride: true` у конфігурації. Недовірені plugins усе ще можуть запускати subagents, але запити на перевизначення відхиляються.
|
||||
Перевизначення моделі (`provider`/`model`) потребують opt-in оператора через `plugins.entries.<id>.subagent.allowModelOverride: true` у конфігурації. Недовірені plugins усе ще можуть запускати subagents, але запити на перевизначення відхиляються.
|
||||
</Warning>
|
||||
|
||||
`deleteSession(...)` може видаляти сеанси, створені тим самим plugin через `api.runtime.subagent.run(...)`. Видалення довільних користувацьких або операторських сеансів і надалі потребує запиту Gateway з admin-областю.
|
||||
`deleteSession(...)` може видаляти сесії, створені тим самим plugin через `api.runtime.subagent.run(...)`. Видалення довільних користувацьких або operator sessions усе ще потребує admin-scoped запиту Gateway.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="api.runtime.nodes">
|
||||
Перелічуйте підключені вузли та викликайте команду node-host з коду plugin, завантаженого Gateway, або з CLI-команд plugin. Використовуйте це, коли plugin володіє локальною роботою на спареному пристрої, наприклад браузером або аудіомостом на іншому Mac.
|
||||
Перелічуйте підключені nodes і викликайте node-host command з Gateway-loaded коду plugin або з CLI-команд plugin. Використовуйте це, коли plugin володіє локальною роботою на спареному пристрої, наприклад браузером або audio bridge на іншому Mac.
|
||||
|
||||
```typescript
|
||||
const { nodes } = await api.runtime.nodes.list({ connected: true });
|
||||
@ -190,13 +185,13 @@ register(api) {
|
||||
});
|
||||
```
|
||||
|
||||
Усередині Gateway цей runtime працює в процесі. У CLI-командах plugin він викликає налаштований Gateway через RPC, тож такі команди, як `openclaw googlemeet recover-tab`, можуть перевіряти спарені вузли з термінала. Команди Node і надалі проходять звичайне pairing вузлів Gateway, allowlists команд, політики node-invoke plugin і локальну обробку команд на вузлі.
|
||||
Усередині Gateway цей runtime є in-process. У CLI-командах plugin він викликає налаштований Gateway через RPC, тож команди на кшталт `openclaw googlemeet recover-tab` можуть перевіряти paired nodes з термінала. Node-команди все ще проходять через звичайне Gateway node pairing, allowlists команд, політики plugin node-invoke та node-local command handling.
|
||||
|
||||
Plugins, які відкривають небезпечні команди node-host, мають реєструвати політику node-invoke через `api.registerNodeInvokePolicy(...)`. Політика виконується в Gateway після перевірок allowlist команд і перед пересиланням команди до вузла, тож прямі виклики `node.invoke` і високорівневі інструменти plugin мають спільний шлях застосування правил.
|
||||
Plugins, що відкривають небезпечні node-host commands, мають реєструвати node-invoke policy за допомогою `api.registerNodeInvokePolicy(...)`. Policy виконується в Gateway після перевірок allowlist команд і перед пересиланням команди до node, тож прямі виклики `node.invoke` і higher-level plugin tools мають той самий шлях enforcement.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="api.runtime.tasks.managedFlows">
|
||||
Прив’яжіть runtime Task Flow до наявного ключа сеансу OpenClaw або довіреного контексту інструмента, а потім створюйте й керуйте Task Flows без передавання власника в кожному виклику.
|
||||
Прив’яжіть runtime Task Flow до наявного ключа сесії OpenClaw або довіреного контексту інструмента, а потім створюйте й керуйте Task Flows без передавання owner у кожному виклику.
|
||||
|
||||
```typescript
|
||||
const taskFlow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
|
||||
@ -223,7 +218,7 @@ register(api) {
|
||||
});
|
||||
```
|
||||
|
||||
Використовуйте `bindSession({ sessionKey, requesterOrigin })`, коли вже маєте довірений ключ сеансу OpenClaw з власного шару прив’язки. Не прив’язуйте з необробленого користувацького введення.
|
||||
Використовуйте `bindSession({ sessionKey, requesterOrigin })`, коли у вас уже є довірений ключ сесії OpenClaw з вашого власного binding layer. Не прив’язуйте з необробленого введення користувача.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="api.runtime.tts">
|
||||
@ -249,7 +244,7 @@ register(api) {
|
||||
});
|
||||
```
|
||||
|
||||
Використовує базову конфігурацію `messages.tts` і вибір provider. Повертає аудіобуфер PCM + частоту дискретизації.
|
||||
Використовує core-конфігурацію `messages.tts` і вибір провайдера. Повертає PCM-аудіобуфер + частоту дискретизації.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="api.runtime.mediaUnderstanding">
|
||||
@ -283,7 +278,7 @@ register(api) {
|
||||
});
|
||||
```
|
||||
|
||||
Повертає `{ text: undefined }`, коли вихідні дані не створено (наприклад, пропущений вхід).
|
||||
Повертає `{ text: undefined }`, коли не створено жодного виводу (наприклад, вхідні дані пропущено).
|
||||
|
||||
<Info>
|
||||
`api.runtime.stt.transcribeAudioFile(...)` залишається сумісним псевдонімом для `api.runtime.mediaUnderstanding.transcribeAudioFile(...)`.
|
||||
@ -342,9 +337,9 @@ register(api) {
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="api.runtime.config">
|
||||
Поточний знімок конфігурації runtime та транзакційні записи конфігурації. Надавайте перевагу
|
||||
конфігурації, яку вже було передано в активний шлях виклику; використовуйте
|
||||
`current()` лише тоді, коли обробнику потрібен безпосередньо знімок процесу.
|
||||
Поточний знімок конфігурації runtime і транзакційні записи конфігурації. Надавайте перевагу
|
||||
конфігурації, яку вже передано в активний шлях виклику; використовуйте
|
||||
`current()` лише тоді, коли обробнику безпосередньо потрібен знімок процесу.
|
||||
|
||||
```typescript
|
||||
const cfg = api.runtime.config.current();
|
||||
@ -358,7 +353,7 @@ register(api) {
|
||||
|
||||
`mutateConfigFile(...)` і `replaceConfigFile(...)` повертають значення `followUp`,
|
||||
наприклад `{ mode: "restart", requiresRestart: true, reason }`,
|
||||
яке фіксує намір записувача, не забираючи керування перезапуском у
|
||||
яке записує намір записувача, не забираючи керування перезапуском у
|
||||
gateway.
|
||||
|
||||
</Accordion>
|
||||
@ -367,7 +362,12 @@ register(api) {
|
||||
|
||||
```typescript
|
||||
await api.runtime.system.enqueueSystemEvent(event);
|
||||
api.runtime.system.requestHeartbeatNow();
|
||||
api.runtime.system.requestHeartbeat({
|
||||
source: "other",
|
||||
intent: "event",
|
||||
reason: "plugin-event",
|
||||
});
|
||||
api.runtime.system.requestHeartbeatNow({ reason: "plugin-event" }); // Deprecated compatibility alias.
|
||||
const output = await api.runtime.system.runCommandWithTimeout(cmd, args, opts);
|
||||
const hint = api.runtime.system.formatNativeDependencyHint(pkg);
|
||||
```
|
||||
@ -408,7 +408,7 @@ register(api) {
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="api.runtime.state">
|
||||
Розв’язання каталогу стану та сховище ключів на базі SQLite.
|
||||
Визначення каталогу стану та сховище ключів на базі SQLite.
|
||||
|
||||
```typescript
|
||||
const stateDir = api.runtime.state.resolveStateDir(process.env);
|
||||
@ -424,7 +424,7 @@ register(api) {
|
||||
await store.clear();
|
||||
```
|
||||
|
||||
Сховища ключів переживають перезапуски й ізольовані за прив’язаним до runtime ідентифікатором Plugin. Обмеження: `maxEntries` на простір імен, 1 000 активних рядків на Plugin, значення JSON до 64 КБ і необов’язкове завершення строку дії за TTL.
|
||||
Сховища ключів переживають перезапуски та ізольовані ідентифікатором plugin, прив’язаним до runtime. Обмеження: `maxEntries` на простір імен, 1 000 активних рядків на plugin, JSON-значення до 64 КБ і необов’язкове завершення строку дії TTL.
|
||||
|
||||
<Warning>
|
||||
У цьому випуску лише вбудовані plugins.
|
||||
@ -442,7 +442,7 @@ register(api) {
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="api.runtime.channel">
|
||||
Допоміжні засоби runtime для конкретних каналів (доступні, коли завантажено plugin каналу).
|
||||
Допоміжні засоби runtime, специфічні для каналу (доступні, коли завантажено plugin каналу).
|
||||
|
||||
`api.runtime.channel.mentions` — це спільна поверхня політики вхідних згадок для вбудованих plugins каналів, які використовують ін’єкцію runtime:
|
||||
|
||||
@ -479,17 +479,17 @@ register(api) {
|
||||
- `implicitMentionKindWhen`
|
||||
- `resolveInboundMentionDecision`
|
||||
|
||||
`api.runtime.channel.mentions` навмисно не надає старі допоміжні засоби сумісності `resolveMentionGating*`. Надавайте перевагу нормалізованому шляху `{ facts, policy }`.
|
||||
`api.runtime.channel.mentions` навмисно не надає старі сумісні допоміжні засоби `resolveMentionGating*`. Надавайте перевагу нормалізованому шляху `{ facts, policy }`.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## Зберігання посилань runtime
|
||||
|
||||
Використовуйте `createPluginRuntimeStore`, щоб зберігати посилання runtime для використання поза callback `register`:
|
||||
Використовуйте `createPluginRuntimeStore`, щоб зберегти посилання runtime для використання поза callback `register`:
|
||||
|
||||
<Steps>
|
||||
<Step title="Створіть сховище">
|
||||
<Step title="Create the store">
|
||||
```typescript
|
||||
import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
|
||||
import type { PluginRuntime } from "openclaw/plugin-sdk/runtime-store";
|
||||
@ -501,7 +501,7 @@ register(api) {
|
||||
```
|
||||
|
||||
</Step>
|
||||
<Step title="Під’єднайте до точки входу">
|
||||
<Step title="Wire into the entry point">
|
||||
```typescript
|
||||
export default defineChannelPluginEntry({
|
||||
id: "my-plugin",
|
||||
@ -512,7 +512,7 @@ register(api) {
|
||||
});
|
||||
```
|
||||
</Step>
|
||||
<Step title="Доступ з інших файлів">
|
||||
<Step title="Access from other files">
|
||||
```typescript
|
||||
export function getRuntime() {
|
||||
return store.getRuntime(); // throws if not initialized
|
||||
@ -527,7 +527,7 @@ register(api) {
|
||||
</Steps>
|
||||
|
||||
<Note>
|
||||
Надавайте перевагу `pluginId` для ідентичності runtime-store. Нижчорівнева форма `key` призначена для нетипових випадків, коли одному plugin навмисно потрібно більше ніж один слот runtime.
|
||||
Надавайте перевагу `pluginId` для ідентичності runtime-store. Низькорівнева форма `key` призначена для рідкісних випадків, коли одному plugin навмисно потрібно більше ніж один слот runtime.
|
||||
</Note>
|
||||
|
||||
## Інші поля верхнього рівня `api`
|
||||
@ -535,29 +535,29 @@ register(api) {
|
||||
Окрім `api.runtime`, об’єкт API також надає:
|
||||
|
||||
<ParamField path="api.id" type="string">
|
||||
Ідентифікатор Plugin.
|
||||
Ідентифікатор plugin.
|
||||
</ParamField>
|
||||
<ParamField path="api.name" type="string">
|
||||
Відображувана назва Plugin.
|
||||
Відображуване ім’я plugin.
|
||||
</ParamField>
|
||||
<ParamField path="api.config" type="OpenClawConfig">
|
||||
Поточний знімок конфігурації (активний знімок runtime в пам’яті, коли доступний).
|
||||
Поточний знімок конфігурації (активний знімок runtime у пам’яті, коли доступний).
|
||||
</ParamField>
|
||||
<ParamField path="api.pluginConfig" type="Record<string, unknown>">
|
||||
Конфігурація конкретного Plugin з `plugins.entries.<id>.config`.
|
||||
Конфігурація, специфічна для plugin, з `plugins.entries.<id>.config`.
|
||||
</ParamField>
|
||||
<ParamField path="api.logger" type="PluginLogger">
|
||||
Журналювач з областю дії (`debug`, `info`, `warn`, `error`).
|
||||
Логер із заданою областю (`debug`, `info`, `warn`, `error`).
|
||||
</ParamField>
|
||||
<ParamField path="api.registrationMode" type="PluginRegistrationMode">
|
||||
Поточний режим завантаження; `"setup-runtime"` — це легке вікно запуску/налаштування перед повним входом.
|
||||
Поточний режим завантаження; `"setup-runtime"` — це легке вікно запуску/налаштування перед повним entry.
|
||||
</ParamField>
|
||||
<ParamField path="api.resolvePath(input)" type="(string) => string">
|
||||
Розв’язати шлях відносно кореня plugin.
|
||||
Визначити шлях відносно кореня plugin.
|
||||
</ParamField>
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Внутрішні механізми Plugin](/uk/plugins/architecture) — модель можливостей і реєстр
|
||||
- [Внутрішня архітектура plugin](/uk/plugins/architecture) — модель можливостей і реєстр
|
||||
- [Точки входу SDK](/uk/plugins/sdk-entrypoints) — параметри `definePluginEntry`
|
||||
- [Огляд SDK](/uk/plugins/sdk-overview) — довідка щодо підшляхів
|
||||
- [Огляд SDK](/uk/plugins/sdk-overview) — довідник підшляхів
|
||||
|
||||
@ -1,24 +1,24 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете зрозуміти, які інструменти надає OpenClaw
|
||||
- Потрібно налаштувати, дозволити або заборонити інструменти
|
||||
- Ви обираєте між вбудованими інструментами, Skills і Plugin
|
||||
summary: 'Огляд інструментів і Plugin OpenClaw: що може робити агент і як його розширювати'
|
||||
- Вам потрібно налаштувати, дозволити або заборонити інструменти
|
||||
- Ви обираєте між вбудованими інструментами, Skills і plugins
|
||||
summary: 'Огляд інструментів і плагінів OpenClaw: що агент може робити та як його розширити'
|
||||
title: Інструменти та плагіни
|
||||
x-i18n:
|
||||
generated_at: "2026-04-30T13:04:18Z"
|
||||
generated_at: "2026-05-02T13:56:43Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: 7acfac11669b6f9696a368c08afada8d33e30ac2f452d507f5d1bc36bae367eb
|
||||
source_hash: 892eb520c14c13e4f55c80aa17ccd2578cc803796844c15cd71674cb2a0a8adf
|
||||
source_path: tools/index.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Усе, що агент робить поза генеруванням тексту, відбувається через **інструменти**.
|
||||
Усе, що агент робить окрім генерування тексту, відбувається через **інструменти**.
|
||||
Інструменти — це спосіб, у який агент читає файли, виконує команди, переглядає веб, надсилає
|
||||
повідомлення та взаємодіє з пристроями.
|
||||
|
||||
## Інструменти, Skills і plugins
|
||||
## Інструменти, Skills і плагіни
|
||||
|
||||
OpenClaw має три рівні, які працюють разом:
|
||||
|
||||
@ -26,103 +26,109 @@ OpenClaw має три рівні, які працюють разом:
|
||||
<Step title="Інструменти — це те, що викликає агент">
|
||||
Інструмент — це типізована функція, яку агент може викликати (наприклад, `exec`, `browser`,
|
||||
`web_search`, `message`). OpenClaw постачається з набором **вбудованих інструментів**, а
|
||||
plugins можуть реєструвати додаткові.
|
||||
плагіни можуть реєструвати додаткові.
|
||||
|
||||
Агент бачить інструменти як структуровані визначення функцій, надіслані до API моделі.
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Skills навчають агента, коли і як діяти">
|
||||
Skill — це markdown-файл (`SKILL.md`), який вставляється в системний prompt.
|
||||
Skills дають агенту контекст, обмеження та покрокові вказівки для
|
||||
<Step title="Skills навчають агента коли і як діяти">
|
||||
Skill — це markdown-файл (`SKILL.md`), який додається до системного промпта.
|
||||
Skills надають агенту контекст, обмеження та покрокові вказівки для
|
||||
ефективного використання інструментів. Skills зберігаються у вашому робочому просторі, у спільних папках
|
||||
або постачаються всередині plugins.
|
||||
або постачаються всередині плагінів.
|
||||
|
||||
[Довідник Skills](/uk/tools/skills) | [Створення Skills](/uk/tools/creating-skills)
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Plugins пакують усе разом">
|
||||
Plugin — це пакет, який може реєструвати будь-яке поєднання можливостей:
|
||||
канали, провайдерів моделей, інструменти, Skills, мовлення, транскрипцію в реальному часі,
|
||||
<Step title="Плагіни пакують усе разом">
|
||||
Плагін — це пакет, який може реєструвати будь-яке поєднання можливостей:
|
||||
канали, постачальників моделей, інструменти, Skills, мовлення, транскрипцію в реальному часі,
|
||||
голос у реальному часі, розуміння медіа, генерацію зображень, генерацію відео,
|
||||
web fetch, web search та інше. Деякі plugins є **core** (постачаються з
|
||||
OpenClaw), інші є **зовнішніми** (опубліковані спільнотою в npm).
|
||||
отримання вебвмісту, вебпошук тощо. Деякі плагіни є **core** (постачаються з
|
||||
OpenClaw), інші — **зовнішніми** (публікуються спільнотою в npm).
|
||||
|
||||
[Встановлення та налаштування plugins](/uk/tools/plugin) | [Створіть власний](/uk/plugins/building-plugins)
|
||||
[Установлення та налаштування плагінів](/uk/tools/plugin) | [Створення власного](/uk/plugins/building-plugins)
|
||||
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Вбудовані інструменти
|
||||
|
||||
Ці інструменти постачаються з OpenClaw і доступні без встановлення будь-яких plugins:
|
||||
Ці інструменти постачаються з OpenClaw і доступні без установлення будь-яких плагінів:
|
||||
|
||||
| Інструмент | Що він робить | Сторінка |
|
||||
| ------------------------------------------ | ------------------------------------------------------------------- | ----------------------------------------------------------- |
|
||||
| `exec` / `process` | Виконання shell-команд, керування фоновими процесами | [Exec](/uk/tools/exec), [Схвалення Exec](/uk/tools/exec-approvals) |
|
||||
| `code_execution` | Запуск ізольованого віддаленого аналізу Python | [Виконання коду](/uk/tools/code-execution) |
|
||||
| `browser` | Керування браузером Chromium (перехід, клік, знімок екрана) | [Браузер](/uk/tools/browser) |
|
||||
| `web_search` / `x_search` / `web_fetch` | Пошук у вебі, пошук дописів X, отримання вмісту сторінки | [Веб](/uk/tools/web), [Web Fetch](/uk/tools/web-fetch) |
|
||||
| `read` / `write` / `edit` | Файлове введення/виведення в робочому просторі | |
|
||||
| `apply_patch` | Багатофрагментні патчі файлів | [Apply Patch](/uk/tools/apply-patch) |
|
||||
| `message` | Надсилання повідомлень у всіх каналах | [Надсилання агентом](/uk/tools/agent-send) |
|
||||
| `canvas` | Керування node Canvas (present, eval, snapshot) | |
|
||||
| `nodes` | Виявлення й вибір спарених пристроїв | |
|
||||
| `cron` / `gateway` | Керування запланованими завданнями; перевірка, патчинг, перезапуск або оновлення gateway | |
|
||||
| `image` / `image_generate` | Аналіз або генерація зображень | [Генерація зображень](/uk/tools/image-generation) |
|
||||
| `music_generate` | Генерація музичних треків | [Генерація музики](/uk/tools/music-generation) |
|
||||
| `video_generate` | Генерація відео | [Генерація відео](/uk/tools/video-generation) |
|
||||
| `tts` | Одноразове перетворення тексту на мовлення | [TTS](/uk/tools/tts) |
|
||||
| `sessions_*` / `subagents` / `agents_list` | Керування сесіями, статус і оркестрація під-агентів | [Під-агенти](/uk/tools/subagents) |
|
||||
| `session_status` | Легке зчитування у стилі `/status` і перевизначення моделі сесії | [Інструменти сесій](/uk/concepts/session-tool) |
|
||||
| Інструмент | Що він робить | Сторінка |
|
||||
| ------------------------------------------ | --------------------------------------------------------------------- | ------------------------------------------------------------ |
|
||||
| `exec` / `process` | Виконує shell-команди, керує фоновими процесами | [Exec](/uk/tools/exec), [Схвалення Exec](/uk/tools/exec-approvals) |
|
||||
| `code_execution` | Виконує ізольований віддалений аналіз Python | [Виконання коду](/uk/tools/code-execution) |
|
||||
| `browser` | Керує браузером Chromium (навігація, клацання, знімок екрана) | [Браузер](/uk/tools/browser) |
|
||||
| `web_search` / `x_search` / `web_fetch` | Шукає в інтернеті, шукає дописи X, отримує вміст сторінок | [Веб](/uk/tools/web), [Отримання вебвмісту](/uk/tools/web-fetch) |
|
||||
| `read` / `write` / `edit` | Файлове введення/виведення в робочому просторі | |
|
||||
| `apply_patch` | Багатофрагментні патчі файлів | [Застосування патча](/uk/tools/apply-patch) |
|
||||
| `message` | Надсилає повідомлення в усіх каналах | [Надсилання агентом](/uk/tools/agent-send) |
|
||||
| `canvas` | Керує node Canvas (презентація, обчислення, знімок) | |
|
||||
| `nodes` | Виявляє спарені пристрої та націлюється на них | |
|
||||
| `cron` / `gateway` | Керує запланованими завданнями; перевіряє, патчить, перезапускає або оновлює gateway | |
|
||||
| `image` / `image_generate` | Аналізує або генерує зображення | [Генерація зображень](/uk/tools/image-generation) |
|
||||
| `music_generate` | Генерує музичні треки | [Генерація музики](/uk/tools/music-generation) |
|
||||
| `video_generate` | Генерує відео | [Генерація відео](/uk/tools/video-generation) |
|
||||
| `tts` | Одноразове перетворення тексту на мовлення | [TTS](/uk/tools/tts) |
|
||||
| `sessions_*` / `subagents` / `agents_list` | Керування сеансами, статус і оркестрація підагентів | [Підагенти](/uk/tools/subagents) |
|
||||
| `session_status` | Легке зчитування у стилі `/status` і перевизначення моделі сеансу | [Інструменти сеансу](/uk/concepts/session-tool) |
|
||||
|
||||
Для роботи із зображеннями використовуйте `image` для аналізу та `image_generate` для генерації або редагування. Якщо ви націлюєтеся на `openai/*`, `google/*`, `fal/*` або іншого нестандартного провайдера зображень, спочатку налаштуйте auth/API key цього провайдера.
|
||||
Для роботи із зображеннями використовуйте `image` для аналізу та `image_generate` для генерації або редагування. Якщо ви націлюєтеся на `openai/*`, `google/*`, `fal/*` або іншого нестандартного постачальника зображень, спершу налаштуйте автентифікацію/API-ключ цього постачальника.
|
||||
|
||||
Для роботи з музикою використовуйте `music_generate`. Якщо ви націлюєтеся на `google/*`, `minimax/*` або іншого нестандартного провайдера музики, спочатку налаштуйте auth/API key цього провайдера.
|
||||
Для роботи з музикою використовуйте `music_generate`. Якщо ви націлюєтеся на `google/*`, `minimax/*` або іншого нестандартного постачальника музики, спершу налаштуйте автентифікацію/API-ключ цього постачальника.
|
||||
|
||||
Для роботи з відео використовуйте `video_generate`. Якщо ви націлюєтеся на `qwen/*` або іншого нестандартного провайдера відео, спочатку налаштуйте auth/API key цього провайдера.
|
||||
Для роботи з відео використовуйте `video_generate`. Якщо ви націлюєтеся на `qwen/*` або іншого нестандартного постачальника відео, спершу налаштуйте автентифікацію/API-ключ цього постачальника.
|
||||
|
||||
Для workflow-керованої генерації аудіо використовуйте `music_generate`, коли plugin, наприклад
|
||||
ComfyUI, реєструє його. Це окремо від `tts`, який є перетворенням тексту на мовлення.
|
||||
Для генерації аудіо, керованої workflow, використовуйте `music_generate`, коли плагін, наприклад
|
||||
ComfyUI, реєструє його. Це окремо від `tts`, який перетворює текст на мовлення.
|
||||
|
||||
`session_status` — це легкий інструмент статусу/зчитування у групі сесій.
|
||||
Він відповідає на запитання у стилі `/status` про поточну сесію та може
|
||||
за бажанням встановити перевизначення моделі для окремої сесії; `model=default` очищає це
|
||||
перевизначення. Як і `/status`, він може дозаповнювати розріджені лічильники токенів/cache і
|
||||
`session_status` — це легкий інструмент статусу/зчитування в групі сеансів.
|
||||
Він відповідає на запитання у стилі `/status` про поточний сеанс і може
|
||||
за потреби встановити перевизначення моделі для окремого сеансу; `model=default` очищає це
|
||||
перевизначення. Як і `/status`, він може доповнювати розріджені лічильники токенів/кешу та
|
||||
мітку активної runtime-моделі з останнього запису використання в транскрипті.
|
||||
|
||||
`gateway` — це runtime-інструмент лише для власника для операцій gateway:
|
||||
`gateway` — це runtime-інструмент лише для власника для операцій із gateway:
|
||||
|
||||
- `config.schema.lookup` для одного path-scoped піддерева конфігурації перед редагуванням
|
||||
- `config.get` для поточного знімка конфігурації + hash
|
||||
- `config.schema.lookup` для одного обмеженого шляхом піддерева конфігурації перед редагуванням
|
||||
- `config.get` для поточного знімка конфігурації + хешу
|
||||
- `config.patch` для часткових оновлень конфігурації з перезапуском
|
||||
- `config.apply` лише для повної заміни конфігурації
|
||||
- `update.run` для явного самостійного оновлення + перезапуску
|
||||
- `config.apply` лише для заміни повної конфігурації
|
||||
- `update.run` для явного самооновлення + перезапуску
|
||||
|
||||
Для часткових змін віддавайте перевагу `config.schema.lookup`, а потім `config.patch`. Використовуйте
|
||||
Для часткових змін надавайте перевагу `config.schema.lookup`, а потім `config.patch`. Використовуйте
|
||||
`config.apply` лише тоді, коли ви навмисно замінюєте всю конфігурацію.
|
||||
Для ширшої документації конфігурації прочитайте [Конфігурація](/uk/gateway/configuration) і
|
||||
Докладнішу документацію з конфігурації див. у [Конфігурація](/uk/gateway/configuration) та
|
||||
[Довідник конфігурації](/uk/gateway/configuration-reference).
|
||||
Інструмент також відмовляється змінювати `tools.exec.ask` або `tools.exec.security`;
|
||||
застарілі псевдоніми `tools.bash.*` нормалізуються до тих самих захищених шляхів exec.
|
||||
|
||||
### Інструменти, надані plugins
|
||||
### Інструменти, надані Plugin
|
||||
|
||||
Plugins можуть реєструвати додаткові інструменти. Деякі приклади:
|
||||
Plugins можуть реєструвати додаткові інструменти. Кілька прикладів:
|
||||
|
||||
- [Diffs](/uk/tools/diffs) — переглядач і рендерер diff
|
||||
- [LLM Task](/uk/tools/llm-task) — крок LLM лише з JSON для структурованого виводу
|
||||
- [Lobster](/uk/tools/lobster) — типізований runtime workflow з відновлюваними схваленнями
|
||||
- [Генерація музики](/uk/tools/music-generation) — спільний інструмент `music_generate` із workflow-backed провайдерами
|
||||
- [OpenProse](/uk/prose) — markdown-first оркестрація workflow
|
||||
- [Tokenjuice](/uk/tools/tokenjuice) — ущільнення шумних результатів інструментів `exec` і `bash`
|
||||
- [Відмінності](/uk/tools/diffs) — переглядач і рендерер відмінностей
|
||||
- [Завдання LLM](/uk/tools/llm-task) — крок LLM лише з JSON для структурованого виводу
|
||||
- [Lobster](/uk/tools/lobster) — типізоване середовище виконання робочих процесів із відновлюваними затвердженнями
|
||||
- [Генерація музики](/uk/tools/music-generation) — спільний інструмент `music_generate` з провайдерами на основі робочих процесів
|
||||
- [OpenProse](/uk/prose) — оркестрація робочих процесів із пріоритетом markdown
|
||||
- [Tokenjuice](/uk/tools/tokenjuice) — стискає шумні результати інструментів `exec` і `bash`
|
||||
|
||||
## Налаштування інструментів
|
||||
Інструменти Plugin все ще створюються за допомогою `api.registerTool(...)` і оголошуються в
|
||||
списку `contracts.tools` маніфесту Plugin. OpenClaw фіксує перевірений
|
||||
дескриптор інструмента під час виявлення та кешує його за джерелом Plugin і контрактом, тому
|
||||
подальше планування інструментів може пропускати завантаження runtime Plugin. Виконання інструмента все ще завантажує
|
||||
власний Plugin і викликає живу зареєстровану реалізацію.
|
||||
|
||||
### Списки дозволів і заборон
|
||||
## Конфігурація інструментів
|
||||
|
||||
Керуйте тим, які інструменти агент може викликати, через `tools.allow` / `tools.deny` у
|
||||
### Списки дозволу й заборони
|
||||
|
||||
Керуйте тим, які інструменти агент може викликати через `tools.allow` / `tools.deny` у
|
||||
конфігурації. Заборона завжди має перевагу над дозволом.
|
||||
|
||||
```json5
|
||||
@ -134,46 +140,46 @@ Plugins можуть реєструвати додаткові інструме
|
||||
}
|
||||
```
|
||||
|
||||
OpenClaw зупиняється без доступу, коли явний allowlist не знаходить жодного викликаного інструмента.
|
||||
Наприклад, `tools.allow: ["query_db"]` працює лише якщо завантажений plugin фактично
|
||||
реєструє `query_db`. Якщо жоден вбудований, plugin або bundled MCP інструмент не відповідає
|
||||
allowlist, виконання зупиняється до виклику моделі, замість того щоб продовжувати як
|
||||
text-only виконання, яке могло б вигадати результати інструментів.
|
||||
OpenClaw завершує роботу без доступу, коли явний список дозволів не відповідає жодним викликаним інструментам.
|
||||
Наприклад, `tools.allow: ["query_db"]` працює лише якщо завантажений Plugin справді
|
||||
реєструє `query_db`. Якщо жоден вбудований інструмент, Plugin або вбудований у пакет MCP-інструмент не відповідає
|
||||
списку дозволів, запуск зупиняється до виклику моделі, замість того щоб продовжуватися як
|
||||
текстовий запуск, який міг би вигадати результати інструментів.
|
||||
|
||||
### Профілі інструментів
|
||||
|
||||
`tools.profile` встановлює базовий allowlist перед застосуванням `allow`/`deny`.
|
||||
`tools.profile` задає базовий список дозволів до застосування `allow`/`deny`.
|
||||
Перевизначення для окремого агента: `agents.list[].tools.profile`.
|
||||
|
||||
| Профіль | Що він містить |
|
||||
| Профіль | Що він включає |
|
||||
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `full` | Необмежена базова конфігурація для ширшого доступу до команд/керування; те саме, що залишити `tools.profile` невстановленим |
|
||||
| `full` | Необмежена базова конфігурація для ширшого доступу до команд і керування; те саме, що залишити `tools.profile` незаданим |
|
||||
| `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate`, `music_generate`, `video_generate` |
|
||||
| `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` |
|
||||
| `minimal` | Лише `session_status` |
|
||||
|
||||
<Note>
|
||||
`tools.profile: "messaging"` навмисно вузький для агентів, зосереджених на каналах.
|
||||
Він не включає ширші інструменти команд/керування, як-от файлова система, runtime,
|
||||
браузер, canvas, nodes, cron і керування gateway. Використовуйте `tools.profile: "full"`
|
||||
як необмежену базову конфігурацію для ширшого доступу до команд/керування, а потім звужуйте
|
||||
Він не включає ширші інструменти команд і керування, як-от файлова система, runtime,
|
||||
браузер, canvas, вузли, cron і керування Gateway. Використовуйте `tools.profile: "full"`
|
||||
як необмежену базову конфігурацію для ширшого доступу до команд і керування, а потім скорочуйте
|
||||
доступ за допомогою `tools.allow` / `tools.deny`, коли потрібно.
|
||||
</Note>
|
||||
|
||||
`coding` включає легкі веб-інструменти (`web_search`, `web_fetch`, `x_search`),
|
||||
`coding` включає легкі вебінструменти (`web_search`, `web_fetch`, `x_search`),
|
||||
але не повний інструмент керування браузером. Автоматизація браузера може керувати реальними
|
||||
сесіями та профілями з входом у систему, тому додайте її явно через
|
||||
сесіями та профілями з виконаним входом, тому додайте її явно за допомогою
|
||||
`tools.alsoAllow: ["browser"]` або для окремого агента
|
||||
`agents.list[].tools.alsoAllow: ["browser"]`.
|
||||
|
||||
<Note>
|
||||
Налаштування `tools.exec` або `tools.fs` під обмежувальним профілем (`messaging`, `minimal`) не розширює allowlist профілю неявно. Додавайте явні записи `tools.alsoAllow` (наприклад, `["exec", "process"]` для exec або `["read", "write", "edit"]` для fs), коли хочете, щоб обмежувальний профіль використовував ці налаштовані секції. OpenClaw записує startup-попередження, коли секція конфігурації наявна без відповідного дозволу `alsoAllow`.
|
||||
Налаштування `tools.exec` або `tools.fs` під обмежувальним профілем (`messaging`, `minimal`) не розширює неявно список дозволів профілю. Додайте явні записи `tools.alsoAllow` (наприклад, `["exec", "process"]` для exec або `["read", "write", "edit"]` для fs), коли хочете, щоб обмежувальний профіль використовував ці налаштовані розділи. OpenClaw реєструє попередження під час запуску, коли розділ конфігурації присутній без відповідного дозволу `alsoAllow`.
|
||||
</Note>
|
||||
|
||||
Профілі `coding` і `messaging` також дозволяють налаштовані bundle MCP інструменти
|
||||
під ключем plugin `bundle-mcp`. Додайте `tools.deny: ["bundle-mcp"]`, коли
|
||||
хочете, щоб профіль зберігав свої звичайні вбудовані інструменти, але приховував усі налаштовані MCP інструменти.
|
||||
Профіль `minimal` не включає bundle MCP інструменти.
|
||||
Профілі `coding` і `messaging` також дозволяють налаштовані пакетні MCP-інструменти
|
||||
під ключем Plugin `bundle-mcp`. Додайте `tools.deny: ["bundle-mcp"]`, коли
|
||||
хочете, щоб профіль зберігав свої звичайні вбудовані інструменти, але приховував усі налаштовані MCP-інструменти.
|
||||
Профіль `minimal` не включає пакетні MCP-інструменти.
|
||||
|
||||
Приклад (найширша поверхня інструментів за замовчуванням):
|
||||
|
||||
@ -187,9 +193,9 @@ text-only виконання, яке могло б вигадати резуль
|
||||
|
||||
### Групи інструментів
|
||||
|
||||
Використовуйте скорочення `group:*` у списках allow/deny:
|
||||
Використовуйте скорочення `group:*` у списках дозволу/заборони:
|
||||
|
||||
| Група | Інструменти |
|
||||
| Група | Інструменти |
|
||||
| ------------------ | --------------------------------------------------------------------------------------------------------- |
|
||||
| `group:runtime` | exec, process, code_execution (`bash` приймається як псевдонім для `exec`) |
|
||||
| `group:fs` | read, write, edit, apply_patch |
|
||||
@ -202,22 +208,22 @@ text-only виконання, яке могло б вигадати резуль
|
||||
| `group:nodes` | nodes |
|
||||
| `group:agents` | agents_list |
|
||||
| `group:media` | image, image_generate, music_generate, video_generate, tts |
|
||||
| `group:openclaw` | Усі вбудовані інструменти OpenClaw (без інструментів Plugin) |
|
||||
| `group:openclaw` | Усі вбудовані інструменти OpenClaw (за винятком інструментів Plugin) |
|
||||
|
||||
`sessions_history` повертає обмежене, відфільтроване з міркувань безпеки подання згадування. Воно вилучає
|
||||
теги міркувань, службовий каркас `<relevant-memories>`, XML-навантаження викликів інструментів у відкритому тексті
|
||||
`sessions_history` повертає обмежений, відфільтрований з міркувань безпеки вигляд пригадування. Він вилучає
|
||||
теги мислення, каркас `<relevant-memories>`, простотекстові XML-корисні навантаження викликів інструментів
|
||||
(зокрема `<tool_call>...</tool_call>`,
|
||||
`<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`,
|
||||
`<function_calls>...</function_calls>` і обрізані блоки викликів інструментів),
|
||||
понижений службовий каркас викликів інструментів, витеклі ASCII-/повноширинні керівні
|
||||
`<function_calls>...</function_calls>` і скорочені блоки викликів інструментів),
|
||||
знижений каркас викликів інструментів, витіклі ASCII/повноширинні керівні
|
||||
токени моделі та некоректний XML викликів інструментів MiniMax із тексту асистента, а потім застосовує
|
||||
редагування/обрізання й можливі заповнювачі для завеликих рядків замість того, щоб діяти
|
||||
редагування/усічення та, за потреби, заповнювачі для надмірно великих рядків замість того, щоб діяти
|
||||
як сирий дамп стенограми.
|
||||
|
||||
### Обмеження, специфічні для провайдера
|
||||
### Обмеження для окремих провайдерів
|
||||
|
||||
Використовуйте `tools.byProvider`, щоб обмежити інструменти для конкретних провайдерів без
|
||||
зміни глобальних стандартних значень:
|
||||
Використовуйте `tools.byProvider`, щоб обмежувати інструменти для окремих провайдерів без
|
||||
зміни глобальних стандартних налаштувань:
|
||||
|
||||
```json5
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user