chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-25 02:05:31 +00:00
parent d3ecb63a9f
commit 0e3d46b6da
4 changed files with 1053 additions and 1048 deletions

View File

@ -1,21 +1,21 @@
---
read_when:
- Ви створюєте Plugin для OpenClaw
- Вам потрібно надати схему конфігурації Plugin або налагодити помилки валідації Plugin
summary: Вимоги до маніфесту Plugin + JSON schema (сувора валідація конфігурації)
title: маніфест Plugin
- Ви створюєте Plugin OpenClaw
- Вам потрібно постачати схему конфігурації Plugin або налагоджувати помилки валідації Plugin
summary: Вимоги до маніфесту Plugin + схеми JSON (сувора валідація конфігурації)
title: Маніфест Plugin
x-i18n:
generated_at: "2026-04-25T01:26:56Z"
generated_at: "2026-04-25T02:02:02Z"
model: gpt-5.4
provider: openai
source_hash: e200037fa22dd5bcc5c14638d3d473dd5af631270dedf18f151798ae15a4b951
source_hash: fa96930c3c9b890194869eb793c65a0af9db43f8f8b1f78d3c3d6ef18b70be6e
source_path: plugins/manifest.md
workflow: 15
---
Ця сторінка призначена лише для **нативного маніфесту Plugin OpenClaw**.
Ця сторінка стосується лише **власного маніфесту Plugin OpenClaw**.
Сумісні макети пакетів описано в [Пакети Plugin](/uk/plugins/bundles).
Сумісні макети пакетів див. у [Пакети Plugin](/uk/plugins/bundles).
Сумісні формати пакетів використовують інші файли маніфесту:
@ -23,42 +23,31 @@ x-i18n:
- Пакет Claude: `.claude-plugin/plugin.json` або стандартний макет компонента Claude без маніфесту
- Пакет Cursor: `.cursor-plugin/plugin.json`
OpenClaw також автоматично виявляє ці макети пакетів, але вони не проходять валідацію
за схемою `openclaw.plugin.json`, описаною тут.
OpenClaw також автоматично визначає ці макети пакетів, але вони не проходять валідацію за схемою `openclaw.plugin.json`, описаною тут.
Для сумісних пакетів OpenClaw наразі зчитує метадані пакета, а також оголошені
кореневі каталоги навичок, кореневі каталоги команд Claude, типові значення `settings.json`
для пакета Claude, типові значення LSP для пакета Claude та підтримувані набори хуків,
коли макет відповідає очікуванням середовища виконання OpenClaw.
Для сумісних пакетів OpenClaw наразі зчитує метадані пакета, а також оголошені кореневі каталоги skill, кореневі каталоги команд Claude, значення за замовчуванням із `settings.json` пакета Claude, значення LSP за замовчуванням пакета Claude та підтримувані набори hook, коли макет відповідає очікуванням рантайму OpenClaw.
Кожен нативний Plugin OpenClaw **повинен** містити файл `openclaw.plugin.json` у
**корені Plugin**. OpenClaw використовує цей маніфест для валідації конфігурації
**без виконання коду Plugin**. Відсутні або невалідні маніфести вважаються
помилками Plugin і блокують валідацію конфігурації.
Кожен власний Plugin OpenClaw **повинен** постачати файл `openclaw.plugin.json` у **корені Plugin**. OpenClaw використовує цей маніфест для валідації конфігурації **без виконання коду Plugin**. Відсутні або недійсні маніфести вважаються помилками Plugin і блокують валідацію конфігурації.
Повний посібник із системи Plugin дивіться тут: [Plugins](/uk/tools/plugin).
Щодо нативної моделі можливостей і поточних рекомендацій із зовнішньої сумісності:
Повний посібник із системи Plugin див. тут: [Plugins](/uk/tools/plugin).
Щодо власної моделі можливостей і поточних рекомендацій щодо зовнішньої сумісності:
[Модель можливостей](/uk/plugins/architecture#public-capability-model).
## Для чого потрібен цей файл
## Що робить цей файл
`openclaw.plugin.json` — це метадані, які OpenClaw зчитує **перед завантаженням
коду вашого Plugin**. Усе нижче має бути достатньо дешевим для перевірки без запуску
середовища виконання Plugin.
`openclaw.plugin.json` — це метадані, які OpenClaw зчитує **перед завантаженням коду вашого Plugin**. Усе нижче має бути достатньо легким для перевірки без запуску рантайму Plugin.
**Використовуйте його для:**
- ідентифікації plugin, валідації конфігурації та підказок для UI конфігурації
- ідентичності Plugin, валідації конфігурації та підказок для UI конфігурації
- метаданих автентифікації, онбордингу та налаштування (псевдонім, автоувімкнення, змінні середовища провайдера, варіанти автентифікації)
- підказок активації для поверхонь control-plane
- володіння скороченими сімействами моделей
- статичних знімків володіння можливостями (`contracts`)
- підказок активації для поверхонь control plane
- скороченого визначення належності до сімейства моделей
- статичних знімків належності можливостей (`contracts`)
- метаданих QA runner, які може перевіряти спільний хост `openclaw qa`
- метаданих конфігурації для конкретних каналів, об’єднаних у каталог і поверхні валідації
- метаданих конфігурації каналу, специфічних для каналу, об’єднаних у поверхні каталогу та валідації
**Не використовуйте його для:** реєстрації поведінки під час виконання, оголошення
точок входу коду або метаданих встановлення npm. Це належить до коду вашого Plugin
і `package.json`.
**Не використовуйте його для:** реєстрації поведінки рантайму, оголошення точок входу коду або метаданих встановлення npm. Це належить до коду вашого Plugin і `package.json`.
## Мінімальний приклад
@ -138,70 +127,68 @@ OpenClaw також автоматично виявляє ці макети па
## Довідник полів верхнього рівня
| Поле | Обов’язкове | Тип | Що воно означає |
| ------------------------------------ | ----------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id` | Так | `string` | Канонічний ідентифікатор plugin. Саме цей ідентифікатор використовується в `plugins.entries.<id>`. |
| `configSchema` | Так | `object` | Вбудована JSON Schema для конфігурації цього plugin. |
| `enabledByDefault` | Ні | `true` | Позначає вбудований plugin як увімкнений типово. Щоб plugin лишався типово вимкненим, не вказуйте це поле або встановіть будь-яке значення, відмінне від `true`. |
| `legacyPluginIds` | Ні | `string[]` | Застарілі ідентифікатори, які нормалізуються до цього канонічного ідентифікатора plugin. |
| `autoEnableWhenConfiguredProviders` | Ні | `string[]` | Ідентифікатори провайдерів, які мають автоматично вмикати цей plugin, коли автентифікація, конфігурація або посилання на моделі їх згадують. |
| `kind` | Ні | `"memory"` \| `"context-engine"` | Оголошує ексклюзивний тип plugin, який використовується `plugins.slots.*`. |
| `channels` | Ні | `string[]` | Ідентифікатори каналів, якими володіє цей plugin. Використовуються для виявлення та валідації конфігурації. |
| `providers` | Ні | `string[]` | Ідентифікатори провайдерів, якими володіє цей plugin. |
| `providerDiscoveryEntry` | Ні | `string` | Шлях до легковагового модуля виявлення провайдера, відносний до кореня plugin, для метаданих каталогу провайдера в межах маніфесту, які можна завантажити без активації повного середовища виконання plugin. |
| `modelSupport` | Ні | `object` | Короткі метадані сімейства моделей, що належать маніфесту та використовуються для автозавантаження plugin до запуску середовища виконання. |
| `providerEndpoints` | Ні | `object[]` | Метадані вузлів host/baseUrl, що належать маніфесту, для маршрутів провайдера, які core має класифікувати до завантаження середовища виконання провайдера. |
| `cliBackends` | Ні | `string[]` | Ідентифікатори backend CLI inference, якими володіє цей plugin. Використовуються для автоактивації під час запуску на основі явних посилань у конфігурації. |
| `syntheticAuthRefs` | Ні | `string[]` | Посилання на провайдери або backend CLI, для яких синтетичний хук автентифікації, що належить plugin, слід перевіряти під час cold discovery моделей до завантаження середовища виконання. |
| `nonSecretAuthMarkers` | Ні | `string[]` | Значення-заповнювачі API key, що належать вбудованому plugin і представляють несекретний локальний стан, OAuth або стан ambient credential. |
| `commandAliases` | Ні | `object[]` | Назви команд, що належать цьому plugin і мають генерувати діагностику конфігурації та CLI з урахуванням plugin до завантаження середовища виконання. |
| `providerAuthEnvVars` | Ні | `Record<string, string[]>` | Застарілі сумісні метадані env для пошуку автентифікації/статусу провайдера. Для нових plugin віддавайте перевагу `setup.providers[].envVars`; OpenClaw і далі читає це протягом періоду знецінення. |
| `providerAuthAliases` | Ні | `Record<string, string>` | Ідентифікатори провайдерів, які мають повторно використовувати інший ідентифікатор провайдера для пошуку автентифікації, наприклад провайдер для кодування, що використовує той самий API key базового провайдера й auth profiles. |
| `channelEnvVars` | Ні | `Record<string, string[]>` | Легковагові метадані env каналу, які OpenClaw може перевірити без завантаження коду plugin. Використовуйте це для налаштування каналів через env або поверхонь автентифікації, які мають бачити універсальні помічники запуску/конфігурації. |
| `providerAuthChoices` | Ні | `object[]` | Легковагові метадані варіантів автентифікації для picker-ів онбордингу, визначення пріоритетного провайдера та простого прив’язування CLI flag. |
| `activation` | Ні | `object` | Легковагові метадані планувальника активації для завантаження, що запускається провайдером, командою, каналом, маршрутом або можливістю. Лише метадані; фактичною поведінкою, як і раніше, володіє середовище виконання plugin. |
| `setup` | Ні | `object` | Легковагові дескриптори налаштування/онбордингу, які поверхні виявлення й налаштування можуть перевіряти без завантаження середовища виконання plugin. |
| `qaRunners` | Ні | `object[]` | Легковагові дескриптори QA runner, які використовує спільний хост `openclaw qa` до завантаження середовища виконання plugin. |
| `contracts` | Ні | `object` | Статичний знімок вбудованих можливостей для зовнішніх хуків автентифікації, мовлення, транскрибування в реальному часі, голосу в реальному часі, розуміння медіа, генерації зображень, генерації музики, генерації відео, web-fetch, web search та володіння інструментами. |
| `mediaUnderstandingProviderMetadata` | Ні | `Record<string, object>` | Легковагові типові значення розуміння медіа для ідентифікаторів провайдерів, оголошених у `contracts.mediaUnderstandingProviders`. |
| `channelConfigs` | Ні | `Record<string, object>` | Метадані конфігурації каналів, що належать маніфесту та об’єднуються з поверхнями виявлення й валідації до завантаження середовища виконання. |
| `skills` | Ні | `string[]` | Каталоги Skills для завантаження, відносно кореня plugin. |
| `name` | Ні | `string` | Зрозуміла для людини назва plugin. |
| `description` | Ні | `string` | Короткий опис, що показується на поверхнях plugin. |
| `version` | Ні | `string` | Інформаційна версія plugin. |
| `uiHints` | Ні | `Record<string, object>` | Мітки UI, заповнювачі та підказки щодо чутливості для полів конфігурації. |
| Поле | Обов’язкове | Тип | Що воно означає |
| ------------------------------------ | ----------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id` | Так | `string` | Канонічний id Plugin. Це id, який використовується в `plugins.entries.<id>`. |
| `configSchema` | Так | `object` | Вбудована схема JSON для конфігурації цього Plugin. |
| `enabledByDefault` | Ні | `true` | Позначає вбудований Plugin як увімкнений за замовчуванням. Пропустіть це поле або встановіть будь-яке значення, відмінне від `true`, щоб Plugin залишався вимкненим за замовчуванням. |
| `legacyPluginIds` | Ні | `string[]` | Застарілі id, які нормалізуються до цього канонічного id Plugin. |
| `autoEnableWhenConfiguredProviders` | Ні | `string[]` | Id провайдерів, які мають автоматично вмикати цей Plugin, коли автентифікація, конфігурація або посилання на моделі згадують їх. |
| `kind` | Ні | `"memory"` \| `"context-engine"` | Оголошує ексклюзивний тип Plugin, який використовується `plugins.slots.*`. |
| `channels` | Ні | `string[]` | Id каналів, що належать цьому Plugin. Використовуються для виявлення та валідації конфігурації. |
| `providers` | Ні | `string[]` | Id провайдерів, що належать цьому Plugin. |
| `providerDiscoveryEntry` | Ні | `string` | Шлях до легковагового модуля виявлення провайдера, відносний до кореня Plugin, для метаданих каталогу провайдерів у межах маніфесту, які можна завантажити без активації повного рантайму Plugin. |
| `modelSupport` | Ні | `object` | Скорочені метадані сімейства моделей, що належать маніфесту, і використовуються для автоматичного завантаження Plugin до рантайму. |
| `modelCatalog` | Ні | `object` | Декларативні метадані каталогу моделей для провайдерів, що належать цьому Plugin. Це контракт control plane для майбутнього читання списків у режимі лише для читання, онбордингу, засобів вибору моделей, псевдонімів і приглушення без завантаження рантайму Plugin. |
| `providerEndpoints` | Ні | `object[]` | Метадані хостів кінцевих точок/baseUrl, що належать маніфесту, для маршрутів провайдерів, які ядро має класифікувати до завантаження рантайму провайдера. |
| `cliBackends` | Ні | `string[]` | Id backend CLI inference, що належать цьому Plugin. Використовуються для автоактивації під час запуску на основі явних посилань у конфігурації. |
| `syntheticAuthRefs` | Ні | `string[]` | Посилання на провайдерів або backend CLI, для яких синтетичний hook автентифікації, що належить Plugin, має перевірятися під час cold model discovery до завантаження рантайму. |
| `nonSecretAuthMarkers` | Ні | `string[]` | Значення-заповнювачі API-ключів, що належать вбудованому Plugin і представляють не секретний локальний стан, OAuth або стан ambient credentials. |
| `commandAliases` | Ні | `object[]` | Імена команд, що належать цьому Plugin і мають створювати діагностику конфігурації та CLI, обізнану про Plugin, до завантаження рантайму. |
| `providerAuthEnvVars` | Ні | `Record<string, string[]>` | Застарілі сумісні метадані env для пошуку автентифікації/статусу провайдера. Для нових Plugin віддавайте перевагу `setup.providers[].envVars`; OpenClaw усе ще зчитує це протягом періоду знецінення. |
| `providerAuthAliases` | Ні | `Record<string, string>` | Id провайдерів, які мають повторно використовувати інший id провайдера для пошуку автентифікації, наприклад провайдер кодування, що використовує той самий API-ключ базового провайдера та профілі автентифікації. |
| `channelEnvVars` | Ні | `Record<string, string[]>` | Легкі метадані env каналу, які OpenClaw може перевіряти без завантаження коду Plugin. Використовуйте це для налаштування каналів на основі env або поверхонь автентифікації, які мають бачити універсальні помічники запуску/конфігурації. |
| `providerAuthChoices` | Ні | `object[]` | Легкі метадані варіантів автентифікації для засобів вибору під час онбордингу, визначення пріоритетного провайдера та простого зв’язування CLI-прапорців. |
| `activation` | Ні | `object` | Легкі метадані планувальника активації для завантаження, що запускається провайдером, командою, каналом, маршрутом і можливістю. Лише метадані; фактична поведінка все ще належить рантайму Plugin. |
| `setup` | Ні | `object` | Легкі дескриптори налаштування/онбордингу, які поверхні виявлення та налаштування можуть перевіряти без завантаження рантайму Plugin. |
| `qaRunners` | Ні | `object[]` | Легкі дескриптори QA runner, які використовуються спільним хостом `openclaw qa` до завантаження рантайму Plugin. |
| `contracts` | Ні | `object` | Статичний знімок вбудованих можливостей для зовнішніх hook автентифікації, мовлення, транскрипції в реальному часі, голосу в реальному часі, розуміння медіа, генерації зображень, генерації музики, генерації відео, web-fetch, web search і належності інструментів. |
| `mediaUnderstandingProviderMetadata` | Ні | `Record<string, object>` | Легкі значення за замовчуванням для розуміння медіа для id провайдерів, оголошених у `contracts.mediaUnderstandingProviders`. |
| `channelConfigs` | Ні | `Record<string, object>` | Метадані конфігурації каналу, що належать маніфесту, об’єднані в поверхні виявлення та валідації до завантаження рантайму. |
| `skills` | Ні | `string[]` | Каталоги Skills для завантаження, відносні до кореня Plugin. |
| `name` | Ні | `string` | Зрозуміла для людини назва Plugin. |
| `description` | Ні | `string` | Короткий опис, що відображається на поверхнях Plugin. |
| `version` | Ні | `string` | Інформаційна версія Plugin. |
| `uiHints` | Ні | `Record<string, object>` | Мітки UI, заповнювачі та підказки чутливості для полів конфігурації. |
## Довідник `providerAuthChoices`
Кожен запис `providerAuthChoices` описує один варіант онбордингу або автентифікації.
OpenClaw зчитує це до завантаження середовища виконання провайдера.
Потік налаштування провайдера надає перевагу цим варіантам із маніфесту, а потім для сумісності
переходить до метаданих wizard під час виконання та варіантів install-catalog.
OpenClaw зчитує це до завантаження рантайму провайдера.
Потік налаштування провайдера надає перевагу цим варіантам із маніфесту, а потім для сумісності повертається до метаданих wizard рантайму та варіантів каталогу встановлення.
| Поле | Обов’язкове | Тип | Що воно означає |
| --------------------- | ----------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `provider` | Так | `string` | Ідентифікатор провайдера, до якого належить цей варіант. |
| `method` | Так | `string` | Ідентифікатор методу автентифікації, до якого слід маршрутизувати. |
| `choiceId` | Так | `string` | Стабільний ідентифікатор варіанта автентифікації, який використовують потоки онбордингу та CLI. |
| `choiceLabel` | Ні | `string` | Мітка для користувача. Якщо не вказано, OpenClaw використовує `choiceId`. |
| `choiceHint` | Ні | `string` | Короткий допоміжний текст для picker. |
| `assistantPriority` | Ні | `number` | Нижчі значення сортуються раніше в інтерактивних picker, керованих асистентом. |
| `assistantVisibility` | Ні | `"visible"` \| `"manual-only"` | Приховує варіант із picker-ів асистента, але все ще дозволяє ручний вибір через CLI. |
| `deprecatedChoiceIds` | Ні | `string[]` | Застарілі ідентифікатори варіантів, які мають перенаправляти користувачів на цей варіант-заміну. |
| `groupId` | Ні | `string` | Необов’язковий ідентифікатор групи для групування пов’язаних варіантів. |
| `groupLabel` | Ні | `string` | Мітка для цієї групи, видима користувачу. |
| `groupHint` | Ні | `string` | Короткий допоміжний текст для групи. |
| `optionKey` | Ні | `string` | Внутрішній ключ параметра для простих потоків автентифікації з одним flag. |
| `cliFlag` | Ні | `string` | Назва CLI flag, наприклад `--openrouter-api-key`. |
| `cliOption` | Ні | `string` | Повна форма CLI option, наприклад `--openrouter-api-key <key>`. |
| `cliDescription` | Ні | `string` | Опис, який використовується в довідці CLI. |
| `onboardingScopes` | Ні | `Array<"text-inference" \| "image-generation">` | На яких поверхнях онбордингу має відображатися цей варіант. Якщо не вказано, типово використовується `["text-inference"]`. |
| Поле | Обов’язкове | Тип | Що воно означає |
| --------------------- | ----------- | ----------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| `provider` | Так | `string` | Id провайдера, до якого належить цей варіант. |
| `method` | Так | `string` | Id методу автентифікації, до якого слід маршрутизувати. |
| `choiceId` | Так | `string` | Стабільний id варіанта автентифікації, який використовується потоками онбордингу та CLI. |
| `choiceLabel` | Ні | `string` | Мітка для користувача. Якщо не вказано, OpenClaw використовує `choiceId`. |
| `choiceHint` | Ні | `string` | Короткий допоміжний текст для засобу вибору. |
| `assistantPriority` | Ні | `number` | Менші значення сортуються раніше в інтерактивних засобах вибору, керованих помічником. |
| `assistantVisibility` | Ні | `"visible"` \| `"manual-only"` | Приховує варіант у засобах вибору помічника, але все ще дозволяє ручний вибір через CLI. |
| `deprecatedChoiceIds` | Ні | `string[]` | Застарілі id варіантів, які мають перенаправляти користувачів до цього замінного варіанта. |
| `groupId` | Ні | `string` | Необов’язковий id групи для групування пов’язаних варіантів. |
| `groupLabel` | Ні | `string` | Мітка для користувача для цієї групи. |
| `groupHint` | Ні | `string` | Короткий допоміжний текст для групи. |
| `optionKey` | Ні | `string` | Внутрішній ключ параметра для простих потоків автентифікації з одним прапорцем. |
| `cliFlag` | Ні | `string` | Назва прапорця CLI, наприклад `--openrouter-api-key`. |
| `cliOption` | Ні | `string` | Повна форма параметра CLI, наприклад `--openrouter-api-key <key>`. |
| `cliDescription` | Ні | `string` | Опис, який використовується в довідці CLI. |
| `onboardingScopes` | Ні | `Array<"text-inference" \| "image-generation">` | На яких поверхнях онбордингу має з’являтися цей варіант. Якщо не вказано, використовується `["text-inference"]` за замовчуванням. |
## Довідник `commandAliases`
Використовуйте `commandAliases`, коли plugin володіє назвою команди середовища виконання, яку користувачі можуть
помилково додати в `plugins.allow` або спробувати запустити як кореневу команду CLI. OpenClaw
використовує ці метадані для діагностики без імпорту коду середовища виконання plugin.
Використовуйте `commandAliases`, коли Plugin володіє назвою команди рантайму, яку користувачі можуть помилково помістити в `plugins.allow` або спробувати запустити як кореневу команду CLI. OpenClaw використовує ці метадані для діагностики без імпорту коду рантайму Plugin.
```json
{
@ -215,34 +202,21 @@ OpenClaw зчитує це до завантаження середовища в
}
```
| Поле | Обов’язкове | Тип | Що воно означає |
| ------------ | ----------- | ----------------- | ---------------------------------------------------------------------------- |
| `name` | Так | `string` | Назва команди, яка належить цьому plugin. |
| `kind` | Ні | `"runtime-slash"` | Позначає псевдонім як chat slash command, а не як кореневу команду CLI. |
| `cliCommand` | Ні | `string` | Пов’язана коренева команда CLI, яку слід запропонувати для операцій CLI, якщо вона існує. |
| Поле | Обов’язкове | Тип | Що воно означає |
| ------------ | ----------- | ----------------- | -------------------------------------------------------------------------------- |
| `name` | Так | `string` | Назва команди, яка належить цьому Plugin. |
| `kind` | Ні | `"runtime-slash"` | Позначає псевдонім як команду слеша чату, а не як кореневу команду CLI. |
| `cliCommand` | Ні | `string` | Пов’язана коренева команда CLI, яку слід запропонувати для операцій CLI, якщо існує. |
## Довідник `activation`
Використовуйте `activation`, коли plugin може дешево оголосити, які події control-plane
мають включати його до плану активації/завантаження.
Використовуйте `activation`, коли Plugin може дешево оголосити, які події control plane мають включати його до плану активації/завантаження.
Цей блок є метаданими планувальника, а не API життєвого циклу. Він не реєструє
поведінку середовища виконання, не замінює `register(...)` і не гарантує, що
код plugin уже було виконано. Планувальник активації використовує ці поля, щоб
звузити набір кандидатів plugin, перш ніж повертатися до наявних метаданих
володіння з маніфесту, таких як `providers`, `channels`, `commandAliases`, `setup.providers`,
`contracts.tools` і hooks.
Цей блок є метаданими планувальника, а не API життєвого циклу. Він не реєструє поведінку рантайму, не замінює `register(...)` і не обіцяє, що код Plugin уже був виконаний. Планувальник активації використовує ці поля, щоб звузити коло кандидатів серед Plugin, перш ніж повернутися до наявних метаданих належності в маніфесті, таких як `providers`, `channels`, `commandAliases`, `setup.providers`, `contracts.tools` і hooks.
Надавайте перевагу найвужчим метаданим, які вже описують володіння. Використовуйте
`providers`, `channels`, `commandAliases`, дескриптори setup або `contracts`,
коли ці поля виражають відповідний зв’язок. Використовуйте `activation` для додаткових підказок планувальника,
які не можна подати через ці поля володіння.
Надавайте перевагу найвужчим метаданим, які вже описують належність. Використовуйте `providers`, `channels`, `commandAliases`, дескриптори setup або `contracts`, коли ці поля виражають зв’язок. Використовуйте `activation` для додаткових підказок планувальнику, які не можна представити цими полями належності.
Цей блок містить лише метадані. Він не реєструє поведінку середовища виконання і не
замінює `register(...)`, `setupEntry` або інші точки входу середовища виконання/plugin.
Поточні споживачі використовують його як підказку для звуження перед ширшим завантаженням plugin, тому
відсутність метаданих активації зазвичай впливає лише на продуктивність; це не має
змінювати коректність, поки все ще існують застарілі fallback-и володіння маніфестом.
Цей блок містить лише метадані. Він не реєструє поведінку рантайму й не замінює `register(...)`, `setupEntry` чи інші точки входу рантайму/Plugin. Поточні споживачі використовують його як підказку для звуження кола перед ширшим завантаженням Plugin, тому відсутність метаданих активації зазвичай впливає лише на продуктивність; це не повинно змінювати коректність, поки ще існують застарілі резервні механізми належності маніфесту.
```json
{
@ -256,37 +230,29 @@ OpenClaw зчитує це до завантаження середовища в
}
```
| Поле | Обов’язкове | Тип | Що воно означає |
| ---------------- | ----------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| `onProviders` | Ні | `string[]` | Ідентифікатори провайдерів, які мають включати цей plugin до планів активації/завантаження. |
| `onCommands` | Ні | `string[]` | Ідентифікатори команд, які мають включати цей plugin до планів активації/завантаження. |
| `onChannels` | Ні | `string[]` | Ідентифікатори каналів, які мають включати цей plugin до планів активації/завантаження. |
| `onRoutes` | Ні | `string[]` | Типи маршрутів, які мають включати цей plugin до планів активації/завантаження. |
| `onCapabilities` | Ні | `Array<"provider" \| "channel" \| "tool" \| "hook">` | Загальні підказки можливостей, які використовуються плануванням активації control-plane. За можливості віддавайте перевагу вужчим полям. |
| Поле | Обов’язкове | Тип | Що воно означає |
| ---------------- | ----------- | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `onProviders` | Ні | `string[]` | Id провайдерів, які мають включати цей Plugin до планів активації/завантаження. |
| `onCommands` | Ні | `string[]` | Id команд, які мають включати цей Plugin до планів активації/завантаження. |
| `onChannels` | Ні | `string[]` | Id каналів, які мають включати цей Plugin до планів активації/завантаження. |
| `onRoutes` | Ні | `string[]` | Види маршрутів, які мають включати цей Plugin до планів активації/завантаження. |
| `onCapabilities` | Ні | `Array<"provider" \| "channel" \| "tool" \| "hook">` | Широкі підказки щодо можливостей, які використовуються плануванням активації control plane. За можливості надавайте перевагу вужчим полям. |
Поточні активні споживачі:
- планування CLI, що запускається командою, повертається до застарілих
- планування CLI, ініційоване командою, повертається до застарілого
`commandAliases[].cliCommand` або `commandAliases[].name`
- планування setup/каналу, що запускається каналом, повертається до застарілого
володіння `channels[]`, коли явні метадані активації каналу відсутні
- планування setup/середовища виконання, що запускається провайдером, повертається до застарілого
володіння `providers[]` і верхньорівневого `cliBackends[]`, коли явні метадані активації
провайдера відсутні
- планування setup/каналу, ініційоване каналом, повертається до застарілої
належності `channels[]`, якщо явні метадані активації каналу відсутні
- планування setup/рантайму, ініційоване провайдером, повертається до застарілої
належності `providers[]` і верхньорівневої `cliBackends[]`, якщо явні
метадані активації провайдера відсутні
Діагностика планувальника може розрізняти явні підказки активації та fallback
до володіння маніфестом. Наприклад, `activation-command-hint` означає, що
збіглося `activation.onCommands`, тоді як `manifest-command-alias` означає, що
планувальник натомість використав володіння `commandAliases`. Ці мітки причин призначені для
діагностики хоста й тестів; авторам plugin слід і далі оголошувати метадані,
які найкраще описують володіння.
Діагностика планувальника може розрізняти явні підказки активації та резервне використання належності маніфесту. Наприклад, `activation-command-hint` означає, що збіглося `activation.onCommands`, а `manifest-command-alias` означає, що планувальник натомість використав належність `commandAliases`. Ці мітки причин призначені для діагностики та тестів хоста; автори Plugin мають і надалі оголошувати метадані, які найкраще описують належність.
## Довідник `qaRunners`
Використовуйте `qaRunners`, коли plugin додає один або більше transport runner під
спільним коренем `openclaw qa`. Зберігайте ці метадані дешевими й статичними; фактичною
реєстрацією CLI, як і раніше, володіє середовище виконання plugin через легковагову
поверхню `runtime-api.ts`, яка експортує `qaRunnerCliRegistrations`.
Використовуйте `qaRunners`, коли Plugin додає один або кілька runner транспорту під спільним коренем `openclaw qa`. Зберігайте ці метадані легкими та статичними; фактична реєстрація CLI все ще належить рантайму Plugin через легку поверхню `runtime-api.ts`, яка експортує `qaRunnerCliRegistrations`.
```json
{
@ -299,15 +265,14 @@ OpenClaw зчитує це до завантаження середовища в
}
```
| Поле | Обов’язкове | Тип | Що воно означає |
| ------------- | ----------- | -------- | ---------------------------------------------------------------------- |
| `commandName` | Так | `string` | Підкоманда, змонтована під `openclaw qa`, наприклад `matrix`. |
| `description` | Ні | `string` | Резервний текст довідки, який використовується, коли спільному хосту потрібна stub command. |
| Поле | Обов’язкове | Тип | Що воно означає |
| ------------- | ----------- | -------- | ----------------------------------------------------------------------- |
| `commandName` | Так | `string` | Підкоманда, змонтована під `openclaw qa`, наприклад `matrix`. |
| `description` | Ні | `string` | Резервний текст довідки, який використовується, коли спільному хосту потрібна stub-команда. |
## Довідник `setup`
Використовуйте `setup`, коли поверхням setup та онбордингу потрібні дешеві метадані,
що належать plugin, до завантаження середовища виконання.
Використовуйте `setup`, коли поверхням налаштування та онбордингу потрібні дешеві метадані, що належать Plugin, до завантаження рантайму.
```json
{
@ -326,60 +291,36 @@ OpenClaw зчитує це до завантаження середовища в
}
```
Верхньорівневе `cliBackends` залишається валідним і надалі описує
backend-и CLI inference. `setup.cliBackends` — це поверхня дескрипторів, специфічна для setup,
для потоків control-plane/setup, які мають залишатися лише метаданими.
Верхньорівневе `cliBackends` залишається дійсним і надалі описує backend CLI inference. `setup.cliBackends` — це поверхня дескрипторів, специфічна для setup, для потоків control plane/setup, які мають залишатися лише метаданими.
Якщо вони присутні, `setup.providers` і `setup.cliBackends` є бажаною
поверхнею пошуку setup у стилі descriptor-first для виявлення setup. Якщо дескриптор лише
звужує кандидатний plugin, а setup все ще потребує багатших runtime hook-ів на етапі setup,
встановіть `requiresRuntime: true` і залиште `setup-api` як резервний шлях виконання.
Якщо вони присутні, `setup.providers` і `setup.cliBackends` є пріоритетною поверхнею пошуку за принципом “спочатку дескриптор” для виявлення setup. Якщо дескриптор лише звужує коло кандидатів Plugin, а setup усе ще потребує багатших hook рантайму під час налаштування, встановіть `requiresRuntime: true` і залиште `setup-api` як резервний шлях виконання.
OpenClaw також включає `setup.providers[].envVars` до загальних пошуків
автентифікації провайдера та env var. `providerAuthEnvVars` лишається підтримуваним через
адаптер сумісності впродовж періоду знецінення, але небандловані plugin, які все ще його використовують,
отримують діагностику маніфесту. Нові plugin мають розміщувати метадані env setup/статусу
в `setup.providers[].envVars`.
OpenClaw також включає `setup.providers[].envVars` до загальних пошуків автентифікації провайдера та змінних середовища. `providerAuthEnvVars` залишається підтримуваним через адаптер сумісності протягом періоду знецінення, але небудовані Plugin, які все ще його використовують, отримують діагностику маніфесту. Нові Plugin мають розміщувати метадані env для setup/статусу в `setup.providers[].envVars`.
OpenClaw також може виводити прості варіанти setup з `setup.providers[].authMethods`,
коли запис setup недоступний або коли `setup.requiresRuntime: false`
оголошує runtime setup непотрібним. Явні записи `providerAuthChoices` і далі мають перевагу
для користувацьких міток, CLI flag, області онбордингу та метаданих асистента.
OpenClaw також може виводити прості варіанти setup із `setup.providers[].authMethods`, коли запис setup недоступний або коли `setup.requiresRuntime: false` оголошує, що рантайм setup не потрібен. Явні записи `providerAuthChoices` і далі мають пріоритет для нетипових міток, прапорців CLI, області онбордингу та метаданих помічника.
Встановлюйте `requiresRuntime: false` лише тоді, коли цих дескрипторів достатньо для
поверхні setup. OpenClaw трактує явне `false` як контракт лише з дескрипторами
і не виконуватиме `setup-api` або `openclaw.setupEntry` для пошуку setup. Якщо
plugin лише з дескрипторами все ж постачає один із цих runtime-записів setup,
OpenClaw повідомляє додаткову діагностику й продовжує його ігнорувати. Пропущене
`requiresRuntime` зберігає застарілу поведінку fallback, щоб наявні plugin, які додали
дескриптори без цього прапорця, не зламалися.
Установлюйте `requiresRuntime: false` лише тоді, коли цих дескрипторів достатньо для поверхні setup. OpenClaw трактує явне `false` як контракт лише на рівні дескрипторів і не виконуватиме `setup-api` або `openclaw.setupEntry` для пошуку setup. Якщо Plugin, що має працювати лише на дескрипторах, усе ж постачає один із цих записів рантайму setup, OpenClaw повідомляє додаткову діагностику й продовжує його ігнорувати. Пропущене `requiresRuntime` зберігає застарілу резервну поведінку, щоб наявні Plugin, які додали дескриптори без цього прапорця, не ламалися.
Оскільки пошук setup може виконувати код `setup-api`, що належить plugin,
нормалізовані значення `setup.providers[].id` і `setup.cliBackends[]` мають лишатися унікальними
серед виявлених plugin. Неоднозначне володіння завершується закритою відмовою замість
вибору переможця за порядком виявлення.
Оскільки пошук setup може виконувати код `setup-api`, що належить Plugin, нормалізовані значення `setup.providers[].id` і `setup.cliBackends[]` мають залишатися унікальними серед виявлених Plugin. Неоднозначна належність завершується за принципом fail closed замість вибору переможця за порядком виявлення.
Коли runtime setup все ж виконується, діагностика реєстру setup повідомляє про
розходження дескрипторів, якщо `setup-api` реєструє провайдера або backend CLI, яких
дескриптори маніфесту не оголошують, або якщо для дескриптора немає відповідної
runtime-реєстрації. Ці діагностики є додатковими й не відхиляють застарілі plugin.
Коли рантайм setup все ж виконується, діагностика реєстру setup повідомляє про розходження дескрипторів, якщо `setup-api` реєструє провайдера або backend CLI, яких не оголошують дескриптори маніфесту, або якщо для дескриптора немає відповідної реєстрації рантайму. Ці діагностики є додатковими й не відхиляють застарілі Plugin.
### Довідник `setup.providers`
| Поле | Обов’язкове | Тип | Що воно означає |
| ------------- | ----------- | ---------- | ------------------------------------------------------------------------------------- |
| `id` | Так | `string` | Ідентифікатор провайдера, доступний під час setup або онбордингу. Нормалізовані ідентифікатори мають бути глобально унікальними. |
| `authMethods` | Ні | `string[]` | Ідентифікатори методів setup/автентифікації, які цей провайдер підтримує без завантаження повного середовища виконання. |
| `envVars` | Ні | `string[]` | Змінні середовища, які загальні поверхні setup/статусу можуть перевіряти до завантаження середовища виконання plugin. |
| Поле | Обов’язкове | Тип | Що воно означає |
| ------------- | ----------- | ---------- | -------------------------------------------------------------------------------------- |
| `id` | Так | `string` | Id провайдера, що надається під час setup або онбордингу. Підтримуйте глобально унікальні нормалізовані id. |
| `authMethods` | Ні | `string[]` | Id методів setup/автентифікації, які цей провайдер підтримує без завантаження повного рантайму. |
| `envVars` | Ні | `string[]` | Змінні середовища, які універсальні поверхні setup/статусу можуть перевіряти до завантаження рантайму Plugin. |
### Поля `setup`
| Поле | Обов’язкове | Тип | Що воно означає |
| ------------------ | ----------- | ---------- | -------------------------------------------------------------------------------------------------- |
| `providers` | Ні | `object[]` | Дескриптори setup провайдерів, доступні під час setup та онбордингу. |
| `cliBackends` | Ні | `string[]` | Ідентифікатори backend-ів часу setup, що використовуються для пошуку setup у стилі descriptor-first. Нормалізовані ідентифікатори мають бути глобально унікальними. |
| `configMigrations` | Ні | `string[]` | Ідентифікатори міграцій конфігурації, якими володіє поверхня setup цього plugin. |
| `requiresRuntime` | Ні | `boolean` | Чи потребує setup виконання `setup-api` після пошуку за дескрипторами. |
| Поле | Обов’язкове | Тип | Що воно означає |
| ------------------ | ----------- | ---------- | ----------------------------------------------------------------------------------------------------- |
| `providers` | Ні | `object[]` | Дескриптори setup провайдера, доступні під час setup та онбордингу. |
| `cliBackends` | Ні | `string[]` | Id backend часу setup, які використовуються для пошуку setup за принципом “спочатку дескриптор”. Підтримуйте глобально унікальні нормалізовані id. |
| `configMigrations` | Ні | `string[]` | Id міграцій конфігурації, що належать поверхні setup цього Plugin. |
| `requiresRuntime` | Ні | `boolean` | Чи потребує setup виконання `setup-api` після пошуку за дескриптором. |
## Довідник `uiHints`
@ -400,19 +341,18 @@ runtime-реєстрації. Ці діагностики є додаткови
Кожна підказка для поля може містити:
| Поле | Тип | Що воно означає |
| ------------- | ---------- | ---------------------------------------- |
| `label` | `string` | Мітка поля, видима користувачу. |
| `help` | `string` | Короткий допоміжний текст. |
| `tags` | `string[]` | Необов’язкові UI-теги. |
| `advanced` | `boolean` | Позначає поле як розширене. |
| `sensitive` | `boolean` | Позначає поле як секретне або чутливе. |
| `placeholder` | `string` | Текст-заповнювач для полів форми. |
| Поле | Тип | Що воно означає |
| ------------- | ---------- | --------------------------------------- |
| `label` | `string` | Мітка поля для користувача. |
| `help` | `string` | Короткий допоміжний текст. |
| `tags` | `string[]` | Необов’язкові теги UI. |
| `advanced` | `boolean` | Позначає поле як розширене. |
| `sensitive` | `boolean` | Позначає поле як секретне або чутливе. |
| `placeholder` | `string` | Текст-заповнювач для полів форми. |
## Довідник `contracts`
Використовуйте `contracts` лише для статичних метаданих володіння можливостями, які OpenClaw може
зчитати без імпорту середовища виконання plugin.
Використовуйте `contracts` лише для статичних метаданих належності можливостей, які OpenClaw може зчитувати без імпорту рантайму Plugin.
```json
{
@ -435,46 +375,31 @@ runtime-реєстрації. Ці діагностики є додаткови
Кожен список є необов’язковим:
| Поле | Тип | Що воно означає |
| -------------------------------- | ---------- | --------------------------------------------------------------------- |
| `embeddedExtensionFactories` | `string[]` | Ідентифікатори фабрик розширень Codex app-server, наразі `codex-app-server`. |
| `agentToolResultMiddleware` | `string[]` | Ідентифікатори runtime, для яких вбудований plugin може реєструвати middleware результатів інструментів. |
| `externalAuthProviders` | `string[]` | Ідентифікатори провайдерів, чий зовнішній хук auth profile належить цьому plugin. |
| `speechProviders` | `string[]` | Ідентифікатори провайдерів мовлення, якими володіє цей plugin. |
| `realtimeTranscriptionProviders` | `string[]` | Ідентифікатори провайдерів транскрибування в реальному часі, якими володіє цей plugin. |
| `realtimeVoiceProviders` | `string[]` | Ідентифікатори провайдерів голосу в реальному часі, якими володіє цей plugin. |
| `memoryEmbeddingProviders` | `string[]` | Ідентифікатори провайдерів memory embedding, якими володіє цей plugin. |
| `mediaUnderstandingProviders` | `string[]` | Ідентифікатори провайдерів розуміння медіа, якими володіє цей plugin. |
| `imageGenerationProviders` | `string[]` | Ідентифікатори провайдерів генерації зображень, якими володіє цей plugin. |
| `videoGenerationProviders` | `string[]` | Ідентифікатори провайдерів генерації відео, якими володіє цей plugin. |
| `webFetchProviders` | `string[]` | Ідентифікатори провайдерів web-fetch, якими володіє цей plugin. |
| `webSearchProviders` | `string[]` | Ідентифікатори провайдерів web search, якими володіє цей plugin. |
| `tools` | `string[]` | Назви agent tool, якими володіє цей plugin, для перевірок вбудованих контрактів. |
| Поле | Тип | Що воно означає |
| -------------------------------- | ---------- | ------------------------------------------------------------------------ |
| `embeddedExtensionFactories` | `string[]` | Id фабрик extension app-server Codex, наразі `codex-app-server`. |
| `agentToolResultMiddleware` | `string[]` | Id рантайму, для яких вбудований Plugin може зареєструвати middleware результатів інструментів. |
| `externalAuthProviders` | `string[]` | Id провайдерів, чий hook профілю зовнішньої автентифікації належить цьому Plugin. |
| `speechProviders` | `string[]` | Id провайдерів мовлення, що належать цьому Plugin. |
| `realtimeTranscriptionProviders` | `string[]` | Id провайдерів транскрипції в реальному часі, що належать цьому Plugin. |
| `realtimeVoiceProviders` | `string[]` | Id провайдерів голосу в реальному часі, що належать цьому Plugin. |
| `memoryEmbeddingProviders` | `string[]` | Id провайдерів embedding пам’яті, що належать цьому Plugin. |
| `mediaUnderstandingProviders` | `string[]` | Id провайдерів розуміння медіа, що належать цьому Plugin. |
| `imageGenerationProviders` | `string[]` | Id провайдерів генерації зображень, що належать цьому Plugin. |
| `videoGenerationProviders` | `string[]` | Id провайдерів генерації відео, що належать цьому Plugin. |
| `webFetchProviders` | `string[]` | Id провайдерів web-fetch, що належать цьому Plugin. |
| `webSearchProviders` | `string[]` | Id провайдерів web search, що належать цьому Plugin. |
| `tools` | `string[]` | Назви інструментів агента, що належать цьому Plugin для перевірок вбудованих контрактів. |
`contracts.embeddedExtensionFactories` збережено для фабрик розширень
лише для вбудованого Codex app-server. Вбудовані перетворення результатів інструментів мають
оголошувати `contracts.agentToolResultMiddleware` і реєструватися через
`api.registerAgentToolResultMiddleware(...)`. Зовнішні plugin не можуть
реєструвати middleware результатів інструментів, оскільки цей шов може переписувати
високодовірений вивід інструменту до того, як його побачить модель.
`contracts.embeddedExtensionFactories` збережено для фабрик extension лише для вбудованого app-server Codex. Вбудовані трансформації результатів інструментів натомість мають оголошувати `contracts.agentToolResultMiddleware` і реєструватися через `api.registerAgentToolResultMiddleware(...)`. Зовнішні Plugin не можуть реєструвати middleware результатів інструментів, оскільки цей шов може переписувати вихід інструменту з високим рівнем довіри до того, як модель його побачить.
Plugin провайдерів, які реалізують `resolveExternalAuthProfiles`, мають оголошувати
`contracts.externalAuthProviders`. Plugin без цього оголошення все ще працюють
через застарілий fallback сумісності, але він повільніший і
буде видалений після завершення вікна міграції.
Plugin провайдерів, які реалізують `resolveExternalAuthProfiles`, мають оголошувати `contracts.externalAuthProviders`. Plugin без цього оголошення все ще працюють через застарілий резервний механізм сумісності, але він повільніший і буде видалений після завершення вікна міграції.
Вбудовані провайдери memory embedding мають оголошувати
`contracts.memoryEmbeddingProviders` для кожного ідентифікатора адаптера, який вони надають, включно з
вбудованими адаптерами, такими як `local`. Окремі шляхи CLI використовують цей контракт
маніфесту, щоб завантажувати лише plugin-власник до того, як повне середовище виконання Gateway
зареєструє провайдерів.
Вбудовані провайдери embedding пам’яті мають оголошувати `contracts.memoryEmbeddingProviders` для кожного id адаптера, який вони надають, включно з вбудованими адаптерами, такими як `local`. Автономні шляхи CLI використовують цей контракт маніфесту, щоб завантажити лише Plugin-власник до того, як повний рантайм Gateway зареєструє провайдерів.
## Довідник `mediaUnderstandingProviderMetadata`
Використовуйте `mediaUnderstandingProviderMetadata`, коли провайдер розуміння медіа має
типові моделі, пріоритет fallback автоавтентифікації або нативну підтримку документів, які
загальним helper-ам core потрібні до завантаження runtime. Ключі також мають бути оголошені в
`contracts.mediaUnderstandingProviders`.
Використовуйте `mediaUnderstandingProviderMetadata`, коли провайдер розуміння медіа має моделі за замовчуванням, пріоритет резервної автоавтентифікації або вбудовану підтримку документів, які потрібні універсальним допоміжним функціям ядра до завантаження рантайму. Ключі також мають бути оголошені в `contracts.mediaUnderstandingProviders`.
```json
{
@ -499,30 +424,23 @@ Plugin провайдерів, які реалізують `resolveExternalAuthP
Кожен запис провайдера може містити:
| Поле | Тип | Що воно означає |
| ---------------------- | ----------------------------------- | --------------------------------------------------------------------------- |
| `capabilities` | `("image" \| "audio" \| "video")[]` | Медіаможливості, які надає цей провайдер. |
| `defaultModels` | `Record<string, string>` | Типові відповідності можливість-модель, які використовуються, коли конфігурація не задає модель. |
| `autoPriority` | `Record<string, number>` | Нижчі числа сортуються раніше для автоматичного fallback провайдера на основі облікових даних. |
| `nativeDocumentInputs` | `"pdf"[]` | Нативні входи документів, які підтримує провайдер. |
| Поле | Тип | Що воно означає |
| ---------------------- | ----------------------------------- | ---------------------------------------------------------------------------- |
| `capabilities` | `("image" \| "audio" \| "video")[]` | Медіаможливості, які надає цей провайдер. |
| `defaultModels` | `Record<string, string>` | Значення за замовчуванням “можливість → модель”, які використовуються, коли конфігурація не задає модель. |
| `autoPriority` | `Record<string, number>` | Менші числа сортуються раніше для автоматичного резервного вибору провайдера на основі облікових даних. |
| `nativeDocumentInputs` | `"pdf"[]` | Вбудовані входи документів, які підтримує провайдер. |
## Довідник `channelConfigs`
Використовуйте `channelConfigs`, коли plugin каналу потребує дешевих метаданих конфігурації до
завантаження runtime. Виявлення setup/статусу каналу лише для читання може напряму використовувати ці метадані
для налаштованих зовнішніх каналів, коли запис setup недоступний або
коли `setup.requiresRuntime: false` оголошує runtime setup непотрібним.
Використовуйте `channelConfigs`, коли Plugin каналу потребує дешевих метаданих конфігурації до завантаження рантайму. Виявлення setup/статусу каналу в режимі лише для читання може використовувати ці метадані безпосередньо для налаштованих зовнішніх каналів, коли запис setup недоступний або коли `setup.requiresRuntime: false` оголошує, що рантайм setup не потрібен.
Для plugin каналу `configSchema` і `channelConfigs` описують різні
шляхи:
Для Plugin каналу `configSchema` і `channelConfigs` описують різні шляхи:
- `configSchema` валідовує `plugins.entries.<plugin-id>.config`
- `channelConfigs.<channel-id>.schema` валідовує `channels.<channel-id>`
- `configSchema` перевіряє `plugins.entries.<plugin-id>.config`
- `channelConfigs.<channel-id>.schema` перевіряє `channels.<channel-id>`
Небандловані plugin, які оголошують `channels[]`, також мають оголошувати відповідні
записи `channelConfigs`. Без них OpenClaw усе ще може завантажити plugin, але
поверхні схеми конфігурації холодного шляху, setup та Control UI не можуть знати
форму параметрів, що належать каналу, доки не виконається runtime plugin.
Небудовані Plugin, які оголошують `channels[]`, також мають оголошувати відповідні записи `channelConfigs`. Без них OpenClaw все ще може завантажити Plugin, але поверхні схеми конфігурації холодного шляху, setup і Control UI не можуть знати форму параметрів, що належать каналу, доки не виконається рантайм Plugin.
```json
{
@ -551,18 +469,17 @@ Plugin провайдерів, які реалізують `resolveExternalAuthP
Кожен запис каналу може містити:
| Поле | Тип | Що воно означає |
| ------------- | ------------------------ | ------------------------------------------------------------------------------------- |
| `schema` | `object` | JSON Schema для `channels.<id>`. Обов’язкова для кожного оголошеного запису конфігурації каналу. |
| `uiHints` | `Record<string, object>` | Необов’язкові UI-мітки/заповнювачі/підказки чутливості для цього розділу конфігурації каналу. |
| `label` | `string` | Мітка каналу, що об’єднується з поверхнями picker та inspect, коли метадані runtime ще не готові. |
| `description` | `string` | Короткий опис каналу для поверхонь inspect і catalog. |
| `preferOver` | `string[]` | Ідентифікатори застарілих або менш пріоритетних plugin, які цей канал має випереджати на поверхнях вибору. |
| Поле | Тип | Що воно означає |
| ------------- | ------------------------ | ------------------------------------------------------------------------------------------ |
| `schema` | `object` | Схема JSON для `channels.<id>`. Обов’язкова для кожного оголошеного запису конфігурації каналу. |
| `uiHints` | `Record<string, object>` | Необов’язкові мітки UI/заповнювачі/підказки чутливості для цього розділу конфігурації каналу. |
| `label` | `string` | Мітка каналу, об’єднана в поверхні вибору та інспектування, коли метадані рантайму ще не готові. |
| `description` | `string` | Короткий опис каналу для поверхонь інспектування та каталогу. |
| `preferOver` | `string[]` | Id застарілих або менш пріоритетних Plugin, які цей канал має перевершувати на поверхнях вибору. |
## Довідник `modelSupport`
Використовуйте `modelSupport`, коли OpenClaw має виводити ваш plugin провайдера з
коротких ідентифікаторів моделей на кшталт `gpt-5.5` або `claude-sonnet-4.6` до завантаження runtime plugin.
Використовуйте `modelSupport`, коли OpenClaw має визначати ваш Plugin провайдера зі скорочених id моделей, таких як `gpt-5.5` або `claude-sonnet-4.6`, до завантаження рантайму Plugin.
```json
{
@ -575,26 +492,112 @@ Plugin провайдерів, які реалізують `resolveExternalAuthP
OpenClaw застосовує такий пріоритет:
- явні посилання `provider/model` використовують метадані маніфесту `providers` плагіна-власника
- `modelPatterns` мають перевагу над `modelPrefixes`
- якщо збігаються один небандлований plugin і один вбудований plugin, перемагає небандлований
plugin
- решта неоднозначностей ігноруються, доки користувач або конфігурація не задасть провайдера
- явні посилання `provider/model` використовують метадані маніфесту-власника `providers`
- `modelPatterns` мають пріоритет над `modelPrefixes`
- якщо збігаються один небудований Plugin і один вбудований Plugin, перемагає небудований Plugin
- решта неоднозначностей ігноруються, доки користувач або конфігурація не вкажуть провайдера
Поля:
| Поле | Тип | Що воно означає |
| --------------- | ---------- | ------------------------------------------------------------------------ |
| `modelPrefixes` | `string[]` | Префікси, що звіряються через `startsWith` із короткими ідентифікаторами моделей. |
| `modelPatterns` | `string[]` | Джерела regex, що звіряються з короткими ідентифікаторами моделей після видалення суфікса профілю. |
| Поле | Тип | Що воно означає |
| --------------- | ---------- | ------------------------------------------------------------------------------ |
| `modelPrefixes` | `string[]` | Префікси, які зіставляються через `startsWith` зі скороченими id моделей. |
| `modelPatterns` | `string[]` | Джерела regex, які зіставляються зі скороченими id моделей після видалення суфікса профілю. |
Застарілі ключі можливостей верхнього рівня знецінені. Використовуйте `openclaw doctor --fix`, щоб
перемістити `speechProviders`, `realtimeTranscriptionProviders`,
`realtimeVoiceProviders`, `mediaUnderstandingProviders`,
`imageGenerationProviders`, `videoGenerationProviders`,
`webFetchProviders` і `webSearchProviders` під `contracts`; звичайне
завантаження маніфесту більше не трактує ці поля верхнього рівня як
володіння можливостями.
## Довідник `modelCatalog`
Використовуйте `modelCatalog`, коли OpenClaw має знати метадані моделей провайдера до завантаження рантайму Plugin. Це джерело, що належить маніфесту, для фіксованих рядків каталогу, псевдонімів провайдера, правил приглушення та режиму виявлення. Оновлення рантайму все ще належить коду рантайму провайдера, але маніфест повідомляє ядру, коли рантайм є обов’язковим.
```json
{
"providers": ["openai"],
"modelCatalog": {
"providers": {
"openai": {
"baseUrl": "https://api.openai.com/v1",
"api": "openai-responses",
"models": [
{
"id": "gpt-5.4",
"name": "GPT-5.4",
"input": ["text", "image"],
"reasoning": true,
"contextWindow": 256000,
"maxTokens": 128000,
"cost": {
"input": 1.25,
"output": 10,
"cacheRead": 0.125
},
"status": "available",
"tags": ["default"]
}
]
}
},
"aliases": {
"azure-openai-responses": {
"provider": "openai",
"api": "azure-openai-responses"
}
},
"suppressions": [
{
"provider": "azure-openai-responses",
"model": "gpt-5.3-codex-spark",
"reason": "not available on Azure OpenAI Responses"
}
],
"discovery": {
"openai": "static"
}
}
}
```
Поля верхнього рівня:
| Поле | Тип | Що воно означає |
| -------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| `providers` | `Record<string, object>` | Рядки каталогу для id провайдерів, що належать цьому Plugin. Ключі також мають з’являтися у верхньорівневому `providers`. |
| `aliases` | `Record<string, object>` | Псевдоніми провайдерів, які мають розв’язуватися в провайдера-власника для планування каталогу або приглушення. |
| `suppressions` | `object[]` | Рядки моделей з іншого джерела, які цей Plugin приглушує з причини, специфічної для провайдера. |
| `discovery` | `Record<string, "static" \| "refreshable" \| "runtime">` | Чи можна прочитати каталог провайдера з метаданих маніфесту, оновити в кеш або для цього потрібен рантайм. |
Поля провайдера:
| Поле | Тип | Що воно означає |
| --------- | ------------------------ | ------------------------------------------------------------------- |
| `baseUrl` | `string` | Необов’язковий base URL за замовчуванням для моделей у цьому каталозі провайдера. |
| `api` | `ModelApi` | Необов’язковий адаптер API за замовчуванням для моделей у цьому каталозі провайдера. |
| `headers` | `Record<string, string>` | Необов’язкові статичні заголовки, що застосовуються до цього каталогу провайдера. |
| `models` | `object[]` | Обов’язкові рядки моделей. Рядки без `id` ігноруються. |
Поля моделі:
| Поле | Тип | Що воно означає |
| --------------- | -------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| `id` | `string` | Локальний для провайдера id моделі, без префікса `provider/`. |
| `name` | `string` | Необов’язкова відображувана назва. |
| `api` | `ModelApi` | Необов’язкове перевизначення API для окремої моделі. |
| `baseUrl` | `string` | Необов’язкове перевизначення base URL для окремої моделі. |
| `headers` | `Record<string, string>` | Необов’язкові статичні заголовки для окремої моделі. |
| `input` | `Array<"text" \| "image" \| "document">` | Модальності, які приймає модель. |
| `reasoning` | `boolean` | Чи надає модель поведінку reasoning. |
| `contextWindow` | `number` | Власне вікно контексту провайдера. |
| `contextTokens` | `number` | Необов’язкова ефективна межа контексту рантайму, якщо вона відрізняється від `contextWindow`. |
| `maxTokens` | `number` | Максимальна кількість вихідних токенів, якщо відома. |
| `cost` | `object` | Необов’язкова ціна в USD за мільйон токенів, включно з необов’язковим `tieredPricing`. |
| `compat` | `object` | Необов’язкові прапорці сумісності, що відповідають сумісності конфігурації моделі OpenClaw. |
| `status` | `"available"` \| `"preview"` \| `"deprecated"` \| `"disabled"` | Статус у списку. Використовуйте приглушення лише тоді, коли рядок взагалі не повинен з’являтися. |
| `statusReason` | `string` | Необов’язкова причина, що показується разом зі статусом, відмінним від доступного. |
| `replaces` | `string[]` | Старіші локальні для провайдера id моделей, які ця модель замінює. |
| `replacedBy` | `string` | Локальний для провайдера id моделі-заміни для застарілих рядків. |
| `tags` | `string[]` | Стабільні теги, які використовуються засобами вибору та фільтрами. |
Не розміщуйте в `modelCatalog` дані, що стосуються лише рантайму. Якщо провайдеру потрібен стан облікового запису, API-запит або виявлення локального процесу, щоб знати повний набір моделей, оголосіть цього провайдера як `refreshable` або `runtime` у `discovery`.
Застарілі верхньорівневі ключі можливостей не рекомендовані. Використовуйте `openclaw doctor --fix`, щоб перемістити `speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders` і `webSearchProviders` під `contracts`; звичайне завантаження маніфесту більше не трактує ці верхньорівневі поля як належність можливостей.
## Маніфест і `package.json`
@ -602,78 +605,53 @@ OpenClaw застосовує такий пріоритет:
| Файл | Використовуйте його для |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `openclaw.plugin.json` | Виявлення, валідації конфігурації, метаданих варіантів автентифікації та підказок UI, які мають існувати до запуску коду plugin |
| `package.json` | Метаданих npm, встановлення залежностей і блока `openclaw`, який використовується для точок входу, керування встановленням, setup або метаданих каталогу |
| `openclaw.plugin.json` | Виявлення, валідації конфігурації, метаданих варіантів автентифікації та підказок UI, які мають існувати до запуску коду Plugin |
| `package.json` | Метаданих npm, встановлення залежностей і блока `openclaw`, який використовується для точок входу, контролю встановлення, setup або метаданих каталогу |
Якщо ви не впевнені, де має знаходитися певний фрагмент метаданих, використовуйте таке правило:
Якщо ви не впевнені, куди має належати певний фрагмент метаданих, використовуйте таке правило:
- якщо OpenClaw має знати це до завантаження коду plugin, помістіть це в `openclaw.plugin.json`
- якщо OpenClaw має знати це до завантаження коду Plugin, помістіть це в `openclaw.plugin.json`
- якщо це стосується пакування, файлів точок входу або поведінки встановлення npm, помістіть це в `package.json`
### Поля `package.json`, які впливають на виявлення
Деякі метадані plugin до запуску runtime навмисно зберігаються в `package.json` у блоці
`openclaw`, а не в `openclaw.plugin.json`.
Деякі метадані Plugin до рантайму навмисно розміщуються в `package.json` у блоці `openclaw`, а не в `openclaw.plugin.json`.
Важливі приклади:
| Поле | Що воно означає |
| ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `openclaw.extensions` | Оголошує нативні точки входу plugin. Має лишатися всередині каталогу пакета plugin. |
| `openclaw.runtimeExtensions` | Оголошує зібрані точки входу runtime JavaScript для встановлених пакетів. Має лишатися всередині каталогу пакета plugin. |
| `openclaw.setupEntry` | Легковагова точка входу лише для setup, яка використовується під час онбордингу, відкладеного запуску каналу та виявлення статусу каналу/SecretRef лише для читання. Має лишатися всередині каталогу пакета plugin. |
| `openclaw.runtimeSetupEntry` | Оголошує зібрану точку входу setup JavaScript для встановлених пакетів. Має лишатися всередині каталогу пакета plugin. |
| `openclaw.channel` | Легковагові метадані каталогу каналів, як-от мітки, шляхи документації, псевдоніми та текст для вибору. |
| `openclaw.channel.configuredState` | Легковагові метадані перевірки налаштованого стану, які можуть відповісти на питання «чи вже існує setup лише через env?» без завантаження повного runtime каналу. |
| `openclaw.channel.persistedAuthState` | Легковагові метадані перевірки збереженого auth-стану, які можуть відповісти на питання «чи вже є щось із виконаним входом?» без завантаження повного runtime каналу. |
| `openclaw.install.npmSpec` / `openclaw.install.localPath` | Підказки встановлення/оновлення для вбудованих і зовнішньо опублікованих plugin. |
| `openclaw.install.defaultChoice` | Бажаний шлях встановлення, коли доступно кілька джерел встановлення. |
| `openclaw.install.minHostVersion` | Мінімальна підтримувана версія хоста OpenClaw з використанням нижньої межі semver, наприклад `>=2026.3.22`. |
| `openclaw.install.expectedIntegrity` | Очікуваний рядок цілісності npm dist, наприклад `sha512-...`; потоки встановлення й оновлення перевіряють завантажений артефакт за ним. |
| `openclaw.install.allowInvalidConfigRecovery` | Дозволяє вузький шлях відновлення через перевстановлення вбудованого plugin, коли конфігурація невалідна. |
| `openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen` | Дозволяє поверхням каналів лише для setup завантажуватися під час запуску раніше за повний plugin каналу. |
| Поле | Що воно означає |
| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `openclaw.extensions` | Оголошує точки входу власного Plugin. Повинні залишатися в каталозі пакета Plugin. |
| `openclaw.runtimeExtensions` | Оголошує точки входу вбудованого рантайму JavaScript для встановлених пакетів. Повинні залишатися в каталозі пакета Plugin. |
| `openclaw.setupEntry` | Легка точка входу лише для setup, що використовується під час онбордингу, відкладеного запуску каналу та виявлення статусу каналу/SecretRef у режимі лише для читання. Повинна залишатися в каталозі пакета Plugin. |
| `openclaw.runtimeSetupEntry` | Оголошує точку входу setup для зібраного JavaScript для встановлених пакетів. Повинна залишатися в каталозі пакета Plugin. |
| `openclaw.channel` | Легкі метадані каталогу каналу, як-от мітки, шляхи до документації, псевдоніми та текст для вибору. |
| `openclaw.channel.configuredState` | Легкі метадані перевірки налаштованого стану, які можуть відповісти на запитання «чи вже існує налаштування лише через env?» без завантаження повного рантайму каналу. |
| `openclaw.channel.persistedAuthState` | Легкі метадані перевірки збереженого стану автентифікації, які можуть відповісти на запитання «чи вже десь виконано вхід?» без завантаження повного рантайму каналу. |
| `openclaw.install.npmSpec` / `openclaw.install.localPath` | Підказки встановлення/оновлення для вбудованих Plugin і зовнішньо опублікованих Plugin. |
| `openclaw.install.defaultChoice` | Бажаний шлях встановлення, коли доступно кілька джерел встановлення. |
| `openclaw.install.minHostVersion` | Мінімальна підтримувана версія хоста OpenClaw із використанням нижньої межі semver, наприклад `>=2026.3.22`. |
| `openclaw.install.expectedIntegrity` | Очікуваний рядок цілісності npm dist, наприклад `sha512-...`; потоки встановлення й оновлення перевіряють отриманий артефакт за ним. |
| `openclaw.install.allowInvalidConfigRecovery` | Дозволяє вузький шлях відновлення через перевстановлення вбудованого Plugin, коли конфігурація недійсна. |
| `openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen` | Дозволяє поверхням каналу лише для setup завантажуватися до повного Plugin каналу під час запуску. |
Метадані маніфесту визначають, які варіанти провайдера/каналу/setup з’являються в
онбордингу до завантаження runtime. `package.json#openclaw.install` повідомляє
онбордингу, як отримати або ввімкнути цей plugin, коли користувач вибирає один із цих
варіантів. Не переносіть підказки встановлення в `openclaw.plugin.json`.
Метадані маніфесту визначають, які варіанти провайдера/каналу/setup з’являються в онбордингу до завантаження рантайму. `package.json#openclaw.install` повідомляє онбордингу, як отримати або ввімкнути цей Plugin, коли користувач вибирає один із цих варіантів. Не переносіть підказки встановлення в `openclaw.plugin.json`.
`openclaw.install.minHostVersion` застосовується під час встановлення та завантаження
реєстру маніфесту. Невалідні значення відхиляються; новіші, але валідні значення пропускають
plugin на старіших хостах.
`openclaw.install.minHostVersion` застосовується під час встановлення та завантаження реєстру маніфестів. Недійсні значення відхиляються; новіші, але дійсні значення пропускають Plugin на старіших хостах.
Точне закріплення версії npm уже міститься в `npmSpec`, наприклад
`"npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3"`. Офіційні записи зовнішнього каталогу
мають поєднувати точні специфікації з `expectedIntegrity`, щоб потоки оновлення завершувалися
закритою відмовою, якщо завантажений артефакт npm більше не відповідає закріпленому релізу.
Інтерактивний онбординг для сумісності й далі пропонує npm-специфікації довіреного реєстру,
включно з простими назвами пакетів і dist-tag. Діагностика каталогу може
розрізняти точні, плаваючі, закріплені за цілісністю, без цілісності, з невідповідністю
назви пакета та з невалідним джерелом default-choice. Вона також попереджає, коли
`expectedIntegrity` присутній, але немає валідного джерела npm, яке він може закріпити.
`"npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3"`. Офіційні записи зовнішнього каталогу мають поєднувати точні специфікації з `expectedIntegrity`, щоб потоки оновлення завершувалися за принципом fail closed, якщо отриманий артефакт npm більше не відповідає закріпленому релізу. Інтерактивний онбординг для сумісності все ще пропонує npm-специфікації довіреного реєстру, зокрема прості назви пакетів і dist-tag. Діагностика каталогу може розрізняти точні, плаваючі, закріплені за цілісністю, без цілісності, із невідповідністю назви пакета та недійсні джерела default choice. Вони також попереджають, коли `expectedIntegrity` присутній, але немає дійсного джерела npm, яке воно може закріпити.
Коли `expectedIntegrity` присутній,
потоки встановлення/оновлення застосовують його; коли його пропущено, розв’язання реєстру
записується без прив’язки до цілісності.
потоки встановлення/оновлення застосовують його; коли його пропущено, розв’язання реєстру записується без закріплення цілісності.
Plugin каналів мають надавати `openclaw.setupEntry`, коли статус, список каналів
або сканування SecretRef мають визначати налаштовані облікові записи без завантаження повного
runtime. Точка входу setup має надавати метадані каналу разом із безпечними для setup
адаптерами конфігурації, статусу та секретів; мережеві клієнти, слухачі gateway і runtime
транспорту слід тримати в основній точці входу extension.
Plugin каналів мають надавати `openclaw.setupEntry`, коли перевірки статусу, списку каналів або SecretRef мають визначати налаштовані облікові записи без завантаження повного рантайму. Запис setup має надавати метадані каналу разом з безпечними для setup адаптерами конфігурації, статусу та секретів; залишайте мережеві клієнти, слухачі Gateway і рантайми транспорту в основній точці входу extension.
Поля точок входу runtime не скасовують перевірки меж пакета для полів
точок входу вихідного коду. Наприклад, `openclaw.runtimeExtensions` не може зробити
завантажуваним шлях `openclaw.extensions`, що виходить за межі.
Поля точки входу рантайму не перевизначають перевірки меж пакета для полів точки входу вихідного коду.
Наприклад, `openclaw.runtimeExtensions` не може зробити придатним до завантаження шлях `openclaw.extensions`, що виходить за межі.
`openclaw.install.allowInvalidConfigRecovery` є навмисно вузьким. Воно
не робить довільні зламані конфігурації придатними до встановлення. Наразі воно лише дозволяє
потокам встановлення відновлюватися після конкретних застарілих збоїв оновлення вбудованого plugin,
наприклад відсутнього шляху до вбудованого plugin або застарілого запису `channels.<id>` для
цього самого вбудованого plugin. Непов’язані помилки конфігурації, як і раніше, блокують встановлення й скеровують операторів
до `openclaw doctor --fix`.
`openclaw.install.allowInvalidConfigRecovery` навмисно вузьке. Воно не робить довільні зламані конфігурації придатними до встановлення. Сьогодні воно лише дозволяє потокам встановлення відновлюватися після конкретних застарілих збоїв оновлення вбудованого Plugin, наприклад відсутнього шляху вбудованого Plugin або застарілого запису `channels.<id>` для того самого вбудованого Plugin. Непов’язані помилки конфігурації все одно блокують встановлення й спрямовують операторів до `openclaw doctor --fix`.
`openclaw.channel.persistedAuthState` — це метадані пакета для крихітного модуля
перевірки:
`openclaw.channel.persistedAuthState` — це метадані пакета для крихітного модуля перевірки:
```json
{
@ -689,13 +667,9 @@ runtime. Точка входу setup має надавати метадані к
}
```
Використовуйте це, коли потокам setup, doctor або configured-state потрібна дешева
перевірка auth у форматі так/ні до завантаження повного plugin каналу. Цільовий експорт має бути невеликою
функцією, яка лише зчитує збережений стан; не маршрутизуйте її через повний barrel
runtime каналу.
Використовуйте це, коли потокам setup, doctor або configured-state потрібна дешева yes/no перевірка автентифікації до завантаження повного Plugin каналу. Цільовий експорт має бути невеликою функцією, яка лише зчитує збережений стан; не маршрутизуйте її через повний barrel рантайму каналу.
`openclaw.channel.configuredState` має ту саму форму для дешевих перевірок
налаштованого стану лише через env:
`openclaw.channel.configuredState` має ту саму форму для дешевих перевірок налаштованого стану лише через env:
```json
{
@ -711,57 +685,55 @@ runtime каналу.
}
```
Використовуйте це, коли канал може визначити налаштований стан із env або інших малих
нерuntime-входів. Якщо перевірка потребує повного розв’язання конфігурації або справжнього
runtime каналу, зберігайте цю логіку в hook `config.hasConfiguredState` plugin.
Використовуйте це, коли канал може визначити configured-state із env або інших невеликих невиконуваних входів. Якщо перевірка потребує повного розв’язання конфігурації або реального рантайму каналу, залишайте цю логіку в hook Plugin `config.hasConfiguredState`.
## Пріоритет виявлення (дублікати ідентифікаторів plugin)
## Пріоритет виявлення (дублікати id Plugin)
OpenClaw виявляє plugin із кількох коренів (вбудовані, глобальне встановлення, workspace, явні шляхи, вибрані в конфігурації). Якщо два результати виявлення мають однаковий `id`, зберігається лише маніфест із **найвищим пріоритетом**; дублікати з нижчим пріоритетом відкидаються замість завантаження поруч із ним.
OpenClaw виявляє Plugin з кількох коренів (вбудовані, глобально встановлені, робочого простору, явно вибрані в конфігурації шляхи). Якщо два виявлення мають однаковий `id`, зберігається лише маніфест із **найвищим пріоритетом**; дублікати з нижчим пріоритетом відкидаються, а не завантажуються поруч із ним.
Пріоритет, від найвищого до найнижчого:
1. **Вибраний конфігурацією** — шлях, явно закріплений у `plugins.entries.<id>`
2. **Вбудований**plugin, що постачаються з OpenClaw
3. **Глобальне встановлення** — plugin, встановлені в глобальний корінь plugin OpenClaw
4. **Workspace** — plugin, виявлені відносно поточного workspace
2. **Вбудований**Plugin, що постачаються з OpenClaw
3. **Глобально встановлений** — Plugin, встановлені в глобальний корінь Plugin OpenClaw
4. **Робочий простір** — Plugin, виявлені відносно поточного робочого простору
Наслідки:
- Розгалужена або застаріла копія вбудованого plugin, що лежить у workspace, не перекриє вбудовану збірку.
- Щоб справді перевизначити вбудований plugin локальним, закріпіть його через `plugins.entries.<id>`, щоб він переміг за пріоритетом, а не покладайтеся на виявлення у workspace.
- Відкидання дублікатів логуються, щоб Doctor і діагностика запуску могли вказати на відкинуту копію.
- Форк або застаріла копія вбудованого Plugin, що лежить у робочому просторі, не перекриє вбудовану збірку.
- Щоб справді перевизначити вбудований Plugin локальним, закріпіть його через `plugins.entries.<id>`, щоб він виграв за пріоритетом, а не покладайтеся на виявлення в робочому просторі.
- Відкидання дублікатів журналюється, щоб Doctor і діагностика запуску могли вказати на відкинуту копію.
## Вимоги до JSON Schema
## Вимоги до схеми JSON
- **Кожен plugin повинен постачати JSON Schema**, навіть якщо він не приймає конфігурацію.
- **Кожен Plugin повинен постачати схему JSON**, навіть якщо він не приймає конфігурацію.
- Порожня схема є прийнятною (наприклад, `{ "type": "object", "additionalProperties": false }`).
- Схеми валідуються під час читання/запису конфігурації, а не під час runtime.
- Схеми перевіряються під час читання/запису конфігурації, а не під час рантайму.
## Поведінка валідації
- Невідомі ключі `channels.*` є **помилками**, якщо тільки ідентифікатор каналу не оголошено
маніфестом plugin.
- Невідомі ключі `channels.*` є **помилками**, якщо тільки id каналу не оголошено
маніфестом Plugin.
- `plugins.entries.<id>`, `plugins.allow`, `plugins.deny` і `plugins.slots.*`
мають посилатися на **виявлювані** ідентифікатори plugin. Невідомі ідентифікатори є **помилками**.
- Якщо plugin встановлено, але він має зламаний або відсутній маніфест чи схему,
валідація завершується помилкою, а Doctor повідомляє про помилку plugin.
- Якщо конфігурація plugin існує, але plugin **вимкнено**, конфігурація зберігається і
в Doctor + логах показується **попередження**.
мають посилатися на **такі id Plugin, які можна виявити**. Невідомі id є **помилками**.
- Якщо Plugin встановлено, але він має зламаний або відсутній маніфест чи схему,
валідація завершується помилкою, а Doctor повідомляє про помилку Plugin.
- Якщо конфігурація Plugin існує, але Plugin **вимкнено**, конфігурація зберігається й
у Doctor + журналах показується **попередження**.
Повну схему `plugins.*` дивіться в [Довіднику з конфігурації](/uk/gateway/configuration).
Повну схему `plugins.*` див. у [Довіднику з конфігурації](/uk/gateway/configuration).
## Примітки
- Маніфест **є обов’язковим для нативних Plugin OpenClaw**, включно із завантаженням із локальної файлової системи. Runtime і далі завантажує модуль plugin окремо; маніфест потрібен лише для виявлення + валідації.
- Нативні маніфести розбираються за допомогою JSON5, тому коментарі, кінцеві коми та ключі без лапок дозволені, якщо фінальне значення все ще є об’єктом.
- Завантажувач маніфесту читає лише задокументовані поля маніфесту. Уникайте користувацьких ключів верхнього рівня.
- `channels`, `providers`, `cliBackends` і `skills` можна пропустити, якщо plugin їх не потребує.
- `providerDiscoveryEntry` має лишатися легковаговим і не повинен імпортувати широкий runtime-код; використовуйте його для статичних метаданих каталогу провайдера або вузьких дескрипторів виявлення, а не для виконання під час запиту.
- Ексклюзивні типи plugin вибираються через `plugins.slots.*`: `kind: "memory"` через `plugins.slots.memory`, `kind: "context-engine"` через `plugins.slots.contextEngine` (типово `legacy`).
- Метадані env var (`setup.providers[].envVars`, застарілий `providerAuthEnvVars` і `channelEnvVars`) є лише декларативними. Статус, аудит, перевірка доставки Cron та інші поверхні лише для читання все одно застосовують політику довіри plugin і ефективної активації, перш ніж вважати env var налаштованою.
- Метадані runtime wizard, які потребують коду провайдера, дивіться в [Хуки runtime провайдера](/uk/plugins/architecture-internals#provider-runtime-hooks).
- Якщо ваш plugin залежить від нативних модулів, задокументуйте кроки збірки та всі вимоги до allowlist менеджера пакетів (наприклад, pnpm `allow-build-scripts` + `pnpm rebuild <package>`).
- Маніфест **обов’язковий для власних Plugin OpenClaw**, зокрема для локальних завантажень із файлової системи. Рантайм усе одно завантажує модуль Plugin окремо; маніфест використовується лише для виявлення + валідації.
- Власні маніфести аналізуються за допомогою JSON5, тому коментарі, кінцеві коми та ключі без лапок приймаються, якщо кінцеве значення все ще є об’єктом.
- Завантажувач маніфесту зчитує лише задокументовані поля маніфесту. Уникайте користувацьких верхньорівневих ключів.
- `channels`, `providers`, `cliBackends` і `skills` можна не вказувати, якщо Plugin їх не потребує.
- `providerDiscoveryEntry` має залишатися легковаговим і не повинен імпортувати широкий код рантайму; використовуйте його для статичних метаданих каталогу провайдера або вузьких дескрипторів виявлення, а не для виконання під час запиту.
- Ексклюзивні типи Plugin вибираються через `plugins.slots.*`: `kind: "memory"` через `plugins.slots.memory`, `kind: "context-engine"` через `plugins.slots.contextEngine` (типово `legacy`).
- Метадані змінних середовища (`setup.providers[].envVars`, застарілий `providerAuthEnvVars` і `channelEnvVars`) є лише декларативними. Статус, аудит, перевірка доставки Cron та інші поверхні лише для читання все одно застосовують довіру до Plugin і політику ефективної активації, перш ніж вважати змінну середовища налаштованою.
- Для метаданих wizard рантайму, які потребують коду провайдера, див. [Hooks рантайму провайдера](/uk/plugins/architecture-internals#provider-runtime-hooks).
- Якщо ваш Plugin залежить від native modules, задокументуйте кроки збирання та будь-які вимоги до allowlist менеджера пакетів (наприклад, pnpm `allow-build-scripts` + `pnpm rebuild <package>`).
## Пов’язане
@ -773,6 +745,6 @@ OpenClaw виявляє plugin із кількох коренів (вбудов
Внутрішня архітектура та модель можливостей.
</Card>
<Card title="Огляд SDK" href="/uk/plugins/sdk-overview" icon="book">
Довідник Plugin SDK та імпорти підшляхів.
Довідник SDK Plugin і імпортів підшляхів.
</Card>
</CardGroup>

View File

@ -1,120 +1,122 @@
---
read_when:
- Ви створюєте новий plugin каналу обміну повідомленнями
- Ви створюєте новий плагін каналу обміну повідомленнями
- Ви хочете підключити OpenClaw до платформи обміну повідомленнями
- Вам потрібно зрозуміти поверхню адаптера ChannelPlugin
sidebarTitle: Channel Plugins
summary: Покроковий посібник зі створення plugin каналу обміну повідомленнями для OpenClaw
title: Створення plugin каналів
summary: Покроковий посібник зі створення плагіна каналу обміну повідомленнями для OpenClaw
title: Створення плагінів каналів
x-i18n:
generated_at: "2026-04-25T00:26:43Z"
generated_at: "2026-04-25T02:02:04Z"
model: gpt-5.4
provider: openai
source_hash: 451b4f888cfac92ff37dcc5edd3a942c4df5a6081b283eda8321704d6f760162
source_hash: ac64ec8cc8963eaa5aff862e9b318951a156f10c2f6963cd7fce24780fb028ac
source_path: plugins/sdk-channel-plugins.md
workflow: 15
---
Цей посібник описує створення plugin каналу, який підключає OpenClaw до
платформи обміну повідомленнями. Наприкінці у вас буде робочий канал із безпекою DM,
паруванням, гілкуванням відповідей і вихідними повідомленнями.
Цей посібник допоможе вам створити плагін каналу, який підключає OpenClaw до
платформи обміну повідомленнями. Наприкінці у вас буде робочий канал із
безпекою DM, паруванням, потоками відповідей і вихідними повідомленнями.
<Info>
Якщо ви ще не створювали жодного plugin для OpenClaw, спочатку прочитайте
Якщо ви раніше не створювали жодного плагіна OpenClaw, спочатку прочитайте
[Початок роботи](/uk/plugins/building-plugins), щоб ознайомитися з базовою
структурою пакета та налаштуванням маніфесту.
</Info>
## Як працюють plugin каналів
## Як працюють плагіни каналів
Plugin каналів не потребують власних інструментів send/edit/react. OpenClaw зберігає один
спільний інструмент `message` у core. Ваш plugin відповідає за:
Плагінам каналів не потрібні власні інструменти send/edit/react. OpenClaw
зберігає один спільний інструмент `message` у ядрі. Ваш плагін відповідає за:
- **Config** — визначення облікового запису та майстер налаштування
- **Security** — політика DM та списки дозволених
- **Security** — політика DM і списки дозволених
- **Pairing** — потік підтвердження DM
- **Граматика сесії** — як специфічні для провайдера ідентифікатори розмов зіставляються з базовими чатами, ідентифікаторами гілок та резервними батьківськими значеннями
- **Session grammar** — як специфічні для провайдера ідентифікатори розмов зіставляються з базовими чатами, ідентифікаторами потоків і резервними батьківськими значеннями
- **Outbound** — надсилання тексту, медіа та опитувань на платформу
- **Threading** — як гілкуються відповіді
- **Heartbeat typing** — необов’язкові сигнали typing/busy для цілей доставки Heartbeat
- **Threading** — як організуються потоки відповідей
- **Heartbeat typing** — необов’язкові сигнали typing/busy для цілей доставки heartbeat
Core відповідає за спільний інструмент повідомлень, підключення prompt, зовнішню форму ключа сесії,
загальний облік `:thread:` та диспетчеризацію.
Ядро відповідає за спільний інструмент повідомлень, прив’язку промптів, зовнішню форму ключа сесії,
загальний облік `:thread:` і диспетчеризацію.
Якщо ваш канал підтримує індикатори набору тексту поза межами вхідних відповідей,
експортуйте `heartbeat.sendTyping(...)` у plugin каналу. Core викликає його з
визначеною ціллю доставки Heartbeat до початку виконання моделі Heartbeat і
Якщо ваш канал підтримує індикатори набору поза межами вхідних відповідей,
надайте `heartbeat.sendTyping(...)` у плагіні каналу. Ядро викликає його з
визначеною ціллю доставки heartbeat до початку запуску моделі heartbeat і
використовує спільний життєвий цикл keepalive/cleanup для typing. Додайте `heartbeat.clearTyping(...)`,
якщо платформі потрібен явний сигнал зупинки.
коли платформі потрібен явний сигнал зупинки.
Якщо ваш канал додає параметри інструмента повідомлень, які містять джерела медіа,
експортуйте ці назви параметрів через `describeMessageTool(...).mediaSourceParams`. Core використовує
цей явний список для нормалізації шляхів у sandbox і політики доступу до вихідних медіа,
тому plugin не потребують спеціальних випадків у shared-core для специфічних для провайдера
параметрів аватара, вкладення або обкладинки.
Віддавайте перевагу поверненню мапи з ключами дій, наприклад
Якщо ваш канал додає параметри інструмента повідомлень, які передають джерела
медіа, надайте ці назви параметрів через `describeMessageTool(...).mediaSourceParams`.
Ядро використовує цей явний список для нормалізації шляхів sandbox і політики
доступу до вихідних медіа, тому плагінам не потрібні спеціальні випадки в
спільному ядрі для специфічних для провайдера параметрів аватара, вкладення
або обкладинки.
Рекомендується повертати мапу з ключами дій, наприклад
`{ "set-profile": ["avatarUrl", "avatarPath"] }`, щоб не пов’язані дії не
успадковували медіа-аргументи іншої дії. Плоский масив теж працює для параметрів, які
навмисно спільні для кожної доступної дії.
успадковували медіааргументи іншої дії. Плоский масив також працює для
параметрів, які навмисно спільні для кожної доступної дії.
Якщо ваша платформа зберігає додаткову область видимості всередині ідентифікаторів розмов,
залиште цей розбір у plugin через `messaging.resolveSessionConversation(...)`. Це
канонічний hook для зіставлення `rawId` з базовим ідентифікатором розмови, необов’язковим
ідентифікатором гілки, явним `baseConversationId` і будь-якими
Якщо ваша платформа зберігає додаткову область видимості в ідентифікаторах
розмов, залишайте цей розбір у плагіні через `messaging.resolveSessionConversation(...)`.
Це канонічний хук для зіставлення `rawId` із базовим ідентифікатором розмови,
необов’язковим `thread` id, явним `baseConversationId` і будь-якими
`parentConversationCandidates`.
Коли ви повертаєте `parentConversationCandidates`, зберігайте їх порядок від
Коли ви повертаєте `parentConversationCandidates`, зберігайте їхній порядок від
найвужчого батьківського елемента до найширшої/базової розмови.
Вбудовані plugin, яким потрібен такий самий розбір до запуску реєстру каналів,
також можуть експортувати файл верхнього рівня `session-key-api.ts` із відповідним
експортом `resolveSessionConversation(...)`. Core використовує цю безпечну для bootstrap поверхню
лише тоді, коли реєстр runtime plugin ще недоступний.
Вбудовані плагіни, яким потрібен той самий розбір до запуску реєстру каналів,
також можуть надавати файл верхнього рівня `session-key-api.ts` із відповідним
експортом `resolveSessionConversation(...)`. Ядро використовує цю безпечну для
bootstrap поверхню лише тоді, коли реєстр плагінів часу виконання ще недоступний.
`messaging.resolveParentConversationCandidates(...)` залишається доступним як
застарілий сумісний резервний варіант, коли plugin потрібні лише резервні батьківські значення
поверх загального/raw id. Якщо існують обидва hooks, core спочатку використовує
застарілий резервний варіант сумісності, коли плагіну потрібні лише
резервні батьківські значення поверх загального/сирого id. Якщо обидва хуки
існують, ядро спочатку використовує
`resolveSessionConversation(...).parentConversationCandidates` і лише потім
перемикається на `resolveParentConversationCandidates(...)`, якщо канонічний hook
їх не надає.
переходить до `resolveParentConversationCandidates(...)`, якщо канонічний хук
їх не повертає.
## Підтвердження та можливості каналу
## Підтвердження та можливості каналів
Більшості plugin каналів не потрібен код, специфічний для підтверджень.
Більшості плагінів каналів не потрібен код, специфічний для підтверджень.
- Core відповідає за same-chat `/approve`, спільні payload кнопок підтвердження та загальну резервну доставку.
- Віддавайте перевагу одному об’єкту `approvalCapability` у plugin каналу, коли каналу потрібна специфічна для підтверджень поведінка.
- `ChannelPlugin.approvals` видалено. Розміщуйте факти доставки/native/render/auth для підтверджень у `approvalCapability`.
- `plugin.auth` призначений лише для login/logout; core більше не читає hooks auth підтверджень із цього об’єкта.
- `approvalCapability.authorizeActorAction` і `approvalCapability.getActionAvailabilityState` — це канонічний шов auth для підтверджень.
- Використовуйте `approvalCapability.getActionAvailabilityState` для доступності auth підтверджень у same-chat.
- Якщо ваш канал надає native exec підтвердження, використовуйте `approvalCapability.getExecInitiatingSurfaceState` для стану initiating-surface/native-client, коли він відрізняється від auth підтверджень у same-chat. Core використовує цей специфічний для exec hook, щоб розрізняти `enabled` і `disabled`, визначати, чи підтримує канал-ініціатор native exec підтвердження, і включати канал до вказівок резервного переходу для native-client. `createApproverRestrictedNativeApprovalCapability(...)` заповнює це для типового випадку.
- Використовуйте `outbound.shouldSuppressLocalPayloadPrompt` або `outbound.beforeDeliverPayload` для специфічної для каналу поведінки життєвого циклу payload, наприклад приховування дубльованих локальних prompt підтвердження або надсилання індикаторів typing перед доставкою.
- Використовуйте `approvalCapability.delivery` лише для native-маршрутизації підтверджень або придушення резервної доставки.
- Використовуйте `approvalCapability.nativeRuntime` для фактів native підтверджень, якими володіє канал. Зберігайте його лінивим на гарячих entrypoint каналу за допомогою `createLazyChannelApprovalNativeRuntimeAdapter(...)`, який може імпортувати ваш runtime-модуль на вимогу, водночас дозволяючи core зібрати життєвий цикл підтвердження.
- Використовуйте `approvalCapability.render` лише тоді, коли каналу справді потрібні власні payload підтверджень замість спільного renderer.
- Використовуйте `approvalCapability.describeExecApprovalSetup`, коли канал хоче, щоб відповідь для вимкненого шляху пояснювала точні параметри config, потрібні для ввімкнення native exec підтверджень. Hook отримує `{ channel, channelLabel, accountId }`; канали з іменованими обліковими записами повинні відображати шляхи з областю облікового запису, такі як `channels.<channel>.accounts.<id>.execApprovals.*`, а не top-level значення за замовчуванням.
- Якщо канал може виводити стабільні DM-ідентичності на кшталт власника з наявного config, використовуйте `createResolvedApproverActionAuthAdapter` з `openclaw/plugin-sdk/approval-runtime`, щоб обмежити same-chat `/approve` без додавання логіки, специфічної для підтверджень, у core.
- Якщо каналу потрібна native-доставка підтверджень, зосередьте код каналу на нормалізації цілей плюс фактах транспортування/представлення. Використовуйте `createChannelExecApprovalProfile`, `createChannelNativeOriginTargetResolver`, `createChannelApproverDmTargetResolver` і `createApproverRestrictedNativeApprovalCapability` з `openclaw/plugin-sdk/approval-runtime`. Розміщуйте специфічні для каналу факти за `approvalCapability.nativeRuntime`, бажано через `createChannelApprovalNativeRuntimeAdapter(...)` або `createLazyChannelApprovalNativeRuntimeAdapter(...)`, щоб core міг зібрати handler і взяти на себе фільтрацію запитів, маршрутизацію, усунення дублікатів, термін дії, підписку Gateway та повідомлення routed-elsewhere. `nativeRuntime` поділено на кілька менших швів:
- Ядро відповідає за `/approve` у тому самому чаті, спільні payload кнопок підтвердження та загальну резервну доставку.
- Надавайте перевагу одному об’єкту `approvalCapability` у плагіні каналу, коли каналу потрібна поведінка, специфічна для підтверджень.
- `ChannelPlugin.approvals` видалено. Розміщуйте факти доставки/native/render/auth підтверджень у `approvalCapability`.
- `plugin.auth` призначений лише для login/logout; ядро більше не читає хуки auth підтверджень із цього об’єкта.
- `approvalCapability.authorizeActorAction` і `approvalCapability.getActionAvailabilityState` — це канонічна межа для auth підтверджень.
- Використовуйте `approvalCapability.getActionAvailabilityState` для доступності auth підтверджень у тому самому чаті.
- Якщо ваш канал надає native exec підтвердження, використовуйте `approvalCapability.getExecInitiatingSurfaceState` для стану initiating-surface/native-client, коли він відрізняється від auth підтверджень у тому самому чаті. Ядро використовує цей специфічний для exec хук, щоб розрізняти `enabled` і `disabled`, визначати, чи підтримує ініціювальний канал native exec підтвердження, і включати канал до підказок резервного переходу для native-client. `createApproverRestrictedNativeApprovalCapability(...)` заповнює це для типового випадку.
- Використовуйте `outbound.shouldSuppressLocalPayloadPrompt` або `outbound.beforeDeliverPayload` для специфічної для каналу поведінки життєвого циклу payload, такої як приховування дубльованих локальних промптів підтвердження або надсилання індикаторів набору перед доставкою.
- Використовуйте `approvalCapability.delivery` лише для native-маршрутизації підтверджень або пригнічення резервної доставки.
- Використовуйте `approvalCapability.nativeRuntime` для фактів native-підтверджень, що належать каналу. Зберігайте його lazy на гарячих entrypoint каналу за допомогою `createLazyChannelApprovalNativeRuntimeAdapter(...)`, який може за потреби імпортувати модуль вашого часу виконання, водночас дозволяючи ядру збирати життєвий цикл підтвердження.
- Використовуйте `approvalCapability.render` лише тоді, коли каналу справді потрібні власні payload підтвердження замість спільного renderer.
- Використовуйте `approvalCapability.describeExecApprovalSetup`, коли канал хоче, щоб відповідь у вимкненому стані пояснювала точні параметри config, потрібні для ввімкнення native exec підтверджень. Хук отримує `{ channel, channelLabel, accountId }`; канали з іменованими обліковими записами мають відображати шляхи з областю видимості облікового запису, наприклад `channels.<channel>.accounts.<id>.execApprovals.*`, а не значення верхнього рівня за замовчуванням.
- Якщо канал може виводити стабільні DM-ідентичності, подібні до власника, з наявного config, використовуйте `createResolvedApproverActionAuthAdapter` з `openclaw/plugin-sdk/approval-runtime`, щоб обмежити `/approve` у тому самому чаті без додавання специфічної для підтверджень логіки в ядро.
- Якщо каналу потрібна native-доставка підтверджень, зосередьте код каналу на нормалізації цілі плюс фактах транспорту/представлення. Використовуйте `createChannelExecApprovalProfile`, `createChannelNativeOriginTargetResolver`, `createChannelApproverDmTargetResolver` і `createApproverRestrictedNativeApprovalCapability` з `openclaw/plugin-sdk/approval-runtime`. Розміщуйте специфічні для каналу факти за `approvalCapability.nativeRuntime`, бажано через `createChannelApprovalNativeRuntimeAdapter(...)` або `createLazyChannelApprovalNativeRuntimeAdapter(...)`, щоб ядро могло зібрати обробник і взяти на себе фільтрацію запитів, маршрутизацію, усунення дублікатів, завершення строку дії, підписку Gateway і сповіщення про маршрутизацію в інше місце. `nativeRuntime` поділено на кілька менших меж:
- `availability` — чи налаштовано обліковий запис і чи слід обробляти запит
- `presentation` — зіставлення спільної view model підтвердження з native payload у стані pending/resolved/expired або кінцевими діями
- `presentation` — зіставлення спільної view model підтвердження з native payload у стані pending/resolved/expired або з фінальними діями
- `transport` — підготовка цілей плюс надсилання/оновлення/видалення native-повідомлень підтвердження
- `interactions` — необов’язкові hooks bind/unbind/clear-action для native-кнопок або реакцій
- `observe` — необов’язкові hooks діагностики доставки
- Якщо каналу потрібні об’єкти, якими володіє runtime, наприклад client, token, Bolt app або Webhook receiver, реєструйте їх через `openclaw/plugin-sdk/channel-runtime-context`. Загальний реєстр runtime-context дозволяє core запускати handlers на основі можливостей зі стану запуску каналу без додавання специфічного для підтверджень обгорткового glue-коду.
- Звертайтеся до нижчорівневих `createChannelApprovalHandler` або `createChannelNativeApprovalRuntime` лише тоді, коли шов на основі можливостей поки що недостатньо виразний.
- Канали native-підтверджень повинні маршрутизувати і `accountId`, і `approvalKind` через ці helper-и. `accountId` зберігає область політики підтверджень для кількох облікових записів прив’язаною до правильного облікового запису бота, а `approvalKind` зберігає поведінку підтверджень exec і plugin доступною для каналу без жорстко закодованих гілок у core.
- Тепер core також відповідає за повідомлення про перенаправлення підтверджень. Plugin каналів не повинні надсилати власні додаткові повідомлення на кшталт «підтвердження надійшло в DM / інший канал» з `createChannelNativeApprovalRuntime`; натомість експортуйте точну маршрутизацію origin + approver-DM через спільні helper-и можливостей підтвердження й дозвольте core агрегувати фактичні доставки перед публікацією будь-якого повідомлення назад у чат-ініціатор.
- Зберігайте тип id доставленого підтвердження наскрізно. Native clients не повинні
вгадувати або переписувати маршрутизацію підтверджень exec і plugin на основі локального для каналу стану.
- `interactions` — необов’язкові хуки bind/unbind/clear-action для native-кнопок або реакцій
- `observe` — необов’язкові хуки діагностики доставки
- Якщо каналу потрібні об’єкти, що належать часу виконання, такі як client, token, Bolt app або Webhook receiver, реєструйте їх через `openclaw/plugin-sdk/channel-runtime-context`. Загальний реєстр runtime-context дозволяє ядру bootstrap capability-driven обробників зі стану запуску каналу без додавання обгорткового glue-коду, специфічного для підтверджень.
- Звертайтеся до нижчорівневих `createChannelApprovalHandler` або `createChannelNativeApprovalRuntime` лише тоді, коли межа capability-driven ще недостатньо виразна.
- Канали native-підтверджень мають маршрутизувати і `accountId`, і `approvalKind` через ці helper-и. `accountId` зберігає область видимості політики підтверджень для кількох облікових записів у межах правильного bot account, а `approvalKind` зберігає доступність поведінки exec і Plugin-підтверджень для каналу без жорстко закодованих розгалужень у ядрі.
- Ядро тепер також відповідає за сповіщення про перенаправлення підтверджень. Плагіни каналів не повинні надсилати власні follow-up повідомлення на кшталт «підтвердження надійшло в DM / інший канал» з `createChannelNativeApprovalRuntime`; натомість надавайте точну маршрутизацію origin + approver-DM через спільні helper-и можливостей підтверджень і дозвольте ядру агрегувати фактичні доставки перед публікацією будь-якого сповіщення назад у чат-ініціатор.
- Зберігайте тип id доставленого підтвердження наскрізно. Native-клієнти не повинні
вгадувати чи переписувати маршрутизацію exec або Plugin-підтверджень на основі локального стану каналу.
- Різні типи підтверджень можуть навмисно надавати різні native-поверхні.
Поточні вбудовані приклади:
- Slack зберігає доступною native-маршрутизацію підтверджень як для exec, так і для plugin id.
- Matrix зберігає ту саму native DM/channel-маршрутизацію та UX реакцій для exec
і plugin підтверджень, водночас усе ще дозволяючи auth відрізнятися залежно від типу підтвердження.
- `createApproverRestrictedNativeApprovalAdapter` усе ще існує як обгортка сумісності, але новий код повинен віддавати перевагу builder можливостей і експортувати `approvalCapability` у plugin.
- Slack зберігає доступність native-маршрутизації підтверджень як для exec, так і для Plugin id.
- Matrix зберігає ту саму native-маршрутизацію DM/каналу та UX реакцій для exec
і Plugin-підтверджень, водночас дозволяючи auth відрізнятися залежно від типу підтвердження.
- `createApproverRestrictedNativeApprovalAdapter` усе ще існує як обгортка сумісності, але новий код має надавати перевагу конструктору можливостей і надавати `approvalCapability` у плагіні.
Для гарячих entrypoint каналу віддавайте перевагу вужчим runtime subpath, коли вам потрібна лише
одна частина цієї сім’ї:
Для гарячих entrypoint каналу надавайте перевагу вужчим підшляхам часу виконання, коли вам потрібна лише
одна частина цього сімейства:
- `openclaw/plugin-sdk/approval-auth-runtime`
- `openclaw/plugin-sdk/approval-client-runtime`
@ -126,47 +128,55 @@ Core відповідає за спільний інструмент повід
- `openclaw/plugin-sdk/approval-reply-runtime`
- `openclaw/plugin-sdk/channel-runtime-context`
Так само віддавайте перевагу `openclaw/plugin-sdk/setup-runtime`,
Так само надавайте перевагу `openclaw/plugin-sdk/setup-runtime`,
`openclaw/plugin-sdk/setup-adapter-runtime`,
`openclaw/plugin-sdk/reply-runtime`,
`openclaw/plugin-sdk/reply-dispatch-runtime`,
`openclaw/plugin-sdk/reply-reference` і
`openclaw/plugin-sdk/reply-chunking`, коли вам не потрібна ширша umbrella-
поверхня.
`openclaw/plugin-sdk/reply-chunking`, коли вам не потрібна ширша
узагальнена поверхня.
Для setup зокрема:
Зокрема для налаштування:
- `openclaw/plugin-sdk/setup-runtime` охоплює безпечні для runtime helper-и setup:
безпечні для import адаптери patch setup (`createPatchedAccountSetupAdapter`,
- `openclaw/plugin-sdk/setup-runtime` охоплює безпечні для часу виконання helper-и налаштування:
безпечні для імпорту patched-адаптери налаштування (`createPatchedAccountSetupAdapter`,
`createEnvPatchedAccountSetupAdapter`,
`createSetupInputPresenceValidator`), вивід приміток lookup,
`createSetupInputPresenceValidator`), вивід lookup-note,
`promptResolvedAllowFrom`, `splitSetupEntries` і делеговані
builder-и setup-proxy
- `openclaw/plugin-sdk/setup-adapter-runtime` — це вузький env-aware adapter
seam для `createEnvPatchedAccountSetupAdapter`
- `openclaw/plugin-sdk/channel-setup` охоплює builder-и setup для необов’язкового встановлення плюс кілька безпечних для setup примітивів:
конструктори setup-proxy
- `openclaw/plugin-sdk/setup-adapter-runtime` — це вузька env-aware межа адаптера
для `createEnvPatchedAccountSetupAdapter`
- `openclaw/plugin-sdk/channel-setup` охоплює конструктори налаштування з необов’язковим встановленням
плюс кілька примітивів, безпечних для setup:
`createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`,
Якщо ваш канал підтримує setup або auth на основі env і загальні потоки startup/config
мають знати ці env-імена до завантаження runtime, оголосіть їх у маніфесті plugin через
`channelEnvVars`. Зберігайте runtime `envVars` каналу або локальні константи лише для тексту, орієнтованого на операторів.
Якщо ваш канал підтримує налаштування або auth через env і загальні потоки startup/config
мають знати ці назви env до завантаження часу виконання, оголошуйте їх у
маніфесті плагіна через `channelEnvVars`. Зберігайте `envVars` часу виконання каналу
або локальні константи лише для операторського тексту.
Якщо ваш канал може з’являтися в `status`, `channels list`, `channels status` або скануваннях SecretRef до запуску runtime plugin, додайте `openclaw.setupEntry` у `package.json`. Цей entrypoint має бути безпечним для import у read-only шляхах команд і повинен повертати метадані каналу, безпечний для setup adapter config, adapter status і метадані channel secret target, потрібні для цих зведень. Не запускайте clients, listeners або transport runtime з setup entry.
Якщо ваш канал може з’являтися в `status`, `channels list`, `channels status` або в перевірках SecretRef
до запуску часу виконання плагіна, додайте `openclaw.setupEntry` у `package.json`.
Ця entrypoint має бути безпечною для імпорту в read-only шляхах команд і
повертати метадані каналу, безпечний для setup адаптер config, адаптер status
і метадані цілей секретів каналу, потрібні для цих зведень. Не запускайте
clients, listeners або transport runtime з entry налаштування.
`createOptionalChannelSetupWizard`, `DEFAULT_ACCOUNT_ID`,
`createTopLevelChannelDmPolicy`, `setSetupChannelEnabled` і
`splitSetupEntries`
- використовуйте ширший seam `openclaw/plugin-sdk/setup` лише тоді, коли вам також потрібні
- використовуйте ширшу межу `openclaw/plugin-sdk/setup` лише тоді, коли вам також потрібні
важчі спільні helper-и setup/config, такі як
`moveSingleAccountChannelSectionToDefaultAccount(...)`
Якщо ваш канал лише хоче показувати в поверхнях setup повідомлення «спочатку встановіть цей plugin»,
віддавайте перевагу `createOptionalChannelSetupSurface(...)`. Згенеровані
adapter/wizard безпечно закривають запис config і фіналізацію та повторно використовують
те саме повідомлення про необхідність встановлення для валідації, finalize і тексту з посиланням на docs.
Якщо ваш канал хоче лише повідомляти «спочатку встановіть цей плагін» у поверхнях
налаштування, надавайте перевагу `createOptionalChannelSetupSurface(...)`. Згенеровані
adapter/wizard безпечно відмовляють у записах config і фіналізації та повторно
використовують те саме повідомлення про потрібне встановлення для валідації, finalize
і тексту з посиланням на документацію.
Для інших гарячих шляхів каналу віддавайте перевагу вузьким helper-ам замість ширших застарілих
Для інших гарячих шляхів каналу надавайте перевагу вузьким helper-ам замість ширших застарілих
поверхонь:
- `openclaw/plugin-sdk/account-core`,
@ -175,59 +185,59 @@ adapter/wizard безпечно закривають запис config і фін
`openclaw/plugin-sdk/account-helpers` для config з кількома обліковими записами та
резервного переходу до облікового запису за замовчуванням
- `openclaw/plugin-sdk/inbound-envelope` і
`openclaw/plugin-sdk/inbound-reply-dispatch` для маршруту/конверта inbound і
зв’язування record-and-dispatch
`openclaw/plugin-sdk/inbound-reply-dispatch` для вхідного route/envelope та
прив’язки record-and-dispatch
- `openclaw/plugin-sdk/messaging-targets` для розбору/зіставлення цілей
- `openclaw/plugin-sdk/outbound-media` і
`openclaw/plugin-sdk/outbound-runtime` для завантаження медіа плюс делегатів
identity/send для outbound і планування payload
`openclaw/plugin-sdk/outbound-runtime` для завантаження медіа плюс вихідних
делегатів identity/send і планування payload
- `buildThreadAwareOutboundSessionRoute(...)` з
`openclaw/plugin-sdk/channel-core`, коли маршрут outbound має зберігати явний
`replyToId`/`threadId` або відновлювати поточну сесію `:thread:`,
якщо базовий ключ сесії все ще збігається. Plugin провайдерів можуть перевизначати
пріоритет, поведінку суфіксів і нормалізацію thread id, коли їхня платформа має
native-семантику доставки в гілках.
- `openclaw/plugin-sdk/thread-bindings-runtime` для життєвого циклу thread-binding
і реєстрації adapter
- `openclaw/plugin-sdk/agent-media-payload` лише тоді, коли все ще потрібна
застаріла розкладка полів payload agent/media
- `openclaw/plugin-sdk/telegram-command-config` для нормалізації користувацьких команд Telegram,
перевірки дублікатів/конфліктів і стабільного при резервному переході контракту config команд
`openclaw/plugin-sdk/channel-core`, коли вихідний маршрут має зберігати
явний `replyToId`/`threadId` або відновлювати поточну сесію `:thread:`
після того, як базовий ключ сесії все ще збігається. Плагіни провайдерів можуть
перевизначати пріоритет, поведінку суфіксів і нормалізацію thread id, коли їхня платформа
має native-семантику доставки в потоки.
- `openclaw/plugin-sdk/thread-bindings-runtime` для життєвого циклу прив’язки потоків
і реєстрації адаптерів
- `openclaw/plugin-sdk/agent-media-payload` лише тоді, коли застаріле
компонування полів payload агента/медіа все ще потрібне
- `openclaw/plugin-sdk/telegram-command-config` для нормалізації
власних команд Telegram, валідації дублікатів/конфліктів і стабільного при резервному переході контракту config команд
Канали лише з auth зазвичай можуть зупинитися на стандартному шляху: core обробляє підтвердження, а plugin просто експортує можливості outbound/auth. Канали з native-підтвердженнями, такі як Matrix, Slack, Telegram і користувацькі транспорти чату, повинні використовувати спільні native helper-и замість власної реалізації життєвого циклу підтверджень.
Для каналів лише з auth зазвичай достатньо шляху за замовчуванням: ядро обробляє підтвердження, а плагін лише надає можливості outbound/auth. Канали native-підтверджень, такі як Matrix, Slack, Telegram і спеціальні chat-транспорти, мають використовувати спільні native helper-и замість створення власного життєвого циклу підтверджень.
## Політика inbound-згадок
## Політика вхідних згадок
Зберігайте обробку inbound-згадок розділеною на два шари:
Обробку вхідних згадок слід тримати розділеною на два шари:
- збір доказів, яким володіє plugin
- спільне оцінювання політики
- збирання доказів, що належить плагіну
- оцінка спільної політики
Використовуйте `openclaw/plugin-sdk/channel-mention-gating` для рішень політики згадок.
Використовуйте `openclaw/plugin-sdk/channel-inbound` лише тоді, коли вам потрібен
ширший barrel helper-ів inbound.
Використовуйте `openclaw/plugin-sdk/channel-inbound` лише тоді, коли вам потрібен ширший
barrel helper-ів для вхідних даних.
Підходить для локальної логіки plugin:
Добре підходить для локальної логіки плагіна:
- виявлення reply-to-bot
- виявлення quoted-bot
- перевірки участі в гілці
- виключення службових/системних повідомлень
- native-кеші платформи, потрібні для підтвердження участі бота
- перевірки участі в потоці
- виключення сервісних/системних повідомлень
- специфічні для платформи native-кеші, потрібні для доведення участі бота
Підходить для спільного helper-а:
Добре підходить для спільного helper-а:
- `requireMention`
- явний результат згадки
- список дозволених неявних згадок
- обхід команд
- обхід для команд
- остаточне рішення про пропуск
Рекомендований потік:
1. Обчисліть локальні факти згадки.
2. Передайте ці факти в `resolveInboundMentionDecision({ facts, policy })`.
3. Використовуйте `decision.effectiveWasMentioned`, `decision.shouldBypassMention` і `decision.shouldSkip` у вашому inbound-gate.
2. Передайте ці факти до `resolveInboundMentionDecision({ facts, policy })`.
3. Використовуйте `decision.effectiveWasMentioned`, `decision.shouldBypassMention` і `decision.shouldSkip` у своєму вхідному gate.
```typescript
import {
@ -266,8 +276,8 @@ const decision = resolveInboundMentionDecision({
if (decision.shouldSkip) return;
```
`api.runtime.channel.mentions` експортує ті самі спільні helper-и згадок для
вбудованих plugin каналів, які вже залежать від runtime injection:
`api.runtime.channel.mentions` надає ті самі спільні helper-и для згадок для
вбудованих плагінів каналів, які вже залежать від injection часу виконання:
- `buildMentionRegexes`
- `matchesMentionPatterns`
@ -278,20 +288,20 @@ if (decision.shouldSkip) return;
Якщо вам потрібні лише `implicitMentionKindWhen` і
`resolveInboundMentionDecision`, імпортуйте з
`openclaw/plugin-sdk/channel-mention-gating`, щоб уникнути завантаження не пов’язаних
runtime helper-ів inbound.
helper-ів вхідного часу виконання.
Старі helper-и `resolveMentionGating*` залишаються в
`openclaw/plugin-sdk/channel-inbound` лише як експорти сумісності. Новий код
повинен використовувати `resolveInboundMentionDecision({ facts, policy })`.
Старіші helper-и `resolveMentionGating*` залишаються в
`openclaw/plugin-sdk/channel-inbound` лише як сумісні експорти. Новий код
має використовувати `resolveInboundMentionDecision({ facts, policy })`.
## Покроковий розбір
<Steps>
<a id="step-1-package-and-manifest"></a>
<Step title="Пакет і маніфест">
Створіть стандартні файли plugin. Поле `channel` у `package.json`
це те, що робить його plugin каналу. Повну поверхню метаданих пакета
дивіться в [Налаштування plugin і Config](/uk/plugins/sdk-setup#openclaw-channel):
Створіть стандартні файли плагіна. Поле `channel` у `package.json`
робить цей плагін плагіном каналу. Повну поверхню метаданих пакета
див. у [Налаштування плагіна та Config](/uk/plugins/sdk-setup#openclaw-channel):
<CodeGroup>
```json package.json
@ -349,15 +359,15 @@ runtime helper-ів inbound.
</CodeGroup>
`configSchema` перевіряє `plugins.entries.acme-chat.config`. Використовуйте його для
налаштувань, якими володіє plugin і які не є config облікового запису каналу. `channelConfigs`
перевіряє `channels.acme-chat` і є джерелом холодного шляху, яке використовується схемою config,
setup і поверхнями UI до завантаження runtime plugin.
налаштувань, що належать плагіну і не є config облікового запису каналу. `channelConfigs`
перевіряє `channels.acme-chat` і є джерелом холодного шляху, яке використовується config
schema, setup і UI-поверхнями до завантаження часу виконання плагіна.
</Step>
<Step title="Побудуйте об’єкт plugin каналу">
Інтерфейс `ChannelPlugin` має багато необов’язкових поверхонь adapter. Почніть із
мінімуму — `id` і `setup`і додавайте adapter-и за потреби.
<Step title="Створіть об’єкт плагіна каналу">
Інтерфейс `ChannelPlugin` має багато необов’язкових поверхонь адаптера. Почніть із
мінімуму — `id` і `setup`і додавайте адаптери за потреби.
Створіть `src/channel.ts`:
@ -367,7 +377,7 @@ runtime helper-ів inbound.
createChannelPluginBase,
} from "openclaw/plugin-sdk/channel-core";
import type { OpenClawConfig } from "openclaw/plugin-sdk/channel-core";
import { acmeChatApi } from "./client.js"; // ваш API client платформи
import { acmeChatApi } from "./client.js"; // your platform API client
type ResolvedAccount = {
accountId: string | null;
@ -408,7 +418,7 @@ runtime helper-ів inbound.
},
}),
// DM security: хто може писати боту
// DM security: who can message the bot
security: {
dm: {
channelKey: "acme-chat",
@ -418,21 +428,21 @@ runtime helper-ів inbound.
},
},
// Pairing: потік підтвердження для нових контактів DM
// Pairing: approval flow for new DM contacts
pairing: {
text: {
idLabel: "Ім’я користувача Acme Chat",
message: "Надішліть цей код, щоб підтвердити свою особу:",
idLabel: "Acme Chat username",
message: "Send this code to verify your identity:",
notify: async ({ target, code }) => {
await acmeChatApi.sendDm(target, `Pairing code: ${code}`);
},
},
},
// Threading: як доставляються відповіді
// Threading: how replies are delivered
threading: { topLevelReplyToMode: "reply" },
// Outbound: надсилання повідомлень на платформу
// Outbound: send messages to the platform
outbound: {
attachedResults: {
sendText: async (params) => {
@ -452,19 +462,27 @@ runtime helper-ів inbound.
});
```
<Accordion title="Що `createChatChannelPlugin` робить для вас">
Замість ручної реалізації низькорівневих інтерфейсів adapter ви передаєте
декларативні опції, а builder компонує їх:
<Accordion title="Що для вас робить createChatChannelPlugin">
Замість ручної реалізації низькорівневих інтерфейсів адаптерів ви передаєте
декларативні параметри, а builder компонує їх:
| Option | Що він підключає |
| Параметр | Що він підключає |
| --- | --- |
| `security.dm` | Scoped-розпізнавач безпеки DM із полів config |
| `pairing.text` | Текстовий потік парування DM з обміном кодами |
| `threading` | Розпізнавач режиму reply-to (фіксований, scoped до облікового запису або користувацький) |
| `outbound.attachedResults` | Функції send, що повертають метадані результату (ідентифікатори повідомлень) |
| `security.dm` | Resolver безпеки DM з областю видимості на основі полів config |
| `pairing.text` | Потік парування DM на основі тексту з обміном кодами |
| `threading` | Resolver режиму reply-to (фіксований, з областю видимості облікового запису або власний) |
| `outbound.attachedResults` | Функції надсилання, які повертають метадані результату (ID повідомлень) |
Ви також можете передавати сирі об’єкти adapter замість декларативних опцій,
Ви також можете передавати сирі об’єкти адаптерів замість декларативних параметрів,
якщо вам потрібен повний контроль.
Сирі outbound-адаптери можуть визначати функцію `chunker(text, limit, ctx)`.
Необов’язковий `ctx.formatting` містить рішення форматування на момент доставки,
наприклад `maxLinesPerMessage`; застосовуйте його перед надсиланням, щоб потоки відповідей
і межі chunk вирішувалися один раз спільною вихідною доставкою.
Контексти надсилання також містять `replyToIdSource` (`implicit` або `explicit`),
коли було визначено native-ціль відповіді, щоб helper-и payload могли зберігати
явні теги відповіді, не витрачаючи неявний одноразовий слот reply.
</Accordion>
</Step>
@ -505,21 +523,22 @@ runtime helper-ів inbound.
});
```
Розміщуйте дескриптори CLI, якими володіє канал, у `registerCliMetadata(...)`, щоб OpenClaw
міг показувати їх у кореневій довідці без активації повного runtime каналу,
тоді як звичайні повні завантаження все одно підхоплюватимуть ті самі дескриптори для реєстрації
реальних команд. Залишайте `registerFull(...)` для роботи, що стосується лише runtime.
Якщо `registerFull(...)` реєструє gateway RPC methods, використовуйте
префікс, специфічний для plugin. Простори імен admin у core (`config.*`,
Розміщуйте дескриптори CLI, що належать каналу, у `registerCliMetadata(...)`, щоб OpenClaw
міг показувати їх у кореневій довідці без активації повного часу виконання каналу,
тоді як звичайні повні завантаження все одно підхоплюватимуть ті самі дескриптори для фактичної
реєстрації команд. Залишайте `registerFull(...)` для роботи лише під час виконання.
Якщо `registerFull(...)` реєструє методи Gateway RPC, використовуйте
префікс, специфічний для плагіна. Простори імен адміністратора ядра (`config.*`,
`exec.approvals.*`, `wizard.*`, `update.*`) залишаються зарезервованими й завжди
зіставляються з `operator.admin`.
`defineChannelPluginEntry` автоматично обробляє розділення режимів реєстрації. Усі
опції дивіться в [Entry Points](/uk/plugins/sdk-entrypoints#definechannelpluginentry).
визначаються як `operator.admin`.
`defineChannelPluginEntry` автоматично обробляє це розділення режимів реєстрації. Див.
[Entry Points](/uk/plugins/sdk-entrypoints#definechannelpluginentry) для всіх
параметрів.
</Step>
<Step title="Додайте setup entry">
Створіть `setup-entry.ts` для легкого завантаження під час onboarding:
<Step title="Додайте entry point для setup">
Створіть `setup-entry.ts` для полегшеного завантаження під час онбордингу:
```typescript setup-entry.ts
import { defineSetupPluginEntry } from "openclaw/plugin-sdk/channel-core";
@ -529,32 +548,32 @@ runtime helper-ів inbound.
```
OpenClaw завантажує це замість повного entry, коли канал вимкнений
або не налаштований. Це дозволяє уникнути підключення важкого runtime-коду під час потоків setup.
Докладніше див. у [Setup і Config](/uk/plugins/sdk-setup#setup-entry).
або не налаштований. Це дає змогу уникнути підключення важкого коду часу виконання під час потоків setup.
Докладніше див. у [Налаштування та Config](/uk/plugins/sdk-setup#setup-entry).
Вбудовані workspace-канали, які розділяють безпечні для setup експорти на sidecar-
модулі, можуть використовувати `defineBundledChannelSetupEntry(...)` з
Вбудовані workspace-канали, які розділяють безпечні для setup експорти на sidecar-модулі,
можуть використовувати `defineBundledChannelSetupEntry(...)` з
`openclaw/plugin-sdk/channel-entry-contract`, коли їм також потрібен
явний setter runtime під час setup.
явний setter часу виконання для setup.
</Step>
<Step title="Обробляйте вхідні повідомлення">
Ваш plugin має отримувати повідомлення з платформи та пересилати їх до
Ваш плагін має отримувати повідомлення з платформи й пересилати їх до
OpenClaw. Типовий шаблон — це Webhook, який перевіряє запит і
диспетчеризує його через inbound-handler вашого каналу:
диспетчеризує його через вхідний обробник вашого каналу:
```typescript
registerFull(api) {
api.registerHttpRoute({
path: "/acme-chat/webhook",
auth: "plugin", // auth, яким керує plugin (перевіряйте підписи самостійно)
auth: "plugin", // auth, яким керує плагін (перевіряйте підписи самостійно)
handler: async (req, res) => {
const event = parseWebhookPayload(req);
// Ваш inbound-handler диспетчеризує повідомлення до OpenClaw.
// Точне підключення залежить від SDK вашої платформи —
// реальний приклад дивіться у вбудованому пакеті plugin Microsoft Teams або Google Chat.
// Ваш вхідний обробник диспетчеризує повідомлення до OpenClaw.
// Точна прив’язка залежить від SDK вашої платформи —
// реальний приклад див. у пакеті вбудованого плагіна Microsoft Teams або Google Chat.
await handleAcmeChatInbound(api, event);
res.statusCode = 200;
@ -566,16 +585,16 @@ runtime helper-ів inbound.
```
<Note>
Обробка вхідних повідомлень залежить від каналу. Кожен plugin каналу
володіє власним inbound-конвеєром. Перегляньте вбудовані plugin каналів
(наприклад, пакет plugin Microsoft Teams або Google Chat), щоб побачити реальні шаблони.
Обробка вхідних повідомлень є специфічною для каналу. Кожен плагін каналу
відповідає за власний вхідний pipeline. Подивіться на вбудовані плагіни каналів
(наприклад, пакет плагіна Microsoft Teams або Google Chat), щоб побачити реальні шаблони.
</Note>
</Step>
<a id="step-6-test"></a>
<Step title="Тестування">
Пишіть colocated-тести у `src/channel.test.ts`:
Пишіть колоковані тести у `src/channel.test.ts`:
```typescript src/channel.test.ts
import { describe, it, expect } from "vitest";
@ -613,7 +632,7 @@ runtime helper-ів inbound.
pnpm test -- <bundled-plugin-root>/acme-chat/
```
Спільні helper-и для тестування див. у [Testing](/uk/plugins/sdk-testing).
Для спільних helper-ів тестування див. [Тестування](/uk/plugins/sdk-testing).
</Step>
</Steps>
@ -622,24 +641,24 @@ runtime helper-ів inbound.
```
<bundled-plugin-root>/acme-chat/
├── package.json # Метадані openclaw.channel
├── openclaw.plugin.json # Маніфест зі схемою config
├── package.json # метадані openclaw.channel
├── openclaw.plugin.json # Маніфест зі schema config
├── index.ts # defineChannelPluginEntry
├── setup-entry.ts # defineSetupPluginEntry
├── api.ts # Публічні експорти (необов’язково)
├── runtime-api.ts # Внутрішні runtime-експорти (необов’язково)
├── runtime-api.ts # Внутрішні експорти часу виконання (необов’язково)
└── src/
├── channel.ts # ChannelPlugin через createChatChannelPlugin
├── channel.test.ts # Тести
├── client.ts # API client платформи
└── runtime.ts # Сховище runtime (за потреби)
└── runtime.ts # Сховище часу виконання (за потреби)
```
## Розширені теми
<CardGroup cols={2}>
<Card title="Параметри гілкування" icon="git-branch" href="/uk/plugins/sdk-entrypoints#registration-mode">
Фіксовані режими reply, режими в області облікового запису або користувацькі режими
<Card title="Параметри потоків" icon="git-branch" href="/uk/plugins/sdk-entrypoints#registration-mode">
Фіксовані, з областю видимості облікового запису або власні режими відповіді
</Card>
<Card title="Інтеграція інструмента повідомлень" icon="puzzle" href="/uk/plugins/architecture#channel-plugins-and-the-shared-message-tool">
describeMessageTool і виявлення дій
@ -647,27 +666,27 @@ runtime helper-ів inbound.
<Card title="Визначення цілі" icon="crosshair" href="/uk/plugins/architecture-internals#channel-target-resolution">
inferTargetChatType, looksLikeId, resolveTarget
</Card>
<Card title="Runtime helper-и" icon="settings" href="/uk/plugins/sdk-runtime">
<Card title="Helper-и часу виконання" icon="settings" href="/uk/plugins/sdk-runtime">
TTS, STT, медіа, subagent через api.runtime
</Card>
</CardGroup>
<Note>
Деякі вбудовані helper-шви все ще існують для супроводу вбудованих plugin і
сумісності. Це не рекомендований шаблон для нових plugin каналів;
віддавайте перевагу загальним subpath channel/setup/reply/runtime зі спільної
поверхні SDK, якщо лише ви безпосередньо не супроводжуєте це сімейство вбудованих plugin.
Деякі вбудовані helper-seam усе ще існують для підтримки вбудованих плагінів і
сумісності. Це не рекомендований шаблон для нових плагінів каналів;
надавайте перевагу загальним підшляхам channel/setup/reply/runtime зі спільної
поверхні SDK, якщо тільки ви не підтримуєте безпосередньо це сімейство вбудованих плагінів.
</Note>
## Наступні кроки
- [Provider Plugins](/uk/plugins/sdk-provider-plugins) — якщо ваш plugin також надає моделі
- [Огляд SDK](/uk/plugins/sdk-overview) — повний довідник з import subpath
- [Плагіни провайдерів](/uk/plugins/sdk-provider-plugins) — якщо ваш плагін також надає моделі
- [Огляд SDK](/uk/plugins/sdk-overview) — повний довідник щодо імпортів підшляхів
- [Тестування SDK](/uk/plugins/sdk-testing) — утиліти тестування та контрактні тести
- [Маніфест plugin](/uk/plugins/manifest) — повна схема маніфесту
- [Маніфест плагіна](/uk/plugins/manifest) — повна schema маніфесту
## Пов’язане
- [Setup plugin SDK](/uk/plugins/sdk-setup)
- [Створення plugin](/uk/plugins/building-plugins)
- [Plugin harness агента](/uk/plugins/sdk-agent-harness)
- [Налаштування SDK плагіна](/uk/plugins/sdk-setup)
- [Створення плагінів](/uk/plugins/building-plugins)
- [Плагіни harness агента](/uk/plugins/sdk-agent-harness)

View File

@ -3,77 +3,86 @@ read_when:
- Ви бачите попередження OPENCLAW_PLUGIN_SDK_COMPAT_DEPRECATED
- Ви бачите попередження OPENCLAW_EXTENSION_API_DEPRECATED
- Ви використовували `api.registerEmbeddedExtensionFactory` до OpenClaw 2026.4.24
- Ви оновлюєте Plugin до сучасної архітектури плагінів
- Ви оновлюєте Plugin до сучасної архітектури Plugin
- Ви підтримуєте зовнішній Plugin OpenClaw
sidebarTitle: Migrate to SDK
summary: Перейдіть із застарілого шару зворотної сумісності на сучасний Plugin SDK
title: Міграція Plugin SDK
x-i18n:
generated_at: "2026-04-25T01:53:35Z"
generated_at: "2026-04-25T02:02:28Z"
model: gpt-5.4
provider: openai
source_hash: 7072e690b1f23fd80d4de9a00bc0352f0c635d1ed89d4b530bfbb1f9f6eab483
source_hash: 6944e81e02d0e4031090a1b557e58842c59046f5e0c3834d7079c6370b4cb45c
source_path: plugins/sdk-migration.md
workflow: 15
---
OpenClaw перейшов від широкого шару зворотної сумісності до сучасної архітектури плагінів зі сфокусованими, задокументованими імпортами. Якщо ваш Plugin було створено до появи нової архітектури, цей посібник допоможе вам виконати міграцію.
OpenClaw перейшов від широкого шару зворотної сумісності до сучасної архітектури Plugin із цільовими, задокументованими імпортами. Якщо ваш Plugin було створено до появи нової архітектури, цей посібник допоможе вам виконати міграцію.
## Що змінюється
Стара система плагінів надавала дві широкі поверхні, які дозволяли плагінам імпортувати будь-що потрібне з однієї точки входу:
Стара система Plugin надавала дві широкі поверхні, які дозволяли Plugin імпортувати все необхідне з єдиної точки входу:
- **`openclaw/plugin-sdk/compat`** — один імпорт, що повторно експортував десятки допоміжних засобів. Його було запроваджено, щоб зберегти працездатність старіших плагінів на основі hook, поки створювалася нова архітектура плагінів.
- **`openclaw/extension-api`** — міст, який надавав плагінам прямий доступ до допоміжних засобів на боці хоста, таких як вбудований runner агента.
- **`api.registerEmbeddedExtensionFactory(...)`** — видалений API hook для вбудованих розширень лише для Pi, який міг спостерігати за подіями embedded-runner, такими як `tool_result`.
- **`openclaw/plugin-sdk/compat`** — єдиний імпорт, який повторно експортував десятки допоміжних засобів. Його було запроваджено, щоб старіші Plugins на основі хуків продовжували працювати, поки створювалася нова архітектура Plugin.
- **`openclaw/extension-api`** — міст, який надавав Plugins прямий доступ до допоміжних засобів на боці хоста, таких як вбудований виконавець агента.
- **`api.registerEmbeddedExtensionFactory(...)`** — вилучений API-хук для вбудованих розширень лише для Pi, який міг спостерігати за подіями вбудованого виконавця, такими як `tool_result`.
Широкі поверхні імпорту тепер **застарілі**. Вони все ще працюють під час виконання, але нові Plugins не повинні їх використовувати, а наявні плагіни мають виконати міграцію до того, як у наступному мажорному випуску їх буде видалено. API реєстрації factory вбудованих розширень лише для Pi видалено; натомість використовуйте middleware результатів інструментів.
Ці широкі поверхні імпорту тепер **застарілі**. Вони все ще працюють під час виконання, але нові Plugins не повинні їх використовувати, а наявні Plugins мають перейти на новий підхід до того, як у наступному мажорному релізі їх буде вилучено. API реєстрації фабрики вбудованого розширення лише для Pi вилучено; натомість використовуйте проміжне ПЗ результатів інструментів.
OpenClaw не видаляє і не переосмислює задокументовану поведінку Plugin у тій самій зміні, що запроваджує заміну. Зміни контрактів, які порушують сумісність, спочатку мають проходити через адаптер сумісності, діагностику, документацію та вікно застарівання. Це стосується імпортів SDK, полів маніфесту, API setup, hook і поведінки реєстрації під час виконання.
OpenClaw не вилучає і не переосмислює задокументовану поведінку Plugin у тій самій зміні, яка запроваджує заміну. Зміни контрактів, що ламають сумісність, спочатку мають пройти через адаптер сумісності, діагностику, документацію та вікно застарівання. Це стосується імпортів SDK, полів маніфесту, API налаштування, хуків і поведінки реєстрації під час виконання.
<Warning>
Шар зворотної сумісності буде видалено в одному з майбутніх мажорних випусків.
Шар зворотної сумісності буде вилучено в одному з майбутніх мажорних релізів.
Plugins, які все ще імпортують із цих поверхонь, перестануть працювати, коли це станеться.
Реєстрації factory вбудованих розширень лише для Pi уже більше не завантажуються.
Реєстрації фабрики вбудованого розширення лише для Pi уже більше не завантажуються.
</Warning>
## Чому це змінилося
Старий підхід спричиняв проблеми:
- **Повільний запуск** — імпорт одного helper завантажував десятки не пов’язаних модулів
- **Циклічні залежності** — широкі повторні експорти спрощували створення циклів імпорту
- **Повільний запуск** — імпорт одного допоміжного засобу завантажував десятки не пов’язаних між собою модулів
- **Циклічні залежності** — широкі повторні експорти полегшували створення циклів імпорту
- **Неясна поверхня API** — не було способу зрозуміти, які експорти є стабільними, а які внутрішніми
Сучасний Plugin SDK усуває це: кожен шлях імпорту (`openclaw/plugin-sdk/\<subpath\>`) є невеликим, самодостатнім модулем із чітким призначенням і задокументованим контрактом.
Сучасний Plugin SDK це виправляє: кожен шлях імпорту (`openclaw/plugin-sdk/\<subpath\>`) — це невеликий самодостатній модуль із чітким призначенням і задокументованим контрактом.
Застарілі зручні seams провайдера для вбудованих каналів також зникли. Імпорти на кшталт `openclaw/plugin-sdk/slack`, `openclaw/plugin-sdk/discord`, `openclaw/plugin-sdk/signal`, `openclaw/plugin-sdk/whatsapp`, branded helper seams каналів і `openclaw/plugin-sdk/telegram-core` були приватними скороченнями mono-repo, а не стабільними контрактами Plugin. Натомість використовуйте вузькі загальні subpath SDK. Усередині workspace вбудованого Plugin зберігайте допоміжні засоби, що належать провайдеру, у власному `api.ts` або `runtime-api.ts` цього Plugin.
Застарілі зручні шви провайдерів для вбудованих каналів також вилучено. Імпорти
на кшталт `openclaw/plugin-sdk/slack`, `openclaw/plugin-sdk/discord`,
`openclaw/plugin-sdk/signal`, `openclaw/plugin-sdk/whatsapp`,
допоміжні шви з брендуванням каналу та
`openclaw/plugin-sdk/telegram-core` були внутрішніми скороченнями mono-repo, а не
стабільними контрактами Plugin. Натомість використовуйте вузькі загальні підшляхи SDK. Усередині робочого простору вбудованого Plugin зберігайте допоміжні засоби, що належать провайдеру, у власному `api.ts` або `runtime-api.ts` цього Plugin.
Поточні приклади вбудованих провайдерів:
- Anthropic зберігає специфічні для Claude helper потоків у власному seam `api.ts` / `contract-api.ts`
- OpenAI зберігає builder провайдера, helper моделей за замовчуванням і builder realtime-провайдера у власному `api.ts`
- OpenRouter зберігає builder провайдера і helper onboarding/config у власному `api.ts`
- Anthropic зберігає допоміжні засоби потоків, специфічні для Claude, у власному шві `api.ts` /
`contract-api.ts`
- OpenAI зберігає конструктори провайдера, допоміжні засоби моделей за замовчуванням і конструктори провайдера realtime
у власному `api.ts`
- OpenRouter зберігає конструктор провайдера та допоміжні засоби онбордингу/конфігурації у власному
`api.ts`
## Політика сумісності
Для зовнішніх Plugin робота із сумісністю виконується в такому порядку:
Для зовнішніх Plugins робота із сумісністю відбувається в такому порядку:
1. додати новий контракт
2. зберегти стару поведінку, підключену через адаптер сумісності
3. вивести діагностику або попередження, яке називає старий шлях і заміну
2. зберегти стару поведінку через адаптер сумісності
3. вивести діагностичне повідомлення або попередження, у якому вказано старий шлях і заміну
4. покрити обидва шляхи в тестах
5. задокументувати застарівання та шлях міграції
6. видаляти лише після оголошеного вікна міграції, зазвичай у мажорному випуску
6. вилучати лише після оголошеного вікна міграції, зазвичай у мажорному релізі
Якщо поле маніфесту все ще приймається, автори Plugin можуть і далі його використовувати, доки документація й діагностика не скажуть інакше. Новий код має надавати перевагу задокументованій заміні, але наявні плагіни не повинні ламатися під час звичайних мінорних випусків.
Якщо поле маніфесту все ще приймається, автори Plugin можуть і надалі його використовувати, доки документація й діагностика не скажуть інакше. Новий код має надавати перевагу задокументованій заміні, але наявні Plugins не повинні ламатися під час звичайних мінорних релізів.
## Як виконати міграцію
<Steps>
<Step title="Перенесіть розширення результатів інструментів Pi на middleware">
Вбудовані Plugins мають замінити обробники результатів інструментів Pi-only
`api.registerEmbeddedExtensionFactory(...)` на runtime-neutral middleware.
<Step title="Перенесіть розширення результатів інструментів Pi на проміжне ПЗ">
Вбудовані Plugins мають замінити обробники результатів інструментів лише для Pi в
`api.registerEmbeddedExtensionFactory(...)`
на нейтральне до середовища виконання проміжне ПЗ.
```typescript
// Pi and Codex runtime dynamic tools
@ -94,37 +103,39 @@ OpenClaw не видаляє і не переосмислює задокумен
}
```
Зовнішні Plugins не можуть реєструвати middleware результатів інструментів, оскільки воно може переписувати високодовірений вивід інструментів до того, як його побачить модель.
Зовнішні Plugins не можуть реєструвати проміжне ПЗ результатів інструментів, оскільки воно може
переписувати вихідні дані інструментів із високим рівнем довіри до того, як модель їх побачить.
</Step>
<Step title="Перенесіть approval-native обробники на факти можливостей">
Plugins каналів із підтримкою approval тепер надають нативну поведінку approval через
`approvalCapability.nativeRuntime` разом зі спільним реєстром контексту runtime.
<Step title="Перенесіть обробники з рідною підтримкою схвалення на факти можливостей">
Plugins каналів із підтримкою схвалення тепер надають рідну поведінку схвалення через
`approvalCapability.nativeRuntime` разом зі спільним реєстром контексту середовища виконання.
Ключові зміни:
- Замініть `approvalCapability.handler.loadRuntime(...)` на
`approvalCapability.nativeRuntime`
- Перенесіть auth/delivery, специфічні для approval, із застарілої прив’язки `plugin.auth` /
- Перенесіть специфічні для схвалення auth/доставку зі застарілої прив’язки `plugin.auth` /
`plugin.approvals` на `approvalCapability`
- `ChannelPlugin.approvals` видалено з публічного контракту channel-plugin;
перенесіть поля delivery/native/render до `approvalCapability`
- `plugin.auth` залишається лише для потоків входу/виходу каналу; hook auth approval
там більше не читаються ядром
- Реєструйте об’єкти runtime, що належать каналу, такі як clients, tokens або Bolt
- `ChannelPlugin.approvals` вилучено з публічного контракту Plugin каналу;
перенесіть поля delivery/native/render у `approvalCapability`
- `plugin.auth` залишається лише для потоків login/logout каналу; auth-хуки схвалення
там більше не зчитуються ядром
- Реєструйте об’єкти середовища виконання, що належать каналу, такі як clients, tokens або Bolt
apps, через `openclaw/plugin-sdk/channel-runtime-context`
- Не надсилайте повідомлення reroute, що належать Plugin, із нативних обробників approval;
ядро тепер відповідає за повідомлення routed-elsewhere на основі фактичних результатів delivery
- Не надсилайте повідомлення про перенаправлення, що належать Plugin, із рідних обробників схвалення;
ядро тепер саме володіє повідомленнями «перенаправлено в інше місце» на основі фактичних результатів доставки
- Під час передавання `channelRuntime` у `createChannelManager(...)` надавайте
реальну поверхню `createPluginRuntime().channel`. Часткові stubs відхиляються.
справжню поверхню `createPluginRuntime().channel`. Часткові заглушки відхиляються.
Див. `/plugins/sdk-channel-plugins` для актуальної структури можливостей approval.
Актуальну структуру можливостей схвалення див. у `/plugins/sdk-channel-plugins`.
</Step>
<Step title="Перевірте резервну поведінку wrapper у Windows">
Якщо ваш Plugin використовує `openclaw/plugin-sdk/windows-spawn`, нерозв’язані wrapper `.cmd`/`.bat` у Windows тепер завершуються в закритому режимі, якщо ви явно не передасте `allowShellFallback: true`.
<Step title="Перевірте резервну поведінку обгортки Windows">
Якщо ваш Plugin використовує `openclaw/plugin-sdk/windows-spawn`, невизначені обгортки Windows
`.cmd`/`.bat` тепер завершуються із закритою відмовою, якщо ви явно не передасте `allowShellFallback: true`.
```typescript
// Before
@ -139,13 +150,13 @@ OpenClaw не видаляє і не переосмислює задокумен
});
```
Якщо ваш caller не покладається навмисно на shell fallback, не встановлюйте
`allowShellFallback` і натомість обробляйте викинуту помилку.
Якщо ваш викликаючий код не покладається навмисно на резервний shell-виклик, не встановлюйте
`allowShellFallback`, а натомість обробляйте викинуту помилку.
</Step>
<Step title="Знайдіть застарілі імпорти">
Пошукайте у своєму Plugin імпорти з будь-якої із застарілих поверхонь:
Знайдіть у своєму Plugin імпорти з будь-якої із застарілих поверхонь:
```bash
grep -r "plugin-sdk/compat" my-plugin/
@ -154,7 +165,7 @@ OpenClaw не видаляє і не переосмислює задокумен
</Step>
<Step title="Замініть на сфокусовані імпорти">
<Step title="Замініть цільовими імпортами">
Кожен експорт зі старої поверхні відповідає певному сучасному шляху імпорту:
```typescript
@ -171,7 +182,8 @@ OpenClaw не видаляє і не переосмислює задокумен
import { resolveControlCommandGate } from "openclaw/plugin-sdk/command-auth";
```
Для helper на боці хоста використовуйте інжектований runtime Plugin замість прямого імпорту:
Для допоміжних засобів на боці хоста використовуйте впроваджене середовище виконання Plugin замість
прямого імпорту:
```typescript
// Before (deprecated extension-api bridge)
@ -182,7 +194,7 @@ OpenClaw не видаляє і не переосмислює задокумен
const result = await api.runtime.agent.runEmbeddedPiAgent({ sessionId, prompt });
```
Той самий шаблон застосовується й до інших helper застарілого bridge:
Такий самий шаблон застосовується до інших допоміжних засобів застарілого мосту:
| Старий імпорт | Сучасний еквівалент |
| --- | --- |
@ -192,7 +204,7 @@ OpenClaw не видаляє і не переосмислює задокумен
| `resolveThinkingDefault` | `api.runtime.agent.resolveThinkingDefault` |
| `resolveAgentTimeoutMs` | `api.runtime.agent.resolveAgentTimeoutMs` |
| `ensureAgentWorkspace` | `api.runtime.agent.ensureAgentWorkspace` |
| helper сховища сеансів | `api.runtime.agent.session.*` |
| session store helpers | `api.runtime.agent.session.*` |
</Step>
@ -207,184 +219,185 @@ OpenClaw не видаляє і не переосмислює задокумен
## Довідник шляхів імпорту
<Accordion title="Таблиця поширених шляхів імпорту">
| Шлях імпорту | Призначення | Ключові експорти |
| Import path | Призначення | Ключові експорти |
| --- | --- | --- |
| `plugin-sdk/plugin-entry` | Канонічний helper точки входу Plugin | `definePluginEntry` |
| `plugin-sdk/core` | Застарілий umbrella-повторний експорт для визначень/builder точок входу каналів | `defineChannelPluginEntry`, `createChatChannelPlugin` |
| `plugin-sdk/plugin-entry` | Канонічний допоміжний засіб точки входу Plugin | `definePluginEntry` |
| `plugin-sdk/core` | Застарілий парасольковий повторний експорт для визначень/конструкторів точок входу каналів | `defineChannelPluginEntry`, `createChatChannelPlugin` |
| `plugin-sdk/config-schema` | Експорт кореневої схеми конфігурації | `OpenClawSchema` |
| `plugin-sdk/provider-entry` | Helper точки входу для одного провайдера | `defineSingleProviderPluginEntry` |
| `plugin-sdk/channel-core` | Сфокусовані визначення і builder точок входу каналів | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase` |
| `plugin-sdk/setup` | Спільні helper майстра setup | Prompt allowlist, builder статусу setup |
| `plugin-sdk/setup-runtime` | Helper runtime під час setup | Безпечні для імпорту адаптери patch setup, helper приміток пошуку, `promptResolvedAllowFrom`, `splitSetupEntries`, делеговані проксі setup |
| `plugin-sdk/setup-adapter-runtime` | Helper адаптера setup | `createEnvPatchedAccountSetupAdapter` |
| `plugin-sdk/setup-tools` | Helper інструментів setup | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` |
| `plugin-sdk/account-core` | Helper для кількох облікових записів | Helper списку облікових записів/конфігурації/шлюзу дій |
| `plugin-sdk/account-id` | Helper id облікового запису | `DEFAULT_ACCOUNT_ID`, нормалізація id облікового запису |
| `plugin-sdk/account-resolution` | Helper пошуку облікового запису | Helper пошуку облікового запису + резервного вибору за замовчуванням |
| `plugin-sdk/account-helpers` | Вузькі helper облікового запису | Helper списку облікових записів/дій облікового запису |
| `plugin-sdk/channel-setup` | Адаптери майстра setup | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`, а також `DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` |
| `plugin-sdk/provider-entry` | Допоміжний засіб точки входу для одного провайдера | `defineSingleProviderPluginEntry` |
| `plugin-sdk/channel-core` | Цільові визначення та конструктори точок входу каналів | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase` |
| `plugin-sdk/setup` | Спільні допоміжні засоби майстра налаштування | Підказки allowlist, конструктори статусу налаштування |
| `plugin-sdk/setup-runtime` | Допоміжні засоби середовища виконання для етапу налаштування | Безпечні для імпорту адаптери патчів налаштування, допоміжні засоби приміток пошуку, `promptResolvedAllowFrom`, `splitSetupEntries`, делеговані проксі налаштування |
| `plugin-sdk/setup-adapter-runtime` | Допоміжні засоби адаптера налаштування | `createEnvPatchedAccountSetupAdapter` |
| `plugin-sdk/setup-tools` | Допоміжні засоби інструментів налаштування | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` |
| `plugin-sdk/account-core` | Допоміжні засоби для кількох облікових записів | Допоміжні засоби списку/конфігурації/обмеження дій облікових записів |
| `plugin-sdk/account-id` | Допоміжні засоби account-id | `DEFAULT_ACCOUNT_ID`, нормалізація account-id |
| `plugin-sdk/account-resolution` | Допоміжні засоби пошуку облікових записів | Допоміжні засоби пошуку облікових записів + резервного вибору за замовчуванням |
| `plugin-sdk/account-helpers` | Вузькі допоміжні засоби для облікових записів | Допоміжні засоби списку облікових записів/дій облікового запису |
| `plugin-sdk/channel-setup` | Адаптери майстра налаштування | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`, а також `DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` |
| `plugin-sdk/channel-pairing` | Примітиви pairing для DM | `createChannelPairingController` |
| `plugin-sdk/channel-reply-pipeline` | Префікс reply + прив’язка typing | `createChannelReplyPipeline` |
| `plugin-sdk/channel-config-helpers` | Factory адаптера конфігурації | `createHybridChannelConfigAdapter` |
| `plugin-sdk/channel-config-schema` | Builder схеми конфігурації | Спільні примітиви схеми конфігурації каналу; іменовані експорти схем вбудованих каналів — лише застаріла сумісність |
| `plugin-sdk/telegram-command-config` | Helper конфігурації команд Telegram | Нормалізація назв команд, обрізання описів, валідація дублікатів/конфліктів |
| `plugin-sdk/channel-policy` | Розв’язання політик груп/DM | `resolveChannelGroupRequireMention` |
| `plugin-sdk/channel-lifecycle` | Helper стану облікового запису і життєвого циклу потоку draft | `createAccountStatusSink`, helper фіналізації попереднього перегляду draft |
| `plugin-sdk/inbound-envelope` | Helper вхідного envelope | Спільні helper route + builder envelope |
| `plugin-sdk/inbound-reply-dispatch` | Helper вхідного reply | Спільні helper запису та dispatch |
| `plugin-sdk/messaging-targets` | Парсинг цілей повідомлень | Helper парсингу/зіставлення цілей |
| `plugin-sdk/outbound-media` | Helper вихідного media | Спільне завантаження вихідного media |
| `plugin-sdk/outbound-runtime` | Helper вихідного runtime | Helper делегата outbound-ідентичності/надсилання і планування payload |
| `plugin-sdk/thread-bindings-runtime` | Helper прив’язки потоків | Helper життєвого циклу прив’язки потоків та адаптера |
| `plugin-sdk/agent-media-payload` | Застарілі helper media payload | Builder media payload агента для застарілих макетів полів |
| `plugin-sdk/channel-runtime` | Застарілий shim сумісності | Лише застарілі утиліти runtime каналу |
| `plugin-sdk/channel-send-result` | Типи результатів надсилання | Типи результатів reply |
| `plugin-sdk/channel-reply-pipeline` | Підключення префікса відповіді + введення тексту | `createChannelReplyPipeline` |
| `plugin-sdk/channel-config-helpers` | Фабрики адаптерів конфігурації | `createHybridChannelConfigAdapter` |
| `plugin-sdk/channel-config-schema` | Конструктори схем конфігурації | Спільні примітиви схем конфігурації каналів; експортовані схеми з іменами вбудованих каналів є лише застарілою сумісністю |
| `plugin-sdk/telegram-command-config` | Допоміжні засоби конфігурації команд Telegram | Нормалізація назв команд, обрізання опису, перевірка дублікатів/конфліктів |
| `plugin-sdk/channel-policy` | Визначення політики груп/DM | `resolveChannelGroupRequireMention` |
| `plugin-sdk/channel-lifecycle` | Допоміжні засоби статусу облікових записів і життєвого циклу потоків чернеток | `createAccountStatusSink`, допоміжні засоби фіналізації попереднього перегляду чернетки |
| `plugin-sdk/inbound-envelope` | Допоміжні засоби вхідних envelope | Спільні допоміжні засоби маршрутизації + побудови envelope |
| `plugin-sdk/inbound-reply-dispatch` | Допоміжні засоби вхідних відповідей | Спільні допоміжні засоби запису та диспетчеризації |
| `plugin-sdk/messaging-targets` | Розбір цілей повідомлень | Допоміжні засоби розбору/зіставлення цілей |
| `plugin-sdk/outbound-media` | Допоміжні засоби вихідних медіа | Спільне завантаження вихідних медіа |
| `plugin-sdk/outbound-runtime` | Допоміжні засоби вихідного середовища виконання | Допоміжні засоби вихідної доставки, delegate ідентичності/надсилання, сесії, форматування та планування payload |
| `plugin-sdk/thread-bindings-runtime` | Допоміжні засоби thread-binding | Допоміжні засоби життєвого циклу та адаптера thread-binding |
| `plugin-sdk/agent-media-payload` | Застарілі допоміжні засоби payload медіа агента | Конструктор payload медіа агента для застарілих макетів полів |
| `plugin-sdk/channel-runtime` | Застарілий shim сумісності | Лише застарілі утиліти середовища виконання каналу |
| `plugin-sdk/channel-send-result` | Типи результатів надсилання | Типи результатів відповіді |
| `plugin-sdk/runtime-store` | Постійне сховище Plugin | `createPluginRuntimeStore` |
| `plugin-sdk/runtime` | Широкі helper runtime | Helper runtime/logging/backup/встановлення plugin |
| `plugin-sdk/runtime-env` | Вузькі helper середовища runtime | Helper logger/середовища runtime, timeout, retry і backoff |
| `plugin-sdk/plugin-runtime` | Спільні helper runtime Plugin | Helper команд/hook/http/interactive Plugin |
| `plugin-sdk/hook-runtime` | Helper pipeline hook | Спільні helper pipeline Webhook/внутрішніх hook |
| `plugin-sdk/lazy-runtime` | Helper lazy runtime | `createLazyRuntimeModule`, `createLazyRuntimeMethod`, `createLazyRuntimeMethodBinder`, `createLazyRuntimeNamedExport`, `createLazyRuntimeSurface` |
| `plugin-sdk/process-runtime` | Helper process | Спільні helper exec |
| `plugin-sdk/cli-runtime` | Helper runtime CLI | Форматування команд, очікування, helper версій |
| `plugin-sdk/gateway-runtime` | Helper Gateway | Клієнт Gateway і helper patch стану каналу |
| `plugin-sdk/config-runtime` | Helper конфігурації | Helper завантаження/запису конфігурації |
| `plugin-sdk/telegram-command-config` | Helper команд Telegram | Helper валідації команд Telegram зі стабільним fallback, коли поверхня контракту вбудованого Telegram недоступна |
| `plugin-sdk/approval-runtime` | Helper prompt approval | Payload exec/plugin approval, helper capability/profile approval, helper нативної маршрутизації/runtime approval і форматування шляху структурованого відображення approval |
| `plugin-sdk/approval-auth-runtime` | Helper auth approval | Розв’язання approver, auth дій у тому самому чаті |
| `plugin-sdk/approval-client-runtime` | Helper клієнта approval | Helper профілю/фільтра нативного approval exec |
| `plugin-sdk/approval-delivery-runtime` | Helper delivery approval | Адаптери capability/delivery нативного approval |
| `plugin-sdk/approval-gateway-runtime` | Helper Gateway approval | Спільний helper розв’язання Gateway approval |
| `plugin-sdk/approval-handler-adapter-runtime` | Helper адаптера approval | Полегшені helper завантаження адаптера нативного approval для гарячих точок входу каналу |
| `plugin-sdk/approval-handler-runtime` | Helper обробника approval | Ширші helper runtime обробника approval; надавайте перевагу вужчим seams adapter/gateway, коли їх достатньо |
| `plugin-sdk/approval-native-runtime` | Helper цілі approval | Helper нативної прив’язки цілі/облікового запису approval |
| `plugin-sdk/approval-reply-runtime` | Helper reply approval | Helper payload reply exec/plugin approval |
| `plugin-sdk/channel-runtime-context` | Helper runtime-context каналу | Загальні helper register/get/watch runtime-context каналу |
| `plugin-sdk/security-runtime` | Helper безпеки | Спільні helper trust, DM gating, external-content і збирання секретів |
| `plugin-sdk/ssrf-policy` | Helper політики SSRF | Helper allowlist хостів і політики приватної мережі |
| `plugin-sdk/ssrf-runtime` | Helper runtime SSRF | Pinned-dispatcher, guarded fetch, helper політики SSRF |
| `plugin-sdk/collection-runtime` | Helper обмеженого кешу | `pruneMapToMaxSize` |
| `plugin-sdk/diagnostic-runtime` | Helper шлюзу діагностики | `isDiagnosticFlagEnabled`, `isDiagnosticsEnabled` |
| `plugin-sdk/error-runtime` | Helper форматування помилок | `formatUncaughtError`, `isApprovalNotFoundError`, helper графа помилок |
| `plugin-sdk/fetch-runtime` | Helper обгорнутого fetch/proxy | `resolveFetch`, helper proxy |
| `plugin-sdk/host-runtime` | Helper нормалізації хоста | `normalizeHostname`, `normalizeScpRemoteHost` |
| `plugin-sdk/retry-runtime` | Helper retry | `RetryConfig`, `retryAsync`, виконувачі політик |
| `plugin-sdk/runtime` | Широкі допоміжні засоби середовища виконання | Допоміжні засоби середовища виконання/логування/резервного копіювання/встановлення Plugin |
| `plugin-sdk/runtime-env` | Вузькі допоміжні засоби env середовища виконання | Logger/env середовища виконання, допоміжні засоби timeout, retry і backoff |
| `plugin-sdk/plugin-runtime` | Спільні допоміжні засоби середовища виконання Plugin | Допоміжні засоби команд/хуків/http/інтерактивної взаємодії Plugin |
| `plugin-sdk/hook-runtime` | Допоміжні засоби конвеєра хуків | Спільні допоміжні засоби конвеєра Webhook/внутрішніх хуків |
| `plugin-sdk/lazy-runtime` | Допоміжні засоби lazy runtime | `createLazyRuntimeModule`, `createLazyRuntimeMethod`, `createLazyRuntimeMethodBinder`, `createLazyRuntimeNamedExport`, `createLazyRuntimeSurface` |
| `plugin-sdk/process-runtime` | Допоміжні засоби процесів | Спільні допоміжні засоби exec |
| `plugin-sdk/cli-runtime` | Допоміжні засоби середовища виконання CLI | Форматування команд, очікування, допоміжні засоби версій |
| `plugin-sdk/gateway-runtime` | Допоміжні засоби Gateway | Клієнт Gateway і допоміжні засоби патчів статусу каналу |
| `plugin-sdk/config-runtime` | Допоміжні засоби конфігурації | Допоміжні засоби завантаження/запису конфігурації |
| `plugin-sdk/telegram-command-config` | Допоміжні засоби команд Telegram | Стабільні резервні допоміжні засоби перевірки команд Telegram, коли поверхня контракту вбудованого Telegram недоступна |
| `plugin-sdk/approval-runtime` | Допоміжні засоби запитів на схвалення | Допоміжні засоби payload схвалення exec/Plugin, допоміжні засоби capability/profile схвалення, допоміжні засоби маршрутизації/середовища виконання рідного схвалення та форматування структурованого шляху відображення схвалення |
| `plugin-sdk/approval-auth-runtime` | Допоміжні засоби auth схвалення | Визначення approver, auth дій у тому самому чаті |
| `plugin-sdk/approval-client-runtime` | Допоміжні засоби клієнта схвалення | Допоміжні засоби профілю/фільтра рідного схвалення exec |
| `plugin-sdk/approval-delivery-runtime` | Допоміжні засоби доставки схвалення | Адаптери capability/доставки рідного схвалення |
| `plugin-sdk/approval-gateway-runtime` | Допоміжні засоби Gateway схвалення | Спільний допоміжний засіб визначення Gateway схвалення |
| `plugin-sdk/approval-handler-adapter-runtime` | Допоміжні засоби адаптера схвалення | Легковагові допоміжні засоби завантаження адаптера рідного схвалення для гарячих точок входу каналу |
| `plugin-sdk/approval-handler-runtime` | Допоміжні засоби обробника схвалення | Ширші допоміжні засоби середовища виконання обробника схвалення; надавайте перевагу вужчим швам adapter/gateway, коли їх достатньо |
| `plugin-sdk/approval-native-runtime` | Допоміжні засоби цілей схвалення | Допоміжні засоби прив’язки цілей/облікових записів рідного схвалення |
| `plugin-sdk/approval-reply-runtime` | Допоміжні засоби відповідей на схвалення | Допоміжні засоби payload відповіді на схвалення exec/Plugin |
| `plugin-sdk/channel-runtime-context` | Допоміжні засоби runtime-context каналу | Загальні допоміжні засоби register/get/watch для runtime-context каналу |
| `plugin-sdk/security-runtime` | Допоміжні засоби безпеки | Спільні допоміжні засоби trust, DM gating, external-content і збору секретів |
| `plugin-sdk/ssrf-policy` | Допоміжні засоби політики SSRF | Допоміжні засоби allowlist хостів і політики приватної мережі |
| `plugin-sdk/ssrf-runtime` | Допоміжні засоби середовища виконання SSRF | Допоміжні засоби pinned-dispatcher, guarded fetch, політики SSRF |
| `plugin-sdk/collection-runtime` | Допоміжні засоби обмеженого кешу | `pruneMapToMaxSize` |
| `plugin-sdk/diagnostic-runtime` | Допоміжні засоби керування діагностикою | `isDiagnosticFlagEnabled`, `isDiagnosticsEnabled` |
| `plugin-sdk/error-runtime` | Допоміжні засоби форматування помилок | `formatUncaughtError`, `isApprovalNotFoundError`, допоміжні засоби графа помилок |
| `plugin-sdk/fetch-runtime` | Обгорнуті допоміжні засоби fetch/proxy | `resolveFetch`, допоміжні засоби proxy |
| `plugin-sdk/host-runtime` | Допоміжні засоби нормалізації хоста | `normalizeHostname`, `normalizeScpRemoteHost` |
| `plugin-sdk/retry-runtime` | Допоміжні засоби retry | `RetryConfig`, `retryAsync`, виконавці політик |
| `plugin-sdk/allow-from` | Форматування allowlist | `formatAllowFromLowercase` |
| `plugin-sdk/allowlist-resolution` | Мапінг введення allowlist | `mapAllowlistResolutionInputs` |
| `plugin-sdk/command-auth` | Шлюз команд і helper поверхні команд | `resolveControlCommandGate`, helper авторизації відправника, helper реєстру команд |
| `plugin-sdk/command-status` | Рендерери стану/довідки команд | `buildCommandsMessage`, `buildCommandsMessagePaginated`, `buildHelpMessage` |
| `plugin-sdk/secret-input` | Парсинг введення секретів | Helper введення секретів |
| `plugin-sdk/webhook-ingress` | Helper запитів Webhook | Утиліти цілі Webhook |
| `plugin-sdk/webhook-request-guards` | Helper guard тіла запиту Webhook | Helper читання/обмеження тіла запиту |
| `plugin-sdk/reply-runtime` | Спільний runtime reply | Вхідний dispatch, Heartbeat, planner reply, chunking |
| `plugin-sdk/reply-dispatch-runtime` | Вузькі helper dispatch reply | Фіналізація, dispatch провайдера і helper міток розмов |
| `plugin-sdk/reply-history` | Helper історії reply | `buildHistoryContext`, `buildPendingHistoryContextFromMap`, `recordPendingHistoryEntry`, `clearHistoryEntriesIfEnabled` |
| `plugin-sdk/reply-reference` | Планування посилання reply | `createReplyReferencePlanner` |
| `plugin-sdk/reply-chunking` | Helper chunk reply | Helper chunking тексту/markdown |
| `plugin-sdk/session-store-runtime` | Helper сховища сеансів | Шлях сховища + helper `updated-at` |
| `plugin-sdk/state-paths` | Helper шляхів стану | Helper каталогів стану й OAuth |
| `plugin-sdk/routing` | Helper маршрутизації/ключа сеансу | `resolveAgentRoute`, `buildAgentSessionKey`, `resolveDefaultAgentBoundAccountId`, helper нормалізації ключа сеансу |
| `plugin-sdk/status-helpers` | Helper стану каналу | Builder підсумків стану каналу/облікового запису, значення runtime-state за замовчуванням, helper метаданих issue |
| `plugin-sdk/target-resolver-runtime` | Helper розв’язання цілей | Спільні helper розв’язання цілей |
| `plugin-sdk/string-normalization-runtime` | Helper нормалізації рядків | Helper нормалізації slug/рядків |
| `plugin-sdk/request-url` | Helper URL запиту | Витягування рядкових URL із request-подібних входів |
| `plugin-sdk/run-command` | Helper команд із таймингом | Виконувач команд із таймингом і нормалізованими stdout/stderr |
| `plugin-sdk/param-readers` | Зчитувачі параметрів | Загальні зчитувачі параметрів інструментів/CLI |
| `plugin-sdk/tool-payload` | Витягування payload інструмента | Витягування нормалізованих payload з об’єктів результатів інструментів |
| `plugin-sdk/tool-send` | Витягування надсилання інструмента | Витягування канонічних полів цілі надсилання з аргументів інструмента |
| `plugin-sdk/temp-path` | Helper тимчасових шляхів | Спільні helper шляхів тимчасового завантаження |
| `plugin-sdk/logging-core` | Helper logging | Logger підсистеми і helper редагування |
| `plugin-sdk/markdown-table-runtime` | Helper markdown-table | Helper режиму таблиць Markdown |
| `plugin-sdk/reply-payload` | Типи reply повідомлень | Типи payload reply |
| `plugin-sdk/provider-setup` | Кураторські helper setup локального/self-hosted провайдера | Helper виявлення/конфігурації self-hosted провайдера |
| `plugin-sdk/self-hosted-provider-setup` | Сфокусовані helper setup self-hosted провайдера, сумісного з OpenAI | Ті самі helper виявлення/конфігурації self-hosted провайдера |
| `plugin-sdk/provider-auth-runtime` | Helper auth runtime провайдера | Helper розв’язання API-ключа runtime |
| `plugin-sdk/provider-auth-api-key` | Helper setup API-ключа провайдера | Helper onboarding/запису профілю API-ключа |
| `plugin-sdk/provider-auth-result` | Helper результату auth провайдера | Стандартний builder результату auth OAuth |
| `plugin-sdk/provider-auth-login` | Helper інтерактивного входу провайдера | Спільні helper інтерактивного входу |
| `plugin-sdk/provider-selection-runtime` | Helper вибору провайдера | Вибір налаштованого або автоматичного провайдера та злиття сирої конфігурації провайдера |
| `plugin-sdk/provider-env-vars` | Helper env vars провайдера | Helper пошуку env vars auth провайдера |
| `plugin-sdk/provider-model-shared` | Спільні helper моделі/replay провайдера | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, спільні builder політики replay, helper endpoint провайдера та helper нормалізації id моделі |
| `plugin-sdk/provider-catalog-shared` | Спільні helper каталогу провайдера | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` |
| `plugin-sdk/provider-onboard` | Patch onboarding провайдера | Helper конфігурації onboarding |
| `plugin-sdk/provider-http` | Helper HTTP провайдера | Загальні helper HTTP/можливостей endpoint провайдера, зокрема helper multipart form для транскрипції аудіо |
| `plugin-sdk/provider-web-fetch` | Helper web-fetch провайдера | Helper реєстрації/кешу провайдера web-fetch |
| `plugin-sdk/provider-web-search-config-contract` | Helper конфігурації web-search провайдера | Вузькі helper конфігурації/облікових даних web-search для провайдерів, яким не потрібна прив’язка enable Plugin |
| `plugin-sdk/provider-web-search-contract` | Helper контракту web-search провайдера | Вузькі helper контракту конфігурації/облікових даних web-search, такі як `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig` і scoped setter/getter облікових даних |
| `plugin-sdk/provider-web-search` | Helper web-search провайдера | Helper реєстрації/кешу/runtime провайдера web-search |
| `plugin-sdk/provider-tools` | Helper сумісності інструментів/схем провайдера | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, очищення схеми Gemini + діагностика та helper сумісності xAI, такі як `resolveXaiModelCompatPatch` / `applyXaiModelCompat` |
| `plugin-sdk/provider-usage` | Helper використання провайдера | `fetchClaudeUsage`, `fetchGeminiUsage`, `fetchGithubCopilotUsage` та інші helper використання провайдера |
| `plugin-sdk/provider-stream` | Helper обгортки потоку провайдера | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, типи обгорток потоків і спільні helper обгорток Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot |
| `plugin-sdk/provider-transport-runtime` | Helper транспорту провайдера | Нативні helper транспорту провайдера, такі як guarded fetch, перетворення транспортних повідомлень і writable потоки транспортних подій |
| `plugin-sdk/keyed-async-queue` | Впорядкована асинхронна черга | `KeyedAsyncQueue` |
| `plugin-sdk/media-runtime` | Спільні helper media | Helper fetch/transform/store media плюс builder media payload |
| `plugin-sdk/media-generation-runtime` | Спільні helper генерації media | Спільні helper failover, вибір кандидатів і повідомлення про відсутню модель для генерації зображень/відео/музики |
| `plugin-sdk/media-understanding` | Helper розуміння media | Типи провайдера розуміння media плюс експорти helper зображення/аудіо для провайдера |
| `plugin-sdk/text-runtime` | Спільні helper тексту | Видалення видимого для помічника тексту, helper render/chunking/table для markdown, helper редагування, helper тегів директив, утиліти безпечного тексту та пов’язані helper тексту/logging |
| `plugin-sdk/text-chunking` | Helper chunking тексту | Helper chunking вихідного тексту |
| `plugin-sdk/speech` | Helper мовлення | Типи провайдера мовлення плюс helper директив, реєстру та валідації для провайдера |
| `plugin-sdk/speech-core` | Спільне ядро мовлення | Типи провайдера мовлення, реєстр, директиви, нормалізація |
| `plugin-sdk/realtime-transcription` | Helper транскрипції в реальному часі | Типи провайдера, helper реєстру та спільний helper сеансу WebSocket |
| `plugin-sdk/realtime-voice` | Helper голосу в реальному часі | Типи провайдера, helper реєстру/розв’язання та helper bridge-сеансу |
| `plugin-sdk/image-generation-core` | Спільне ядро генерації зображень | Типи генерації зображень, helper failover, auth і реєстру |
| `plugin-sdk/music-generation` | Helper генерації музики | Типи провайдера/запиту/результату генерації музики |
| `plugin-sdk/music-generation-core` | Спільне ядро генерації музики | Типи генерації музики, helper failover, пошук провайдера та парсинг model-ref |
| `plugin-sdk/video-generation` | Helper генерації відео | Типи провайдера/запиту/результату генерації відео |
| `plugin-sdk/video-generation-core` | Спільне ядро генерації відео | Типи генерації відео, helper failover, пошук провайдера та парсинг model-ref |
| `plugin-sdk/interactive-runtime` | Helper інтерактивного reply | Нормалізація/зменшення payload інтерактивного reply |
| `plugin-sdk/channel-config-primitives` | Примітиви конфігурації каналу | Вузькі примітиви config-schema каналу |
| `plugin-sdk/channel-config-writes` | Helper запису конфігурації каналу | Helper авторизації запису конфігурації каналу |
| `plugin-sdk/channel-plugin-common` | Спільний prelude каналу | Спільні експорти prelude Plugin каналу |
| `plugin-sdk/channel-status` | Helper стану каналу | Спільні helper snapshot/summary стану каналу |
| `plugin-sdk/allowlist-config-edit` | Helper конфігурації allowlist | Helper редагування/читання конфігурації allowlist |
| `plugin-sdk/group-access` | Helper доступу до групи | Спільні helper рішень щодо доступу до групи |
| `plugin-sdk/direct-dm` | Helper Direct-DM | Спільні helper auth/guard для Direct-DM |
| `plugin-sdk/extension-shared` | Спільні helper розширень | Примітиви helper passive-channel/status та ambient proxy |
| `plugin-sdk/webhook-targets` | Helper цілей Webhook | Helper реєстру цілей Webhook та встановлення route |
| `plugin-sdk/webhook-path` | Helper шляху Webhook | Helper нормалізації шляху Webhook |
| `plugin-sdk/web-media` | Спільні helper web media | Helper завантаження віддалених/локальних media |
| `plugin-sdk/allowlist-resolution` | Відображення вхідних даних allowlist | `mapAllowlistResolutionInputs` |
| `plugin-sdk/command-auth` | Керування командами та допоміжні засоби поверхні команд | `resolveControlCommandGate`, допоміжні засоби авторизації відправника, допоміжні засоби реєстру команд |
| `plugin-sdk/command-status` | Засоби відображення статусу/довідки команд | `buildCommandsMessage`, `buildCommandsMessagePaginated`, `buildHelpMessage` |
| `plugin-sdk/secret-input` | Розбір секретного вводу | Допоміжні засоби секретного вводу |
| `plugin-sdk/webhook-ingress` | Допоміжні засоби запитів Webhook | Утиліти цілей Webhook |
| `plugin-sdk/webhook-request-guards` | Допоміжні засоби guard для тіла запиту Webhook | Допоміжні засоби читання/обмеження тіла запиту |
| `plugin-sdk/reply-runtime` | Спільне середовище виконання відповідей | Вхідна диспетчеризація, Heartbeat, planner відповідей, chunking |
| `plugin-sdk/reply-dispatch-runtime` | Вузькі допоміжні засоби диспетчеризації відповідей | Допоміжні засоби finalize, dispatch провайдера та міток розмов |
| `plugin-sdk/reply-history` | Допоміжні засоби історії відповідей | `buildHistoryContext`, `buildPendingHistoryContextFromMap`, `recordPendingHistoryEntry`, `clearHistoryEntriesIfEnabled` |
| `plugin-sdk/reply-reference` | Планування посилань відповіді | `createReplyReferencePlanner` |
| `plugin-sdk/reply-chunking` | Допоміжні засоби фрагментації відповідей | Допоміжні засоби chunking тексту/markdown |
| `plugin-sdk/session-store-runtime` | Допоміжні засоби сховища сесій | Допоміжні засоби шляху сховища + updated-at |
| `plugin-sdk/state-paths` | Допоміжні засоби шляхів стану | Допоміжні засоби каталогів state і OAuth |
| `plugin-sdk/routing` | Допоміжні засоби маршрутизації/session-key | `resolveAgentRoute`, `buildAgentSessionKey`, `resolveDefaultAgentBoundAccountId`, допоміжні засоби нормалізації session-key |
| `plugin-sdk/status-helpers` | Допоміжні засоби статусу каналу | Конструктори підсумків статусу каналу/облікового запису, значення runtime-state за замовчуванням, допоміжні засоби метаданих проблем |
| `plugin-sdk/target-resolver-runtime` | Допоміжні засоби визначення цілі | Спільні допоміжні засоби визначення цілі |
| `plugin-sdk/string-normalization-runtime` | Допоміжні засоби нормалізації рядків | Допоміжні засоби нормалізації slug/рядків |
| `plugin-sdk/request-url` | Допоміжні засоби URL запитів | Витягування рядкових URL з об’єктів, подібних до запитів |
| `plugin-sdk/run-command` | Допоміжні засоби команд із таймерами | Виконавець команд із таймером і нормалізованими stdout/stderr |
| `plugin-sdk/param-readers` | Зчитувачі параметрів | Поширені зчитувачі параметрів tool/CLI |
| `plugin-sdk/tool-payload` | Витягування payload tool | Витягування нормалізованих payload з об’єктів результатів інструментів |
| `plugin-sdk/tool-send` | Витягування надсилання tool | Витягування канонічних полів цілі надсилання з аргументів tool |
| `plugin-sdk/temp-path` | Допоміжні засоби тимчасових шляхів | Спільні допоміжні засоби тимчасових шляхів завантаження |
| `plugin-sdk/logging-core` | Допоміжні засоби логування | Допоміжні засоби logger підсистем і редагування |
| `plugin-sdk/markdown-table-runtime` | Допоміжні засоби markdown-таблиць | Допоміжні засоби режимів markdown-таблиць |
| `plugin-sdk/reply-payload` | Типи відповідей повідомлень | Типи payload відповідей |
| `plugin-sdk/provider-setup` | Кураторські допоміжні засоби налаштування локального/self-hosted провайдера | Допоміжні засоби виявлення/конфігурації self-hosted провайдерів |
| `plugin-sdk/self-hosted-provider-setup` | Цільові допоміжні засоби налаштування self-hosted провайдера, сумісного з OpenAI | Ті самі допоміжні засоби виявлення/конфігурації self-hosted провайдерів |
| `plugin-sdk/provider-auth-runtime` | Допоміжні засоби auth середовища виконання провайдера | Допоміжні засоби визначення API-ключів під час виконання |
| `plugin-sdk/provider-auth-api-key` | Допоміжні засоби налаштування API-ключа провайдера | Допоміжні засоби онбордингу/запису профілю API-ключа |
| `plugin-sdk/provider-auth-result` | Допоміжні засоби результатів auth провайдера | Стандартний конструктор auth-result OAuth |
| `plugin-sdk/provider-auth-login` | Допоміжні засоби інтерактивного login провайдера | Спільні допоміжні засоби інтерактивного login |
| `plugin-sdk/provider-selection-runtime` | Допоміжні засоби вибору провайдера | Допоміжні засоби вибору налаштованого або автоматичного провайдера та злиття сирої конфігурації провайдера |
| `plugin-sdk/provider-env-vars` | Допоміжні засоби env-var провайдера | Допоміжні засоби пошуку env-var auth провайдера |
| `plugin-sdk/provider-model-shared` | Спільні допоміжні засоби моделей/replay провайдерів | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, спільні конструктори replay-policy, допоміжні засоби endpoint провайдерів і допоміжні засоби нормалізації model-id |
| `plugin-sdk/provider-catalog-shared` | Спільні допоміжні засоби каталогу провайдерів | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` |
| `plugin-sdk/provider-onboard` | Патчі онбордингу провайдера | Допоміжні засоби конфігурації онбордингу |
| `plugin-sdk/provider-http` | Допоміжні засоби HTTP провайдера | Загальні допоміжні засоби HTTP/endpoint capability провайдера, зокрема допоміжні засоби multipart form для транскрибування аудіо |
| `plugin-sdk/provider-web-fetch` | Допоміжні засоби web-fetch провайдера | Допоміжні засоби реєстрації/кешу провайдера web-fetch |
| `plugin-sdk/provider-web-search-config-contract` | Допоміжні засоби конфігурації web-search провайдера | Вузькі допоміжні засоби конфігурації/облікових даних web-search для провайдерів, яким не потрібне підключення enable Plugin |
| `plugin-sdk/provider-web-search-contract` | Допоміжні засоби контракту web-search провайдера | Вузькі допоміжні засоби контракту конфігурації/облікових даних web-search, такі як `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig` і scoped setters/getters облікових даних |
| `plugin-sdk/provider-web-search` | Допоміжні засоби web-search провайдера | Допоміжні засоби реєстрації/кешу/середовища виконання провайдера web-search |
| `plugin-sdk/provider-tools` | Допоміжні засоби compat tool/schema провайдера | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, cleanup + diagnostics схеми Gemini і допоміжні засоби compat xAI, такі як `resolveXaiModelCompatPatch` / `applyXaiModelCompat` |
| `plugin-sdk/provider-usage` | Допоміжні засоби usage провайдера | `fetchClaudeUsage`, `fetchGeminiUsage`, `fetchGithubCopilotUsage` та інші допоміжні засоби usage провайдера |
| `plugin-sdk/provider-stream` | Допоміжні засоби обгортки stream провайдера | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, типи обгорток stream і спільні допоміжні засоби обгорток Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot |
| `plugin-sdk/provider-transport-runtime` | Допоміжні засоби транспорту провайдера | Рідні допоміжні засоби транспорту провайдера, такі як guarded fetch, transforms повідомлень транспорту та writable event streams транспорту |
| `plugin-sdk/keyed-async-queue` | Упорядкована async-черга | `KeyedAsyncQueue` |
| `plugin-sdk/media-runtime` | Спільні допоміжні засоби медіа | Допоміжні засоби fetch/transform/store для медіа, а також конструктори media payload |
| `plugin-sdk/media-generation-runtime` | Спільні допоміжні засоби генерації медіа | Спільні допоміжні засоби failover, вибору candidate та повідомлень про відсутню модель для генерації зображень/відео/музики |
| `plugin-sdk/media-understanding` | Допоміжні засоби media-understanding | Типи провайдерів media understanding, а також експортовані допоміжні засоби зображень/аудіо для провайдерів |
| `plugin-sdk/text-runtime` | Спільні допоміжні засоби тексту | Видалення видимого для асистента тексту, допоміжні засоби render/chunking/table для markdown, допоміжні засоби редагування, допоміжні засоби directive-tag, safe-text utilities і пов’язані допоміжні засоби тексту/логування |
| `plugin-sdk/text-chunking` | Допоміжні засоби фрагментації тексту | Допоміжний засіб chunking вихідного тексту |
| `plugin-sdk/speech` | Допоміжні засоби мовлення | Типи провайдерів мовлення, а також допоміжні засоби directive, registry і validation для провайдерів |
| `plugin-sdk/speech-core` | Спільне ядро мовлення | Типи провайдерів мовлення, registry, directives, normalізація |
| `plugin-sdk/realtime-transcription` | Допоміжні засоби транскрибування в realtime | Типи провайдерів, допоміжні засоби registry і спільний допоміжний засіб сесії WebSocket |
| `plugin-sdk/realtime-voice` | Допоміжні засоби голосу в realtime | Типи провайдерів, допоміжні засоби registry/resolution і допоміжні засоби bridge session |
| `plugin-sdk/image-generation-core` | Спільне ядро генерації зображень | Типи генерації зображень, допоміжні засоби failover, auth і registry |
| `plugin-sdk/music-generation` | Допоміжні засоби генерації музики | Типи провайдерів/запитів/результатів генерації музики |
| `plugin-sdk/music-generation-core` | Спільне ядро генерації музики | Типи генерації музики, допоміжні засоби failover, пошук провайдера та парсинг model-ref |
| `plugin-sdk/video-generation` | Допоміжні засоби генерації відео | Типи провайдерів/запитів/результатів генерації відео |
| `plugin-sdk/video-generation-core` | Спільне ядро генерації відео | Типи генерації відео, допоміжні засоби failover, пошук провайдера та парсинг model-ref |
| `plugin-sdk/interactive-runtime` | Допоміжні засоби інтерактивних відповідей | Нормалізація/редукція payload інтерактивних відповідей |
| `plugin-sdk/channel-config-primitives` | Примітиви конфігурації каналу | Вузькі примітиви channel config-schema |
| `plugin-sdk/channel-config-writes` | Допоміжні засоби запису конфігурації каналу | Допоміжні засоби авторизації запису конфігурації каналу |
| `plugin-sdk/channel-plugin-common` | Спільний прелюд каналу | Експорти спільного прелюду Plugin каналу |
| `plugin-sdk/channel-status` | Допоміжні засоби статусу каналу | Спільні допоміжні засоби snapshot/summary статусу каналу |
| `plugin-sdk/allowlist-config-edit` | Допоміжні засоби конфігурації allowlist | Допоміжні засоби редагування/читання конфігурації allowlist |
| `plugin-sdk/group-access` | Допоміжні засоби доступу до груп | Спільні допоміжні засоби рішень щодо group-access |
| `plugin-sdk/direct-dm` | Допоміжні засоби direct-DM | Спільні допоміжні засоби auth/guard для direct-DM |
| `plugin-sdk/extension-shared` | Спільні допоміжні засоби розширень | Примітиви допоміжних засобів passive-channel/status і ambient proxy |
| `plugin-sdk/webhook-targets` | Допоміжні засоби цілей Webhook | Реєстр цілей Webhook і допоміжні засоби встановлення маршрутів |
| `plugin-sdk/webhook-path` | Допоміжні засоби шляхів Webhook | Допоміжні засоби нормалізації шляхів Webhook |
| `plugin-sdk/web-media` | Спільні допоміжні засоби вебмедіа | Допоміжні засоби завантаження віддалених/локальних медіа |
| `plugin-sdk/zod` | Повторний експорт Zod | Повторно експортований `zod` для споживачів Plugin SDK |
| `plugin-sdk/memory-core` | Вбудовані helper memory-core | Поверхня helper менеджера/config/файлів/CLI memory |
| `plugin-sdk/memory-core-engine-runtime` | Фасад runtime рушія memory | Фасад runtime індексу/пошуку memory |
| `plugin-sdk/memory-core-host-engine-foundation` | Рушій foundation хоста memory | Експорти рушія foundation хоста memory |
| `plugin-sdk/memory-core-host-engine-embeddings` | Рушій embedding хоста memory | Контракти embedding memory, доступ до реєстру, локальний провайдер і загальні helper пакетної/віддаленої обробки; конкретні віддалені провайдери розміщуються у Plugins-власниках |
| `plugin-sdk/memory-core-host-engine-qmd` | Рушій QMD хоста memory | Експорти рушія QMD хоста memory |
| `plugin-sdk/memory-core-host-engine-storage` | Рушій сховища хоста memory | Експорти рушія сховища хоста memory |
| `plugin-sdk/memory-core-host-multimodal` | Мультимодальні helper хоста memory | Мультимодальні helper хоста memory |
| `plugin-sdk/memory-core-host-query` | Helper запитів хоста memory | Helper запитів хоста memory |
| `plugin-sdk/memory-core-host-secret` | Helper секретів хоста memory | Helper секретів хоста memory |
| `plugin-sdk/memory-core-host-events` | Helper журналу подій хоста memory | Helper журналу подій хоста memory |
| `plugin-sdk/memory-core-host-status` | Helper стану хоста memory | Helper стану хоста memory |
| `plugin-sdk/memory-core-host-runtime-cli` | Runtime CLI хоста memory | Helper runtime CLI хоста memory |
| `plugin-sdk/memory-core-host-runtime-core` | Основний runtime хоста memory | Основні helper runtime хоста memory |
| `plugin-sdk/memory-core-host-runtime-files` | Helper файлів/runtime хоста memory | Helper файлів/runtime хоста memory |
| `plugin-sdk/memory-host-core` | Псевдонім основного runtime хоста memory | Vendor-neutral псевдонім для основних helper runtime хоста memory |
| `plugin-sdk/memory-host-events` | Псевдонім журналу подій хоста memory | Vendor-neutral псевдонім для helper журналу подій хоста memory |
| `plugin-sdk/memory-host-files` | Псевдонім файлів/runtime хоста memory | Vendor-neutral псевдонім для helper файлів/runtime хоста memory |
| `plugin-sdk/memory-host-markdown` | Helper керованого markdown | Спільні helper керованого markdown для прилеглих до memory плагінів |
| `plugin-sdk/memory-host-search` | Фасад пошуку Active Memory | Lazy фасад runtime менеджера пошуку active-memory |
| `plugin-sdk/memory-host-status` | Псевдонім стану хоста memory | Vendor-neutral псевдонім для helper стану хоста memory |
| `plugin-sdk/memory-lancedb` | Вбудовані helper memory-lancedb | Поверхня helper memory-lancedb |
| `plugin-sdk/testing` | Утиліти тестування | Helper тестування та mock-об’єкти |
| `plugin-sdk/memory-core` | Допоміжні засоби вбудованого memory-core | Поверхня допоміжних засобів менеджера/config/file/CLI пам’яті |
| `plugin-sdk/memory-core-engine-runtime` | Фасад середовища виконання рушія пам’яті | Фасад середовища виконання індексу/пошуку пам’яті |
| `plugin-sdk/memory-core-host-engine-foundation` | Базовий рушій хоста пам’яті | Експорти базового рушія хоста пам’яті |
| `plugin-sdk/memory-core-host-engine-embeddings` | Рушій embedding хоста пам’яті | Контракти embedding пам’яті, доступ до registry, локальний провайдер і загальні допоміжні засоби batch/remote; конкретні remote-провайдери живуть у Plugins, яким вони належать |
| `plugin-sdk/memory-core-host-engine-qmd` | Рушій QMD хоста пам’яті | Експорти рушія QMD хоста пам’яті |
| `plugin-sdk/memory-core-host-engine-storage` | Рушій сховища хоста пам’яті | Експорти рушія сховища хоста пам’яті |
| `plugin-sdk/memory-core-host-multimodal` | Допоміжні засоби multimodal хоста пам’яті | Допоміжні засоби multimodal хоста пам’яті |
| `plugin-sdk/memory-core-host-query` | Допоміжні засоби запитів хоста пам’яті | Допоміжні засоби запитів хоста пам’яті |
| `plugin-sdk/memory-core-host-secret` | Допоміжні засоби секретів хоста пам’яті | Допоміжні засоби секретів хоста пам’яті |
| `plugin-sdk/memory-core-host-events` | Допоміжні засоби журналу подій хоста пам’яті | Допоміжні засоби журналу подій хоста пам’яті |
| `plugin-sdk/memory-core-host-status` | Допоміжні засоби статусу хоста пам’яті | Допоміжні засоби статусу хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-cli` | CLI середовища виконання хоста пам’яті | Допоміжні засоби CLI середовища виконання хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-core` | Основне середовище виконання хоста пам’яті | Допоміжні засоби основного середовища виконання хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-files` | Допоміжні засоби файлів/середовища виконання хоста пам’яті | Допоміжні засоби файлів/середовища виконання хоста пам’яті |
| `plugin-sdk/memory-host-core` | Псевдонім основного середовища виконання хоста пам’яті | Нейтральний до постачальника псевдонім для допоміжних засобів основного середовища виконання хоста пам’яті |
| `plugin-sdk/memory-host-events` | Псевдонім журналу подій хоста пам’яті | Нейтральний до постачальника псевдонім для допоміжних засобів журналу подій хоста пам’яті |
| `plugin-sdk/memory-host-files` | Псевдонім файлів/середовища виконання хоста пам’яті | Нейтральний до постачальника псевдонім для допоміжних засобів файлів/середовища виконання хоста пам’яті |
| `plugin-sdk/memory-host-markdown` | Допоміжні засоби керованого markdown | Спільні допоміжні засоби керованого markdown для Plugins, суміжних із пам’яттю |
| `plugin-sdk/memory-host-search` | Фасад пошуку Active Memory | Lazy фасад середовища виконання search-manager для active-memory |
| `plugin-sdk/memory-host-status` | Псевдонім статусу хоста пам’яті | Нейтральний до постачальника псевдонім для допоміжних засобів статусу хоста пам’яті |
| `plugin-sdk/memory-lancedb` | Допоміжні засоби вбудованого memory-lancedb | Поверхня допоміжних засобів memory-lancedb |
| `plugin-sdk/testing` | Утиліти тестування | Допоміжні засоби тестування та mock-об’єкти |
</Accordion>
Ця таблиця навмисно є поширеною підмножиною для міграції, а не повною
поверхнею SDK. Повний список із понад 200 точок входу міститься у
Ця таблиця навмисно містить поширену підмножину для міграції, а не всю
поверхню SDK. Повний список із понад 200 точок входу міститься у
`scripts/lib/plugin-sdk-entrypoints.json`.
Цей список усе ще містить деякі helper seams вбудованих Plugins, такі як
Цей список усе ще містить деякі шви допоміжних засобів вбудованих Plugins, як-от
`plugin-sdk/feishu`, `plugin-sdk/feishu-setup`, `plugin-sdk/zalo`,
`plugin-sdk/zalo-setup` і `plugin-sdk/matrix*`. Вони й надалі експортуються для
підтримки та сумісності вбудованих Plugins, але навмисно не включені до
таблиці поширеної міграції і не є рекомендованою ціллю для нового коду Plugin.
поширеної таблиці міграції та не є рекомендованою ціллю для
нового коду Plugin.
Те саме правило застосовується до інших сімейств вбудованих helper, таких як:
Те саме правило застосовується до інших сімейств вбудованих допоміжних засобів, таких як:
- helper підтримки браузера: `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support`
- допоміжні засоби підтримки браузера: `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support`
- Matrix: `plugin-sdk/matrix*`
- LINE: `plugin-sdk/line*`
- IRC: `plugin-sdk/irc*`
- поверхні вбудованих helper/Plugins, такі як `plugin-sdk/googlechat`,
- поверхні вбудованих допоміжних засобів/Plugins, як-от `plugin-sdk/googlechat`,
`plugin-sdk/zalouser`, `plugin-sdk/bluebubbles*`,
`plugin-sdk/mattermost*`, `plugin-sdk/msteams`,
`plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`,
@ -393,28 +406,28 @@ OpenClaw не видаляє і не переосмислює задокумен
`plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`,
`plugin-sdk/thread-ownership` і `plugin-sdk/voice-call`
`plugin-sdk/github-copilot-token` наразі надає вузьку поверхню token-helper:
`DEFAULT_COPILOT_API_BASE_URL`,
`plugin-sdk/github-copilot-token` зараз надає вузьку
поверхню допоміжних засобів токенів `DEFAULT_COPILOT_API_BASE_URL`,
`deriveCopilotApiBaseUrlFromToken` і `resolveCopilotApiToken`.
Використовуйте найвужчий імпорт, який відповідає завданню. Якщо ви не можете знайти експорт,
перевірте джерело в `src/plugin-sdk/` або запитайте в Discord.
перевірте вихідний код у `src/plugin-sdk/` або запитайте в Discord.
## Активні застарівання
Вужчі застарівання, які застосовуються в усьому Plugin SDK, контракті провайдера,
поверхні runtime і маніфесті. Кожне з них усе ще працює сьогодні, але буде видалене
в одному з майбутніх мажорних випусків. Запис під кожним елементом зіставляє старий API
з його канонічною заміною.
поверхні середовища виконання та маніфесті. Кожен із них і далі працює сьогодні, але буде
вилучений у майбутньому мажорному релізі. Запис під кожним елементом зіставляє старий API
із його канонічною заміною.
<AccordionGroup>
<Accordion title="builder довідки command-auth → command-status">
<Accordion title="Засоби побудови довідки command-auth → command-status">
**Старе (`openclaw/plugin-sdk/command-auth`)**: `buildCommandsMessage`,
`buildCommandsMessagePaginated`, `buildHelpMessage`.
**Нове (`openclaw/plugin-sdk/command-status`)**: ті самі сигнатури, ті самі
експорти — лише імпортовані з вужчого subpath. `command-auth`
повторно експортує їх як compat stubs.
експорти — лише імпортовані з вужчого підшляху. `command-auth`
повторно експортує їх як compat-заглушки.
```typescript
// Before
@ -426,7 +439,7 @@ OpenClaw не видаляє і не переосмислює задокумен
</Accordion>
<Accordion title="helper gating згадок → resolveInboundMentionDecision">
<Accordion title="Допоміжні засоби gating згадок → resolveInboundMentionDecision">
**Старе**: `resolveInboundMentionRequirement({ facts, policy })` і
`shouldDropInboundForMention(...)` з
`openclaw/plugin-sdk/channel-inbound` або
@ -440,83 +453,84 @@ OpenClaw не видаляє і не переосмислює задокумен
</Accordion>
<Accordion title="shim runtime каналу і helper дій каналу">
`openclaw/plugin-sdk/channel-runtime` — це shim сумісності для старіших
<Accordion title="Shim середовища виконання каналу та допоміжні засоби дій каналу">
`openclaw/plugin-sdk/channel-runtime` — це compat-shim для старіших
Plugins каналів. Не імпортуйте його в новому коді; використовуйте
`openclaw/plugin-sdk/channel-runtime-context` для реєстрації об’єктів
runtime.
середовища виконання.
Helper `channelActions*` у `openclaw/plugin-sdk/channel-actions` є
Допоміжні засоби `channelActions*` у `openclaw/plugin-sdk/channel-actions` є
застарілими разом із сирими експортами каналу "actions". Натомість
надавайте можливості через семантичну поверхню `presentation` — Plugins каналів
оголошують, що саме вони рендерять (cards, buttons, selects), а не які сирі
назви дій вони приймають.
оголошують, що саме вони відображають (cards, buttons, selects), а не які сирі
назви actions вони приймають.
</Accordion>
<Accordion title="helper tool() провайдера web search → createTool() у Plugin">
**Старе**: factory `tool()` з `openclaw/plugin-sdk/provider-web-search`.
<Accordion title="Допоміжний засіб tool() провайдера web search → createTool() у Plugin">
**Старе**: фабрика `tool()` з `openclaw/plugin-sdk/provider-web-search`.
**Нове**: реалізуйте `createTool(...)` безпосередньо у Plugin провайдера.
OpenClaw більше не потребує helper SDK для реєстрації обгортки tool.
**Нове**: реалізуйте `createTool(...)` безпосередньо в Plugin провайдера.
OpenClaw більше не потребує допоміжного засобу SDK для реєстрації обгортки tool.
</Accordion>
<Accordion title="Текстові plaintext envelope каналу → BodyForAgent">
<Accordion title="Текстові channel envelope у відкритому вигляді → BodyForAgent">
**Старе**: `formatInboundEnvelope(...)` (і
`ChannelMessageForAgent.channelEnvelope`) для створення плаского plaintext prompt
`ChannelMessageForAgent.channelEnvelope`) для побудови плоского текстового prompt
envelope із вхідних повідомлень каналу.
**Нове**: `BodyForAgent` плюс структуровані блоки контексту користувача. Plugins каналів
прикріплюють метадані маршрутизації (потік, тема, reply-to, реакції) як
типізовані поля замість конкатенації їх у рядок prompt. Helper
`formatAgentEnvelope(...)` усе ще підтримується для синтезованих envelope,
видимих помічнику, але вхідні plaintext envelope поступово виводяться з ужитку.
**Нове**: `BodyForAgent` плюс структуровані блоки контексту користувача. Plugins
каналів додають метадані маршрутизації (thread, topic, reply-to, reactions) як
типізовані поля замість конкатенації їх у рядок prompt. Допоміжний засіб
`formatAgentEnvelope(...)` і далі підтримується для синтезованих envelope,
видимих асистенту, але вхідні текстові envelope уже
поступово виводяться з ужитку.
Зачеплені області: `inbound_claim`, `message_received` і будь-який custom
Plugin каналу, який постобробляв текст `channelEnvelope`.
Зачеплені області: `inbound_claim`, `message_received` і будь-який користувацький
Plugin каналу, який виконував постобробку тексту `channelEnvelope`.
</Accordion>
<Accordion title="Типи виявлення провайдера → типи каталогу провайдера">
Чотири псевдоніми типів виявлення тепер є тонкими обгортками над типами
епохи каталогу:
<Accordion title="Типи виявлення провайдерів → типи каталогу провайдерів">
Чотири псевдоніми типів виявлення тепер є тонкими обгортками над
типами епохи каталогу:
| Старий псевдонім | Новий тип |
| ------------------------- | ------------------------ |
| `ProviderDiscoveryOrder` | `ProviderCatalogOrder` |
| `ProviderDiscoveryContext`| `ProviderCatalogContext` |
| `ProviderDiscoveryResult` | `ProviderCatalogResult` |
| `ProviderPluginDiscovery` | `ProviderPluginCatalog` |
| Старий псевдонім | Новий тип |
| ------------------------ | ------------------------ |
| `ProviderDiscoveryOrder` | `ProviderCatalogOrder` |
| `ProviderDiscoveryContext`| `ProviderCatalogContext` |
| `ProviderDiscoveryResult` | `ProviderCatalogResult` |
| `ProviderPluginDiscovery` | `ProviderPluginCatalog` |
Плюс застарілий статичний bag `ProviderCapabilities` — Plugins провайдерів
мають прикріплювати факти можливостей через контракт runtime провайдера,
А також застарілий статичний набір `ProviderCapabilities` — Plugins провайдерів
мають приєднувати факти можливостей через контракт середовища виконання провайдера,
а не через статичний об’єкт.
</Accordion>
<Accordion title="hook політики thinking → resolveThinkingProfile">
**Старе** (три окремі hook на `ProviderThinkingPolicy`):
<Accordion title="Хуки політики thinking → resolveThinkingProfile">
**Старе** (три окремі хуки в `ProviderThinkingPolicy`):
`isBinaryThinking(ctx)`, `supportsXHighThinking(ctx)` і
`resolveDefaultThinkingLevel(ctx)`.
**Нове**: єдиний `resolveThinkingProfile(ctx)`, який повертає
`ProviderThinkingProfile` із канонічним `id`, необов’язковим `label` і
ранжованим списком рівнів. OpenClaw автоматично знижує застарілі збережені значення
за рангом профілю.
ранжованим списком рівнів. OpenClaw автоматично знижує застарілі збережені
значення за рангом профілю.
Реалізуйте один hook замість трьох. Застарілі hook і далі працюють протягом
вікна застарівання, але не комбінуються з результатом профілю.
Реалізуйте один хук замість трьох. Застарілі хуки продовжують працювати протягом
вікна застарівання, але не поєднуються з результатом профілю.
</Accordion>
<Accordion title="Fallback зовнішнього OAuth провайдера → contracts.externalAuthProviders">
<Accordion title="Резервний шлях зовнішнього OAuth провайдера → contracts.externalAuthProviders">
**Старе**: реалізація `resolveExternalOAuthProfiles(...)` без
оголошення провайдера в маніфесті Plugin.
**Нове**: оголосіть `contracts.externalAuthProviders` у маніфесті Plugin
**і** реалізуйте `resolveExternalAuthProfiles(...)`. Старий шлях
"auth fallback" виводить попередження під час runtime і буде видалений.
**і** реалізуйте `resolveExternalAuthProfiles(...)`. Старий шлях "auth
fallback" виводить попередження під час виконання й буде вилучений.
```json
{
@ -528,53 +542,53 @@ OpenClaw не видаляє і не переосмислює задокумен
</Accordion>
<Accordion title="Пошук env vars провайдера → setup.providers[].envVars">
<Accordion title="Пошук env-var провайдера → setup.providers[].envVars">
**Старе** поле маніфесту: `providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }`.
**Нове**: віддзеркальте той самий пошук env vars у `setup.providers[].envVars`
у маніфесті. Це консолідує метадані env setup/status в одному
місці та дозволяє не запускати runtime Plugin лише для відповіді на
пошуки env vars.
**Нове**: віддзеркальте той самий пошук env-var у `setup.providers[].envVars`
маніфесту. Це об’єднує метадані env налаштування/статусу в одному
місці та дає змогу уникнути запуску середовища виконання Plugin лише для відповіді на
запити пошуку env-var.
`providerAuthEnvVars` лишається підтримуваним через адаптер сумісності
`providerAuthEnvVars` і далі підтримується через адаптер сумісності
до завершення вікна застарівання.
</Accordion>
<Accordion title="Реєстрація Plugin memory → registerMemoryCapability">
<Accordion title="Реєстрація Plugin пам’яті → registerMemoryCapability">
**Старе**: три окремі виклики —
`api.registerMemoryPromptSection(...)`,
`api.registerMemoryFlushPlan(...)`,
`api.registerMemoryRuntime(...)`.
**Нове**: один виклик на API memory-state —
**Нове**: один виклик у API memory-state —
`registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime })`.
Ті самі слоти, один виклик реєстрації. Адитивні helper memory
Ті самі слоти, один виклик реєстрації. Адитивні допоміжні засоби пам’яті
(`registerMemoryPromptSupplement`, `registerMemoryCorpusSupplement`,
`registerMemoryEmbeddingProvider`) не зачеплено.
`registerMemoryEmbeddingProvider`) це не зачіпає.
</Accordion>
<Accordion title="Типи повідомлень сеансу subagent перейменовано">
<Accordion title="Типи повідомлень сесії subagent перейменовано">
Два застарілі псевдоніми типів усе ще експортуються з `src/plugins/runtime/types.ts`:
| Старе | Нове |
| --------------------------- | ------------------------------- |
| `SubagentReadSessionParams` | `SubagentGetSessionMessagesParams` |
| `SubagentReadSessionResult` | `SubagentGetSessionMessagesResult` |
| `SubagentReadSessionParams` | `SubagentGetSessionMessagesParams` |
| `SubagentReadSessionResult` | `SubagentGetSessionMessagesResult` |
Метод runtime `readSession` є застарілим на користь
Метод середовища виконання `readSession` є застарілим на користь
`getSessionMessages`. Та сама сигнатура; старий метод викликає
новий.
</Accordion>
<Accordion title="runtime.tasks.flow → runtime.tasks.flows">
**Старе**: `runtime.tasks.flow` (однина) повертав live accessor TaskFlow.
**Старе**: `runtime.tasks.flow` (в однині) повертав живий accessor TaskFlow.
**Нове**: `runtime.tasks.flows` (множина) повертає доступ TaskFlow на основі DTO,
який є безпечним для імпорту й не потребує завантаження повного task runtime.
**Нове**: `runtime.tasks.flows` (у множині) повертає DTO-based доступ до TaskFlow,
який є безпечним для імпорту і не потребує завантаження повного середовища виконання задач.
```typescript
// Before
@ -585,17 +599,17 @@ OpenClaw не видаляє і не переосмислює задокумен
</Accordion>
<Accordion title="Factory вбудованих розширень → middleware результатів інструментів агента">
Розглянуто вище в розділі "Як виконати міграцію → Перенесіть розширення результатів інструментів Pi на
middleware". Тут наведено для повноти: видалений шлях Pi-only
<Accordion title="Фабрики вбудованих розширень → проміжне ПЗ результатів інструментів агента">
Це описано вище в розділі "Як виконати міграцію → Перенесіть розширення результатів інструментів Pi на
проміжне ПЗ". Для повноти тут також зазначено: вилучений шлях лише для Pi
`api.registerEmbeddedExtensionFactory(...)` замінено на
`api.registerAgentToolResultMiddleware(...)` з явним списком runtime
`api.registerAgentToolResultMiddleware(...)` з явним списком середовищ виконання
у `contracts.agentToolResultMiddleware`.
</Accordion>
<Accordion title="Псевдонім OpenClawSchemaType → OpenClawConfig">
`OpenClawSchemaType`, повторно експортований з `openclaw/plugin-sdk`, тепер є
однорядковим псевдонімом для `OpenClawConfig`. Віддавайте перевагу канонічній назві.
`OpenClawSchemaType`, який повторно експортується з `openclaw/plugin-sdk`, тепер є
однорядковим псевдонімом для `OpenClawConfig`. Надавайте перевагу канонічній назві.
```typescript
// Before
@ -608,39 +622,39 @@ OpenClaw не видаляє і не переосмислює задокумен
</AccordionGroup>
<Note>
Застарівання на рівні extension (усередині вбудованих Plugins каналів/провайдерів у
`extensions/`) відстежуються всередині їхніх власних barrel `api.ts` і `runtime-api.ts`.
Вони не впливають на контракти сторонніх Plugin і тут не перелічені.
Якщо ви напряму використовуєте локальний barrel вбудованого Plugin, перед оновленням
прочитайте коментарі про застарівання в цьому barrel.
Застарівання на рівні розширень (усередині вбудованих Plugins каналів/провайдерів у
`extensions/`) відстежуються у їхніх власних barrel-файлах `api.ts` і `runtime-api.ts`.
Вони не впливають на контракти сторонніх Plugins і тут не перелічені.
Якщо ви напряму споживаєте локальний barrel вбудованого Plugin, перед
оновленням прочитайте коментарі щодо застарівання в цьому barrel.
</Note>
## Часова шкала видалення
## Хронологія вилучення
| Коли | Що відбувається |
| ---------------------- | ------------------------------------------------------------------------ |
| **Зараз** | Застарілі поверхні виводять попередження під час runtime |
| **Наступний мажорний випуск** | Застарілі поверхні буде видалено; Plugins, які все ще їх використовують, перестануть працювати |
| **Зараз** | Застарілі поверхні виводять попередження під час виконання |
| **Наступний мажорний реліз** | Застарілі поверхні буде вилучено; Plugins, які все ще їх використовують, завершаться з помилкою |
Усі основні Plugins уже мігровано. Зовнішні Plugins мають виконати міграцію
до наступного мажорного випуску.
Усі core Plugins уже перенесено. Зовнішнім Plugins слід виконати міграцію
до наступного мажорного релізу.
## Тимчасове приглушення попереджень
Поки ви працюєте над міграцією, установіть ці змінні середовища:
Установіть ці змінні середовища, поки працюєте над міграцією:
```bash
OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway run
OPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway run
```
Це тимчасовий обхідний шлях, а не постійне рішення.
Це тимчасовий обхідний механізм, а не постійне рішення.
## Пов’язане
- [Початок роботи](/uk/plugins/building-plugins) — створіть свій перший Plugin
- [Огляд SDK](/uk/plugins/sdk-overview) — повний довідник імпортів subpath
- [Огляд SDK](/uk/plugins/sdk-overview) — повний довідник імпортів підшляхів
- [Plugins каналів](/uk/plugins/sdk-channel-plugins) — створення Plugins каналів
- [Plugins провайдерів](/uk/plugins/sdk-provider-plugins) — створення Plugins провайдерів
- [Внутрішня будова Plugin](/uk/plugins/architecture) — глибоке занурення в архітектуру
- [Маніфест Plugin](/uk/plugins/manifest) — довідник зі схеми маніфесту
- [Внутрішня будова Plugin](/uk/plugins/architecture) — глибокий огляд архітектури
- [Маніфест Plugin](/uk/plugins/manifest) — довідник схеми маніфесту

View File

@ -1,30 +1,30 @@
---
read_when:
- Вибір правильного підшляху plugin-sdk для імпорту плагіна
- Вибір правильного підшляху plugin-sdk для імпорту в plugin
- Аудит підшляхів bundled-plugin і допоміжних поверхонь
summary: 'Каталог підшляхів Plugin SDK: які імпорти де розміщені, згруповано за областями'
summary: 'Каталог підшляхів Plugin SDK: які імпорти де розташовані, згруповано за областями'
title: Підшляхи Plugin SDK
x-i18n:
generated_at: "2026-04-25T01:53:50Z"
generated_at: "2026-04-25T02:02:04Z"
model: gpt-5.4
provider: openai
source_hash: f24d5add576ec0985d8d4335fb244ffcc1b9fc4643b87f4d72d42ec44b138520
source_hash: 44b6d3603a94328d94981642f94e43913f6d5476b1f6a0970baf23bed7e11105
source_path: plugins/sdk-subpaths.md
workflow: 15
---
Plugin SDK доступний як набір вузьких підшляхів у `openclaw/plugin-sdk/`.
На цій сторінці наведено каталог часто використовуваних підшляхів, згрупованих за призначенням. Згенерований
повний список із понад 200 підшляхів розміщено в `scripts/lib/plugin-sdk-entrypoints.json`;
На цій сторінці наведено каталог поширених підшляхів, згрупованих за призначенням. Згенерований
повний список із понад 200 підшляхів міститься в `scripts/lib/plugin-sdk-entrypoints.json`;
зарезервовані допоміжні підшляхи bundled-plugin також там присутні, але є деталлю
реалізації, якщо лише якась сторінка документації явно не просуває їх.
реалізації, якщо лише сторінка документації явно не просуває їх.
Посібник з розробки плагінів дивіться в [Огляд Plugin SDK](/uk/plugins/sdk-overview).
Посібник з написання plugin див. у [Огляд Plugin SDK](/uk/plugins/sdk-overview).
## Вхід плагіна
## Вхід plugin
| Підшлях | Ключові експорти |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| Підшлях | Ключові експорти |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `plugin-sdk/plugin-entry` | `definePluginEntry` |
| `plugin-sdk/core` | `defineChannelPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase`, `defineSetupPluginEntry`, `buildChannelConfigSchema` |
| `plugin-sdk/config-schema` | `OpenClawSchema` |
@ -35,249 +35,249 @@ x-i18n:
| Підшлях | Ключові експорти |
| --- | --- |
| `plugin-sdk/channel-core` | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase` |
| `plugin-sdk/config-schema` | Кореневий експорт Zod-схеми `openclaw.json` (`OpenClawSchema`) |
| `plugin-sdk/config-schema` | Експорт кореневої Zod-схеми `openclaw.json` (`OpenClawSchema`) |
| `plugin-sdk/channel-setup` | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`, а також `DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` |
| `plugin-sdk/setup` | Спільні допоміжні функції майстра налаштування, allowlist-промпти, побудовники статусу налаштування |
| `plugin-sdk/setup` | Спільні допоміжні функції майстра налаштування, запити allowlist, побудова статусу налаштування |
| `plugin-sdk/setup-runtime` | `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` |
| `plugin-sdk/setup-adapter-runtime` | `createEnvPatchedAccountSetupAdapter` |
| `plugin-sdk/setup-tools` | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` |
| `plugin-sdk/account-core` | Допоміжні функції для мультиакаунтної конфігурації/action-gate, допоміжні функції резервного вибору акаунта за замовчуванням |
| `plugin-sdk/account-core` | Допоміжні функції багатоакаунтної конфігурації/обмеження дій і резервного переходу до акаунта за замовчуванням |
| `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`, допоміжні функції нормалізації account-id |
| `plugin-sdk/account-resolution` | Пошук акаунта + допоміжні функції резервного вибору за замовчуванням |
| `plugin-sdk/account-helpers` | Вузькі допоміжні функції для списку акаунтів/дій із акаунтами |
| `plugin-sdk/account-resolution` | Допоміжні функції пошуку акаунта + резервного переходу до акаунта за замовчуванням |
| `plugin-sdk/account-helpers` | Вузькі допоміжні функції для списків акаунтів/дій з акаунтами |
| `plugin-sdk/channel-pairing` | `createChannelPairingController` |
| `plugin-sdk/channel-reply-pipeline` | `createChannelReplyPipeline` |
| `plugin-sdk/channel-config-helpers` | `createHybridChannelConfigAdapter` |
| `plugin-sdk/channel-config-schema` | Типи схеми конфігурації каналу |
| `plugin-sdk/telegram-command-config` | Допоміжні функції нормалізації/валідації користувацьких команд Telegram із резервом bundled-contract |
| `plugin-sdk/command-gating` | Вузькі допоміжні функції шлюзування авторизації команд |
| `plugin-sdk/telegram-command-config` | Допоміжні функції нормалізації/валідації користувацьких команд Telegram з резервною підтримкою bundled-contract |
| `plugin-sdk/command-gating` | Вузькі допоміжні функції шлюзу авторизації команд |
| `plugin-sdk/channel-policy` | `resolveChannelGroupRequireMention` |
| `plugin-sdk/channel-lifecycle` | `createAccountStatusSink`, допоміжні функції життєвого циклу/фіналізації потоків чернеток |
| `plugin-sdk/inbound-envelope` | Спільні допоміжні функції маршрутизації вхідних повідомлень + побудови envelope |
| `plugin-sdk/inbound-reply-dispatch` | Спільні допоміжні функції запису та dispatch вхідних відповідей |
| `plugin-sdk/channel-lifecycle` | `createAccountStatusSink`, допоміжні функції життєвого циклу/фіналізації потоку чернеток |
| `plugin-sdk/inbound-envelope` | Спільні допоміжні функції маршрутизації вхідних повідомлень і побудови envelope |
| `plugin-sdk/inbound-reply-dispatch` | Спільні допоміжні функції запису й диспетчеризації вхідних відповідей |
| `plugin-sdk/messaging-targets` | Допоміжні функції розбору/зіставлення цілей |
| `plugin-sdk/outbound-media` | Спільні допоміжні функції завантаження вихідних медіа |
| `plugin-sdk/outbound-runtime` | Допоміжні функції вихідної ідентичності, send delegate і планування payload |
| `plugin-sdk/outbound-runtime` | Допоміжні функції вихідної доставки, ідентичності, делегата надсилання, сесій, форматування та планування payload |
| `plugin-sdk/poll-runtime` | Вузькі допоміжні функції нормалізації опитувань |
| `plugin-sdk/thread-bindings-runtime` | Допоміжні функції життєвого циклу та адаптерів прив’язок потоків |
| `plugin-sdk/agent-media-payload` | Застарілий побудовник media payload агента |
| `plugin-sdk/conversation-runtime` | Допоміжні функції прив’язки conversation/thread, pairing і configured-binding |
| `plugin-sdk/runtime-config-snapshot` | Допоміжна функція знімка конфігурації runtime |
| `plugin-sdk/runtime-group-policy` | Допоміжні функції визначення group-policy для runtime |
| `plugin-sdk/channel-status` | Спільні допоміжні функції snapshot/summary статусу каналу |
| `plugin-sdk/thread-bindings-runtime` | Допоміжні функції життєвого циклу прив’язок потоків і адаптерів |
| `plugin-sdk/agent-media-payload` | Застарілий конструктор payload медіа агента |
| `plugin-sdk/conversation-runtime` | Допоміжні функції прив’язки розмов/потоків, pairing і налаштованих прив’язок |
| `plugin-sdk/runtime-config-snapshot` | Допоміжна функція знімка конфігурації часу виконання |
| `plugin-sdk/runtime-group-policy` | Допоміжні функції визначення групової політики часу виконання |
| `plugin-sdk/channel-status` | Спільні допоміжні функції знімка/зведення статусу каналу |
| `plugin-sdk/channel-config-primitives` | Вузькі примітиви схеми конфігурації каналу |
| `plugin-sdk/channel-config-writes` | Допоміжні функції авторизації запису конфігурації каналу |
| `plugin-sdk/channel-plugin-common` | Спільні prelude-експорти плагіна каналу |
| `plugin-sdk/channel-plugin-common` | Спільні prelude-експорти plugin каналу |
| `plugin-sdk/allowlist-config-edit` | Допоміжні функції редагування/читання конфігурації allowlist |
| `plugin-sdk/group-access` | Спільні допоміжні функції рішень щодо group-access |
| `plugin-sdk/direct-dm` | Спільні допоміжні функції auth/guard для direct-DM |
| `plugin-sdk/interactive-runtime` | Семантичне подання повідомлень, доставка та застарілі допоміжні функції інтерактивних відповідей. Див. [Подання повідомлень](/uk/plugins/message-presentation) |
| `plugin-sdk/channel-inbound` | Сумісний barrel для debounce вхідних повідомлень, зіставлення згадок, допоміжних функцій mention-policy та helper-функцій envelope |
| `plugin-sdk/group-access` | Спільні допоміжні функції рішень щодо доступу до груп |
| `plugin-sdk/direct-dm` | Спільні допоміжні функції автентифікації/захисту прямих DM |
| `plugin-sdk/interactive-runtime` | Семантичне представлення повідомлень, доставка та застарілі допоміжні функції інтерактивних відповідей. Див. [Представлення повідомлень](/uk/plugins/message-presentation) |
| `plugin-sdk/channel-inbound` | Barrel сумісності для допоміжних функцій debounce вхідних повідомлень, зіставлення згадок, політики згадок і envelope |
| `plugin-sdk/channel-inbound-debounce` | Вузькі допоміжні функції debounce вхідних повідомлень |
| `plugin-sdk/channel-mention-gating` | Вузькі допоміжні функції mention-policy і тексту згадок без ширшої поверхні inbound runtime |
| `plugin-sdk/channel-envelope` | Вузькі допоміжні функції форматування вхідних envelope |
| `plugin-sdk/channel-location` | Допоміжні функції контексту та форматування розташування каналу |
| `plugin-sdk/channel-logging` | Допоміжні функції логування каналів для відкинутих вхідних повідомлень і збоїв typing/ack |
| `plugin-sdk/channel-mention-gating` | Вузькі допоміжні функції політики згадок і тексту згадок без ширшої поверхні inbound runtime |
| `plugin-sdk/channel-envelope` | Вузькі допоміжні функції форматування inbound envelope |
| `plugin-sdk/channel-location` | Допоміжні функції контексту й форматування розташування каналу |
| `plugin-sdk/channel-logging` | Допоміжні функції логування каналу для відкинутих вхідних повідомлень і помилок typing/ack |
| `plugin-sdk/channel-send-result` | Типи результатів відповіді |
| `plugin-sdk/channel-actions` | Допоміжні функції дій із повідомленнями каналу, а також застарілі допоміжні функції нативної схеми, збережені для сумісності плагінів |
| `plugin-sdk/channel-actions` | Допоміжні функції дій із повідомленнями каналу, а також застарілі нативні допоміжні функції схем, збережені для сумісності plugin |
| `plugin-sdk/channel-targets` | Допоміжні функції розбору/зіставлення цілей |
| `plugin-sdk/channel-contract` | Типи контракту каналу |
| `plugin-sdk/channel-feedback` | Підключення feedback/reaction |
| `plugin-sdk/channel-secret-runtime` | Вузькі допоміжні функції secret-contract, такі як `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`, а також типи secret target |
| `plugin-sdk/channel-feedback` | Прив’язка feedback/reaction |
| `plugin-sdk/channel-secret-runtime` | Вузькі допоміжні функції контракту секретів, такі як `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`, і типи цілей секретів |
</Accordion>
<Accordion title="Підшляхи постачальників">
<Accordion title="Підшляхи провайдерів">
| Підшлях | Ключові експорти |
| --- | --- |
| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` |
| `plugin-sdk/provider-setup` | Кураторські допоміжні функції налаштування локальних/self-hosted постачальників |
| `plugin-sdk/self-hosted-provider-setup` | Сфокусовані допоміжні функції налаштування self-hosted постачальників, сумісних з OpenAI |
| `plugin-sdk/cli-backend` | Значення за замовчуванням для CLI backend + константи watchdog |
| `plugin-sdk/provider-auth-runtime` | Допоміжні функції визначення API-ключів у runtime для плагінів постачальників |
| `plugin-sdk/provider-auth-api-key` | Допоміжні функції онбордингу/запису профілю API-ключа, такі як `upsertApiKeyProfile` |
| `plugin-sdk/provider-auth-result` | Стандартний побудовник результату OAuth auth |
| `plugin-sdk/provider-auth-login` | Спільні допоміжні функції інтерактивного входу для плагінів постачальників |
| `plugin-sdk/provider-env-vars` | Допоміжні функції пошуку auth env vars постачальника |
| `plugin-sdk/provider-setup` | Кураторські допоміжні функції налаштування локального/self-hosted провайдера |
| `plugin-sdk/self-hosted-provider-setup` | Сфокусовані допоміжні функції налаштування self-hosted провайдера, сумісного з OpenAI |
| `plugin-sdk/cli-backend` | Значення CLI backend за замовчуванням + константи watchdog |
| `plugin-sdk/provider-auth-runtime` | Допоміжні функції визначення API-ключа під час виконання для plugin провайдерів |
| `plugin-sdk/provider-auth-api-key` | Допоміжні функції онбордингу API-ключа/запису профілю, такі як `upsertApiKeyProfile` |
| `plugin-sdk/provider-auth-result` | Стандартний конструктор результату OAuth-автентифікації |
| `plugin-sdk/provider-auth-login` | Спільні допоміжні функції інтерактивного входу для plugin провайдерів |
| `plugin-sdk/provider-env-vars` | Допоміжні функції пошуку auth env var для провайдера |
| `plugin-sdk/provider-auth` | `createProviderApiKeyAuthMethod`, `ensureApiKeyFromOptionEnvOrPrompt`, `upsertAuthProfile`, `upsertApiKeyProfile`, `writeOAuthCredentials` |
| `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, спільні побудовники replay-policy, helper-функції endpoint постачальників і helper-функції нормалізації model-id, такі як `normalizeNativeXaiModelId` |
| `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, спільні конструктори replay-policy, допоміжні функції endpoint провайдера та функції нормалізації model-id, такі як `normalizeNativeXaiModelId` |
| `plugin-sdk/provider-catalog-shared` | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` |
| `plugin-sdk/provider-http` | Загальні допоміжні функції HTTP/можливостей endpoint постачальника, помилки HTTP постачальника та helper-функції multipart form для аудіотранскрипції |
| `plugin-sdk/provider-http` | Загальні допоміжні функції HTTP/можливостей endpoint провайдера, помилки provider HTTP і допоміжні функції multipart form для транскрибування аудіо |
| `plugin-sdk/provider-web-fetch-contract` | Вузькі допоміжні функції контракту конфігурації/вибору web-fetch, такі як `enablePluginInConfig` і `WebFetchProviderPlugin` |
| `plugin-sdk/provider-web-fetch` | Допоміжні функції реєстрації/кешування постачальника web-fetch |
| `plugin-sdk/provider-web-search-config-contract` | Вузькі допоміжні функції конфігурації/облікових даних web-search для постачальників, яким не потрібне підключення enable plugin |
| `plugin-sdk/provider-web-fetch` | Допоміжні функції реєстрації/кешування web-fetch провайдера |
| `plugin-sdk/provider-web-search-config-contract` | Вузькі допоміжні функції конфігурації/облікових даних web-search для провайдерів, яким не потрібна логіка ввімкнення plugin |
| `plugin-sdk/provider-web-search-contract` | Вузькі допоміжні функції контракту конфігурації/облікових даних web-search, такі як `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig` і scoped setter/getter для облікових даних |
| `plugin-sdk/provider-web-search` | Допоміжні функції реєстрації/кешування/runtime для постачальника web-search |
| `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, очищення схеми Gemini + діагностика, а також helper-функції сумісності xAI, такі як `resolveXaiModelCompatPatch` / `applyXaiModelCompat` |
| `plugin-sdk/provider-web-search` | Допоміжні функції реєстрації/кешування/runtime для web-search провайдера |
| `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, очищення схеми Gemini + діагностика, а також допоміжні функції сумісності xAI, такі як `resolveXaiModelCompatPatch` / `applyXaiModelCompat` |
| `plugin-sdk/provider-usage` | `fetchClaudeUsage` та подібні |
| `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, типи обгорток stream і спільні helper-функції обгорток Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot |
| `plugin-sdk/provider-transport-runtime` | Нативні helper-функції транспорту постачальника, такі як guarded fetch, перетворення транспортних повідомлень і придатні для запису потоки транспортних подій |
| `plugin-sdk/provider-onboard` | Допоміжні функції patch конфігурації онбордингу |
| `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, типи обгорток потоків і спільні допоміжні функції обгорток для Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot |
| `plugin-sdk/provider-transport-runtime` | Нативні допоміжні функції транспорту провайдера, такі як guarded fetch, перетворення transport message і потоки подій writable transport |
| `plugin-sdk/provider-onboard` | Допоміжні функції патчингу конфігурації онбордингу |
| `plugin-sdk/global-singleton` | Допоміжні функції process-local singleton/map/cache |
| `plugin-sdk/group-activation` | Вузькі допоміжні функції режиму активації груп і розбору команд |
</Accordion>
<Accordion title="Підшляхи auth і security">
<Accordion title="Підшляхи автентифікації та безпеки">
| Підшлях | Ключові експорти |
| --- | --- |
| `plugin-sdk/command-auth` | `resolveControlCommandGate`, helper-функції реєстру команд, helper-функції авторизації відправника |
| `plugin-sdk/command-status` | Побудовники повідомлень команд/довідки, такі як `buildCommandsMessagePaginated` і `buildHelpMessage` |
| `plugin-sdk/approval-auth-runtime` | Визначення затверджувача та helper-функції auth дій у межах того самого чату |
| `plugin-sdk/approval-client-runtime` | Helper-функції профілю/фільтра нативного exec approval |
| `plugin-sdk/approval-delivery-runtime` | Адаптери можливостей/доставки нативного approval |
| `plugin-sdk/approval-gateway-runtime` | Спільна helper-функція визначення gateway approval |
| `plugin-sdk/approval-handler-adapter-runtime` | Легкі helper-функції завантаження адаптера нативного approval для hot entrypoint каналів |
| `plugin-sdk/approval-handler-runtime` | Ширші helper-функції runtime обробника approval; віддавайте перевагу вужчим adapter/gateway seams, коли їх достатньо |
| `plugin-sdk/approval-native-runtime` | Нативний approval target + helper-функції прив’язки акаунта |
| `plugin-sdk/approval-reply-runtime` | Helper-функції payload відповіді exec/plugin approval |
| `plugin-sdk/approval-runtime` | Helper-функції payload exec/plugin approval, helper-функції маршрутизації/runtime нативного approval та helper-функції структурованого відображення approval, такі як `formatApprovalDisplayPath` |
| `plugin-sdk/reply-dedupe` | Вузькі helper-функції скидання дедуплікації вхідних відповідей |
| `plugin-sdk/channel-contract-testing` | Вузькі helper-функції тестування контракту каналу без широкого testing barrel |
| `plugin-sdk/command-auth-native` | Нативний command auth + helper-функції target нативної сесії |
| `plugin-sdk/command-detection` | Спільні helper-функції виявлення команд |
| `plugin-sdk/command-primitives-runtime` | Легкі предикати тексту команд для hot path каналів |
| `plugin-sdk/command-surface` | Нормалізація тіла команди та helper-функції command-surface |
| `plugin-sdk/command-auth` | `resolveControlCommandGate`, допоміжні функції реєстру команд, допоміжні функції авторизації відправника |
| `plugin-sdk/command-status` | Конструктори повідомлень команд/довідки, такі як `buildCommandsMessagePaginated` і `buildHelpMessage` |
| `plugin-sdk/approval-auth-runtime` | Допоміжні функції визначення затверджувача та автентифікації дій у тому самому чаті |
| `plugin-sdk/approval-client-runtime` | Допоміжні функції профілю/фільтра нативного затвердження exec |
| `plugin-sdk/approval-delivery-runtime` | Адаптери можливостей/доставки нативного затвердження |
| `plugin-sdk/approval-gateway-runtime` | Спільна допоміжна функція визначення Gateway для затвердження |
| `plugin-sdk/approval-handler-adapter-runtime` | Полегшені допоміжні функції завантаження адаптера нативного затвердження для гарячих точок входу каналів |
| `plugin-sdk/approval-handler-runtime` | Ширші допоміжні функції runtime для обробника затвердження; надавайте перевагу вужчим швам adapter/gateway, коли їх достатньо |
| `plugin-sdk/approval-native-runtime` | Допоміжні функції нативного затвердження цілі + прив’язки акаунта |
| `plugin-sdk/approval-reply-runtime` | Допоміжні функції payload відповіді на затвердження exec/plugin |
| `plugin-sdk/approval-runtime` | Допоміжні функції payload затвердження exec/plugin, допоміжні функції маршрутизації/runtime нативного затвердження та структуровані допоміжні функції відображення затвердження, такі як `formatApprovalDisplayPath` |
| `plugin-sdk/reply-dedupe` | Вузькі допоміжні функції скидання дедуплікації вхідних відповідей |
| `plugin-sdk/channel-contract-testing` | Вузькі допоміжні функції тестування контракту каналу без широкого testing barrel |
| `plugin-sdk/command-auth-native` | Нативна автентифікація команд + допоміжні функції цілі нативної сесії |
| `plugin-sdk/command-detection` | Спільні допоміжні функції виявлення команд |
| `plugin-sdk/command-primitives-runtime` | Полегшені предикати тексту команд для гарячих шляхів каналів |
| `plugin-sdk/command-surface` | Допоміжні функції нормалізації тіла команди та поверхні команд |
| `plugin-sdk/allow-from` | `formatAllowFromLowercase` |
| `plugin-sdk/channel-secret-runtime` | Вузькі helper-функції збирання secret-contract для поверхонь secrets каналу/плагіна |
| `plugin-sdk/secret-ref-runtime` | Вузькі helper-функції типізації `coerceSecretRef` і SecretRef для розбору secret-contract/config |
| `plugin-sdk/security-runtime` | Спільні helper-функції trust, DM gating, external-content і збирання secrets |
| `plugin-sdk/ssrf-policy` | Helper-функції policy SSRF для allowlist хостів і приватних мереж |
| `plugin-sdk/ssrf-dispatcher` | Вузькі helper-функції pinned-dispatcher без широкої поверхні infra runtime |
| `plugin-sdk/ssrf-runtime` | Helper-функції pinned-dispatcher, fetch із захистом SSRF і policy SSRF |
| `plugin-sdk/secret-input` | Helper-функції розбору secret input |
| `plugin-sdk/webhook-ingress` | Helper-функції запиту/target Webhook |
| `plugin-sdk/webhook-request-guards` | Helper-функції розміру тіла запиту/timeout |
| `plugin-sdk/channel-secret-runtime` | Вузькі допоміжні функції збирання secret-contract для поверхонь секретів каналу/plugin |
| `plugin-sdk/secret-ref-runtime` | Вузькі допоміжні функції `coerceSecretRef` і типізації SecretRef для парсингу secret-contract/config |
| `plugin-sdk/security-runtime` | Спільні допоміжні функції довіри, DM gating, зовнішнього вмісту та збирання секретів |
| `plugin-sdk/ssrf-policy` | Допоміжні функції політики SSRF для allowlist хостів і приватних мереж |
| `plugin-sdk/ssrf-dispatcher` | Вузькі допоміжні функції pinned dispatcher без широкої інфраструктурної runtime-поверхні |
| `plugin-sdk/ssrf-runtime` | Допоміжні функції pinned dispatcher, fetch із захистом SSRF і політики SSRF |
| `plugin-sdk/secret-input` | Допоміжні функції парсингу секретного введення |
| `plugin-sdk/webhook-ingress` | Допоміжні функції запиту/цілі Webhook |
| `plugin-sdk/webhook-request-guards` | Допоміжні функції обмеження розміру тіла запиту/тайм-ауту |
</Accordion>
<Accordion title="Підшляхи runtime і storage">
<Accordion title="Підшляхи runtime і сховища">
| Підшлях | Ключові експорти |
| --- | --- |
| `plugin-sdk/runtime` | Широкі helper-функції runtime/logging/backup/встановлення плагінів |
| `plugin-sdk/runtime-env` | Вузькі helper-функції env runtime, logger, timeout, retry і backoff |
| `plugin-sdk/channel-runtime-context` | Загальні helper-функції реєстрації та lookup runtime-context каналу |
| `plugin-sdk/runtime` | Широкі допоміжні функції runtime/логування/резервного копіювання/встановлення plugin |
| `plugin-sdk/runtime-env` | Вузькі допоміжні функції runtime env, logger, timeout, retry і backoff |
| `plugin-sdk/channel-runtime-context` | Загальні допоміжні функції реєстрації та пошуку runtime-контексту каналу |
| `plugin-sdk/runtime-store` | `createPluginRuntimeStore` |
| `plugin-sdk/plugin-runtime` | Спільні helper-функції command/hook/http/interactive для плагінів |
| `plugin-sdk/hook-runtime` | Спільні helper-функції pipeline Webhook/internal hook |
| `plugin-sdk/lazy-runtime` | Helper-функції lazy import/binding для runtime, такі як `createLazyRuntimeModule`, `createLazyRuntimeMethod` і `createLazyRuntimeSurface` |
| `plugin-sdk/process-runtime` | Helper-функції exec процесів |
| `plugin-sdk/cli-runtime` | Helper-функції форматування CLI, wait і version |
| `plugin-sdk/gateway-runtime` | Helper-функції клієнта Gateway і patch статусу каналу |
| `plugin-sdk/config-runtime` | Helper-функції завантаження/запису config і lookup конфігурації плагіна |
| `plugin-sdk/telegram-command-config` | Нормалізація імен/описів команд Telegram та перевірки дублікатів/конфліктів, навіть коли поверхня контракту bundled Telegram недоступна |
| `plugin-sdk/text-autolink-runtime` | Виявлення autolink посилань на файли без широкого barrel `text-runtime` |
| `plugin-sdk/approval-runtime` | Helper-функції approval exec/plugin, побудовники approval-capability, helper-функції auth/profile, helper-функції нативної маршрутизації/runtime та форматування шляху структурованого відображення approval |
| `plugin-sdk/reply-runtime` | Спільні helper-функції runtime вхідних повідомлень/відповідей, chunking, dispatch, Heartbeat, planner відповідей |
| `plugin-sdk/reply-dispatch-runtime` | Вузькі helper-функції dispatch/finalize відповідей і міток conversation |
| `plugin-sdk/reply-history` | Спільні helper-функції short-window history відповідей, такі як `buildHistoryContext`, `recordPendingHistoryEntry` і `clearHistoryEntriesIfEnabled` |
| `plugin-sdk/plugin-runtime` | Спільні допоміжні функції команд/хуків/http/interactive для plugin |
| `plugin-sdk/hook-runtime` | Спільні допоміжні функції pipeline для webhook/внутрішніх hook |
| `plugin-sdk/lazy-runtime` | Допоміжні функції lazy import/прив’язки runtime, такі як `createLazyRuntimeModule`, `createLazyRuntimeMethod` і `createLazyRuntimeSurface` |
| `plugin-sdk/process-runtime` | Допоміжні функції виконання процесів |
| `plugin-sdk/cli-runtime` | Допоміжні функції форматування CLI, очікування та версій |
| `plugin-sdk/gateway-runtime` | Допоміжні функції клієнта Gateway і патчингу статусу каналу |
| `plugin-sdk/config-runtime` | Допоміжні функції завантаження/запису конфігурації та пошуку конфігурації plugin |
| `plugin-sdk/telegram-command-config` | Допоміжні функції нормалізації назв/описів команд Telegram і перевірки дублікатів/конфліктів, навіть коли поверхня bundled Telegram contract недоступна |
| `plugin-sdk/text-autolink-runtime` | Виявлення autolink для посилань на файли без широкого text-runtime barrel |
| `plugin-sdk/approval-runtime` | Допоміжні функції затвердження exec/plugin, конструктори approval-capability, допоміжні функції auth/profile, допоміжні функції native routing/runtime і форматування структурованого шляху відображення затвердження |
| `plugin-sdk/reply-runtime` | Спільні допоміжні функції inbound/reply runtime, chunking, dispatch, Heartbeat, planner відповідей |
| `plugin-sdk/reply-dispatch-runtime` | Вузькі допоміжні функції dispatch/finalize відповідей і міток розмов |
| `plugin-sdk/reply-history` | Спільні допоміжні функції коротковіконної історії відповідей, такі як `buildHistoryContext`, `recordPendingHistoryEntry` і `clearHistoryEntriesIfEnabled` |
| `plugin-sdk/reply-reference` | `createReplyReferencePlanner` |
| `plugin-sdk/reply-chunking` | Вузькі helper-функції chunking тексту/markdown |
| `plugin-sdk/session-store-runtime` | Helper-функції шляху сховища сесій + updated-at |
| `plugin-sdk/state-paths` | Helper-функції шляхів каталогів state/OAuth |
| `plugin-sdk/routing` | Helper-функції route/session-key/account binding, такі як `resolveAgentRoute`, `buildAgentSessionKey` і `resolveDefaultAgentBoundAccountId` |
| `plugin-sdk/status-helpers` | Спільні helper-функції summary статусу каналу/акаунта, значення за замовчуванням для runtime-state та helper-функції метаданих issue |
| `plugin-sdk/target-resolver-runtime` | Спільні helper-функції target resolver |
| `plugin-sdk/string-normalization-runtime` | Helper-функції нормалізації slug/string |
| `plugin-sdk/request-url` | Витягування рядкових URL з fetch/request-подібних вхідних даних |
| `plugin-sdk/run-command` | Виконавець timed command із нормалізованими результатами stdout/stderr |
| `plugin-sdk/param-readers` | Поширені зчитувачі параметрів tool/CLI |
| `plugin-sdk/tool-payload` | Витягування нормалізованих payload з об’єктів результатів tool |
| `plugin-sdk/tool-send` | Витягування канонічних полів send target з аргументів tool |
| `plugin-sdk/temp-path` | Спільні helper-функції шляхів тимчасового завантаження |
| `plugin-sdk/logging-core` | Helper-функції logger підсистеми і редагування чутливих даних |
| `plugin-sdk/markdown-table-runtime` | Helper-функції режиму та конвертації таблиць Markdown |
| `plugin-sdk/json-store` | Невеликі helper-функції читання/запису стану JSON |
| `plugin-sdk/file-lock` | Реентерабельні helper-функції file-lock |
| `plugin-sdk/persistent-dedupe` | Helper-функції кешу дедуплікації з дисковим зберіганням |
| `plugin-sdk/acp-runtime` | Helper-функції runtime/сесії ACP і dispatch відповідей |
| `plugin-sdk/acp-binding-resolve-runtime` | Read-only визначення прив’язки ACP без імпортів запуску життєвого циклу |
| `plugin-sdk/reply-chunking` | Вузькі допоміжні функції chunking тексту/markdown |
| `plugin-sdk/session-store-runtime` | Допоміжні функції шляху сховища сесій + updated-at |
| `plugin-sdk/state-paths` | Допоміжні функції шляхів до каталогів state/OAuth |
| `plugin-sdk/routing` | Допоміжні функції маршруту/ключа сесії/прив’язки акаунта, такі як `resolveAgentRoute`, `buildAgentSessionKey` і `resolveDefaultAgentBoundAccountId` |
| `plugin-sdk/status-helpers` | Спільні допоміжні функції зведення статусу каналу/акаунта, типові значення runtime-state та допоміжні функції метаданих проблем |
| `plugin-sdk/target-resolver-runtime` | Спільні допоміжні функції визначення цілей |
| `plugin-sdk/string-normalization-runtime` | Допоміжні функції нормалізації slug/рядків |
| `plugin-sdk/request-url` | Витягання рядкових URL з fetch/request-подібних входів |
| `plugin-sdk/run-command` | Запускач команд із таймінгом і нормалізованими результатами stdout/stderr |
| `plugin-sdk/param-readers` | Поширені читачі параметрів tool/CLI |
| `plugin-sdk/tool-payload` | Витягання нормалізованих payload з об’єктів результатів tool |
| `plugin-sdk/tool-send` | Витягання канонічних полів цілі надсилання з аргументів tool |
| `plugin-sdk/temp-path` | Спільні допоміжні функції шляхів до тимчасових завантажень |
| `plugin-sdk/logging-core` | Допоміжні функції logger підсистем і редагування чутливих даних |
| `plugin-sdk/markdown-table-runtime` | Допоміжні функції режиму та перетворення таблиць Markdown |
| `plugin-sdk/json-store` | Невеликі допоміжні функції читання/запису JSON-стану |
| `plugin-sdk/file-lock` | Допоміжні функції повторно вхідного file-lock |
| `plugin-sdk/persistent-dedupe` | Допоміжні функції кешу дедуплікації з дисковим зберіганням |
| `plugin-sdk/acp-runtime` | Допоміжні функції runtime/сесій ACP і reply-dispatch |
| `plugin-sdk/acp-binding-resolve-runtime` | Лише для читання: визначення прив’язок ACP без імпортів запуску життєвого циклу |
| `plugin-sdk/agent-config-primitives` | Вузькі примітиви config-schema runtime агента |
| `plugin-sdk/boolean-param` | Гнучкий зчитувач булевих параметрів |
| `plugin-sdk/dangerous-name-runtime` | Helper-функції визначення збігів небезпечних назв |
| `plugin-sdk/device-bootstrap` | Helper-функції початкового налаштування пристрою та токенів pairing |
| `plugin-sdk/extension-shared` | Спільні примітиви helper-функцій passive-channel, status і ambient proxy |
| `plugin-sdk/models-provider-runtime` | Helper-функції `/models` command/provider reply |
| `plugin-sdk/skill-commands-runtime` | Helper-функції списку команд Skills |
| `plugin-sdk/native-command-registry` | Helper-функції реєстру/побудови/серіалізації нативних команд |
| `plugin-sdk/agent-harness` | Експериментальна поверхня trusted-plugin для низькорівневих agent harnesses: типи harness, helper-функції steer/abort активного запуску, helper-функції bridge tool OpenClaw, helper-функції форматування/detail прогресу tool і утиліти результатів спроб |
| `plugin-sdk/provider-zai-endpoint` | Helper-функції виявлення endpoint Z.AI |
| `plugin-sdk/infra-runtime` | Helper-функції системних подій/Heartbeat |
| `plugin-sdk/collection-runtime` | Невеликі helper-функції обмеженого кешу |
| `plugin-sdk/diagnostic-runtime` | Helper-функції діагностичних прапорців і подій |
| `plugin-sdk/error-runtime` | Helper-функції графа помилок, форматування, спільної класифікації помилок, `isApprovalNotFoundError` |
| `plugin-sdk/fetch-runtime` | Helper-функції обгорнутого fetch, proxy і pinned lookup |
| `plugin-sdk/boolean-param` | Гнучкий читач булевих параметрів |
| `plugin-sdk/dangerous-name-runtime` | Допоміжні функції визначення збігу небезпечних назв |
| `plugin-sdk/device-bootstrap` | Допоміжні функції початкового налаштування пристрою та токенів pairing |
| `plugin-sdk/extension-shared` | Спільні примітиви допоміжних функцій passive-channel, status і ambient proxy |
| `plugin-sdk/models-provider-runtime` | Допоміжні функції відповіді провайдера/команди `/models` |
| `plugin-sdk/skill-commands-runtime` | Допоміжні функції переліку команд Skills |
| `plugin-sdk/native-command-registry` | Допоміжні функції реєстру/побудови/серіалізації нативних команд |
| `plugin-sdk/agent-harness` | Експериментальна поверхня trusted-plugin для низькорівневих harness агента: типи harness, допоміжні функції steer/abort активного запуску, допоміжні функції мосту tool OpenClaw, допоміжні функції форматування/деталізації прогресу tool і утиліти результатів спроб |
| `plugin-sdk/provider-zai-endpoint` | Допоміжні функції виявлення endpoint Z.A.I |
| `plugin-sdk/infra-runtime` | Допоміжні функції системних подій/Heartbeat |
| `plugin-sdk/collection-runtime` | Невеликі допоміжні функції обмеженого кешу |
| `plugin-sdk/diagnostic-runtime` | Допоміжні функції діагностичних прапорців і подій |
| `plugin-sdk/error-runtime` | Граф помилок, форматування, спільні допоміжні функції класифікації помилок, `isApprovalNotFoundError` |
| `plugin-sdk/fetch-runtime` | Допоміжні функції обгорнутого fetch, proxy і pinned lookup |
| `plugin-sdk/runtime-fetch` | Runtime fetch з урахуванням dispatcher без імпортів proxy/guarded-fetch |
| `plugin-sdk/response-limit-runtime` | Зчитувач обмеженого тіла відповіді без широкої поверхні media runtime |
| `plugin-sdk/session-binding-runtime` | Поточний стан прив’язки conversation без маршрутизації configured binding або сховищ pairing |
| `plugin-sdk/session-store-runtime` | Helper-функції читання сховища сесій без широких імпортів запису/обслуговування config |
| `plugin-sdk/response-limit-runtime` | Читач обмеженого тіла відповіді без широкої media runtime-поверхні |
| `plugin-sdk/session-binding-runtime` | Поточний стан прив’язки розмови без маршрутизації налаштованих прив’язок або сховищ pairing |
| `plugin-sdk/session-store-runtime` | Допоміжні функції читання сховища сесій без широких імпортів запису/обслуговування конфігурації |
| `plugin-sdk/context-visibility-runtime` | Визначення видимості контексту та фільтрація додаткового контексту без широких імпортів config/security |
| `plugin-sdk/string-coerce-runtime` | Вузькі helper-функції приведення та нормалізації primitive record/string без імпортів markdown/logging |
| `plugin-sdk/host-runtime` | Helper-функції нормалізації hostname і хостів SCP |
| `plugin-sdk/retry-runtime` | Helper-функції конфігурації retry і runner retry |
| `plugin-sdk/agent-runtime` | Helper-функції каталогу/ідентичності/workspace агента |
| `plugin-sdk/directory-runtime` | Запити/дедуплікація каталогів на основі config |
| `plugin-sdk/string-coerce-runtime` | Вузькі допоміжні функції приведення й нормалізації primitive record/string без імпортів markdown/logging |
| `plugin-sdk/host-runtime` | Допоміжні функції нормалізації hostname і SCP host |
| `plugin-sdk/retry-runtime` | Допоміжні функції конфігурації retry і запуску retry |
| `plugin-sdk/agent-runtime` | Допоміжні функції каталогу/ідентичності/робочого простору агента |
| `plugin-sdk/directory-runtime` | Запити/дедуплікація каталогів на основі конфігурації |
| `plugin-sdk/keyed-async-queue` | `KeyedAsyncQueue` |
</Accordion>
<Accordion title="Підшляхи capabilities і testing">
<Accordion title="Підшляхи можливостей і тестування">
| Підшлях | Ключові експорти |
| --- | --- |
| `plugin-sdk/media-runtime` | Спільні helper-функції fetch/transform/store медіа, а також побудовники media payload |
| `plugin-sdk/media-store` | Вузькі helper-функції media store, такі як `saveMediaBuffer` |
| `plugin-sdk/media-generation-runtime` | Спільні helper-функції failover генерації медіа, вибору кандидатів і повідомлень про відсутню модель |
| `plugin-sdk/media-understanding` | Типи постачальників media understanding, а також експорти helper-функцій для зображень/аудіо, орієнтовані на постачальників |
| `plugin-sdk/text-runtime` | Спільні helper-функції text/markdown/logging, такі як видалення тексту, видимого асистенту, helper-функції render/chunking/table для markdown, helper-функції редагування чутливих даних, helper-функції тегів директив і утиліти безпечного тексту |
| `plugin-sdk/text-chunking` | Helper-функція chunking вихідного тексту |
| `plugin-sdk/speech` | Типи постачальників speech, а також експорти directive, registry, validation і speech helper, орієнтовані на постачальників |
| `plugin-sdk/speech-core` | Спільні типи постачальників speech, registry, directive, normalization і speech helper exports |
| `plugin-sdk/realtime-transcription` | Типи постачальників realtime transcription, helper-функції registry і спільна helper-функція сесії WebSocket |
| `plugin-sdk/realtime-voice` | Типи постачальників realtime voice і helper-функції registry |
| `plugin-sdk/image-generation` | Типи постачальників генерації зображень |
| `plugin-sdk/image-generation-core` | Спільні типи генерації зображень, helper-функції failover, auth і registry |
| `plugin-sdk/music-generation` | Типи постачальника/запиту/результату генерації музики |
| `plugin-sdk/music-generation-core` | Спільні типи генерації музики, helper-функції failover, lookup постачальника і розбір model-ref |
| `plugin-sdk/video-generation` | Типи постачальника/запиту/результату генерації відео |
| `plugin-sdk/video-generation-core` | Спільні типи генерації відео, helper-функції failover, lookup постачальника і розбір model-ref |
| `plugin-sdk/webhook-targets` | Реєстр цілей Webhook і helper-функції встановлення route |
| `plugin-sdk/webhook-path` | Helper-функції нормалізації шляху Webhook |
| `plugin-sdk/web-media` | Спільні helper-функції завантаження віддалених/локальних медіа |
| `plugin-sdk/zod` | Повторно експортований `zod` для користувачів Plugin SDK |
| `plugin-sdk/media-runtime` | Спільні допоміжні функції fetch/transform/store для медіа, а також конструктори media payload |
| `plugin-sdk/media-store` | Вузькі допоміжні функції сховища медіа, такі як `saveMediaBuffer` |
| `plugin-sdk/media-generation-runtime` | Спільні допоміжні функції failover для генерації медіа, вибору кандидатів і повідомлень про відсутню модель |
| `plugin-sdk/media-understanding` | Типи провайдерів розуміння медіа, а також орієнтовані на провайдера експорти допоміжних функцій для зображень/аудіо |
| `plugin-sdk/text-runtime` | Спільні допоміжні функції text/markdown/logging, такі як вилучення тексту, видимого асистенту, допоміжні функції рендерингу/chunking/таблиць Markdown, редагування чутливих даних, допоміжні функції тегів директив і утиліти безпечного тексту |
| `plugin-sdk/text-chunking` | Допоміжна функція chunking вихідного тексту |
| `plugin-sdk/speech` | Типи провайдерів мовлення, а також орієнтовані на провайдера експорти директив, реєстру, валідації та допоміжних функцій мовлення |
| `plugin-sdk/speech-core` | Спільні типи провайдерів мовлення, реєстр, директива, нормалізація та експорти допоміжних функцій мовлення |
| `plugin-sdk/realtime-transcription` | Типи провайдерів транскрипції в реальному часі, допоміжні функції реєстру та спільна допоміжна функція WebSocket-сесії |
| `plugin-sdk/realtime-voice` | Типи провайдерів голосу в реальному часі та допоміжні функції реєстру |
| `plugin-sdk/image-generation` | Типи провайдерів генерації зображень |
| `plugin-sdk/image-generation-core` | Спільні типи генерації зображень, допоміжні функції failover, auth і реєстру |
| `plugin-sdk/music-generation` | Типи провайдерів/запитів/результатів генерації музики |
| `plugin-sdk/music-generation-core` | Спільні типи генерації музики, допоміжні функції failover, пошуку провайдера і парсингу model-ref |
| `plugin-sdk/video-generation` | Типи провайдерів/запитів/результатів генерації відео |
| `plugin-sdk/video-generation-core` | Спільні типи генерації відео, допоміжні функції failover, пошуку провайдера і парсингу model-ref |
| `plugin-sdk/webhook-targets` | Допоміжні функції реєстру цілей Webhook і встановлення маршрутів |
| `plugin-sdk/webhook-path` | Допоміжні функції нормалізації шляху Webhook |
| `plugin-sdk/web-media` | Спільні допоміжні функції завантаження віддалених/локальних медіа |
| `plugin-sdk/zod` | Повторно експортований `zod` для споживачів Plugin SDK |
| `plugin-sdk/testing` | `installCommonResolveTargetErrorCases`, `shouldAckReaction` |
</Accordion>
<Accordion title="Підшляхи пам’яті">
| Підшлях | Ключові експорти |
| --- | --- |
| `plugin-sdk/memory-core` | Вбудована допоміжна поверхня memory-core для helper-функцій manager/config/file/CLI |
| `plugin-sdk/memory-core-engine-runtime` | Runtime facade індексації/пошуку пам’яті |
| `plugin-sdk/memory-core` | Поверхня допоміжних функцій bundled memory-core для manager/config/file/CLI |
| `plugin-sdk/memory-core-engine-runtime` | Runtime facade індексу/пошуку пам’яті |
| `plugin-sdk/memory-core-host-engine-foundation` | Експорти foundation engine хоста пам’яті |
| `plugin-sdk/memory-core-host-engine-embeddings` | Контракти embeddings хоста пам’яті, доступ до registry, локальний постачальник і загальні batch/remote helper-функції |
| `plugin-sdk/memory-core-host-engine-embeddings` | Контракти embedding хоста пам’яті, доступ до реєстру, локальний провайдер і загальні batch/remote допоміжні функції |
| `plugin-sdk/memory-core-host-engine-qmd` | Експорти QMD engine хоста пам’яті |
| `plugin-sdk/memory-core-host-engine-storage` | Експорти storage engine хоста пам’яті |
| `plugin-sdk/memory-core-host-multimodal` | Мультимодальні helper-функції хоста пам’яті |
| `plugin-sdk/memory-core-host-query` | Helper-функції query хоста пам’яті |
| `plugin-sdk/memory-core-host-secret` | Helper-функції secret хоста пам’яті |
| `plugin-sdk/memory-core-host-events` | Helper-функції журналу подій хоста пам’яті |
| `plugin-sdk/memory-core-host-status` | Helper-функції статусу хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-cli` | Helper-функції CLI runtime хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-core` | Основні helper-функції runtime хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-files` | Helper-функції файлів/runtime хоста пам’яті |
| `plugin-sdk/memory-host-core` | Нейтральний до постачальника псевдонім для основних helper-функцій runtime хоста пам’яті |
| `plugin-sdk/memory-host-events` | Нейтральний до постачальника псевдонім для helper-функцій журналу подій хоста пам’яті |
| `plugin-sdk/memory-host-files` | Нейтральний до постачальника псевдонім для helper-функцій файлів/runtime хоста пам’яті |
| `plugin-sdk/memory-host-markdown` | Спільні helper-функції managed-markdown для плагінів, пов’язаних із пам’яттю |
| `plugin-sdk/memory-host-search` | Runtime facade Active Memory для доступу до search-manager |
| `plugin-sdk/memory-host-status` | Нейтральний до постачальника псевдонім для helper-функцій статусу хоста пам’яті |
| `plugin-sdk/memory-lancedb` | Вбудована допоміжна поверхня memory-lancedb |
| `plugin-sdk/memory-core-host-multimodal` | Багатомодальні допоміжні функції хоста пам’яті |
| `plugin-sdk/memory-core-host-query` | Допоміжні функції запитів хоста пам’яті |
| `plugin-sdk/memory-core-host-secret` | Допоміжні функції секретів хоста пам’яті |
| `plugin-sdk/memory-core-host-events` | Допоміжні функції журналу подій хоста пам’яті |
| `plugin-sdk/memory-core-host-status` | Допоміжні функції статусу хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-cli` | Допоміжні функції CLI runtime хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-core` | Основні допоміжні функції runtime хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-files` | Допоміжні функції файлів/runtime хоста пам’яті |
| `plugin-sdk/memory-host-core` | Нейтральний до постачальника псевдонім для основних допоміжних функцій runtime хоста пам’яті |
| `plugin-sdk/memory-host-events` | Нейтральний до постачальника псевдонім для допоміжних функцій журналу подій хоста пам’яті |
| `plugin-sdk/memory-host-files` | Нейтральний до постачальника псевдонім для допоміжних функцій файлів/runtime хоста пам’яті |
| `plugin-sdk/memory-host-markdown` | Спільні допоміжні функції керованого Markdown для plugin, пов’язаних із пам’яттю |
| `plugin-sdk/memory-host-search` | Runtime facade Active Memory для доступу до менеджера пошуку |
| `plugin-sdk/memory-host-status` | Нейтральний до постачальника псевдонім для допоміжних функцій статусу хоста пам’яті |
| `plugin-sdk/memory-lancedb` | Поверхня допоміжних функцій bundled memory-lancedb |
</Accordion>
<Accordion title="Зарезервовані підшляхи bundled-helper">
| Сімейство | Поточні підшляхи | Призначене використання |
| Сімейство | Поточні підшляхи | Призначення |
| --- | --- | --- |
| Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | Допоміжні helper-функції підтримки вбудованого browser plugin (`browser-support` залишається compatibility barrel) |
| Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | Поверхня helper-функцій/runtime вбудованого Matrix |
| Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | Поверхня helper-функцій/runtime вбудованого LINE |
| IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | Допоміжна поверхня вбудованого IRC |
| Допоміжні функції для окремих каналів | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | Вбудовані compatibility/helper seams каналів |
| Допоміжні функції для auth/окремих плагінів | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | Вбудовані helper seams для функцій/плагінів; `plugin-sdk/github-copilot-token` наразі експортує `DEFAULT_COPILOT_API_BASE_URL`, `deriveCopilotApiBaseUrlFromToken` і `resolveCopilotApiToken` |
| Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | Допоміжні функції підтримки bundled browser plugin (`browser-support` залишається barrel сумісності) |
| Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | Поверхня допоміжних функцій/runtime bundled Matrix |
| Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | Поверхня допоміжних функцій/runtime bundled LINE |
| IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | Поверхня допоміжних функцій bundled IRC |
| Допоміжні функції для окремих каналів | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | Шви сумісності/допоміжних функцій bundled каналів |
| Допоміжні функції для auth/plugin | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | Шви допоміжних функцій bundled можливостей/plugin; `plugin-sdk/github-copilot-token` наразі експортує `DEFAULT_COPILOT_API_BASE_URL`, `deriveCopilotApiBaseUrlFromToken` і `resolveCopilotApiToken` |
</Accordion>
</AccordionGroup>
@ -285,4 +285,4 @@ x-i18n:
- [Огляд Plugin SDK](/uk/plugins/sdk-overview)
- [Налаштування Plugin SDK](/uk/plugins/sdk-setup)
- [Створення плагінів](/uk/plugins/building-plugins)
- [Створення plugin](/uk/plugins/building-plugins)