From 1658c08e5995a4ff62f16c33b4afcf9832d58d2e Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Mon, 27 Apr 2026 16:25:22 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/plugins/manifest.md | 1030 +++++++++++++++++------------------ 1 file changed, 508 insertions(+), 522 deletions(-) diff --git a/docs/uk/plugins/manifest.md b/docs/uk/plugins/manifest.md index 0519b7db8..2eef8e639 100644 --- a/docs/uk/plugins/manifest.md +++ b/docs/uk/plugins/manifest.md @@ -1,52 +1,65 @@ --- read_when: - - Ви створюєте plugin OpenClaw - - Вам потрібно постачати схему конфігурації plugin або налагодити помилки перевірки plugin -summary: Маніфест Plugin + вимоги до JSON schema (сувора перевірка конфігурації) + - Ви створюєте Plugin для OpenClaw + - Вам потрібно надати схему конфігурації Plugin або налагодити помилки валідації Plugin +summary: Вимоги до маніфесту Plugin і JSON schema (сувора валідація конфігурації) title: Маніфест Plugin x-i18n: - generated_at: "2026-04-27T09:30:24Z" + generated_at: "2026-04-27T16:20:52Z" model: gpt-5.4 provider: openai - source_hash: 288bb88501753f8ad74addc1157d526080639cc781ef4c1df5b1438fd4befdba + source_hash: 662f374ff4a66b8a6f95dd5f0be8ac804a7b350f4f98d4e703d869b7b28804b9 source_path: plugins/manifest.md workflow: 15 --- -Ця сторінка стосується **лише власного маніфесту plugin OpenClaw**. +Ця сторінка призначена лише для **рідного маніфесту Plugin OpenClaw**. -Сумісні компонування пакетів описано в [Plugin bundles](/uk/plugins/bundles). +Для сумісних макетів пакунків див. [Пакунки Plugin](/uk/plugins/bundles). -Сумісні формати пакетів використовують інші файли маніфесту: +Сумісні формати пакунків використовують інші файли маніфесту: -- Пакет Codex: `.codex-plugin/plugin.json` -- Пакет Claude: `.claude-plugin/plugin.json` або стандартне компонування компонентів Claude без маніфесту -- Пакет Cursor: `.cursor-plugin/plugin.json` +- Пакунок Codex: `.codex-plugin/plugin.json` +- Пакунок Claude: `.claude-plugin/plugin.json` або типовий макет компонента Claude + без маніфесту +- Пакунок Cursor: `.cursor-plugin/plugin.json` -OpenClaw також автоматично виявляє ці компонування пакетів, але вони не перевіряються за схемою `openclaw.plugin.json`, описаною тут. +OpenClaw також автоматично виявляє ці макети пакунків, але вони не проходять валідацію +за схемою `openclaw.plugin.json`, описаною тут. -Для сумісних пакетів OpenClaw наразі зчитує метадані пакета, а також оголошені корені skills, корені команд Claude, типові значення `settings.json` для пакета Claude, типові значення LSP для пакета Claude та підтримувані пакети хуків, коли компонування відповідає очікуванням середовища виконання OpenClaw. +Для сумісних пакунків OpenClaw наразі читає метадані пакунка разом із оголошеними +коренями skills, коренями команд 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). -Щодо власної моделі можливостей і поточних рекомендацій із зовнішньої сумісності див.: [Модель можливостей](/uk/plugins/architecture#public-capability-model). +Див. повний посібник із системи 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 конфігурації -- метаданих автентифікації, онбордингу та налаштування (псевдонім, автоувімкнення, змінні середовища провайдера, варіанти автентифікації) -- підказок активації для поверхонь control plane -- володіння скороченими сімействами моделей +- ідентичності Plugin, валідації конфігурації та підказок для UI конфігурації +- метаданих автентифікації, онбордингу та налаштування (аліас, автоувімкнення, змінні середовища провайдера, варіанти автентифікації) +- підказок активації для поверхонь control-plane +- скороченого володіння сімействами моделей - статичних знімків володіння можливостями (`contracts`) -- метаданих засобу запуску QA, які може перевіряти спільний хост `openclaw qa` -- метаданих конфігурації для конкретних каналів, об’єднаних у поверхні каталогу й перевірки +- метаданих QA runner, які може перевіряти спільний хост `openclaw qa` +- метаданих конфігурації, специфічних для channel, що об’єднуються в каталог і поверхні валідації -**Не використовуйте його для:** реєстрації поведінки середовища виконання, оголошення точок входу коду або метаданих встановлення npm. Це належить коду вашого plugin і `package.json`. +**Не використовуйте його для:** реєстрації поведінки середовища виконання, оголошення +точок входу коду або метаданих встановлення npm. Вони належать коду вашого Plugin +і `package.json`. ## Мінімальний приклад @@ -142,74 +155,73 @@ OpenClaw також автоматично виявляє ці компонув | Поле | Обов’язкове | Тип | Що воно означає | | ------------------------------------ | ----------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `id` | Так | `string` | Канонічний ідентифікатор plugin. Це ідентифікатор, який використовується в `plugins.entries.`. | -| `configSchema` | Так | `object` | Вбудована JSON Schema для конфігурації цього plugin. | -| `enabledByDefault` | Ні | `true` | Позначає вбудований plugin як увімкнений типово. Не вказуйте це поле або встановіть будь-яке значення, відмінне від `true`, щоб plugin лишався типово вимкненим. | -| `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 до запуску середовища виконання. | -| `modelCatalog` | Ні | `object` | Декларативні метадані каталогу моделей для провайдерів, якими володіє цей plugin. Це контракт control plane для майбутнього списку лише для читання, онбордингу, вибору моделей, псевдонімів і приглушення без завантаження середовища виконання plugin. | -| `modelPricing` | Ні | `object` | Політика зовнішнього пошуку цін, якою володіє провайдер. Використовуйте її, щоб виключати локальні/саморозгорнуті провайдери з віддалених каталогів цін або зіставляти посилання на провайдерів з ідентифікаторами каталогів OpenRouter/LiteLLM без жорсткого кодування ідентифікаторів провайдерів у ядрі. | -| `modelIdNormalization` | Ні | `object` | Очищення псевдонімів/префіксів ідентифікаторів моделей, яким володіє провайдер і яке має виконуватися до завантаження середовища виконання провайдера. | -| `providerEndpoints` | Ні | `object[]` | Метадані хостів/`baseUrl` кінцевих точок, якими володіє маніфест, для маршрутів провайдера, які ядро має класифікувати до завантаження середовища виконання провайдера. | -| `providerRequest` | Ні | `object` | Недорогі метадані сімейства провайдера та сумісності запитів, які використовуються загальною політикою запитів до завантаження середовища виконання провайдера. | -| `cliBackends` | Ні | `string[]` | Ідентифікатори бекендів інференсу CLI, якими володіє цей plugin. Використовується для автоматичної активації під час запуску з явних посилань у конфігурації. | -| `syntheticAuthRefs` | Ні | `string[]` | Посилання на провайдерів або бекенди CLI, для яких має бути виконана перевірка синтетичного хука автентифікації, яким володіє plugin, під час холодного виявлення моделей до завантаження середовища виконання. | -| `nonSecretAuthMarkers` | Ні | `string[]` | Значення-заповнювачі API-ключів, якими володіє вбудований plugin і які означають не секретний локальний стан, OAuth або стан облікових даних із середовища. | -| `commandAliases` | Ні | `object[]` | Імена команд, якими володіє цей plugin і які мають створювати діагностику конфігурації та CLI з урахуванням plugin до завантаження середовища виконання. | -| `providerAuthEnvVars` | Ні | `Record` | Застарілі сумісні метадані змінних середовища для пошуку автентифікації/статусу провайдера. Для нових plugins віддавайте перевагу `setup.providers[].envVars`; OpenClaw усе ще зчитує це протягом періоду застарівання. | -| `providerAuthAliases` | Ні | `Record` | Ідентифікатори провайдерів, які мають повторно використовувати інший ідентифікатор провайдера для пошуку автентифікації, наприклад провайдер кодування, що спільно використовує API-ключ базового провайдера та профілі автентифікації. | -| `channelEnvVars` | Ні | `Record` | Недорогі метадані змінних середовища каналів, які OpenClaw може перевіряти без завантаження коду plugin. Використовуйте це для налаштування каналів або поверхонь автентифікації, керованих змінними середовища, які мають бачити загальні допоміжні засоби запуску/конфігурації. | -| `providerAuthChoices` | Ні | `object[]` | Недорогі метадані варіантів автентифікації для засобів вибору під час онбордингу, визначення пріоритетного провайдера та простого прив’язування прапорців CLI. | -| `activation` | Ні | `object` | Недорогі метадані планувальника активації для завантаження за провайдером, командою, каналом, маршрутом і можливістю. Лише метадані; фактична поведінка все одно належить середовищу виконання plugin. | -| `setup` | Ні | `object` | Недорогі дескриптори налаштування/онбордингу, які поверхні виявлення та налаштування можуть перевіряти без завантаження середовища виконання plugin. | -| `qaRunners` | Ні | `object[]` | Недорогі дескриптори засобів запуску QA, які спільний хост `openclaw qa` використовує до завантаження середовища виконання plugin. | -| `contracts` | Ні | `object` | Статичний знімок вбудованих можливостей для зовнішніх хуків автентифікації, мовлення, транскрибування в реальному часі, голосу в реальному часі, розуміння медіа, генерації зображень, генерації музики, генерації відео, web-fetch, web search і володіння інструментами. | +| `id` | Так | `string` | Канонічний ідентифікатор Plugin. Це ідентифікатор, який використовується в `plugins.entries.`. | +| `configSchema` | Так | `object` | Вбудована JSON Schema для конфігурації цього Plugin. | +| `enabledByDefault` | Ні | `true` | Позначає вбудований Plugin як увімкнений за замовчуванням. Не вказуйте його або встановіть будь-яке значення, відмінне від `true`, щоб Plugin залишався вимкненим за замовчуванням. | +| `legacyPluginIds` | Ні | `string[]` | Застарілі ідентифікатори, які нормалізуються до цього канонічного ідентифікатора Plugin. | +| `autoEnableWhenConfiguredProviders` | Ні | `string[]` | Ідентифікатори провайдерів, які мають автоматично вмикати цей Plugin, коли автентифікація, конфігурація або посилання на моделі згадують їх. | +| `kind` | Ні | `"memory"` \| `"context-engine"` | Оголошує ексклюзивний тип Plugin, який використовується `plugins.slots.*`. | +| `channels` | Ні | `string[]` | Ідентифікатори channel, якими володіє цей Plugin. Використовуються для виявлення та валідації конфігурації. | +| `providers` | Ні | `string[]` | Ідентифікатори провайдерів, якими володіє цей Plugin. | +| `providerDiscoveryEntry` | Ні | `string` | Шлях до легковагового модуля виявлення провайдера, відносний до кореня Plugin, для метаданих каталогу провайдера в межах маніфесту, які можна завантажити без активації повного середовища виконання Plugin. | +| `modelSupport` | Ні | `object` | Скорочені метадані сімейства моделей, якими володіє маніфест і які використовуються для автоматичного завантаження Plugin до запуску середовища виконання. | +| `modelCatalog` | Ні | `object` | Декларативні метадані каталогу моделей для провайдерів, якими володіє цей Plugin. Це контракт control-plane для майбутнього списку лише для читання, онбордингу, вибору моделей, аліасів і приглушення без завантаження середовища виконання Plugin. | +| `modelPricing` | Ні | `object` | Політика пошуку зовнішнього ціноутворення, якою володіє провайдер. Використовуйте її, щоб виключити локальні/self-hosted провайдери з віддалених каталогів цін або зіставити посилання на провайдерів з ідентифікаторами каталогу OpenRouter/LiteLLM без жорсткого кодування ідентифікаторів провайдерів у ядрі. | +| `modelIdNormalization` | Ні | `object` | Очищення аліасів/префіксів ідентифікаторів моделей, яким володіє провайдер і яке має виконуватися до завантаження середовища виконання провайдера. | +| `providerEndpoints` | Ні | `object[]` | Метадані хоста/`baseUrl` endpoint, якими володіє маніфест, для маршрутів провайдера, які ядро має класифікувати до завантаження середовища виконання провайдера. | +| `providerRequest` | Ні | `object` | Недорогі метадані сімейства провайдерів і сумісності запитів, які використовуються загальною політикою запитів до завантаження середовища виконання провайдера. | +| `cliBackends` | Ні | `string[]` | Ідентифікатори backend CLI inference, якими володіє цей Plugin. Використовуються для автоматичної активації під час запуску на основі явних посилань у конфігурації. | +| `syntheticAuthRefs` | Ні | `string[]` | Посилання на провайдерів або backend CLI, для яких слід перевіряти синтетичний hook автентифікації, яким володіє Plugin, під час холодного виявлення моделей до завантаження середовища виконання. | +| `nonSecretAuthMarkers` | Ні | `string[]` | Значення-заповнювачі API key, якими володіє вбудований Plugin і які представляють не секретний локальний стан, стан OAuth або ambient credential state. | +| `commandAliases` | Ні | `object[]` | Імена команд, якими володіє цей Plugin і які мають створювати діагностику конфігурації та CLI з урахуванням Plugin до завантаження середовища виконання. | +| `providerAuthEnvVars` | Ні | `Record` | Застарілі сумісні метадані env для пошуку автентифікації/статусу провайдера. Для нових Plugin віддавайте перевагу `setup.providers[].envVars`; OpenClaw усе ще читає це протягом періоду застарівання. | +| `providerAuthAliases` | Ні | `Record` | Ідентифікатори провайдерів, які мають повторно використовувати інший ідентифікатор провайдера для пошуку автентифікації, наприклад провайдер для кодування, який використовує той самий API key базового провайдера та профілі автентифікації. | +| `channelEnvVars` | Ні | `Record` | Недорогі метадані env для channel, які OpenClaw може перевірити без завантаження коду Plugin. Використовуйте це для налаштування channel на основі env або поверхонь автентифікації, які мають бачити загальні допоміжні засоби запуску/конфігурації. | +| `providerAuthChoices` | Ні | `object[]` | Недорогі метадані варіантів автентифікації для засобів вибору під час онбордингу, визначення пріоритетного провайдера та простого прив’язування прапорців CLI. | +| `activation` | Ні | `object` | Недорогі метадані планувальника активації для завантаження, що запускається провайдером, командою, channel, маршрутом і можливістю. Лише метадані; фактична поведінка все одно належить середовищу виконання Plugin. | +| `setup` | Ні | `object` | Недорогі дескриптори налаштування/онбордингу, які поверхні виявлення та налаштування можуть перевіряти без завантаження середовища виконання Plugin. | +| `qaRunners` | Ні | `object[]` | Недорогі дескриптори QA runner, які використовує спільний хост `openclaw qa` до завантаження середовища виконання Plugin. | +| `contracts` | Ні | `object` | Статичний знімок вбудованих можливостей для зовнішніх hook автентифікації, мовлення, транскрибування в реальному часі, голосу в реальному часі, розуміння медіа, генерації зображень, генерації музики, генерації відео, web-fetch, вебпошуку та володіння інструментами. | | `mediaUnderstandingProviderMetadata` | Ні | `Record` | Недорогі типові значення для розуміння медіа для ідентифікаторів провайдерів, оголошених у `contracts.mediaUnderstandingProviders`. | -| `channelConfigs` | Ні | `Record` | Метадані конфігурації каналів, якими володіє маніфест і які об’єднуються в поверхні виявлення та перевірки до завантаження середовища виконання. | -| `skills` | Ні | `string[]` | Каталоги Skills для завантаження, відносно кореня plugin. | -| `name` | Ні | `string` | Людинозрозуміла назва plugin. | -| `description` | Ні | `string` | Короткий опис, який показується в поверхнях plugin. | -| `version` | Ні | `string` | Інформаційна версія plugin. | -| `uiHints` | Ні | `Record` | Мітки UI, заповнювачі та підказки щодо чутливості для полів конфігурації. | +| `channelConfigs` | Ні | `Record` | Метадані конфігурації channel, якими володіє маніфест і які об’єднуються з поверхнями виявлення та валідації до завантаження середовища виконання. | +| `skills` | Ні | `string[]` | Каталоги Skills для завантаження, відносні до кореня Plugin. | +| `name` | Ні | `string` | Людинозрозуміла назва Plugin. | +| `description` | Ні | `string` | Короткий опис, що відображається на поверхнях Plugin. | +| `version` | Ні | `string` | Інформаційна версія Plugin. | +| `uiHints` | Ні | `Record` | Мітки UI, заповнювачі та підказки щодо чутливості для полів конфігурації. | ## Довідник `providerAuthChoices` Кожен запис `providerAuthChoices` описує один варіант онбордингу або автентифікації. -OpenClaw зчитує це до завантаження середовища виконання провайдера. -Списки налаштування провайдера використовують ці варіанти з маніфесту, варіанти -налаштування, отримані з дескрипторів, і метадані каталогу встановлення без +OpenClaw читає це до завантаження середовища виконання провайдера. +Списки налаштування провайдерів використовують ці варіанти маніфесту, варіанти +налаштування, похідні від дескрипторів, і метадані каталогу встановлення без завантаження середовища виконання провайдера. -| Поле | Обов’язкове | Тип | Що воно означає | -| -------------------- | ----------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -| `provider` | Так | `string` | Ідентифікатор провайдера, до якого належить цей варіант. | -| `method` | Так | `string` | Ідентифікатор методу автентифікації, до якого слід спрямувати запит. | -| `choiceId` | Так | `string` | Стабільний ідентифікатор варіанта автентифікації, який використовується в потоках онбордингу та CLI. | -| `choiceLabel` | Ні | `string` | Мітка для користувача. Якщо не вказано, OpenClaw повертається до `choiceId`. | -| `choiceHint` | Ні | `string` | Короткий допоміжний текст для засобу вибору. | -| `assistantPriority` | Ні | `number` | Менші значення сортуються раніше в інтерактивних засобах вибору, керованих асистентом. | -| `assistantVisibility`| Ні | `"visible"` \| `"manual-only"` | Приховує варіант із засобів вибору асистента, але все ще дозволяє ручний вибір через CLI. | -| `deprecatedChoiceIds`| Ні | `string[]` | Застарілі ідентифікатори варіантів, які мають перенаправляти користувачів на цей варіант-заміну. | -| `groupId` | Ні | `string` | Необов’язковий ідентифікатор групи для групування пов’язаних варіантів. | -| `groupLabel` | Ні | `string` | Мітка цієї групи для користувача. | -| `groupHint` | Ні | `string` | Короткий допоміжний текст для групи. | -| `optionKey` | Ні | `string` | Внутрішній ключ параметра для простих потоків автентифікації з одним прапорцем. | -| `cliFlag` | Ні | `string` | Назва прапорця CLI, наприклад `--openrouter-api-key`. | -| `cliOption` | Ні | `string` | Повна форма параметра CLI, наприклад `--openrouter-api-key `. | -| `cliDescription` | Ні | `string` | Опис, який використовується в довідці CLI. | -| `onboardingScopes` | Ні | `Array<"text-inference" \| "image-generation">` | На яких поверхнях онбордингу має з’являтися цей варіант. Якщо не вказано, типовим є `["text-inference"]`. | +| Поле | Обов’язкове | Тип | Що воно означає | +| --------------------- | ----------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------- | +| `provider` | Так | `string` | Ідентифікатор провайдера, до якого належить цей варіант. | +| `method` | Так | `string` | Ідентифікатор методу автентифікації, до якого слід спрямувати. | +| `choiceId` | Так | `string` | Стабільний ідентифікатор варіанта автентифікації, який використовується в онбордингу та CLI-потоках. | +| `choiceLabel` | Ні | `string` | Мітка для користувача. Якщо не вказано, OpenClaw використовує `choiceId`. | +| `choiceHint` | Ні | `string` | Короткий допоміжний текст для засобу вибору. | +| `assistantPriority` | Ні | `number` | Менші значення сортуються раніше в інтерактивних засобах вибору, керованих асистентом. | +| `assistantVisibility` | Ні | `"visible"` \| `"manual-only"` | Приховує варіант із засобів вибору асистента, але все одно дозволяє ручний вибір через CLI. | +| `deprecatedChoiceIds` | Ні | `string[]` | Застарілі ідентифікатори варіантів, які мають перенаправляти користувачів на цей варіант-заміну. | +| `groupId` | Ні | `string` | Необов’язковий ідентифікатор групи для групування пов’язаних варіантів. | +| `groupLabel` | Ні | `string` | Мітка цієї групи для користувача. | +| `groupHint` | Ні | `string` | Короткий допоміжний текст для групи. | +| `optionKey` | Ні | `string` | Внутрішній ключ параметра для простих потоків автентифікації з одним прапорцем. | +| `cliFlag` | Ні | `string` | Назва прапорця CLI, наприклад `--openrouter-api-key`. | +| `cliOption` | Ні | `string` | Повна форма параметра CLI, наприклад `--openrouter-api-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 { @@ -223,40 +235,37 @@ OpenClaw зчитує це до завантаження середовища в } ``` -| Поле | Обов’язкове | Тип | Що воно означає | -| ------------ | ----------- | ----------------- | ---------------------------------------------------------------------------- | -| `name` | Так | `string` | Назва команди, яка належить цьому plugin. | -| `kind` | Ні | `"runtime-slash"` | Позначає псевдонім як slash-команду чату, а не як кореневу команду CLI. | -| `cliCommand` | Ні | `string` | Пов’язана коренева команда CLI, яку слід пропонувати для операцій CLI, якщо вона існує. | +| Поле | Обов’язкове | Тип | Що воно означає | +| ------------ | ----------- | ----------------- | -------------------------------------------------------------------------- | +| `name` | Так | `string` | Назва команди, яка належить цьому Plugin. | +| `kind` | Ні | `"runtime-slash"` | Позначає аліас як 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` і хуки. +Цей блок є метаданими планувальника, а не API життєвого циклу. Він не реєструє +поведінку середовища виконання, не замінює `register(...)` і не обіцяє, що +код Plugin уже було виконано. Планувальник активації використовує ці поля, щоб +звузити коло кандидатів Plugin, перш ніж повертатися до наявних метаданих +володіння в маніфесті, таких як `providers`, `channels`, `commandAliases`, `setup.providers`, +`contracts.tools` і hook. -Віддавайте перевагу найвужчим метаданим, які вже описують володіння. -Використовуйте `providers`, `channels`, `commandAliases`, дескриптори setup або -`contracts`, якщо ці поля виражають потрібний зв’язок. Використовуйте -`activation` для додаткових підказок планувальника, які не можна подати через -ці поля володіння. -Використовуйте верхньорівневий `cliBackends` для псевдонімів середовища -виконання CLI, таких як `claude-cli`, `codex-cli` або `google-gemini-cli`; -`activation.onAgentHarnesses` призначено лише для вбудованих ідентифікаторів -harness агента, які ще не мають поля володіння. +Віддавайте перевагу найвужчим метаданим, які вже описують володіння. Використовуйте +`providers`, `channels`, `commandAliases`, дескриптори setup або `contracts`, +коли ці поля виражають зв’язок. Використовуйте `activation` для додаткових підказок +планувальника, які не можна виразити цими полями володіння. +Використовуйте `cliBackends` верхнього рівня для аліасів середовища виконання CLI, таких як `claude-cli`, +`codex-cli` або `google-gemini-cli`; `activation.onAgentHarnesses` призначено лише для +ідентифікаторів вбудованих harness агента, які ще не мають поля володіння. -Цей блок є лише метаданими. Він не реєструє поведінку середовища виконання і не -замінює `register(...)`, `setupEntry` чи інші точки входу середовища -виконання/plugin. Поточні споживачі використовують його як підказку для -звуження перед ширшим завантаженням plugin, тому відсутність метаданих -активації зазвичай впливає лише на продуктивність; це не повинно змінювати -коректність, доки існують застарілі резервні механізми володіння з маніфесту. +Цей блок містить лише метадані. Він не реєструє поведінку середовища виконання і не +замінює `register(...)`, `setupEntry` або інші точки входу середовища виконання/Plugin. +Поточні споживачі використовують його як підказку для звуження перед ширшим завантаженням Plugin, тож +відсутні метадані активації зазвичай лише впливають на продуктивність; вони не повинні +змінювати коректність, доки ще існують застарілі резервні механізми володіння через маніфест. ```json { @@ -271,46 +280,43 @@ harness агента, які ще не мають поля володіння. } ``` -| Поле | Обов’язкове | Тип | Що воно означає | -| ------------------ | ----------- | ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -| `onProviders` | Ні | `string[]` | Ідентифікатори провайдерів, які мають включати цей plugin до планів активації/завантаження. | -| `onAgentHarnesses` | Ні | `string[]` | Ідентифікатори середовища виконання вбудованих harness агента, які мають включати цей plugin до планів активації/завантаження. Для псевдонімів бекенда CLI використовуйте верхньорівневий `cliBackends`. | -| `onCommands` | Ні | `string[]` | Ідентифікатори команд, які мають включати цей plugin до планів активації/завантаження. | -| `onChannels` | Ні | `string[]` | Ідентифікатори каналів, які мають включати цей plugin до планів активації/завантаження. | -| `onRoutes` | Ні | `string[]` | Типи маршрутів, які мають включати цей plugin до планів активації/завантаження. | -| `onConfigPaths` | Ні | `string[]` | Кореневі відносні шляхи конфігурації, які мають включати цей plugin до планів запуску/завантаження, коли шлях присутній і не вимкнений явно. | -| `onCapabilities` | Ні | `Array<"provider" \| "channel" \| "tool" \| "hook">` | Загальні підказки можливостей, що використовуються в плануванні активації control plane. Якщо можливо, віддавайте перевагу вужчим полям. | +| Поле | Обов’язкове | Тип | Що воно означає | +| ------------------ | ----------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| `onProviders` | Ні | `string[]` | Ідентифікатори провайдерів, які мають включати цей Plugin до планів активації/завантаження. | +| `onAgentHarnesses` | Ні | `string[]` | Ідентифікатори середовища виконання вбудованих harness агента, які мають включати цей Plugin до планів активації/завантаження. Для аліасів backend CLI використовуйте `cliBackends` верхнього рівня. | +| `onCommands` | Ні | `string[]` | Ідентифікатори команд, які мають включати цей Plugin до планів активації/завантаження. | +| `onChannels` | Ні | `string[]` | Ідентифікатори channel, які мають включати цей Plugin до планів активації/завантаження. | +| `onRoutes` | Ні | `string[]` | Типи маршрутів, які мають включати цей Plugin до планів активації/завантаження. | +| `onConfigPaths` | Ні | `string[]` | Шляхи конфігурації відносно кореня, які мають включати цей Plugin до планів запуску/завантаження, коли шлях присутній і не вимкнений явно. | +| `onCapabilities` | Ні | `Array<"provider" \| "channel" \| "tool" \| "hook">` | Загальні підказки щодо можливостей, які використовуються в плануванні активації control-plane. За можливості віддавайте перевагу вужчим полям. | Поточні активні споживачі: -- планування CLI, ініційоване командами, повертається до застарілих +- планування CLI, що запускається командою, повертається до застарілих `commandAliases[].cliCommand` або `commandAliases[].name` -- планування запуску середовища виконання агента використовує - `activation.onAgentHarnesses` для вбудованих harness і верхньорівневий - `cliBackends[]` для псевдонімів середовища виконання CLI -- планування setup/каналів, ініційоване каналами, повертається до застарілого - володіння `channels[]`, коли явні метадані активації каналу відсутні -- планування plugin під час запуску використовує `activation.onConfigPaths` для - некатегоризованих кореневих поверхонь конфігурації, таких як блок `browser` - у вбудованому plugin браузера -- планування setup/середовища виконання, ініційоване провайдером, повертається - до застарілого володіння `providers[]` і верхньорівневого `cliBackends[]`, - коли явні метадані активації провайдера відсутні +- планування запуску agent-runtime використовує `activation.onAgentHarnesses` для + вбудованих harness і `cliBackends[]` верхнього рівня для аліасів середовища виконання CLI +- планування setup/channel, що запускається channel, повертається до застарілого + володіння `channels[]`, коли явні метадані активації channel відсутні +- планування Plugin під час запуску використовує `activation.onConfigPaths` для некональних + поверхонь конфігурації, таких як блок `browser` вбудованого Plugin браузера +- планування setup/runtime, що запускається провайдером, повертається до застарілого + володіння `providers[]` і `cliBackends[]` верхнього рівня, коли явні + метадані активації провайдера відсутні -Діагностика планувальника може розрізняти явні підказки активації та резервне -володіння з маніфесту. Наприклад, `activation-command-hint` означає, що -спрацювало `activation.onCommands`, тоді як `manifest-command-alias` означає, -що планувальник натомість використав володіння `commandAliases`. Ці мітки -причин призначені для діагностики хоста та тестів; авторам plugin слід і далі -оголошувати метадані, які найкраще описують володіння. +Діагностика планувальника може відрізняти явні підказки активації від резервного +володіння через маніфест. Наприклад, `activation-command-hint` означає, що +спрацювало `activation.onCommands`, тоді як `manifest-command-alias` означає, що +планувальник натомість використав володіння `commandAliases`. Ці мітки причин призначені для +діагностики хоста й тестів; авторам Plugin слід і далі оголошувати метадані, +які найкраще описують володіння. ## Довідник `qaRunners` -Використовуйте `qaRunners`, коли plugin додає один або кілька транспортних -засобів запуску під спільним коренем `openclaw qa`. Зберігайте ці метадані -простими та статичними; фактична реєстрація CLI усе одно належить середовищу -виконання plugin через легковагову поверхню `runtime-api.ts`, що експортує -`qaRunnerCliRegistrations`. +Використовуйте `qaRunners`, коли Plugin додає один або кілька transport runner під +спільним коренем `openclaw qa`. Зберігайте ці метадані легкими й статичними; фактичною +реєстрацією CLI, як і раніше, володіє середовище виконання Plugin через легковагову +поверхню `runtime-api.ts`, яка експортує `qaRunnerCliRegistrations`. ```json { @@ -323,15 +329,15 @@ harness агента, які ще не мають поля володіння. } ``` -| Поле | Обов’язкове | Тип | Що воно означає | -| ------------- | ----------- | -------- | --------------------------------------------------------------------- | -| `commandName` | Так | `string` | Підкоманда, змонтована під `openclaw qa`, наприклад `matrix`. | +| Поле | Обов’язкове | Тип | Що воно означає | +| ------------- | ----------- | -------- | ------------------------------------------------------------------ | +| `commandName` | Так | `string` | Підкоманда, змонтована під `openclaw qa`, наприклад `matrix`. | | `description` | Ні | `string` | Резервний текст довідки, який використовується, коли спільному хосту потрібна stub-команда. | ## Довідник `setup` -Використовуйте `setup`, коли поверхням налаштування та онбордингу потрібні -недорогі метадані plugin-власника до завантаження середовища виконання. +Використовуйте `setup`, коли поверхням налаштування та онбордингу потрібні недорогі метадані Plugin +до завантаження середовища виконання. ```json { @@ -350,66 +356,61 @@ harness агента, які ще не мають поля володіння. } ``` -Верхньорівневий `cliBackends` лишається валідним і далі описує бекенди -інференсу CLI. `setup.cliBackends` — це поверхня дескриптора, специфічна для -setup, для потоків control plane/setup, які мають залишатися лише метаданими. +`cliBackends` верхнього рівня лишається чинним і далі описує backend CLI inference. +`setup.cliBackends` — це поверхня дескриптора, специфічна для setup, для +потоків control-plane/setup, які мають залишатися лише метаданими. -За наявності `setup.providers` і `setup.cliBackends` є бажаною поверхнею -пошуку типу descriptor-first для виявлення setup. Якщо дескриптор лише звужує -кандидат plugin, а setup усе ще потребує багатших хуків середовища виконання на -етапі setup, установіть `requiresRuntime: true` і збережіть `setup-api` як +Коли `setup.providers` і `setup.cliBackends` присутні, вони є бажаною +поверхнею пошуку з підходом descriptor-first для виявлення setup. Якщо дескриптор лише +звужує кандидат Plugin, а setup усе ще потребує багатших hook середовища виконання на етапі setup, +установіть `requiresRuntime: true` і залиште `setup-api` як резервний шлях виконання. OpenClaw також включає `setup.providers[].envVars` до загальних пошуків -автентифікації провайдера та змінних середовища. `providerAuthEnvVars` усе ще -підтримується через адаптер сумісності впродовж періоду застарівання, але -невбудовані plugins, які досі його використовують, отримують діагностику -маніфесту. Нові plugins мають розміщувати метадані змінних середовища для +автентифікації провайдера та env var. `providerAuthEnvVars` залишається підтримуваним через адаптер +сумісності протягом періоду застарівання, але невбудовані Plugin, які все ще його використовують, +отримують діагностику маніфесту. Нові Plugin мають розміщувати метадані env для setup/статусу в `setup.providers[].envVars`. -OpenClaw також може виводити прості варіанти setup із `setup.providers[].authMethods`, -коли запису setup немає або коли `setup.requiresRuntime: false` -оголошує, що середовище виконання setup не потрібне. Явні записи -`providerAuthChoices` залишаються бажаними для власних міток, прапорців CLI, -області онбордингу та метаданих асистента. +OpenClaw також може виводити прості варіанти setup з `setup.providers[].authMethods`, +коли запис setup недоступний або коли `setup.requiresRuntime: false` +вказує, що середовище виконання setup не потрібне. Явні записи `providerAuthChoices` залишаються +пріоритетними для власних міток, прапорців CLI, області онбордингу та метаданих асистента. -Установлюйте `requiresRuntime: false` лише тоді, коли цих дескрипторів -достатньо для поверхні setup. OpenClaw трактує явне `false` як контракт -лише-дескрипторів і не виконуватиме `setup-api` або `openclaw.setupEntry` для -пошуку setup. Якщо plugin лише-дескрипторів усе ж постачає один із цих записів -середовища виконання setup, OpenClaw повідомляє додаткову діагностику й -продовжує ігнорувати його. Пропущений `requiresRuntime` зберігає застарілу -резервну поведінку, щоб наявні plugins, які додали дескриптори без цього -прапорця, не ламалися. +Установлюйте `requiresRuntime: false` лише тоді, коли цих дескрипторів достатньо для +поверхні setup. OpenClaw трактує явне `false` як контракт лише на рівні дескрипторів +і не виконуватиме `setup-api` або `openclaw.setupEntry` для пошуку setup. Якщо +Plugin, який має працювати лише на дескрипторах, усе ж постачає один із цих записів +середовища виконання setup, OpenClaw повідомляє про додаткову діагностику й надалі ігнорує його. Якщо +`requiresRuntime` не вказано, зберігається застаріла резервна поведінка, тож наявні Plugin, які додали +дескриптори без цього прапорця, не зламаються. -Оскільки пошук setup може виконувати код `setup-api`, яким володіє plugin, -нормалізовані значення `setup.providers[].id` і `setup.cliBackends[]` мають -залишатися унікальними серед усіх виявлених plugins. Неоднозначне володіння -завершується безпечним блокуванням замість вибору переможця за порядком -виявлення. +Оскільки пошук setup може виконувати код `setup-api`, яким володіє Plugin, нормалізовані +значення `setup.providers[].id` і `setup.cliBackends[]` мають залишатися унікальними серед +усіх виявлених Plugin. Неоднозначне володіння призводить до безпечної відмови замість вибору +переможця за порядком виявлення. -Коли середовище виконання setup все ж виконується, діагностика реєстру setup -повідомляє про дрейф дескрипторів, якщо `setup-api` реєструє провайдера або -бекенд CLI, яких не оголошують дескриптори маніфесту, або якщо для дескриптора -немає відповідної реєстрації середовища виконання. Ці діагностики є -додатковими й не відхиляють застарілі plugins. +Коли середовище виконання setup усе ж запускається, діагностика реєстру setup повідомляє про +розходження дескрипторів, якщо `setup-api` реєструє провайдера або backend CLI, який +не оголошено в дескрипторах маніфесту, або якщо дескриптор не має відповідної +реєстрації в середовищі виконання. Ця діагностика є додатковою і не призводить до відхилення застарілих Plugin. ### Довідник `setup.providers` -| Поле | Обов’язкове | Тип | Що воно означає | -| ------------- | ----------- | ---------- | ---------------------------------------------------------------------------------- | -| `id` | Так | `string` | Ідентифікатор провайдера, який показується під час setup або онбордингу. Зберігайте нормалізовані ідентифікатори глобально унікальними. | +| Поле | Обов’язкове | Тип | Що воно означає | +| ------------- | ----------- | ---------- | ------------------------------------------------------------------------------------- | +| `id` | Так | `string` | Ідентифікатор провайдера, що показується під час setup або онбордингу. Нормалізовані ідентифікатори мають бути глобально унікальними. | | `authMethods` | Ні | `string[]` | Ідентифікатори методів setup/автентифікації, які цей провайдер підтримує без завантаження повного середовища виконання. | -| `envVars` | Ні | `string[]` | Змінні середовища, які загальні поверхні setup/статусу можуть перевіряти до завантаження середовища виконання plugin. | +| `envVars` | Ні | `string[]` | Env vars, які загальні поверхні setup/статусу можуть перевіряти до завантаження середовища виконання Plugin. | ### Поля `setup` -| Поле | Обов’язкове | Тип | Що воно означає | -| ------------------ | ----------- | ---------- | --------------------------------------------------------------------------------------------------- | -| `providers` | Ні | `object[]` | Дескриптори setup провайдерів, доступні під час setup та онбордингу. | -| `cliBackends` | Ні | `string[]` | Ідентифікатори бекендів часу setup, які використовуються для пошуку setup за принципом descriptor-first. Зберігайте нормалізовані ідентифікатори глобально унікальними. | -| `configMigrations` | Ні | `string[]` | Ідентифікатори міграцій конфігурації, якими володіє поверхня setup цього plugin. | -| `requiresRuntime` | Ні | `boolean` | Чи setup усе ще потребує виконання `setup-api` після пошуку за дескриптором. | +| Поле | Обов’язкове | Тип | Що воно означає | +| ------------------ | ----------- | ---------- | ----------------------------------------------------------------------------------------------------- | +| `providers` | Ні | `object[]` | Дескриптори setup провайдерів, що показуються під час setup та онбордингу. | +| `cliBackends` | Ні | `string[]` | Ідентифікатори backend, що використовуються під час setup для пошуку setup за підходом descriptor-first. Нормалізовані ідентифікатори мають бути глобально унікальними. | +| `configMigrations` | Ні | `string[]` | Ідентифікатори міграцій конфігурації, якими володіє поверхня setup цього Plugin. | +| `requiresRuntime` | Ні | `boolean` | Чи потрібне setup і надалі виконання `setup-api` після пошуку за дескрипторами. | ## Довідник `uiHints` @@ -428,21 +429,21 @@ OpenClaw також може виводити прості варіанти setu } ``` -Кожна підказка для поля може містити: +Кожна підказка поля може містити: -| Поле | Тип | Що воно означає | -| ------------- | ---------- | ---------------------------------------- | -| `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 { @@ -468,47 +469,45 @@ OpenClaw також може виводити прості варіанти setu | Поле | Тип | Що воно означає | | -------------------------------- | ---------- | ----------------------------------------------------------------------- | -| `embeddedExtensionFactories` | `string[]` | Ідентифікатори фабрик розширень app-server Codex, наразі `codex-app-server`. | -| `agentToolResultMiddleware` | `string[]` | Ідентифікатори середовища виконання, для яких вбудований plugin може реєструвати middleware результатів інструментів. | -| `externalAuthProviders` | `string[]` | Ідентифікатори провайдерів, хук зовнішнього профілю автентифікації яких належить цьому plugin. | -| `speechProviders` | `string[]` | Ідентифікатори мовленнєвих провайдерів, якими володіє цей plugin. | -| `realtimeTranscriptionProviders` | `string[]` | Ідентифікатори провайдерів транскрибування в реальному часі, якими володіє цей plugin. | -| `realtimeVoiceProviders` | `string[]` | Ідентифікатори провайдерів голосу в реальному часі, якими володіє цей plugin. | -| `memoryEmbeddingProviders` | `string[]` | Ідентифікатори провайдерів embedding для пам’яті, якими володіє цей plugin. | -| `mediaUnderstandingProviders` | `string[]` | Ідентифікатори провайдерів розуміння медіа, якими володіє цей plugin. | -| `imageGenerationProviders` | `string[]` | Ідентифікатори провайдерів генерації зображень, якими володіє цей plugin. | -| `videoGenerationProviders` | `string[]` | Ідентифікатори провайдерів генерації відео, якими володіє цей plugin. | -| `webFetchProviders` | `string[]` | Ідентифікатори провайдерів web-fetch, якими володіє цей plugin. | -| `webSearchProviders` | `string[]` | Ідентифікатори провайдерів web search, якими володіє цей plugin. | -| `migrationProviders` | `string[]` | Ідентифікатори провайдерів імпорту, якими володіє цей plugin для `openclaw migrate`. | -| `tools` | `string[]` | Назви інструментів агента, якими володіє цей plugin, для перевірок вбудованих контрактів. | +| `embeddedExtensionFactories` | `string[]` | Ідентифікатори фабрик extension для app-server Codex, наразі `codex-app-server`. | +| `agentToolResultMiddleware` | `string[]` | Ідентифікатори середовища виконання, для яких вбудований Plugin може реєструвати middleware результатів інструментів. | +| `externalAuthProviders` | `string[]` | Ідентифікатори провайдерів, hook зовнішнього профілю автентифікації яких належить цьому Plugin. | +| `speechProviders` | `string[]` | Ідентифікатори провайдерів мовлення, якими володіє цей Plugin. | +| `realtimeTranscriptionProviders` | `string[]` | Ідентифікатори провайдерів транскрибування в реальному часі, якими володіє цей Plugin. | +| `realtimeVoiceProviders` | `string[]` | Ідентифікатори провайдерів голосу в реальному часі, якими володіє цей Plugin. | +| `memoryEmbeddingProviders` | `string[]` | Ідентифікатори провайдерів embedding для пам’яті, якими володіє цей Plugin. | +| `mediaUnderstandingProviders` | `string[]` | Ідентифікатори провайдерів розуміння медіа, якими володіє цей Plugin. | +| `imageGenerationProviders` | `string[]` | Ідентифікатори провайдерів генерації зображень, якими володіє цей Plugin. | +| `videoGenerationProviders` | `string[]` | Ідентифікатори провайдерів генерації відео, якими володіє цей Plugin. | +| `webFetchProviders` | `string[]` | Ідентифікатори провайдерів web-fetch, якими володіє цей Plugin. | +| `webSearchProviders` | `string[]` | Ідентифікатори провайдерів вебпошуку, якими володіє цей Plugin. | +| `migrationProviders` | `string[]` | Ідентифікатори провайдерів імпорту, якими володіє цей Plugin для `openclaw migrate`. | +| `tools` | `string[]` | Назви інструментів агента, якими володіє цей Plugin для перевірок вбудованих контрактів. | -`contracts.embeddedExtensionFactories` зберігається для фабрик розширень -лише для вбудованого app-server Codex. Вбудовані перетворення результатів -інструментів мають оголошувати `contracts.agentToolResultMiddleware` і -реєструватися через `api.registerAgentToolResultMiddleware(...)`. Зовнішні -plugins не можуть реєструвати middleware результатів інструментів, оскільки цей -шов може переписувати високодовірений вивід інструмента до того, як його -побачить модель. +`contracts.embeddedExtensionFactories` збережено для вбудованих фабрик extension +лише для app-server Codex. Вбудовані трансформації результатів інструментів мають +оголошувати `contracts.agentToolResultMiddleware` і реєструватися через +`api.registerAgentToolResultMiddleware(...)`. Зовнішні Plugin не можуть +реєструвати middleware результатів інструментів, оскільки цей seam може переписувати +вихідні дані інструментів високої довіри до того, як модель їх побачить. -Plugins провайдерів, які реалізують `resolveExternalAuthProfiles`, мають -оголошувати `contracts.externalAuthProviders`. Plugins без цього оголошення все -ще працюють через застарілий резервний механізм сумісності, але цей механізм -повільніший і буде вилучений після завершення вікна міграції. +Plugin провайдерів, які реалізують `resolveExternalAuthProfiles`, мають оголошувати +`contracts.externalAuthProviders`. Plugin без цього оголошення все ще працюють +через застарілий резервний механізм сумісності, але він повільніший і +буде видалений після завершення вікна міграції. Вбудовані провайдери embedding для пам’яті мають оголошувати -`contracts.memoryEmbeddingProviders` для кожного ідентифікатора адаптера, який -вони надають, включно з вбудованими адаптерами, такими як `local`. Окремі шляхи -CLI використовують цей контракт маніфесту, щоб завантажувати лише plugin-власник -до того, як повне середовище виконання Gateway зареєструє провайдерів. +`contracts.memoryEmbeddingProviders` для кожного ідентифікатора адаптера, який вони надають, включно з +вбудованими адаптерами, такими як `local`. Автономні шляхи CLI використовують цей контракт +маніфесту, щоб завантажувати лише Plugin-власник до того, як повне середовище виконання Gateway +зареєструє провайдерів. ## Довідник `mediaUnderstandingProviderMetadata` -Використовуйте `mediaUnderstandingProviderMetadata`, коли провайдер розуміння -медіа має типові моделі, пріоритет резервного автоматичного вибору -автентифікації або власну підтримку документів, які потрібні загальним -допоміжним засобам ядра до завантаження середовища виконання. Ключі також мають -бути оголошені в `contracts.mediaUnderstandingProviders`. +Використовуйте `mediaUnderstandingProviderMetadata`, коли провайдер розуміння медіа має +типові моделі, пріоритет резервної автоавтентифікації або вбудовану підтримку документів, які +загальним допоміжним засобам ядра потрібні до завантаження середовища виконання. Ключі також мають бути оголошені в +`contracts.mediaUnderstandingProviders`. ```json { @@ -533,45 +532,41 @@ CLI використовують цей контракт маніфесту, щ Кожен запис провайдера може містити: -| Поле | Тип | Що воно означає | -| ---------------------- | ----------------------------------- | ---------------------------------------------------------------------------- | -| `capabilities` | `("image" \| "audio" \| "video")[]` | Можливості медіа, які надає цей провайдер. | -| `defaultModels` | `Record` | Типові відповідності можливість-модель, які використовуються, коли конфігурація не вказує модель. | +| Поле | Тип | Що воно означає | +| ---------------------- | ----------------------------------- | ----------------------------------------------------------------------------- | +| `capabilities` | `("image" \| "audio" \| "video")[]` | Медіаможливості, які надає цей провайдер. | +| `defaultModels` | `Record` | Типові значення зіставлення можливостей з моделями, які використовуються, коли в конфігурації не вказано модель. | | `autoPriority` | `Record` | Менші числа сортуються раніше для автоматичного резервного вибору провайдера на основі облікових даних. | -| `nativeDocumentInputs` | `"pdf"[]` | Власні входи документів, які підтримує провайдер. | +| `nativeDocumentInputs` | `"pdf"[]` | Вбудовані входи документів, які підтримує провайдер. | ## Довідник `channelConfigs` -Використовуйте `channelConfigs`, коли plugin каналу потребує недорогих -метаданих конфігурації до завантаження середовища виконання. Виявлення -налаштування/статусу каналу лише для читання може використовувати ці метадані -безпосередньо для налаштованих зовнішніх каналів, коли запис setup відсутній -або коли `setup.requiresRuntime: false` оголошує, що середовище виконання setup -не потрібне. +Використовуйте `channelConfigs`, коли Plugin channel потребує недорогих метаданих конфігурації до +завантаження середовища виконання. Виявлення setup/статусу channel лише для читання може використовувати ці метадані +безпосередньо для налаштованих зовнішніх channel, коли запис setup недоступний або +коли `setup.requiresRuntime: false` вказує, що середовище виконання setup не потрібне. -`channelConfigs` — це метадані маніфесту plugin, а не новий верхньорівневий -розділ конфігурації користувача. Користувачі як і раніше налаштовують екземпляри -каналів у `channels.`. OpenClaw зчитує метадані маніфесту, щоб -визначити, який plugin володіє цим налаштованим каналом, до виконання коду -середовища виконання plugin. +`channelConfigs` — це метадані маніфесту Plugin, а не новий розділ +користувацької конфігурації верхнього рівня. Користувачі, як і раніше, налаштовують екземпляри channel у `channels.`. +OpenClaw читає метадані маніфесту, щоб визначити, якому Plugin належить цей налаштований +channel, до виконання коду середовища виконання Plugin. -Для plugin каналу `configSchema` і `channelConfigs` описують різні шляхи: +Для Plugin channel `configSchema` і `channelConfigs` описують різні +шляхи: - `configSchema` перевіряє `plugins.entries..config` - `channelConfigs..schema` перевіряє `channels.` -Невбудовані plugins, які оголошують `channels[]`, також мають оголошувати -відповідні записи `channelConfigs`. Без них OpenClaw усе ще може завантажити -plugin, але поверхні схеми конфігурації холодного шляху, setup і Control UI не -знатимуть форму параметрів, що належать каналу, доки не виконається середовище -виконання plugin. +Невбудовані Plugin, які оголошують `channels[]`, також мають оголошувати відповідні +записи `channelConfigs`. Без них OpenClaw усе ще може завантажити Plugin, але +схема конфігурації холодного шляху, setup і поверхні Control UI не зможуть дізнатися +форму параметрів, що належать channel, доки не виконається середовище виконання Plugin. `channelConfigs..commands.nativeCommandsAutoEnabled` і -`nativeSkillsAutoEnabled` можуть оголошувати статичні типові значення `auto` -для перевірок конфігурації команд, які виконуються до завантаження середовища -виконання каналу. Вбудовані канали також можуть публікувати ті самі типові -значення через `package.json#openclaw.channel.commands` поряд з іншими -метаданими каталогу каналів, що належать пакету. +`nativeSkillsAutoEnabled` можуть оголошувати статичні типові значення `auto` для перевірок +конфігурації команд, які виконуються до завантаження середовища виконання channel. Вбудовані channel також можуть +публікувати ті самі типові значення через `package.json#openclaw.channel.commands` разом з +іншими метаданими каталогу channel, що належать пакунку. ```json { @@ -602,24 +597,23 @@ plugin, але поверхні схеми конфігурації холодн } ``` -Кожен запис каналу може містити: +Кожен запис channel може містити: -| Поле | Тип | Що воно означає | -| ------------- | ------------------------ | -------------------------------------------------------------------------------------- | -| `schema` | `object` | JSON Schema для `channels.`. Обов’язкове для кожного оголошеного запису конфігурації каналу. | -| `uiHints` | `Record` | Необов’язкові мітки UI/заповнювачі/підказки щодо чутливості для цього розділу конфігурації каналу. | -| `label` | `string` | Мітка каналу, яка об’єднується в поверхні вибору та перегляду, коли метадані середовища виконання ще не готові. | -| `description` | `string` | Короткий опис каналу для поверхонь перегляду й каталогу. | -| `commands` | `object` | Статичні автовизначені значення для вбудованих команд і вбудованих Skills для перевірок конфігурації до запуску середовища виконання. | -| `preferOver` | `string[]` | Ідентифікатори застарілих або нижчопріоритетних plugins, які цей канал має випереджати на поверхнях вибору. | +| Поле | Тип | Що воно означає | +| ------------- | ------------------------ | ---------------------------------------------------------------------------------------- | +| `schema` | `object` | JSON Schema для `channels.`. Обов’язкова для кожного оголошеного запису конфігурації channel. | +| `uiHints` | `Record` | Необов’язкові мітки UI/заповнювачі/підказки щодо чутливості для цього розділу конфігурації channel. | +| `label` | `string` | Мітка channel, яка об’єднується з поверхнями вибору та перегляду, коли метадані середовища виконання ще не готові. | +| `description` | `string` | Короткий опис channel для поверхонь перегляду та каталогу. | +| `commands` | `object` | Статичні auto-типові значення native command і native skill для перевірок конфігурації до запуску середовища виконання. | +| `preferOver` | `string[]` | Ідентифікатори застарілих або менш пріоритетних Plugin, які цей channel має перевершувати на поверхнях вибору. | -### Заміна іншого plugin каналу +### Заміна іншого Plugin channel -Використовуйте `preferOver`, коли ваш plugin є бажаним власником для -ідентифікатора каналу, який також може надавати інший plugin. Поширені випадки: -перейменований ідентифікатор plugin, окремий plugin, що замінює вбудований -plugin, або підтримуваний fork, який зберігає той самий ідентифікатор каналу -для сумісності конфігурації. +Використовуйте `preferOver`, коли ваш Plugin є пріоритетним власником для ідентифікатора channel, який +може надавати також інший Plugin. Типові випадки — це перейменований ідентифікатор Plugin, +окремий Plugin, що замінює вбудований Plugin, або підтримуваний fork, який +зберігає той самий ідентифікатор channel для сумісності конфігурації. ```json { @@ -640,24 +634,22 @@ plugin, або підтримуваний fork, який зберігає той } ``` -Коли налаштовано `channels.chat`, OpenClaw враховує як ідентифікатор каналу, -так і бажаний ідентифікатор plugin. Якщо plugin нижчого пріоритету було -вибрано лише тому, що він вбудований або увімкнений типово, OpenClaw вимикає -його в ефективній конфігурації середовища виконання, щоб один plugin володів -каналом і його інструментами. Явний вибір користувача все одно має перевагу: -якщо користувач явно вмикає обидва plugins, OpenClaw зберігає цей вибір і -повідомляє діагностику дубльованого каналу/інструментів замість того, щоб -мовчки змінювати запитаний набір plugins. +Коли налаштовано `channels.chat`, OpenClaw враховує і ідентифікатор channel, і +ідентифікатор пріоритетного Plugin. Якщо менш пріоритетний Plugin було вибрано лише тому, +що він вбудований або ввімкнений за замовчуванням, OpenClaw вимикає його в ефективній +конфігурації середовища виконання, щоб один Plugin володів channel і його інструментами. Явний +вибір користувача все одно має перевагу: якщо користувач явно вмикає обидва Plugin, OpenClaw +зберігає цей вибір і повідомляє про діагностику дубльованих channel/інструментів замість +тихої зміни запитаного набору Plugin. -Обмежуйте `preferOver` ідентифікаторами plugins, які справді можуть надавати -той самий канал. Це не загальне поле пріоритету і воно не перейменовує ключі -конфігурації користувача. +Обмежуйте `preferOver` ідентифікаторами Plugin, які справді можуть надавати той самий channel. +Це не загальне поле пріоритету і воно не перейменовує ключі користувацької конфігурації. ## Довідник `modelSupport` -Використовуйте `modelSupport`, коли OpenClaw має виводити ваш plugin провайдера -зі скорочених ідентифікаторів моделей, таких як `gpt-5.5` або -`claude-sonnet-4.6`, до завантаження середовища виконання plugin. +Використовуйте `modelSupport`, коли OpenClaw має виводити ваш Plugin провайдера з +скорочених ідентифікаторів моделей, як-от `gpt-5.5` або `claude-sonnet-4.6`, до завантаження +середовища виконання Plugin. ```json { @@ -668,28 +660,28 @@ plugin, або підтримуваний fork, який зберігає той } ``` -OpenClaw застосовує такий пріоритет: +OpenClaw застосовує таку пріоритетність: -- явні посилання `provider/model` використовують метадані маніфесту `providers` plugin-власника -- `modelPatterns` мають перевагу над `modelPrefixes` -- якщо збігаються один невбудований plugin і один вбудований plugin, перемагає невбудований plugin -- решта неоднозначностей ігноруються, доки користувач або конфігурація не вкажуть провайдера +- явні посилання `provider/model` використовують метадані маніфесту `providers` відповідного власника +- `modelPatterns` мають вищий пріоритет за `modelPrefixes` +- якщо збігаються один невбудований Plugin і один вбудований Plugin, перемагає невбудований + Plugin +- решта неоднозначностей ігнорується, доки користувач або конфігурація не вкажуть провайдера Поля: -| Поле | Тип | Що воно означає | -| --------------- | ---------- | --------------------------------------------------------------------------- | +| Поле | Тип | Що воно означає | +| --------------- | ---------- | -------------------------------------------------------------------------- | | `modelPrefixes` | `string[]` | Префікси, що зіставляються через `startsWith` зі скороченими ідентифікаторами моделей. | | `modelPatterns` | `string[]` | Джерела regex, що зіставляються зі скороченими ідентифікаторами моделей після видалення суфікса профілю. | ## Довідник `modelCatalog` -Використовуйте `modelCatalog`, коли OpenClaw має знати метадані моделей -провайдера до завантаження середовища виконання plugin. Це джерело з маніфесту, -яким володіє plugin, для фіксованих рядків каталогу, псевдонімів провайдера, -правил приглушення та режиму виявлення. Оновлення під час виконання все ще -належить коду середовища виконання провайдера, але маніфест повідомляє ядру, -коли потрібне середовище виконання. +Використовуйте `modelCatalog`, коли OpenClaw має знати метадані моделей провайдера до +завантаження середовища виконання Plugin. Це джерело на рівні маніфесту для фіксованих +рядків каталогу, аліасів провайдерів, правил приглушення та режиму виявлення. Оновлення під час виконання +і далі належить коду середовища виконання провайдера, але маніфест повідомляє ядру, коли +потрібне середовище виконання. ```json { @@ -740,56 +732,65 @@ OpenClaw застосовує такий пріоритет: Поля верхнього рівня: -| Поле | Тип | Що воно означає | -| -------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | -| `providers` | `Record` | Рядки каталогу для ідентифікаторів провайдерів, якими володіє цей plugin. Ключі також мають з’являтися у верхньорівневому `providers`. | -| `aliases` | `Record` | Псевдоніми провайдерів, які мають розв’язуватися до провайдера-власника для планування каталогу або приглушення. | -| `suppressions` | `object[]` | Рядки моделей з іншого джерела, які цей plugin приглушує з причини, специфічної для провайдера. | -| `discovery` | `Record` | Чи каталог провайдера можна зчитати з метаданих маніфесту, оновити в кеш або для нього потрібне середовище виконання. | +| Поле | Тип | Що воно означає | +| -------------- | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------- | +| `providers` | `Record` | Рядки каталогу для ідентифікаторів провайдерів, якими володіє цей Plugin. Ключі також мають бути присутні в `providers` верхнього рівня. | +| `aliases` | `Record` | Аліаси провайдерів, які мають зіставлятися з провайдером-власником для планування каталогу або приглушення. | +| `suppressions` | `object[]` | Рядки моделей з іншого джерела, які цей Plugin приглушує з причини, специфічної для провайдера. | +| `discovery` | `Record` | Чи можна читати каталог провайдера з метаданих маніфесту, оновлювати в кеш або чи він потребує середовища виконання. | + +`aliases` бере участь у пошуку володіння провайдером для планування model-catalog. +Цілі аліасів мають бути провайдерами верхнього рівня, якими володіє той самий Plugin. Коли +відфільтрований за провайдером список використовує аліас, OpenClaw може прочитати маніфест-власник і +застосувати перевизначення API/base URL аліаса без завантаження середовища виконання провайдера. + +`suppressions` є бажаною статичною заміною для hook +`suppressBuiltInModel` середовища виконання провайдера. Записи приглушення враховуються лише тоді, коли +провайдером володіє Plugin або він оголошений як ключ `modelCatalog.aliases`, що +націлений на провайдера-власника. Hook приглушення під час виконання все ще працюють як застарілий +резервний механізм сумісності для Plugin, які ще не перейшли. Поля провайдера: -| Поле | Тип | Що воно означає | -| --------- | ------------------------ | ------------------------------------------------------------------ | -| `baseUrl` | `string` | Необов’язковий типовий `baseUrl` для моделей у цьому каталозі провайдера. | +| Поле | Тип | Що воно означає | +| --------- | ------------------------ | ---------------------------------------------------------------- | +| `baseUrl` | `string` | Необов’язковий типовий base URL для моделей у цьому каталозі провайдера. | | `api` | `ModelApi` | Необов’язковий типовий адаптер API для моделей у цьому каталозі провайдера. | | `headers` | `Record` | Необов’язкові статичні заголовки, що застосовуються до цього каталогу провайдера. | -| `models` | `object[]` | Обов’язкові рядки моделей. Рядки без `id` ігноруються. | +| `models` | `object[]` | Обов’язкові рядки моделей. Рядки без `id` ігноруються. | Поля моделі: -| Поле | Тип | Що воно означає | -| --------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------- | -| `id` | `string` | Локальний для провайдера ідентифікатор моделі без префікса `provider/`. | -| `name` | `string` | Необов’язкова відображувана назва. | -| `api` | `ModelApi` | Необов’язкове перевизначення API для окремої моделі. | -| `baseUrl` | `string` | Необов’язкове перевизначення `baseUrl` для окремої моделі. | -| `headers` | `Record` | Необов’язкові статичні заголовки для окремої моделі. | -| `input` | `Array<"text" \| "image" \| "document" \| "audio" \| "video">` | Модальності, які приймає модель. | -| `reasoning` | `boolean` | Чи надає модель поведінку reasoning. | -| `contextWindow` | `number` | Власне вікно контексту провайдера. | +| Поле | Тип | Що воно означає | +| --------------- | -------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `id` | `string` | Локальний для провайдера ідентифікатор моделі, без префікса `provider/`. | +| `name` | `string` | Необов’язкова відображувана назва. | +| `api` | `ModelApi` | Необов’язкове перевизначення API для окремої моделі. | +| `baseUrl` | `string` | Необов’язкове перевизначення base URL для окремої моделі. | +| `headers` | `Record` | Необов’язкові статичні заголовки для окремої моделі. | +| `input` | `Array<"text" \| "image" \| "document" \| "audio" \| "video">` | Модальності, які приймає модель. | +| `reasoning` | `boolean` | Чи надає модель поведінку reasoning. | +| `contextWindow` | `number` | Рідне вікно контексту провайдера. | | `contextTokens` | `number` | Необов’язкове ефективне обмеження контексту під час виконання, якщо воно відрізняється від `contextWindow`. | -| `maxTokens` | `number` | Максимальна кількість вихідних токенів, якщо відома. | +| `maxTokens` | `number` | Максимальна кількість вихідних токенів, якщо відома. | | `cost` | `object` | Необов’язкова ціна в USD за мільйон токенів, включно з необов’язковим `tieredPricing`. | -| `compat` | `object` | Необов’язкові прапорці сумісності, що відповідають сумісності конфігурації моделей OpenClaw. | -| `status` | `"available"` \| `"preview"` \| `"deprecated"` \| `"disabled"` | Статус у списку. Приглушуйте лише тоді, коли рядок взагалі не має з’являтися. | -| `statusReason` | `string` | Необов’язкова причина, що показується для недоступного статусу. | +| `compat` | `object` | Необов’язкові прапорці сумісності, що відповідають сумісності конфігурації моделі OpenClaw. | +| `status` | `"available"` \| `"preview"` \| `"deprecated"` \| `"disabled"` | Статус у списку. Використовуйте приглушення лише тоді, коли рядок взагалі не має з’являтися. | +| `statusReason` | `string` | Необов’язкова причина, що показується разом зі статусом, відмінним від доступного. | | `replaces` | `string[]` | Старіші локальні для провайдера ідентифікатори моделей, які ця модель замінює. | -| `replacedBy` | `string` | Локальний для провайдера ідентифікатор моделі-заміни для застарілих рядків. | -| `tags` | `string[]` | Стабільні теги, які використовуються засобами вибору та фільтрами. | +| `replacedBy` | `string` | Ідентифікатор локальної для провайдера моделі-заміни для застарілих рядків. | +| `tags` | `string[]` | Стабільні теги, що використовуються засобами вибору та фільтрами. | -Не поміщайте до `modelCatalog` дані лише для середовища виконання. Якщо -провайдеру потрібен стан облікового запису, API-запит або виявлення локального -процесу, щоб визначити повний набір моделей, оголосіть цього провайдера як -`refreshable` або `runtime` у `discovery`. +Не розміщуйте в `modelCatalog` дані, доступні лише під час виконання. Якщо провайдеру потрібен +стан облікового запису, запит API або виявлення локального процесу, щоб знати повний набір +моделей, оголосіть цього провайдера як `refreshable` або `runtime` у `discovery`. ## Довідник `modelIdNormalization` -Використовуйте `modelIdNormalization` для недорогого очищення ідентифікаторів -моделей, яким володіє провайдер і яке має відбутися до завантаження середовища -виконання провайдера. Це дозволяє зберігати псевдоніми, такі як короткі назви -моделей, локальні для провайдера застарілі ідентифікатори та правила префіксів -проксі, у маніфесті plugin-власника, а не в таблицях вибору моделей ядра. +Використовуйте `modelIdNormalization` для недорогого очищення ідентифікаторів моделей, яким володіє провайдер і яке має +відбуватися до завантаження середовища виконання провайдера. Це зберігає аліаси, як-от короткі назви моделей, +застарілі локальні для провайдера ідентифікатори та правила префіксів проксі в маніфесті +Plugin-власника, а не в таблицях вибору моделей ядра. ```json { @@ -811,38 +812,35 @@ OpenClaw застосовує такий пріоритет: Поля провайдера: -| Поле | Тип | Що воно означає | -| ------------------------------------ | ----------------------- | ---------------------------------------------------------------------------------- | -| `aliases` | `Record` | Нечутливі до регістру точні псевдоніми ідентифікаторів моделей. Значення повертаються в початковому вигляді. | -| `stripPrefixes` | `string[]` | Префікси, які слід видалити перед пошуком псевдоніма; корисно для застарілого дублювання provider/model. | -| `prefixWhenBare` | `string` | Префікс, який слід додати, коли нормалізований ідентифікатор моделі ще не містить `/`. | -| `prefixWhenBareAfterAliasStartsWith` | `object[]` | Умовні правила префікса для bare-id після пошуку псевдоніма, задані через `modelPrefix` і `prefix`. | +| Поле | Тип | Що воно означає | +| ------------------------------------ | ----------------------- | ----------------------------------------------------------------------------------------- | +| `aliases` | `Record` | Точні аліаси ідентифікаторів моделей без урахування регістру. Значення повертаються в записаному вигляді. | +| `stripPrefixes` | `string[]` | Префікси, які слід видаляти перед пошуком аліаса; корисно для застарілого дублювання `provider/model`. | +| `prefixWhenBare` | `string` | Префікс, який додається, коли нормалізований ідентифікатор моделі ще не містить `/`. | +| `prefixWhenBareAfterAliasStartsWith` | `object[]` | Умовні правила префікса для голого ідентифікатора після пошуку аліаса, з ключами `modelPrefix` і `prefix`. | ## Довідник `providerEndpoints` -Використовуйте `providerEndpoints` для класифікації кінцевих точок, яку має -знати загальна політика запитів до завантаження середовища виконання -провайдера. Ядро все ще володіє значенням кожного `endpointClass`; маніфести -plugin володіють метаданими хоста й `baseUrl`. +Використовуйте `providerEndpoints` для класифікації endpoint, яку загальна політика запитів +має знати до завантаження середовища виконання провайдера. Ядро, як і раніше, володіє значенням кожного +`endpointClass`; маніфести Plugin володіють метаданими хоста та base URL. -Поля кінцевої точки: +Поля endpoint: -| Поле | Тип | Що воно означає | -| ------------------------------ | ---------- | -------------------------------------------------------------------------------------------- | -| `endpointClass` | `string` | Відомий ядру клас кінцевої точки, наприклад `openrouter`, `moonshot-native` або `google-vertex`. | -| `hosts` | `string[]` | Точні імена хостів, які зіставляються з класом кінцевої точки. | -| `hostSuffixes` | `string[]` | Суфікси хостів, які зіставляються з класом кінцевої точки. Додайте префікс `.` для зіставлення лише за суфіксом домену. | -| `baseUrls` | `string[]` | Точні нормалізовані HTTP(S) `baseUrl`, які зіставляються з класом кінцевої точки. | +| Поле | Тип | Що воно означає | +| ------------------------------ | ---------- | ------------------------------------------------------------------------------------------- | +| `endpointClass` | `string` | Відомий клас endpoint ядра, наприклад `openrouter`, `moonshot-native` або `google-vertex`. | +| `hosts` | `string[]` | Точні імена хостів, які зіставляються з класом endpoint. | +| `hostSuffixes` | `string[]` | Суфікси хостів, які зіставляються з класом endpoint. Додавайте префікс `.` для зіставлення лише за суфіксом домену. | +| `baseUrls` | `string[]` | Точні нормалізовані HTTP(S) base URL, які зіставляються з класом endpoint. | | `googleVertexRegion` | `string` | Статичний регіон Google Vertex для точних глобальних хостів. | -| `googleVertexRegionHostSuffix` | `string` | Суфікс, який слід видалити зі збіглих хостів, щоб показати префікс регіону Google Vertex. | +| `googleVertexRegionHostSuffix` | `string` | Суфікс, який потрібно видалити зі збіжних хостів, щоб отримати префікс регіону Google Vertex. | ## Довідник `providerRequest` -Використовуйте `providerRequest` для недорогих метаданих сумісності запитів, -які потрібні загальній політиці запитів без завантаження середовища виконання -провайдера. Специфічне для поведінки переписування payload залишайте в хуках -середовища виконання провайдера або в спільних допоміжних засобах сімейства -провайдерів. +Використовуйте `providerRequest` для недорогих метаданих сумісності запитів, які загальній +політиці запитів потрібні без завантаження середовища виконання провайдера. Переписування payload, специфічне +для поведінки, залишайте в hook середовища виконання провайдера або в спільних допоміжних засобах сімейства провайдерів. ```json { @@ -864,15 +862,15 @@ plugin володіють метаданими хоста й `baseUrl`. | Поле | Тип | Що воно означає | | --------------------- | ------------ | -------------------------------------------------------------------------------------- | -| `family` | `string` | Мітка сімейства провайдера, яка використовується для загальних рішень і діагностики сумісності запитів. | -| `compatibilityFamily` | `"moonshot"` | Необов’язковий сегмент сумісності сімейства провайдера для спільних допоміжних засобів запитів. | -| `openAICompletions` | `object` | Прапорці запитів completions, сумісних з OpenAI; наразі `supportsStreamingUsage`. | +| `family` | `string` | Мітка сімейства провайдера, що використовується для загальних рішень і діагностики сумісності запитів. | +| `compatibilityFamily` | `"moonshot"` | Необов’язковий бакет сумісності сімейства провайдерів для спільних допоміжних засобів запитів. | +| `openAICompletions` | `object` | Прапорці запитів completions, сумісних з OpenAI, наразі `supportsStreamingUsage`. | ## Довідник `modelPricing` -Використовуйте `modelPricing`, коли провайдеру потрібна поведінка ціноутворення -control plane до завантаження середовища виконання. Кеш цін Gateway зчитує ці -метадані без імпорту коду середовища виконання провайдера. +Використовуйте `modelPricing`, коли провайдеру потрібна поведінка ціноутворення control-plane до +завантаження середовища виконання. Кеш ціноутворення Gateway читає ці метадані без імпорту +коду середовища виконання провайдера. ```json { @@ -895,149 +893,138 @@ control plane до завантаження середовища виконан Поля провайдера: -| Поле | Тип | Що воно означає | -| ------------ | ----------------- | ------------------------------------------------------------------------------------------------- | -| `external` | `boolean` | Установіть `false` для локальних/саморозгорнутих провайдерів, які ніколи не мають отримувати ціни OpenRouter або LiteLLM. | -| `openRouter` | `false \| object` | Зіставлення для пошуку цін OpenRouter. `false` вимикає пошук OpenRouter для цього провайдера. | -| `liteLLM` | `false \| object` | Зіставлення для пошуку цін LiteLLM. `false` вимикає пошук LiteLLM для цього провайдера. | +| Поле | Тип | Що воно означає | +| ------------ | ----------------- | ----------------------------------------------------------------------------------------------- | +| `external` | `boolean` | Установіть `false` для локальних/self-hosted провайдерів, які ніколи не мають запитувати ціни OpenRouter або LiteLLM. | +| `openRouter` | `false \| object` | Зіставлення пошуку цін OpenRouter. `false` вимикає пошук OpenRouter для цього провайдера. | +| `liteLLM` | `false \| object` | Зіставлення пошуку цін LiteLLM. `false` вимикає пошук LiteLLM для цього провайдера. | Поля джерела: -| Поле | Тип | Що воно означає | -| -------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------ | -| `provider` | `string` | Ідентифікатор провайдера зовнішнього каталогу, якщо він відрізняється від ідентифікатора провайдера OpenClaw, наприклад `z-ai` для провайдера `zai`. | -| `passthroughProviderModel` | `boolean` | Обробляти ідентифікатори моделей, що містять `/`, як вкладені посилання provider/model; корисно для проксі-провайдерів, таких як OpenRouter. | -| `modelIdTransforms` | `"version-dots"[]` | Додаткові варіанти ідентифікаторів моделей для зовнішнього каталогу. `version-dots` пробує версії з крапками, як-от `claude-opus-4.6`. | +| Поле | Тип | Що воно означає | +| -------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------- | +| `provider` | `string` | Ідентифікатор провайдера у зовнішньому каталозі, якщо він відрізняється від ідентифікатора провайдера OpenClaw, наприклад `z-ai` для провайдера `zai`. | +| `passthroughProviderModel` | `boolean` | Розглядати ідентифікатори моделей, що містять `/`, як вкладені посилання `provider/model`; корисно для проксі-провайдерів, таких як OpenRouter. | +| `modelIdTransforms` | `"version-dots"[]` | Додаткові варіанти ідентифікаторів моделей у зовнішньому каталозі. `version-dots` пробує версії з крапками, як-от `claude-opus-4.6`. | ### Індекс провайдерів OpenClaw -Індекс провайдерів OpenClaw — це preview-метадані провайдерів, якими володіє -OpenClaw, для провайдерів, plugins яких можуть ще не бути встановлені. Він не -є частиною маніфесту plugin. Маніфести plugin залишаються авторитетним джерелом -для встановлених plugins. Індекс провайдерів — це внутрішній резервний -контракт, який споживатимуть майбутні поверхні інстальованого провайдера та -засобу вибору моделі до встановлення, коли plugin провайдера не встановлений. +Індекс провайдерів OpenClaw — це preview-метадані провайдерів, якими володіє OpenClaw, для провайдерів, +чиї Plugin можуть бути ще не встановлені. Він не є частиною маніфесту Plugin. +Маніфести Plugin залишаються авторитетним джерелом для встановлених Plugin. Індекс провайдерів — це +внутрішній резервний контракт, який у майбутньому використовуватимуть поверхні провайдерів, що можна встановити, і +засоби вибору моделей до встановлення, коли Plugin провайдера не встановлено. Порядок авторитетності каталогу: 1. Конфігурація користувача. -2. `modelCatalog` маніфесту встановленого plugin. +2. `modelCatalog` маніфесту встановленого Plugin. 3. Кеш каталогу моделей після явного оновлення. 4. Preview-рядки індексу провайдерів OpenClaw. -Індекс провайдерів не повинен містити секрети, стан увімкнення, хуки -середовища виконання або актуальні дані моделей, специфічні для облікового -запису. Його preview-каталоги використовують ту саму форму рядка провайдера -`modelCatalog`, що й маніфести plugin, але мають обмежуватися стабільними -метаданими відображення, якщо тільки поля адаптера середовища виконання, такі -як `api`, `baseUrl`, ціноутворення або прапорці сумісності, не підтримуються -навмисно узгодженими з маніфестом встановленого plugin. Провайдери з актуальним -виявленням через `/models` мають записувати оновлені рядки через явний шлях -кешу каталогу моделей замість того, щоб під час звичайного виведення списку або -онбордингу викликати API провайдера. +Індекс провайдерів не повинен містити секрети, стан увімкнення, hook середовища виконання або +активні специфічні для облікового запису дані моделей. Його preview-каталоги використовують ту саму +форму рядка провайдера `modelCatalog`, що й маніфести Plugin, але мають обмежуватися +стабільними метаданими відображення, якщо тільки поля адаптера середовища виконання, як-от `api`, +`baseUrl`, ціноутворення або прапорці сумісності, не підтримуються навмисно узгодженими з +маніфестом встановленого Plugin. Провайдери з активним виявленням `/models` мають +записувати оновлені рядки через явний шлях кешу каталогу моделей замість того, щоб під час +звичайного відображення списків або онбордингу викликати API провайдера. -Записи індексу провайдерів також можуть містити метадані встановлюваного -plugin для провайдерів, plugin яких винесено з ядра або які ще не встановлені -з інших причин. Ці метадані повторюють шаблон каталогу каналів: назви пакета, -специфікації npm install, очікувана цілісність і недорогі мітки варіантів -автентифікації достатні, щоб показати встановлюваний варіант setup. Щойно -plugin встановлено, його маніфест має перевагу, а запис індексу провайдерів для -цього провайдера ігнорується. +Записи індексу провайдерів також можуть містити метадані Plugin, який можна встановити, для провайдерів, +чий Plugin було винесено з ядра або які з інших причин ще не встановлені. Ці +метадані повторюють шаблон каталогу channel: назви пакунка, специфікації встановлення npm, +очікуваної цілісності та недорогих міток варіантів автентифікації достатньо, щоб показати +варіант налаштування, який можна встановити. Щойно Plugin буде встановлено, його маніфест +отримує пріоритет, а запис індексу провайдерів для цього провайдера ігнорується. -Застарілі верхньорівневі ключі можливостей не рекомендовані. Використовуйте -`openclaw doctor --fix`, щоб перенести `speechProviders`, -`realtimeTranscriptionProviders`, `realtimeVoiceProviders`, -`mediaUnderstandingProviders`, `imageGenerationProviders`, -`videoGenerationProviders`, `webFetchProviders` і `webSearchProviders` до -`contracts`; звичайне завантаження маніфесту більше не трактує ці -верхньорівневі поля як володіння можливостями. +Застарілі ключі можливостей верхнього рівня не рекомендовані. Використовуйте `openclaw doctor --fix`, щоб +перемістити `speechProviders`, `realtimeTranscriptionProviders`, +`realtimeVoiceProviders`, `mediaUnderstandingProviders`, +`imageGenerationProviders`, `videoGenerationProviders`, +`webFetchProviders` і `webSearchProviders` під `contracts`; звичайне +завантаження маніфесту більше не розглядає ці поля верхнього рівня як +володіння можливостями. -## Маніфест проти package.json +## Маніфест і `package.json` -Ці два файли виконують різні ролі: +Ці два файли виконують різні завдання: -| Файл | Для чого його використовувати | -| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------ | -| `openclaw.plugin.json` | Виявлення, перевірка конфігурації, метадані варіантів автентифікації та підказки UI, які мають існувати до запуску коду plugin | +| Файл | Для чого його використовувати | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------- | +| `openclaw.plugin.json` | Виявлення, валідація конфігурації, метадані варіантів автентифікації та підказки UI, які мають існувати до запуску коду Plugin | | `package.json` | Метадані npm, встановлення залежностей і блок `openclaw`, який використовується для точок входу, обмежень установлення, setup або метаданих каталогу | -Якщо ви не впевнені, куди належить певний фрагмент метаданих, користуйтеся -таким правилом: +Якщо ви не впевнені, куди належить певний фрагмент метаданих, використовуйте таке правило: -- якщо OpenClaw має знати це до завантаження коду plugin, помістіть це в `openclaw.plugin.json` -- якщо це стосується пакування, файлів точок входу або поведінки npm install, помістіть це в `package.json` +- якщо OpenClaw має знати це до завантаження коду Plugin, помістіть це в `openclaw.plugin.json` +- якщо це стосується пакування, файлів точок входу або поведінки встановлення npm, помістіть це в `package.json` -### Поля package.json, що впливають на виявлення +### Поля `package.json`, які впливають на виявлення -Деякі метадані plugin до запуску середовища виконання навмисно зберігаються в -`package.json` у блоці `openclaw`, а не в `openclaw.plugin.json`. +Деякі метадані Plugin до запуску середовища виконання навмисно зберігаються в `package.json` у блоці +`openclaw`, а не в `openclaw.plugin.json`. Важливі приклади: -| Поле | Що воно означає | -| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `openclaw.extensions` | Оголошує точки входу власного plugin. Мають залишатися в каталозі пакета plugin. | -| `openclaw.runtimeExtensions` | Оголошує точки входу зібраного середовища виконання JavaScript для встановлених пакетів. Мають залишатися в каталозі пакета plugin. | -| `openclaw.setupEntry` | Легковагова точка входу лише для setup, що використовується під час онбордингу, відкладеного запуску каналу та виявлення статусу каналу/SecretRef лише для читання. Має залишатися в каталозі пакета plugin. | -| `openclaw.runtimeSetupEntry` | Оголошує точку входу зібраного JavaScript для setup для встановлених пакетів. Має залишатися в каталозі пакета plugin. | -| `openclaw.channel` | Недорогі метадані каталогу каналів, такі як мітки, шляхи документації, псевдоніми та текст вибору. | -| `openclaw.channel.commands` | Статичні метадані автовизначених значень для вбудованих команд і вбудованих Skills, які використовуються поверхнями конфігурації, аудиту та списку команд до завантаження середовища виконання каналу. | -| `openclaw.channel.configuredState` | Легковагові метадані перевірки налаштованого стану, які можуть відповісти на запитання «чи вже існує setup лише через env?» без завантаження повного середовища виконання каналу. | -| `openclaw.channel.persistedAuthState` | Легковагові метадані перевірки збереженого стану автентифікації, які можуть відповісти на запитання «чи вже є якийсь виконаний вхід?» без завантаження повного середовища виконання каналу. | -| `openclaw.install.npmSpec` / `openclaw.install.localPath` | Підказки для встановлення/оновлення для вбудованих і зовнішньо опублікованих plugins. | -| `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` | Оголошує точки входу built JavaScript runtime для встановлених пакунків. Має залишатися в межах каталогу пакунка Plugin. | +| `openclaw.setupEntry` | Легковагова точка входу лише для setup, яка використовується під час онбордингу, відкладеного запуску channel та виявлення статусу channel/SecretRef лише для читання. Має залишатися в межах каталогу пакунка Plugin. | +| `openclaw.runtimeSetupEntry` | Оголошує built JavaScript setup entrypoint для встановлених пакунків. Має залишатися в межах каталогу пакунка Plugin. | +| `openclaw.channel` | Недорогі метадані каталогу channel, як-от мітки, шляхи до документації, аліаси та текст для вибору. | +| `openclaw.channel.commands` | Статичні метадані auto-типових значень native command і native skill, що використовуються поверхнями конфігурації, аудиту та списку команд до завантаження середовища виконання channel. | +| `openclaw.channel.configuredState` | Легковагові метадані перевірки configured-state, які можуть відповісти на запитання «чи вже існує налаштування лише через env?» без завантаження повного середовища виконання channel. | +| `openclaw.channel.persistedAuthState` | Легковагові метадані перевірки persisted-auth, які можуть відповісти на запитання «чи вже є якийсь виконаний вхід?» без завантаження повного середовища виконання channel. | +| `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` | Дозволяє завантажувати поверхні channel лише для setup до повного Plugin channel під час запуску. | -Метадані маніфесту визначають, які варіанти провайдера/каналу/setup -з’являються під час онбордингу до завантаження середовища виконання. -`package.json#openclaw.install` повідомляє онбордингу, як отримати або -увімкнути цей plugin, коли користувач вибирає один із цих варіантів. Не -переміщуйте підказки встановлення до `openclaw.plugin.json`. +Метадані маніфесту визначають, які варіанти провайдера/channel/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, яке можна ним -закріпити. Коли `expectedIntegrity` присутній, потоки встановлення/оновлення -застосовують його; коли його пропущено, розв’язання реєстру записується без -закріплення цілісності. +Точне закріплення версії npm уже міститься в `npmSpec`, наприклад +`"npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3"`. Офіційні зовнішні записи каталогу +мають поєднувати точні специфікації з `expectedIntegrity`, щоб потоки оновлення безпечно +завершувалися помилкою, якщо отриманий артефакт npm більше не відповідає закріпленому релізу. +Інтерактивний онбординг і далі пропонує довірені npm-специфікації реєстру, включно з простими +іменами пакунків і dist-tag, для сумісності. Діагностика каталогу може +розрізняти точні, плаваючі, закріплені за цілісністю, без цілісності, з невідповідністю +імені пакунка та невалідні джерела default-choice. Вона також попереджає, коли +`expectedIntegrity` присутній, але немає валідного джерела npm, до якого його можна прив’язати. +Коли `expectedIntegrity` присутній, +потоки встановлення/оновлення перевіряють його; коли його не вказано, розв’язання реєстру +фіксується без закріплення за цілісністю. -Plugins каналів мають надавати `openclaw.setupEntry`, коли статус, список -каналів або сканування SecretRef потребують визначити налаштовані облікові -записи без завантаження повного середовища виконання. Запис setup має -надавати метадані каналу разом із безпечними для setup адаптерами -конфігурації, статусу та секретів; мережеві клієнти, прослуховувачі Gateway і -транспортні середовища виконання слід залишати в основній точці входу -розширення. +Plugin channel мають надавати `openclaw.setupEntry`, коли статус, список channel +або сканування SecretRef повинні визначати налаштовані облікові записи без завантаження повного +середовища виконання. Запис setup має надавати метадані channel разом із безпечними для setup +адаптерами конфігурації, статусу та секретів; мережеві клієнти, слухачі gateway і +transport runtime залишайте в основній точці входу extension. -Поля точок входу середовища виконання не скасовують перевірки меж пакета для -полів точок входу вихідного коду. Наприклад, `openclaw.runtimeExtensions` не -може зробити придатним до завантаження шлях `openclaw.extensions`, що виходить -за межі. +Поля точок входу середовища виконання не скасовують перевірки меж пакунка для полів +точок входу вихідного коду. Наприклад, `openclaw.runtimeExtensions` не може зробити +придатним до завантаження шлях `openclaw.extensions`, що виходить за межі. -`openclaw.install.allowInvalidConfigRecovery` навмисно має вузьку дію. Воно не -робить довільно зламані конфігурації придатними до встановлення. Наразі воно -лише дозволяє потокам встановлення відновлюватися після певних застарілих -збоїв оновлення вбудованих plugins, наприклад відсутнього шляху вбудованого -plugin або застарілого запису `channels.` для цього самого вбудованого -plugin. Непов’язані помилки конфігурації все одно блокують встановлення й -спрямовують операторів до `openclaw doctor --fix`. +`openclaw.install.allowInvalidConfigRecovery` є навмисно вузьким. Воно +не робить довільно зламані конфігурації придатними до встановлення. Наразі воно лише дозволяє потокам установлення +відновлюватися після конкретних застарілих збоїв оновлення вбудованого Plugin, наприклад +відсутнього шляху до вбудованого Plugin або застарілого запису `channels.` для цього самого +вбудованого Plugin. Непов’язані помилки конфігурації все одно блокують установлення та спрямовують операторів +до `openclaw doctor --fix`. -`openclaw.channel.persistedAuthState` — це метадані пакета для крихітного -модуля перевірки: +`openclaw.channel.persistedAuthState` — це метадані пакунка для крихітного модуля +перевірки: ```json { @@ -1053,13 +1040,13 @@ plugin. Непов’язані помилки конфігурації все } ``` -Використовуйте це, коли потокам setup, doctor або configured-state потрібна -недорога перевірка автентифікації yes/no до завантаження повного plugin каналу. -Цільовий експорт має бути невеликою функцією, яка зчитує лише збережений стан; -не пропускайте її через повний barrel середовища виконання каналу. +Використовуйте це, коли потоки setup, doctor або configured-state потребують недорогої +перевірки автентифікації типу так/ні до завантаження повного Plugin channel. Цільовий export має бути невеликою +функцією, яка читає лише persisted state; не проводьте його через широкий barrel +повного середовища виконання channel. -`openclaw.channel.configuredState` має ту саму форму для недорогих перевірок -налаштованого стану лише через env: +`openclaw.channel.configuredState` використовує ту саму форму для недорогих перевірок +configured-state лише через env: ```json { @@ -1075,69 +1062,68 @@ plugin. Непов’язані помилки конфігурації все } ``` -Використовуйте це, коли канал може визначити налаштований стан за env або -іншими невеликими не-runtime-входами. Якщо перевірка потребує повного -розв’язання конфігурації або реального середовища виконання каналу, залишайте -цю логіку в хуку plugin `config.hasConfiguredState`. +Використовуйте це, коли channel може визначати configured-state з env або інших малих +вхідних даних, не пов’язаних із середовищем виконання. Якщо перевірка потребує повного розв’язання конфігурації або реального +середовища виконання channel, залиште цю логіку в hook Plugin `config.hasConfiguredState`. -## Пріоритет виявлення (дубльовані ідентифікатори plugin) +## Пріоритет виявлення (дубльовані ідентифікатори Plugin) -OpenClaw виявляє plugins із кількох коренів (вбудовані, глобально встановлені, workspace, шляхи, явно вибрані в конфігурації). Якщо два результати виявлення мають однаковий `id`, зберігається лише маніфест із **найвищим пріоритетом**; дублікати з нижчим пріоритетом відкидаються замість завантаження поруч. +OpenClaw виявляє Plugin із кількох коренів (вбудовані, глобально встановлені, у workspace, шляхи, явно вибрані в конфігурації). Якщо два виявлені Plugin мають той самий `id`, зберігається лише маніфест із **найвищим пріоритетом**; дублікати з нижчим пріоритетом відкидаються, а не завантажуються поруч із ним. Пріоритет, від найвищого до найнижчого: 1. **Вибраний у конфігурації** — шлях, явно закріплений у `plugins.entries.` -2. **Вбудований** — plugins, що постачаються з OpenClaw -3. **Глобально встановлений** — plugins, установлені в глобальний корінь plugins OpenClaw -4. **Workspace** — plugins, виявлені відносно поточного workspace +2. **Вбудований** — Plugin, що постачаються з OpenClaw +3. **Глобально встановлений** — Plugin, установлені в глобальний корінь Plugin OpenClaw +4. **Workspace** — Plugin, виявлені відносно поточного workspace Наслідки: -- Fork або застаріла копія вбудованого plugin у workspace не затьмарить вбудовану збірку. -- Щоб справді перевизначити вбудований plugin локальним, закріпіть його через `plugins.entries.`, щоб він переміг за пріоритетом, а не покладайтесь на виявлення у workspace. -- Відкидання дублікатів журналюється, щоб Doctor і діагностика запуску могли вказати на відкинуту копію. +- Fork або застаріла копія вбудованого Plugin у workspace не затьмарить вбудовану збірку. +- Щоб справді перевизначити вбудований Plugin локальним, закріпіть його через `plugins.entries.`, щоб він переміг за пріоритетом, а не покладався на виявлення у workspace. +- Відкидання дублікатів записується в журнал, щоб Doctor і діагностика запуску могли вказати на відкинуту копію. ## Вимоги до JSON Schema -- **Кожен plugin має постачатися з JSON Schema**, навіть якщо він не приймає конфігурацію. -- Порожня схема допустима (наприклад, `{ "type": "object", "additionalProperties": false }`). +- **Кожен Plugin має постачатися з JSON Schema**, навіть якщо він не приймає конфігурацію. +- Порожня схема припустима (наприклад, `{ "type": "object", "additionalProperties": false }`). - Схеми перевіряються під час читання/запису конфігурації, а не під час виконання. -## Поведінка перевірки +## Поведінка валідації -- Невідомі ключі `channels.*` — це **помилки**, якщо тільки ідентифікатор каналу не оголошено маніфестом plugin. +- Невідомі ключі `channels.*` є **помилками**, якщо тільки ідентифікатор channel не оголошено + маніфестом Plugin. - `plugins.entries.`, `plugins.allow`, `plugins.deny` і `plugins.slots.*` - мають посилатися на **виявлювані** ідентифікатори plugin. Невідомі - ідентифікатори — це **помилки**. -- Якщо plugin встановлено, але має зламаний або відсутній маніфест чи схему, - перевірка завершується помилкою, а Doctor повідомляє про помилку plugin. -- Якщо конфігурація plugin існує, але plugin **вимкнений**, конфігурація - зберігається, а в Doctor і журналах показується **попередження**. + мають посилатися на **такі ідентифікатори Plugin, які можна виявити**. Невідомі ідентифікатори є **помилками**. +- Якщо Plugin встановлено, але він має зламаний або відсутній маніфест чи схему, + валідація завершується помилкою, а Doctor повідомляє про помилку Plugin. +- Якщо конфігурація Plugin існує, але Plugin **вимкнено**, конфігурація зберігається й + у Doctor + журналах показується **попередження**. -Повну схему `plugins.*` дивіться в [довіднику конфігурації](/uk/gateway/configuration). +Див. [Довідник конфігурації](/uk/gateway/configuration) для повної схеми `plugins.*`. ## Примітки -- Маніфест **обов’язковий для власних plugins OpenClaw**, включно із завантаженнями з локальної файлової системи. Середовище виконання все одно завантажує модуль plugin окремо; маніфест потрібен лише для виявлення + перевірки. -- Власні маніфести розбираються за допомогою JSON5, тому коментарі, кінцеві коми та ключі без лапок дозволені, якщо кінцеве значення все ще є об’єктом. -- Завантажувач маніфесту зчитує лише документовані поля маніфесту. Уникайте власних ключів верхнього рівня. -- `channels`, `providers`, `cliBackends` і `skills` можна не вказувати, якщо plugin їх не потребує. -- `providerDiscoveryEntry` має залишатися легковаговим і не повинен імпортувати широкий код середовища виконання; використовуйте його для статичних метаданих каталогу провайдерів або вузьких дескрипторів виявлення, а не для виконання під час запиту. -- Ексклюзивні типи plugins вибираються через `plugins.slots.*`: `kind: "memory"` через `plugins.slots.memory`, `kind: "context-engine"` через `plugins.slots.contextEngine` (типово `legacy`). -- Метадані змінних середовища (`setup.providers[].envVars`, застарілий `providerAuthEnvVars` і `channelEnvVars`) є лише декларативними. Статус, аудит, перевірка доставки Cron та інші поверхні лише для читання все одно застосовують довіру до plugin і політику ефективної активації, перш ніж вважати змінну середовища налаштованою. -- Метадані майстра середовища виконання, для яких потрібен код провайдера, дивіться в [хуках середовища виконання провайдера](/uk/plugins/architecture-internals#provider-runtime-hooks). -- Якщо ваш plugin залежить від власних модулів, задокументуйте кроки збірки та всі вимоги до allowlist менеджера пакетів (наприклад, pnpm `allow-build-scripts` + `pnpm rebuild `). +- Маніфест **обов’язковий для рідних 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`). +- Метадані env var (`setup.providers[].envVars`, застарілий `providerAuthEnvVars` і `channelEnvVars`) є лише декларативними. Поверхні статусу, аудиту, перевірки доставки Cron та інші поверхні лише для читання все одно застосовують політику довіри до Plugin і ефективної активації, перш ніж вважати env var налаштованою. +- Для метаданих wizard середовища виконання, які потребують коду провайдера, див. [Hook середовища виконання провайдера](/uk/plugins/architecture-internals#provider-runtime-hooks). +- Якщо ваш Plugin залежить від native module, задокументуйте кроки збірки та будь-які вимоги до allowlist менеджера пакунків (наприклад, pnpm `allow-build-scripts` + `pnpm rebuild `). -## Пов’язано +## Пов’язані матеріали - - Початок роботи з plugins. + + Початок роботи з Plugins. - + Внутрішня архітектура та модель можливостей. - Довідник SDK plugin і імпортів підшляхів. + Довідник SDK Plugin та імпорти підшляхів.