chore(i18n): refresh uk translations
This commit is contained in:
parent
282609ae29
commit
2f6bdac791
@ -1,33 +1,34 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете знайти контакти, групи або ідентифікатори self для каналу
|
||||
- Ви розробляєте адаптер каталогу каналу
|
||||
summary: Довідник CLI для `openclaw directory` (self, peers, groups)
|
||||
- Ви хочете знайти ідентифікатори контактів/груп/власного облікового запису для каналу
|
||||
- Ви розробляєте адаптер каталогу каналів
|
||||
summary: Довідник CLI для `openclaw directory` (себе, однорангових учасників, груп)
|
||||
title: Каталог
|
||||
x-i18n:
|
||||
generated_at: "2026-04-24T04:12:06Z"
|
||||
model: gpt-5.4
|
||||
generated_at: "2026-05-02T05:25:24Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: f63ed92469738501ae1f8f08aec3edf01d1f0f46008571ed38ccd9c77e5ba15e
|
||||
source_hash: dcd0be284c0ec1aa347084d84f7001f1e2f47977ec5198025ba303297858aaab
|
||||
source_path: cli/directory.md
|
||||
workflow: 15
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
# `openclaw directory`
|
||||
|
||||
Пошук у каталозі для каналів, які це підтримують (контакти/peers, групи та “me”).
|
||||
Пошук у каталозі для каналів, які це підтримують (контакти/співрозмовники, групи та «me»).
|
||||
|
||||
## Загальні прапорці
|
||||
## Спільні прапорці
|
||||
|
||||
- `--channel <name>`: id/псевдонім каналу (обов’язково, якщо налаштовано кілька каналів; автоматично, якщо налаштовано лише один)
|
||||
- `--account <id>`: id облікового запису (типово: типовий для каналу)
|
||||
- `--json`: вивід JSON
|
||||
- `--channel <name>`: ідентифікатор/псевдонім каналу (обов’язково, коли налаштовано кілька каналів; автоматично, коли налаштовано лише один)
|
||||
- `--account <id>`: ідентифікатор облікового запису (типово: стандартний для каналу)
|
||||
- `--json`: вивести JSON
|
||||
|
||||
## Примітки
|
||||
|
||||
- `directory` призначено для того, щоб допомогти вам знайти ID, які можна вставити в інші команди (особливо `openclaw message send --target ...`).
|
||||
- Для багатьох каналів результати беруться з конфігурації (allowlist / налаштовані групи), а не з живого каталогу провайдера.
|
||||
- Типовий вивід — це `id` (а іноді й `name`), розділені табуляцією; для сценаріїв використовуйте `--json`.
|
||||
- `directory` призначено, щоб допомогти вам знайти ідентифікатори, які можна вставити в інші команди (особливо `openclaw message send --target ...`).
|
||||
- Для багатьох каналів результати базуються на конфігурації (списки дозволених / налаштовані групи), а не на живому каталозі провайдера.
|
||||
- Установлені Plugin каналів усе ще можуть не підтримувати каталог; у такому разі команда повідомляє про непідтримувану операцію каталогу замість перевстановлення Plugin.
|
||||
- Типовий вивід — це `id` (а іноді `name`), розділені табуляцією; використовуйте `--json` для сценаріїв.
|
||||
|
||||
## Використання результатів із `message send`
|
||||
|
||||
@ -36,24 +37,24 @@ openclaw directory peers list --channel slack --query "U0"
|
||||
openclaw message send --channel slack --target user:U012ABCDEF --message "hello"
|
||||
```
|
||||
|
||||
## Формати ID (за каналами)
|
||||
## Формати ідентифікаторів (за каналом)
|
||||
|
||||
- WhatsApp: `+15551234567` (DM), `1234567890-1234567890@g.us` (група)
|
||||
- Telegram: `@username` або числовий id чату; групи — це числові id
|
||||
- Telegram: `@username` або числовий ідентифікатор чату; групи мають числові ідентифікатори
|
||||
- Slack: `user:U…` і `channel:C…`
|
||||
- Discord: `user:<id>` і `channel:<id>`
|
||||
- Matrix (Plugin): `user:@user:server`, `room:!roomId:server` або `#alias:server`
|
||||
- Microsoft Teams (Plugin): `user:<id>` і `conversation:<id>`
|
||||
- Zalo (Plugin): id користувача (Bot API)
|
||||
- Zalo Personal / `zalouser` (Plugin): id потоку (DM/група) з `zca` (`me`, `friend list`, `group list`)
|
||||
- Zalo (Plugin): ідентифікатор користувача (Bot API)
|
||||
- Zalo Personal / `zalouser` (Plugin): ідентифікатор потоку (DM/група) з `zca` (`me`, `friend list`, `group list`)
|
||||
|
||||
## Self ("me")
|
||||
## Себе ("me")
|
||||
|
||||
```bash
|
||||
openclaw directory self --channel zalouser
|
||||
```
|
||||
|
||||
## Peers (контакти/користувачі)
|
||||
## Співрозмовники (контакти/користувачі)
|
||||
|
||||
```bash
|
||||
openclaw directory peers list --channel zalouser
|
||||
|
||||
@ -1,65 +1,65 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви хочете створити новий Plugin OpenClaw
|
||||
- Вам потрібен короткий посібник для швидкого старту з розробки Plugin
|
||||
- Ви додаєте новий канал, провайдера, інструмент або іншу можливість в OpenClaw
|
||||
- Ви хочете створити новий Plugin для OpenClaw
|
||||
- Вам потрібен короткий посібник із розробки Plugin
|
||||
- Ви додаєте до OpenClaw новий канал, провайдера, інструмент або іншу можливість
|
||||
sidebarTitle: Getting Started
|
||||
summary: Створіть свій перший Plugin OpenClaw за лічені хвилини
|
||||
summary: Створіть свій перший Plugin для OpenClaw за кілька хвилин
|
||||
title: Створення плагінів
|
||||
x-i18n:
|
||||
generated_at: "2026-05-02T01:11:04Z"
|
||||
generated_at: "2026-05-02T05:25:37Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: e05c82cd810ed400a293cf0c336efeb6e5a6e081b144eb89150407754a98bc19
|
||||
source_hash: 2cf85c1c1c1f6ae6752f7fb8d842a420bffac6ebaf4d64803fb8bb8ab9f6f83c
|
||||
source_path: plugins/building-plugins.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Plugins розширюють OpenClaw новими можливостями: канали, постачальники моделей,
|
||||
мовлення, транскрипція в реальному часі, голос у реальному часі, розуміння
|
||||
медіа, генерація зображень, генерація відео, web fetch, web search, інструменти агента або будь-яка
|
||||
комбінація.
|
||||
Плагіни розширюють OpenClaw новими можливостями: каналами, провайдерами моделей,
|
||||
мовленням, транскрипцією в реальному часі, голосом у реальному часі, розумінням медіа, генерацією зображень,
|
||||
генерацією відео, вебзавантаженням, вебпошуком, інструментами агента або будь-якою
|
||||
комбінацією.
|
||||
|
||||
Вам не потрібно додавати свій plugin до репозиторію OpenClaw. Опублікуйте в
|
||||
[ClawHub](/uk/tools/clawhub), і користувачі встановлять його через
|
||||
`openclaw plugins install <package-name>`. OpenClaw спочатку пробує ClawHub і
|
||||
автоматично повертається до npm для пакетів, які все ще використовують дистрибуцію npm.
|
||||
Вам не потрібно додавати свій плагін до репозиторію OpenClaw. Опублікуйте його в
|
||||
[ClawHub](/uk/tools/clawhub), і користувачі встановлять його за допомогою
|
||||
`openclaw plugins install <package-name>`. OpenClaw спершу пробує ClawHub і
|
||||
автоматично повертається до npm для пакетів, які все ще використовують розповсюдження через npm.
|
||||
|
||||
## Передумови
|
||||
|
||||
- Node >= 22 і менеджер пакетів (npm або pnpm)
|
||||
- Знайомство з TypeScript (ESM)
|
||||
- Для plugins у репозиторії: репозиторій клоновано й виконано `pnpm install`. Розробка plugin із
|
||||
checkout вихідного коду підтримує лише pnpm, бо OpenClaw завантажує bundled
|
||||
plugins з пакетів workspace `extensions/*`.
|
||||
- Для плагінів у репозиторії: репозиторій клоновано й виконано `pnpm install`. Розробка плагінів
|
||||
із checkout вихідного коду підтримує лише pnpm, оскільки OpenClaw завантажує вбудовані
|
||||
плагіни з workspace-пакетів `extensions/*`.
|
||||
|
||||
## Який тип plugin?
|
||||
## Який тип плагіна?
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="Channel plugin" icon="messages-square" href="/uk/plugins/sdk-channel-plugins">
|
||||
<Card title="Плагін каналу" icon="messages-square" href="/uk/plugins/sdk-channel-plugins">
|
||||
Підключіть OpenClaw до платформи обміну повідомленнями (Discord, IRC тощо)
|
||||
</Card>
|
||||
<Card title="Provider plugin" icon="cpu" href="/uk/plugins/sdk-provider-plugins">
|
||||
Додайте постачальника моделей (LLM, proxy або власний endpoint)
|
||||
<Card title="Плагін провайдера" icon="cpu" href="/uk/plugins/sdk-provider-plugins">
|
||||
Додайте провайдера моделей (LLM, проксі або власний endpoint)
|
||||
</Card>
|
||||
<Card title="Tool / hook plugin" icon="wrench" href="/uk/plugins/hooks">
|
||||
<Card title="Плагін інструмента / hook" icon="wrench" href="/uk/plugins/hooks">
|
||||
Зареєструйте інструменти агента, event hooks або сервіси — продовжуйте нижче
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
Для channel plugin, який не гарантовано буде встановлено під час onboarding/setup,
|
||||
Для плагіна каналу, який не гарантовано буде встановлено під час запуску onboarding/setup,
|
||||
використовуйте `createOptionalChannelSetupSurface(...)` з
|
||||
`openclaw/plugin-sdk/channel-setup`. Він створює пару setup adapter + wizard,
|
||||
яка повідомляє про вимогу встановлення й завершується закрито під час реальних записів конфігурації,
|
||||
доки plugin не буде встановлено.
|
||||
яка повідомляє про вимогу встановлення й завершується без змін під час реальних записів конфігурації,
|
||||
доки плагін не встановлено.
|
||||
|
||||
## Швидкий старт: tool plugin
|
||||
## Швидкий старт: плагін інструмента
|
||||
|
||||
Цей посібник створює мінімальний plugin, який реєструє інструмент агента. Для channel
|
||||
і provider plugins є окремі посібники за посиланнями вище.
|
||||
Цей walkthrough створює мінімальний плагін, який реєструє інструмент агента. Для плагінів каналів
|
||||
і провайдерів є окремі посібники, посилання на які наведено вище.
|
||||
|
||||
<Steps>
|
||||
<Step title="Create the package and manifest">
|
||||
<Step title="Створіть пакет і manifest">
|
||||
<CodeGroup>
|
||||
```json package.json
|
||||
{
|
||||
@ -85,6 +85,9 @@ Plugins розширюють OpenClaw новими можливостями: к
|
||||
"id": "my-plugin",
|
||||
"name": "My Plugin",
|
||||
"description": "Adds a custom tool to OpenClaw",
|
||||
"contracts": {
|
||||
"tools": ["my_tool"]
|
||||
},
|
||||
"activation": {
|
||||
"onStartup": true
|
||||
},
|
||||
@ -96,15 +99,16 @@ Plugins розширюють OpenClaw новими можливостями: к
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
Кожному plugin потрібен manifest, навіть без конфігурації, і кожен plugin має
|
||||
свідомо оголошувати `activation.onStartup`. Інструментам, зареєстрованим під час runtime,
|
||||
потрібен імпорт під час startup, тому в цьому прикладі встановлено `true`. Див.
|
||||
[Manifest](/uk/plugins/manifest) для повної схеми. Канонічні фрагменти публікації ClawHub
|
||||
Кожному плагіну потрібен manifest, навіть без конфігурації. Інструменти, зареєстровані під час виконання,
|
||||
мають бути перелічені в `contracts.tools`, щоб OpenClaw міг визначити відповідальний
|
||||
плагін без завантаження runtime кожного плагіна. Плагіни також мають свідомо оголошувати
|
||||
`activation.onStartup`. У цьому прикладі встановлено значення `true`. Див.
|
||||
[Manifest](/uk/plugins/manifest) для повної схеми. Канонічні snippets публікації ClawHub
|
||||
містяться в `docs/snippets/plugin-publish/`.
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Write the entry point">
|
||||
<Step title="Напишіть entry point">
|
||||
|
||||
```typescript
|
||||
// index.ts
|
||||
@ -128,15 +132,15 @@ Plugins розширюють OpenClaw новими можливостями: к
|
||||
});
|
||||
```
|
||||
|
||||
`definePluginEntry` призначений для plugins, що не є channel plugins. Для channels використовуйте
|
||||
`defineChannelPluginEntry` — див. [Channel Plugins](/uk/plugins/sdk-channel-plugins).
|
||||
`definePluginEntry` призначений для плагінів, що не є каналами. Для каналів використовуйте
|
||||
`defineChannelPluginEntry` — див. [Плагіни каналів](/uk/plugins/sdk-channel-plugins).
|
||||
Повні параметри entry point див. у [Entry Points](/uk/plugins/sdk-entrypoints).
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Test and publish">
|
||||
<Step title="Протестуйте й опублікуйте">
|
||||
|
||||
**Зовнішні plugins:** перевірте й опублікуйте через ClawHub, потім встановіть:
|
||||
**Зовнішні плагіни:** перевірте та опублікуйте через ClawHub, потім встановіть:
|
||||
|
||||
```bash
|
||||
clawhub package publish your-org/your-plugin --dry-run
|
||||
@ -144,11 +148,11 @@ Plugins розширюють OpenClaw новими можливостями: к
|
||||
openclaw plugins install clawhub:@myorg/openclaw-my-plugin
|
||||
```
|
||||
|
||||
OpenClaw також перевіряє ClawHub перед npm для bare package specs на кшталт
|
||||
OpenClaw також перевіряє ClawHub перед npm для простих специфікацій пакетів, як-от
|
||||
`@myorg/openclaw-my-plugin`; npm залишається fallback для пакетів, які ще
|
||||
не мігрували до ClawHub.
|
||||
|
||||
**Plugins у репозиторії:** розмістіть під bundled plugin workspace tree — буде виявлено автоматично.
|
||||
**Плагіни в репозиторії:** розмістіть у дереві workspace вбудованих плагінів — їх буде автоматично виявлено.
|
||||
|
||||
```bash
|
||||
pnpm test -- <bundled-plugin-root>/my-plugin/
|
||||
@ -157,70 +161,70 @@ Plugins розширюють OpenClaw новими можливостями: к
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
## Можливості Plugin
|
||||
## Можливості плагіна
|
||||
|
||||
Один plugin може зареєструвати будь-яку кількість можливостей через об'єкт `api`:
|
||||
Один плагін може зареєструвати будь-яку кількість можливостей через об’єкт `api`:
|
||||
|
||||
| Можливість | Метод реєстрації | Докладний посібник |
|
||||
| Можливість | Метод реєстрації | Детальний посібник |
|
||||
| ---------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------- |
|
||||
| Text inference (LLM) | `api.registerProvider(...)` | [Provider Plugins](/uk/plugins/sdk-provider-plugins) |
|
||||
| CLI inference backend | `api.registerCliBackend(...)` | [CLI Backends](/uk/gateway/cli-backends) |
|
||||
| Channel / messaging | `api.registerChannel(...)` | [Channel Plugins](/uk/plugins/sdk-channel-plugins) |
|
||||
| Speech (TTS/STT) | `api.registerSpeechProvider(...)` | [Provider Plugins](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Транскрипція в реальному часі | `api.registerRealtimeTranscriptionProvider(...)` | [Provider Plugins](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Голос у реальному часі | `api.registerRealtimeVoiceProvider(...)` | [Provider Plugins](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Розуміння медіа | `api.registerMediaUnderstandingProvider(...)` | [Provider Plugins](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Генерація зображень | `api.registerImageGenerationProvider(...)` | [Provider Plugins](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Генерація музики | `api.registerMusicGenerationProvider(...)` | [Provider Plugins](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Генерація відео | `api.registerVideoGenerationProvider(...)` | [Provider Plugins](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Web fetch | `api.registerWebFetchProvider(...)` | [Provider Plugins](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Web search | `api.registerWebSearchProvider(...)` | [Provider Plugins](/uk/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
||||
| Middleware результатів інструментів | `api.registerAgentToolResultMiddleware(...)` | [SDK Overview](/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) |
|
||||
| Internal event hooks | `api.registerHook(...)` | [Entry Points](/uk/plugins/sdk-entrypoints) |
|
||||
| HTTP routes | `api.registerHttpRoute(...)` | [Internals](/uk/plugins/architecture-internals#gateway-http-routes) |
|
||||
| CLI subcommands | `api.registerCli(...)` | [Entry Points](/uk/plugins/sdk-entrypoints) |
|
||||
| Текстовий 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) |
|
||||
|
||||
Повний registration API див. у [SDK Overview](/uk/plugins/sdk-overview#registration-api).
|
||||
Повний API реєстрації див. в [Огляді SDK](/uk/plugins/sdk-overview#registration-api).
|
||||
|
||||
Bundled plugins можуть використовувати `api.registerAgentToolResultMiddleware(...)`, коли їм
|
||||
потрібне асинхронне переписування результату інструмента до того, як модель побачить вивід. Оголосіть
|
||||
Вбудовані плагіни можуть використовувати `api.registerAgentToolResultMiddleware(...)`, коли їм
|
||||
потрібне асинхронне переписування результату інструмента до того, як модель побачить output. Оголошуйте
|
||||
цільові runtimes у `contracts.agentToolResultMiddleware`, наприклад
|
||||
`["pi", "codex"]`. Це довірений seam для bundled-plugin; зовнішнім
|
||||
plugins варто надавати перевагу звичайним OpenClaw plugin hooks, доки OpenClaw не отримає
|
||||
явну trust policy для цієї можливості.
|
||||
`["pi", "codex"]`. Це довірений seam для вбудованих плагінів; зовнішнім
|
||||
плагінам варто надавати перевагу звичайним hooks плагінів OpenClaw, доки OpenClaw не матиме
|
||||
явної політики довіри для цієї можливості.
|
||||
|
||||
Якщо ваш plugin реєструє власні gateway RPC methods, тримайте їх на
|
||||
префіксі, специфічному для plugin. Core admin namespaces (`config.*`,
|
||||
Якщо ваш плагін реєструє власні RPC-методи Gateway, тримайте їх у
|
||||
префіксі, специфічному для плагіна. Простори імен core admin (`config.*`,
|
||||
`exec.approvals.*`, `wizard.*`, `update.*`) залишаються зарезервованими й завжди resolve до
|
||||
`operator.admin`, навіть якщо plugin просить вужчий scope.
|
||||
`operator.admin`, навіть якщо плагін просить вужчий scope.
|
||||
|
||||
Семантика hook guard, яку варто пам'ятати:
|
||||
Семантика guard для hooks, яку варто пам’ятати:
|
||||
|
||||
- `before_tool_call`: `{ block: true }` є terminal і зупиняє handlers з нижчим пріоритетом.
|
||||
- `before_tool_call`: `{ block: false }` обробляється як відсутність рішення.
|
||||
- `before_tool_call`: `{ requireApproval: true }` призупиняє виконання агента й запитує підтвердження користувача через exec approval overlay, кнопки Telegram, взаємодії Discord або команду `/approve` у будь-якому channel.
|
||||
- `before_install`: `{ block: true }` є terminal і зупиняє handlers з нижчим пріоритетом.
|
||||
- `before_install`: `{ block: false }` обробляється як відсутність рішення.
|
||||
- `message_sending`: `{ cancel: true }` є terminal і зупиняє handlers з нижчим пріоритетом.
|
||||
- `message_sending`: `{ cancel: false }` обробляється як відсутність рішення.
|
||||
- `message_received`: надавайте перевагу типізованому полю `threadId`, коли потрібна inbound thread/topic routing. Залишайте `metadata` для channel-specific extras.
|
||||
- `message_sending`: надавайте перевагу типізованим routing fields `replyToId` / `threadId` замість channel-specific metadata keys.
|
||||
- `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, специфічних для каналу.
|
||||
|
||||
Команда `/approve` обробляє як exec, так і plugin approvals з обмеженим fallback: коли exec approval id не знайдено, OpenClaw повторює той самий id через plugin approvals. Пересилання plugin approval можна налаштувати незалежно через `approvals.plugin` у config.
|
||||
Команда `/approve` обробляє як exec approvals, так і approvals плагінів із bounded fallback: коли id exec approval не знайдено, OpenClaw повторює той самий id через approvals плагінів. Forwarding approvals плагінів можна налаштовувати незалежно через `approvals.plugin` у конфігурації.
|
||||
|
||||
Якщо власна approval plumbing має виявити той самий випадок bounded fallback,
|
||||
Якщо власний approval plumbing має виявляти той самий bounded fallback-випадок,
|
||||
надавайте перевагу `isApprovalNotFoundError` з `openclaw/plugin-sdk/error-runtime`
|
||||
замість ручного зіставлення рядків про expiry approval.
|
||||
|
||||
Приклади й довідник hooks див. у [Plugin hooks](/uk/plugins/hooks).
|
||||
Приклади й довідник hooks див. у [Hooks плагіна](/uk/plugins/hooks).
|
||||
|
||||
## Реєстрація інструментів агента
|
||||
|
||||
Tools — це типізовані функції, які може викликати LLM. Вони можуть бути required (завжди
|
||||
доступні) або optional (opt-in користувача):
|
||||
Інструменти — це типізовані функції, які може викликати LLM. Вони можуть бути обов’язковими (завжди
|
||||
доступними) або опціональними (користувач вмикає їх сам):
|
||||
|
||||
```typescript
|
||||
register(api) {
|
||||
@ -249,7 +253,18 @@ register(api) {
|
||||
}
|
||||
```
|
||||
|
||||
Користувачі вмикають optional tools у config:
|
||||
Кожен інструмент, зареєстрований через `api.registerTool(...)`, також має бути оголошений у
|
||||
manifest плагіна:
|
||||
|
||||
```json
|
||||
{
|
||||
"contracts": {
|
||||
"tools": ["my_tool", "workflow_tool"]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Користувачі вмикають опціональні інструменти в конфігурації:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -257,16 +272,16 @@ register(api) {
|
||||
}
|
||||
```
|
||||
|
||||
- Імена tools не мають конфліктувати з core tools (конфлікти пропускаються)
|
||||
- Tools з некоректними registration objects, зокрема без `parameters`, пропускаються й повідомляються в plugin diagnostics замість того, щоб ламати agent runs
|
||||
- Використовуйте `optional: true` для tools із побічними ефектами або додатковими binary requirements
|
||||
- Користувачі можуть увімкнути всі tools з plugin, додавши plugin id до `tools.allow`
|
||||
- Назви інструментів не повинні конфліктувати з основними інструментами (конфліктні пропускаються)
|
||||
- Інструменти з некоректно сформованими об’єктами реєстрації, зокрема без `parameters`, пропускаються й повідомляються в діагностиці plugin замість того, щоб ламати запуски агента
|
||||
- Використовуйте `optional: true` для інструментів із побічними ефектами або додатковими вимогами до бінарних файлів
|
||||
- Користувачі можуть увімкнути всі інструменти з plugin, додавши ідентифікатор plugin до `tools.allow`
|
||||
|
||||
## Реєстрація CLI commands
|
||||
## Реєстрація команд CLI
|
||||
|
||||
Plugins можуть додавати кореневі групи команд `openclaw` через `api.registerCli`. Надайте
|
||||
`descriptors` для кожного top-level command root, щоб OpenClaw міг показувати й route
|
||||
команду без eager loading кожного plugin runtime.
|
||||
Plugins можуть додавати кореневі групи команд `openclaw` за допомогою `api.registerCli`. Надавайте
|
||||
`descriptors` для кожного кореня команди верхнього рівня, щоб OpenClaw міг показувати й маршрутизувати
|
||||
команду без завчасного завантаження кожного середовища виконання plugin.
|
||||
|
||||
```typescript
|
||||
register(api) {
|
||||
@ -296,7 +311,7 @@ register(api) {
|
||||
}
|
||||
```
|
||||
|
||||
Після встановлення перевірте реєстрацію runtime і виконайте команду:
|
||||
Після встановлення перевірте реєстрацію середовища виконання та виконайте команду:
|
||||
|
||||
```bash
|
||||
openclaw plugins inspect demo-plugin --runtime --json
|
||||
@ -317,56 +332,56 @@ import { ... } from "openclaw/plugin-sdk";
|
||||
|
||||
Повний довідник підшляхів див. у [Огляді SDK](/uk/plugins/sdk-overview).
|
||||
|
||||
У межах вашого plugin використовуйте локальні barrel-файли (`api.ts`, `runtime-api.ts`) для
|
||||
Усередині свого plugin використовуйте локальні barrel-файли (`api.ts`, `runtime-api.ts`) для
|
||||
внутрішніх імпортів — ніколи не імпортуйте власний plugin через його шлях SDK.
|
||||
|
||||
Для provider plugins тримайте допоміжні засоби, специфічні для постачальника, у цих package-root
|
||||
barrels, якщо seam не є справді універсальним. Поточні вбудовані приклади:
|
||||
Для provider plugins тримайте специфічні для провайдера допоміжні засоби в цих barrel-файлах кореня пакета,
|
||||
якщо межа не є справді узагальненою. Поточні вбудовані приклади:
|
||||
|
||||
- Anthropic: обгортки потоків Claude і допоміжні засоби `service_tier` / beta
|
||||
- OpenAI: конструктори постачальників, допоміжні засоби моделей за замовчуванням, постачальники realtime
|
||||
- OpenRouter: конструктор постачальника плюс допоміжні засоби onboarding/config
|
||||
- Anthropic: обгортки потоків Claude та допоміжні засоби `service_tier` / beta
|
||||
- OpenAI: конструктори провайдера, допоміжні засоби моделей за замовчуванням, realtime-провайдери
|
||||
- OpenRouter: конструктор провайдера та допоміжні засоби onboarding/конфігурації
|
||||
|
||||
Якщо допоміжний засіб корисний лише всередині одного вбудованого пакета постачальника, залиште його на цьому
|
||||
package-root seam замість просування до `openclaw/plugin-sdk/*`.
|
||||
Якщо допоміжний засіб корисний лише всередині одного вбудованого пакета провайдера, залишайте його на цій
|
||||
межі кореня пакета замість просування в `openclaw/plugin-sdk/*`.
|
||||
|
||||
Деякі згенеровані допоміжні seams `openclaw/plugin-sdk/<bundled-id>` усе ще існують для
|
||||
супроводу bundled-plugin, коли для них відстежується використання власником. Розглядайте їх як
|
||||
зарезервовані поверхні, а не як типовий шаблон для нових third-party plugins.
|
||||
Деякі згенеровані допоміжні межі `openclaw/plugin-sdk/<bundled-id>` досі існують для
|
||||
супроводу вбудованих plugin, коли для них відстежується використання власником. Вважайте їх
|
||||
зарезервованими поверхнями, а не типовим шаблоном для нових сторонніх plugins.
|
||||
|
||||
## Контрольний список перед поданням
|
||||
|
||||
<Check>**package.json** має правильні метадані `openclaw`</Check>
|
||||
<Check>Маніфест **openclaw.plugin.json** присутній і валідний</Check>
|
||||
<Check>**package.json** має коректні метадані `openclaw`</Check>
|
||||
<Check>Маніфест **openclaw.plugin.json** наявний і валідний</Check>
|
||||
<Check>Точка входу використовує `defineChannelPluginEntry` або `definePluginEntry`</Check>
|
||||
<Check>Усі імпорти використовують сфокусовані шляхи `plugin-sdk/<subpath>`</Check>
|
||||
<Check>Внутрішні імпорти використовують локальні модулі, а не self-imports SDK</Check>
|
||||
<Check>Внутрішні імпорти використовують локальні модулі, а не самоімпорти SDK</Check>
|
||||
<Check>Тести проходять (`pnpm test -- <bundled-plugin-root>/my-plugin/`)</Check>
|
||||
<Check>`pnpm check` проходить (для in-repo 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`. Також можна ввімкнути сповіщення для офіційного акаунта OpenClaw в X [@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 і automation. Blockers із PR буде змерджено; blockers без 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-тегом щойно він з’явиться. Вікно до 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. Мовчання означає зелений статус. Якщо ви пропустите це вікно, ваше виправлення, імовірно, потрапить у наступний цикл.
|
||||
|
||||
## Наступні кроки
|
||||
|
||||
<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="Допоміжні засоби runtime" icon="settings" href="/uk/plugins/sdk-runtime">
|
||||
TTS, пошук, subagent через api.runtime
|
||||
<Card title="Допоміжні засоби середовища виконання" icon="settings" href="/uk/plugins/sdk-runtime">
|
||||
TTS, пошук, субагент через api.runtime
|
||||
</Card>
|
||||
<Card title="Тестування" icon="test-tubes" href="/uk/plugins/sdk-testing">
|
||||
Тестові утиліти й шаблони
|
||||
@ -376,10 +391,10 @@ package-root seam замість просування до `openclaw/plugin-sdk/
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## Пов'язане
|
||||
## Пов’язане
|
||||
|
||||
- [Архітектура 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) — створення channel plugins
|
||||
- [Provider Plugins](/uk/plugins/sdk-provider-plugins) — створення provider plugins
|
||||
- [Channel Plugins](/uk/plugins/sdk-channel-plugins) — створення plugins каналів
|
||||
- [Provider Plugins](/uk/plugins/sdk-provider-plugins) — створення plugins провайдерів
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user