chore(i18n): refresh uk translations
This commit is contained in:
parent
cfc5072ff8
commit
d138656d0a
@ -1,81 +1,66 @@
|
||||
---
|
||||
read_when:
|
||||
- Ви створюєте Plugin для OpenClaw
|
||||
- Вам потрібно постачати схему конфігурації Plugin або налагоджувати помилки валідації Plugin
|
||||
summary: Вимоги до маніфесту Plugin і схеми JSON (сувора валідація конфігурації)
|
||||
title: Маніфест Plugin
|
||||
- Ви створюєте plugin для OpenClaw
|
||||
- Вам потрібно постачати схему конфігурації plugin або налагодити помилки валідації plugin
|
||||
summary: Вимоги до маніфесту Plugin + JSON schema (сувора валідація конфігурації)
|
||||
title: маніфест Plugin
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T07:42:09Z"
|
||||
generated_at: "2026-04-23T16:56:56Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: d48810f604aa0c3ff8553528cfa4cb735d1d5e7a15b1bbca6152070d6c8f9cce
|
||||
source_hash: e9e7bca47b076cc49080bd6921ef9d295c840e9a19c5271dbfea83d9882ea404
|
||||
source_path: plugins/manifest.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Маніфест Plugin (`openclaw.plugin.json`)
|
||||
|
||||
Ця сторінка стосується лише **власного маніфесту Plugin OpenClaw**.
|
||||
Ця сторінка стосується лише **нативного маніфесту plugin OpenClaw**.
|
||||
|
||||
Сумісні макети пакетів описано в [Пакети Plugin](/uk/plugins/bundles).
|
||||
Щоб дізнатися про сумісні макети bundle, див. [Plugin bundles](/uk/plugins/bundles).
|
||||
|
||||
Сумісні формати пакетів використовують інші файли маніфесту:
|
||||
Сумісні формати bundle використовують інші файли маніфесту:
|
||||
|
||||
- пакет Codex: `.codex-plugin/plugin.json`
|
||||
- пакет Claude: `.claude-plugin/plugin.json` або стандартний макет компонента Claude
|
||||
- Codex bundle: `.codex-plugin/plugin.json`
|
||||
- Claude bundle: `.claude-plugin/plugin.json` або стандартний макет компонента Claude
|
||||
без маніфесту
|
||||
- пакет Cursor: `.cursor-plugin/plugin.json`
|
||||
- Cursor bundle: `.cursor-plugin/plugin.json`
|
||||
|
||||
OpenClaw також автоматично визначає ці макети пакетів, але вони не проходять валідацію
|
||||
OpenClaw також автоматично визначає ці макети bundle, але вони не проходять валідацію
|
||||
за схемою `openclaw.plugin.json`, описаною тут.
|
||||
|
||||
Для сумісних пакетів OpenClaw наразі зчитує метадані пакета разом з оголошеними
|
||||
коренями Skills, коренями команд Claude, значеннями за замовчуванням `settings.json` у пакеті Claude,
|
||||
значеннями LSP за замовчуванням у пакеті Claude та підтримуваними наборами хуків, коли макет відповідає
|
||||
Для сумісних bundle OpenClaw наразі читає метадані bundle разом із оголошеними
|
||||
коренями skills, коренями команд Claude, типовими значеннями `settings.json` для bundle Claude,
|
||||
типовими значеннями LSP для bundle 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).
|
||||
Щодо нативної моделі можливостей і поточних рекомендацій із зовнішньої сумісності:
|
||||
[Capability model](/uk/plugins/architecture#public-capability-model).
|
||||
|
||||
## Що робить цей файл
|
||||
|
||||
`openclaw.plugin.json` — це метадані, які OpenClaw зчитує перед завантаженням коду
|
||||
вашого Plugin.
|
||||
`openclaw.plugin.json` — це метадані, які OpenClaw читає **до завантаження коду
|
||||
вашого plugin**. Усе нижче має бути достатньо легким для перевірки без запуску
|
||||
середовища виконання plugin.
|
||||
|
||||
Використовуйте його для:
|
||||
**Використовуйте його для:**
|
||||
|
||||
- ідентичності Plugin
|
||||
- валідації конфігурації
|
||||
- метаданих автентифікації та онбордингу, які мають бути доступні без запуску
|
||||
середовища виконання Plugin
|
||||
- недорогих підказок активації, які поверхні control plane можуть перевіряти до
|
||||
завантаження середовища виконання
|
||||
- недорогих дескрипторів налаштування, які поверхні налаштування/онбордингу можуть перевіряти до
|
||||
завантаження середовища виконання
|
||||
- метаданих псевдонімів і автоувімкнення, які мають визначатися до завантаження середовища виконання Plugin
|
||||
- метаданих скороченого володіння сімейством моделей, які мають автоматично активувати
|
||||
Plugin до завантаження середовища виконання
|
||||
- статичних знімків володіння можливостями, що використовуються для сумісного вбудованого з’єднання та
|
||||
покриття контрактів
|
||||
- недорогих метаданих запускальника QA, які спільний хост `openclaw qa` може перевіряти
|
||||
до завантаження середовища виконання Plugin
|
||||
- метаданих конфігурації, специфічних для каналу, які мають об’єднуватися в поверхні каталогу та валідації
|
||||
без завантаження середовища виконання
|
||||
- підказок UI конфігурації
|
||||
- ідентичності plugin, валідації конфігурації та підказок UI конфігурації
|
||||
- метаданих auth, онбордингу та налаштування (псевдонім, автоувімкнення, env vars провайдера, варіанти auth)
|
||||
- підказок активації для поверхонь control-plane
|
||||
- скороченого володіння сімействами моделей
|
||||
- статичних знімків володіння можливостями (`contracts`)
|
||||
- метаданих QA runner, які може перевіряти спільний хост `openclaw qa`
|
||||
- метаданих конфігурації, специфічних для channel, які об’єднуються в поверхні каталогу та валідації
|
||||
|
||||
Не використовуйте його для:
|
||||
|
||||
- реєстрації поведінки під час виконання
|
||||
- оголошення точок входу коду
|
||||
- метаданих встановлення npm
|
||||
|
||||
Це належить до коду вашого Plugin і `package.json`.
|
||||
**Не використовуйте його для:** реєстрації поведінки середовища виконання, оголошення
|
||||
точок входу коду або метаданих встановлення npm. Вони мають бути у коді вашого plugin і в `package.json`.
|
||||
|
||||
## Мінімальний приклад
|
||||
|
||||
@ -96,7 +81,7 @@ OpenClaw також автоматично визначає ці макети п
|
||||
{
|
||||
"id": "openrouter",
|
||||
"name": "OpenRouter",
|
||||
"description": "OpenRouter provider plugin",
|
||||
"description": "Плагін провайдера OpenRouter",
|
||||
"version": "1.0.0",
|
||||
"providers": ["openrouter"],
|
||||
"modelSupport": {
|
||||
@ -124,19 +109,19 @@ OpenClaw також автоматично визначає ці макети п
|
||||
"provider": "openrouter",
|
||||
"method": "api-key",
|
||||
"choiceId": "openrouter-api-key",
|
||||
"choiceLabel": "OpenRouter API key",
|
||||
"choiceLabel": "Ключ API OpenRouter",
|
||||
"groupId": "openrouter",
|
||||
"groupLabel": "OpenRouter",
|
||||
"optionKey": "openrouterApiKey",
|
||||
"cliFlag": "--openrouter-api-key",
|
||||
"cliOption": "--openrouter-api-key <key>",
|
||||
"cliDescription": "OpenRouter API key",
|
||||
"cliDescription": "Ключ API OpenRouter",
|
||||
"onboardingScopes": ["text-inference"]
|
||||
}
|
||||
],
|
||||
"uiHints": {
|
||||
"apiKey": {
|
||||
"label": "API key",
|
||||
"label": "Ключ API",
|
||||
"placeholder": "sk-or-v1-...",
|
||||
"sensitive": true
|
||||
}
|
||||
@ -155,67 +140,67 @@ OpenClaw також автоматично визначає ці макети п
|
||||
|
||||
## Довідник полів верхнього рівня
|
||||
|
||||
| Поле | Обов’язкове | Тип | Що воно означає |
|
||||
| ------------------------------------ | ----------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `id` | Так | `string` | Канонічний id Plugin. Це id, який використовується в `plugins.entries.<id>`. |
|
||||
| `configSchema` | Так | `object` | Вбудована схема JSON для конфігурації цього Plugin. |
|
||||
| `enabledByDefault` | Ні | `true` | Позначає вбудований Plugin як увімкнений за замовчуванням. Пропустіть це поле або встановіть будь-яке значення, відмінне від `true`, щоб Plugin лишався вимкненим за замовчуванням. |
|
||||
| `legacyPluginIds` | Ні | `string[]` | Застарілі id, які нормалізуються до цього канонічного id Plugin. |
|
||||
| `autoEnableWhenConfiguredProviders` | Ні | `string[]` | Id провайдерів, які мають автоматично вмикати цей Plugin, коли автентифікація, конфігурація або посилання на моделі згадують їх. |
|
||||
| `kind` | Ні | `"memory"` \| `"context-engine"` | Оголошує ексклюзивний тип Plugin, який використовується `plugins.slots.*`. |
|
||||
| `channels` | Ні | `string[]` | Id каналів, якими володіє цей Plugin. Використовується для виявлення та валідації конфігурації. |
|
||||
| `providers` | Ні | `string[]` | Id провайдерів, якими володіє цей Plugin. |
|
||||
| `modelSupport` | Ні | `object` | Скорочені метадані сімейства моделей, якими володіє маніфест і які використовуються для автоматичного завантаження Plugin до запуску середовища виконання. |
|
||||
| `providerEndpoints` | Ні | `object[]` | Метадані хостів/`baseUrl` кінцевих точок, якими володіє маніфест, для маршрутів провайдера, які ядро повинно класифікувати до завантаження середовища виконання провайдера. |
|
||||
| `cliBackends` | Ні | `string[]` | Id backend-ів інференсу CLI, якими володіє цей Plugin. Використовується для автоактивації під час запуску з явних посилань у конфігурації. |
|
||||
| `syntheticAuthRefs` | Ні | `string[]` | Посилання на провайдери або backend-и CLI, для яких під час холодного виявлення моделей до завантаження середовища виконання слід перевіряти синтетичний хук автентифікації, що належить Plugin. |
|
||||
| `nonSecretAuthMarkers` | Ні | `string[]` | Значення-заповнювачі API-ключів, що належать вбудованому Plugin і представляють несекретний локальний стан, OAuth або ambient credential state. |
|
||||
| `commandAliases` | Ні | `object[]` | Імена команд, що належать цьому Plugin і мають видавати діагностику конфігурації та CLI з урахуванням Plugin до завантаження середовища виконання. |
|
||||
| `providerAuthEnvVars` | Ні | `Record<string, string[]>` | Недорогі метадані env для автентифікації провайдера, які OpenClaw може перевіряти без завантаження коду Plugin. |
|
||||
| `providerAuthAliases` | Ні | `Record<string, string>` | Id провайдерів, які мають повторно використовувати інший id провайдера для пошуку автентифікації, наприклад провайдер кодування, який спільно використовує API-ключ і профілі автентифікації базового провайдера. |
|
||||
| `channelEnvVars` | Ні | `Record<string, string[]>` | Недорогі метадані env каналу, які OpenClaw може перевіряти без завантаження коду Plugin. Використовуйте це для керованого env налаштування каналу або поверхонь автентифікації, які мають бачити універсальні допоміжні засоби запуску/конфігурації. |
|
||||
| `providerAuthChoices` | Ні | `object[]` | Недорогі метадані вибору автентифікації для селекторів онбордингу, визначення пріоритетного провайдера та простого зв’язування прапорців CLI. |
|
||||
| `activation` | Ні | `object` | Недорогі підказки активації для завантаження, що запускається провайдером, командою, каналом, маршрутом і можливістю. Лише метадані; фактичною поведінкою як і раніше володіє середовище виконання Plugin. |
|
||||
| `setup` | Ні | `object` | Недорогі дескриптори налаштування/онбордингу, які поверхні виявлення та налаштування можуть перевіряти без завантаження середовища виконання Plugin. |
|
||||
| `qaRunners` | Ні | `object[]` | Недорогі дескриптори запускальників QA, які використовує спільний хост `openclaw qa` до завантаження середовища виконання Plugin. |
|
||||
| `contracts` | Ні | `object` | Статичний знімок вбудованих можливостей для зовнішніх хуків автентифікації, мовлення, транскрибування в реальному часі, голосу в реальному часі, розуміння медіа, генерації зображень, генерації музики, генерації відео, web-fetch, web search і володіння інструментами. |
|
||||
| `mediaUnderstandingProviderMetadata` | Ні | `Record<string, object>` | Недорогі значення за замовчуванням для розуміння медіа для id провайдерів, оголошених у `contracts.mediaUnderstandingProviders`. |
|
||||
| `channelConfigs` | Ні | `Record<string, object>` | Метадані конфігурації каналу, якими володіє маніфест і які об’єднуються в поверхні виявлення та валідації до завантаження середовища виконання. |
|
||||
| `skills` | Ні | `string[]` | Каталоги Skills для завантаження, відносно кореня Plugin. |
|
||||
| `name` | Ні | `string` | Зрозуміла людині назва Plugin. |
|
||||
| `description` | Ні | `string` | Короткий опис, що показується в поверхнях Plugin. |
|
||||
| `version` | Ні | `string` | Інформаційна версія Plugin. |
|
||||
| `uiHints` | Ні | `Record<string, object>` | Мітки UI, заповнювачі та підказки щодо чутливості для полів конфігурації. |
|
||||
| Поле | Обов’язкове | Тип | Що воно означає |
|
||||
| ------------------------------------ | ----------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `id` | Так | `string` | Канонічний id plugin. Це id, який використовується в `plugins.entries.<id>`. |
|
||||
| `configSchema` | Так | `object` | Вбудована JSON Schema для конфігурації цього plugin. |
|
||||
| `enabledByDefault` | Ні | `true` | Позначає вбудований plugin як увімкнений за замовчуванням. Не вказуйте це поле або задайте будь-яке значення, відмінне від `true`, щоб plugin залишався вимкненим за замовчуванням. |
|
||||
| `legacyPluginIds` | Ні | `string[]` | Застарілі id, які нормалізуються до цього канонічного id plugin. |
|
||||
| `autoEnableWhenConfiguredProviders` | Ні | `string[]` | Id провайдерів, які мають автоматично вмикати цей plugin, коли auth, конфігурація або посилання на моделі згадують їх. |
|
||||
| `kind` | Ні | `"memory"` \| `"context-engine"` | Оголошує ексклюзивний тип plugin, який використовується `plugins.slots.*`. |
|
||||
| `channels` | Ні | `string[]` | Id channel, якими володіє цей plugin. Використовується для виявлення та валідації конфігурації. |
|
||||
| `providers` | Ні | `string[]` | Id провайдерів, якими володіє цей plugin. |
|
||||
| `modelSupport` | Ні | `object` | Скорочені метадані сімейств моделей, якими володіє маніфест, що використовуються для автоматичного завантаження plugin до запуску середовища виконання. |
|
||||
| `providerEndpoints` | Ні | `object[]` | Метадані хостів endpoint/baseUrl для маршрутів провайдера, якими володіє маніфест, які ядро має класифікувати до завантаження середовища виконання провайдера. |
|
||||
| `cliBackends` | Ні | `string[]` | Id backend CLI inference, якими володіє цей plugin. Використовується для автоматичної активації під час запуску з явних посилань у конфігурації. |
|
||||
| `syntheticAuthRefs` | Ні | `string[]` | Посилання на провайдера або backend CLI, для яких під час холодного виявлення моделей до завантаження середовища виконання потрібно перевіряти синтетичний hook auth, що належить plugin. |
|
||||
| `nonSecretAuthMarkers` | Ні | `string[]` | Значення-заповнювачі ключів API, що належать вбудованому plugin і представляють несекретний локальний стан, OAuth або стан облікових даних середовища. |
|
||||
| `commandAliases` | Ні | `object[]` | Імена команд, якими володіє цей plugin і які мають створювати діагностику конфігурації та CLI з урахуванням plugin до завантаження середовища виконання. |
|
||||
| `providerAuthEnvVars` | Ні | `Record<string, string[]>` | Легкі метадані env для auth провайдера, які OpenClaw може перевіряти без завантаження коду plugin. |
|
||||
| `providerAuthAliases` | Ні | `Record<string, string>` | Id провайдерів, які мають повторно використовувати id іншого провайдера для пошуку auth, наприклад провайдер для кодування, що використовує спільний ключ API базового провайдера та профілі auth. |
|
||||
| `channelEnvVars` | Ні | `Record<string, string[]>` | Легкі метадані env для channel, які OpenClaw може перевіряти без завантаження коду plugin. Використовуйте це для налаштування channel через env або поверхонь auth, які мають бачити загальні допоміжні засоби запуску/конфігурації. |
|
||||
| `providerAuthChoices` | Ні | `object[]` | Легкі метадані варіантів auth для селекторів онбордингу, визначення пріоритетного провайдера та простого зв’язування прапорців CLI. |
|
||||
| `activation` | Ні | `object` | Легкі підказки активації для завантаження, що ініціюється провайдером, командою, channel, маршрутом і можливостями. Лише метадані; фактичною поведінкою як і раніше володіє середовище виконання plugin. |
|
||||
| `setup` | Ні | `object` | Легкі дескриптори налаштування/онбордингу, які поверхні виявлення та налаштування можуть перевіряти без завантаження середовища виконання plugin. |
|
||||
| `qaRunners` | Ні | `object[]` | Легкі дескриптори QA runner, які спільний хост `openclaw qa` використовує до завантаження середовища виконання plugin. |
|
||||
| `contracts` | Ні | `object` | Статичний знімок можливостей вбудованого plugin для зовнішніх hook auth, speech, realtime transcription, realtime voice, media-understanding, image-generation, music-generation, video-generation, web-fetch, web search і володіння tools. |
|
||||
| `mediaUnderstandingProviderMetadata` | Ні | `Record<string, object>` | Легкі типові значення media-understanding для id провайдерів, оголошених у `contracts.mediaUnderstandingProviders`. |
|
||||
| `channelConfigs` | Ні | `Record<string, object>` | Метадані конфігурації channel, якими володіє маніфест і які об’єднуються в поверхні виявлення та валідації до завантаження середовища виконання. |
|
||||
| `skills` | Ні | `string[]` | Каталоги Skills для завантаження, відносно кореня plugin. |
|
||||
| `name` | Ні | `string` | Людинозрозуміла назва plugin. |
|
||||
| `description` | Ні | `string` | Короткий опис, що відображається в поверхнях plugin. |
|
||||
| `version` | Ні | `string` | Інформаційна версія plugin. |
|
||||
| `uiHints` | Ні | `Record<string, object>` | Мітки UI, placeholders і підказки щодо чутливості для полів конфігурації. |
|
||||
|
||||
## Довідник `providerAuthChoices`
|
||||
|
||||
Кожен запис `providerAuthChoices` описує один варіант онбордингу або автентифікації.
|
||||
OpenClaw зчитує це до завантаження середовища виконання провайдера.
|
||||
Кожен запис `providerAuthChoices` описує один варіант онбордингу або auth.
|
||||
OpenClaw читає це до завантаження середовища виконання провайдера.
|
||||
|
||||
| Поле | Обов’язкове | Тип | Що воно означає |
|
||||
| --------------------- | ----------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
|
||||
| `provider` | Так | `string` | Id провайдера, до якого належить цей варіант. |
|
||||
| `method` | Так | `string` | Id методу автентифікації, до якого слід спрямувати. |
|
||||
| `choiceId` | Так | `string` | Стабільний id варіанта автентифікації, який використовується онбордингом і потоками CLI. |
|
||||
| `choiceLabel` | Ні | `string` | Мітка для користувача. Якщо пропущено, OpenClaw використовує `choiceId`. |
|
||||
| `choiceHint` | Ні | `string` | Короткий допоміжний текст для селектора. |
|
||||
| `assistantPriority` | Ні | `number` | Менші значення сортуються раніше в інтерактивних селекторах, керованих асистентом. |
|
||||
| `assistantVisibility` | Ні | `"visible"` \| `"manual-only"` | Приховує варіант від селекторів асистента, але все ще дозволяє ручний вибір через CLI. |
|
||||
| `deprecatedChoiceIds` | Ні | `string[]` | Застарілі id варіантів, які мають перенаправляти користувачів на цей варіант-заміну. |
|
||||
| `groupId` | Ні | `string` | Необов’язковий id групи для групування пов’язаних варіантів. |
|
||||
| `groupLabel` | Ні | `string` | Мітка цієї групи для користувача. |
|
||||
| `groupHint` | Ні | `string` | Короткий допоміжний текст для групи. |
|
||||
| `optionKey` | Ні | `string` | Внутрішній ключ параметра для простих потоків автентифікації з одним прапорцем. |
|
||||
| `cliFlag` | Ні | `string` | Назва прапорця CLI, наприклад `--openrouter-api-key`. |
|
||||
| `cliOption` | Ні | `string` | Повна форма параметра CLI, наприклад `--openrouter-api-key <key>`. |
|
||||
| `cliDescription` | Ні | `string` | Опис, що використовується в довідці CLI. |
|
||||
| `onboardingScopes` | Ні | `Array<"text-inference" \| "image-generation">` | У яких поверхнях онбордингу має з’являтися цей варіант. Якщо пропущено, за замовчуванням це `["text-inference"]`. |
|
||||
| Поле | Обов’язкове | Тип | Що воно означає |
|
||||
| -------------------- | ----------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
||||
| `provider` | Так | `string` | Id провайдера, якому належить цей варіант. |
|
||||
| `method` | Так | `string` | Id методу auth, до якого слід маршрутизувати. |
|
||||
| `choiceId` | Так | `string` | Стабільний id варіанта auth, який використовується потоками онбордингу та CLI. |
|
||||
| `choiceLabel` | Ні | `string` | Мітка для користувача. Якщо не вказано, OpenClaw використовує `choiceId` як запасний варіант. |
|
||||
| `choiceHint` | Ні | `string` | Короткий допоміжний текст для селектора. |
|
||||
| `assistantPriority` | Ні | `number` | Менші значення сортуються раніше в інтерактивних селекторах, керованих асистентом. |
|
||||
| `assistantVisibility`| Ні | `"visible"` \| `"manual-only"` | Приховує цей варіант від селекторів асистента, але все ще дозволяє ручний вибір через CLI. |
|
||||
| `deprecatedChoiceIds`| Ні | `string[]` | Застарілі id варіантів, які мають перенаправляти користувачів до цього варіанта-замінника. |
|
||||
| `groupId` | Ні | `string` | Необов’язковий id групи для групування пов’язаних варіантів. |
|
||||
| `groupLabel` | Ні | `string` | Мітка цієї групи для користувача. |
|
||||
| `groupHint` | Ні | `string` | Короткий допоміжний текст для групи. |
|
||||
| `optionKey` | Ні | `string` | Внутрішній ключ опції для простих потоків auth з одним прапорцем. |
|
||||
| `cliFlag` | Ні | `string` | Назва прапорця CLI, наприклад `--openrouter-api-key`. |
|
||||
| `cliOption` | Ні | `string` | Повна форма опції CLI, наприклад `--openrouter-api-key <key>`. |
|
||||
| `cliDescription` | Ні | `string` | Опис, який використовується в довідці CLI. |
|
||||
| `onboardingScopes` | Ні | `Array<"text-inference" \| "image-generation">` | У яких поверхнях онбордингу має з’являтися цей варіант. Якщо не вказано, типовим є `["text-inference"]`. |
|
||||
|
||||
## Довідник `commandAliases`
|
||||
|
||||
Використовуйте `commandAliases`, коли Plugin володіє іменем команди середовища виконання, яке користувачі можуть
|
||||
помилково вказати в `plugins.allow` або спробувати запустити як кореневу команду CLI. OpenClaw
|
||||
використовує ці метадані для діагностики без імпорту коду середовища виконання Plugin.
|
||||
Використовуйте `commandAliases`, коли plugin володіє назвою команди середовища виконання, яку користувачі можуть
|
||||
помилково помістити в `plugins.allow` або спробувати запустити як кореневу команду CLI. OpenClaw
|
||||
використовує ці метадані для діагностики без імпорту коду середовища виконання plugin.
|
||||
|
||||
```json
|
||||
{
|
||||
@ -229,45 +214,44 @@ 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
|
||||
мають активувати його пізніше.
|
||||
|
||||
## Довідник `qaRunners`
|
||||
|
||||
Використовуйте `qaRunners`, коли Plugin додає один або кілька transport runner-ів під спільним
|
||||
коренем `openclaw qa`. Зберігайте ці метадані легкими та статичними; середовище виконання Plugin
|
||||
як і раніше володіє фактичною реєстрацією CLI через легку поверхню
|
||||
`runtime-api.ts`, яка експортує `qaRunnerCliRegistrations`.
|
||||
Використовуйте `qaRunners`, коли plugin додає один або більше transport runner під спільним
|
||||
коренем `openclaw qa`. Зберігайте ці метадані легкими та статичними; фактичною реєстрацією CLI як і раніше
|
||||
володіє середовище виконання plugin через легку поверхню `runtime-api.ts`, яка експортує `qaRunnerCliRegistrations`.
|
||||
|
||||
```json
|
||||
{
|
||||
"qaRunners": [
|
||||
{
|
||||
"commandName": "matrix",
|
||||
"description": "Run the Docker-backed Matrix live QA lane against a disposable homeserver"
|
||||
"description": "Запустити Docker-backed live QA lane Matrix на disposable homeserver"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
| Поле | Обов’язкове | Тип | Що воно означає |
|
||||
| ------------- | ----------- | -------- | --------------------------------------------------------------------- |
|
||||
| `commandName` | Так | `string` | Підкоманда, змонтована під `openclaw qa`, наприклад `matrix`. |
|
||||
| `description` | Ні | `string` | Резервний текст довідки, що використовується, коли спільному хосту потрібна stub-команда. |
|
||||
| Поле | Обов’язкове | Тип | Що воно означає |
|
||||
| ------------- | ----------- | -------- | ------------------------------------------------------------------- |
|
||||
| `commandName` | Так | `string` | Підкоманда, змонтована під `openclaw qa`, наприклад `matrix`. |
|
||||
| `description` | Ні | `string` | Запасний текст довідки, який використовується, коли спільному хосту потрібна команда-заглушка. |
|
||||
|
||||
Цей блок є лише метаданими. Він не реєструє поведінку під час виконання і не
|
||||
замінює `register(...)`, `setupEntry` або інші точки входу runtime/Plugin.
|
||||
Поточні споживачі використовують його як підказку для звуження перед ширшим завантаженням Plugin, тому
|
||||
відсутність метаданих активації зазвичай лише впливає на продуктивність; вона не має
|
||||
змінювати коректність, доки все ще існують застарілі резервні механізми володіння маніфестом.
|
||||
Цей блок — лише метадані. Він не реєструє поведінку середовища виконання і
|
||||
не замінює `register(...)`, `setupEntry` або інші точки входу середовища виконання/plugin.
|
||||
Поточні споживачі використовують його як підказку для звуження перед ширшим завантаженням plugin, тож
|
||||
відсутність метаданих активації зазвичай впливає лише на продуктивність; це не повинно
|
||||
змінювати коректність, поки ще існують запасні варіанти legacy ownership у маніфесті.
|
||||
|
||||
```json
|
||||
{
|
||||
@ -281,27 +265,27 @@ OpenClaw зчитує це до завантаження середовища в
|
||||
}
|
||||
```
|
||||
|
||||
| Поле | Обов’язкове | Тип | Що воно означає |
|
||||
| ---------------- | ----------- | ---------------------------------------------------- | ----------------------------------------------------------------- |
|
||||
| `onProviders` | Ні | `string[]` | Id провайдерів, які мають активувати цей Plugin за запитом. |
|
||||
| `onCommands` | Ні | `string[]` | Id команд, які мають активувати цей Plugin. |
|
||||
| `onChannels` | Ні | `string[]` | Id каналів, які мають активувати цей Plugin. |
|
||||
| `onRoutes` | Ні | `string[]` | Типи маршрутів, які мають активувати цей Plugin. |
|
||||
| `onCapabilities` | Ні | `Array<"provider" \| "channel" \| "tool" \| "hook">` | Широкі підказки можливостей, що використовуються плануванням активації control plane. |
|
||||
| Поле | Обов’язкове | Тип | Що воно означає |
|
||||
| ---------------- | ----------- | ---------------------------------------------------- | ---------------------------------------------------------------- |
|
||||
| `onProviders` | Ні | `string[]` | Id провайдерів, які мають активувати цей plugin за запитом. |
|
||||
| `onCommands` | Ні | `string[]` | Id команд, які мають активувати цей plugin. |
|
||||
| `onChannels` | Ні | `string[]` | Id channel, які мають активувати цей plugin. |
|
||||
| `onRoutes` | Ні | `string[]` | Типи маршрутів, які мають активувати цей plugin. |
|
||||
| `onCapabilities` | Ні | `Array<"provider" \| "channel" \| "tool" \| "hook">` | Загальні підказки можливостей, що використовуються в плануванні активації control-plane. |
|
||||
|
||||
Поточні живі споживачі:
|
||||
Поточні активні споживачі:
|
||||
|
||||
- планування CLI, що запускається командою, повертається до застарілого
|
||||
- планування CLI, ініційоване командою, повертається до legacy
|
||||
`commandAliases[].cliCommand` або `commandAliases[].name`
|
||||
- планування налаштування/каналу, що запускається каналом, повертається до застарілого володіння
|
||||
`channels[]`, коли явні метадані активації каналу відсутні
|
||||
- планування налаштування/runtime, що запускається провайдером, повертається до застарілого
|
||||
володіння `providers[]` і `cliBackends[]` верхнього рівня, коли явні метадані активації провайдера
|
||||
відсутні
|
||||
- планування setup/channel, ініційоване channel, повертається до legacy володіння
|
||||
`channels[]`, коли явні метадані активації channel відсутні
|
||||
- планування setup/runtime, ініційоване провайдером, повертається до legacy
|
||||
володіння `providers[]` і `cliBackends[]` верхнього рівня, коли явні метадані
|
||||
активації провайдера відсутні
|
||||
|
||||
## Довідник `setup`
|
||||
|
||||
Використовуйте `setup`, коли поверхням налаштування та онбордингу потрібні легкі метадані Plugin
|
||||
Використовуйте `setup`, коли поверхням setup та онбордингу потрібні легкі метадані plugin
|
||||
до завантаження середовища виконання.
|
||||
|
||||
```json
|
||||
@ -321,48 +305,48 @@ OpenClaw зчитує це до завантаження середовища в
|
||||
}
|
||||
```
|
||||
|
||||
`cliBackends` верхнього рівня залишається валідним і надалі описує backend-и інференсу CLI.
|
||||
`setup.cliBackends` — це поверхня дескрипторів, специфічна для налаштування, для потоків
|
||||
control plane/налаштування, які мають залишатися лише на рівні метаданих.
|
||||
`cliBackends` верхнього рівня залишається валідним і надалі описує
|
||||
backend CLI inference. `setup.cliBackends` — це поверхня дескрипторів, специфічна для setup,
|
||||
для потоків control-plane/setup, яка має залишатися лише метаданими.
|
||||
|
||||
Якщо присутні `setup.providers` і `setup.cliBackends`, вони є бажаною
|
||||
поверхнею пошуку setup за принципом descriptor-first для виявлення налаштування. Якщо дескриптор лише
|
||||
звужує кандидатний Plugin, а налаштуванню все ще потрібні багатші runtime-хуки часу налаштування,
|
||||
встановіть `requiresRuntime: true` і залиште `setup-api` як
|
||||
резервний шлях виконання.
|
||||
За наявності `setup.providers` і `setup.cliBackends` є пріоритетною
|
||||
поверхнею пошуку на основі дескрипторів для виявлення setup. Якщо дескриптор лише
|
||||
звужує кандидатний plugin, а setup все ще потребує багатших hook середовища виконання під час setup,
|
||||
установіть `requiresRuntime: true` і збережіть `setup-api` як
|
||||
запасний шлях виконання.
|
||||
|
||||
Оскільки пошук setup може виконувати код `setup-api`, що належить Plugin,
|
||||
нормалізовані значення `setup.providers[].id` і `setup.cliBackends[]` мають залишатися
|
||||
унікальними серед виявлених Plugin. Неоднозначне володіння завершується закритою відмовою замість вибору
|
||||
Оскільки пошук setup може виконувати код `setup-api`, що належить plugin,
|
||||
нормалізовані значення `setup.providers[].id` і `setup.cliBackends[]` мають залишатися унікальними
|
||||
серед виявлених plugin. Неоднозначне володіння призводить до закритої відмови замість вибору
|
||||
переможця за порядком виявлення.
|
||||
|
||||
### Довідник `setup.providers`
|
||||
|
||||
| Поле | Обов’язкове | Тип | Що воно означає |
|
||||
| ------------- | ----------- | ---------- | ----------------------------------------------------------------------------------- |
|
||||
| `id` | Так | `string` | Id провайдера, що надається під час налаштування або онбордингу. Зберігайте нормалізовані id глобально унікальними. |
|
||||
| `authMethods` | Ні | `string[]` | Id методів налаштування/автентифікації, які цей провайдер підтримує без завантаження повного середовища виконання. |
|
||||
| `envVars` | Ні | `string[]` | Env vars, які універсальні поверхні налаштування/статусу можуть перевіряти до завантаження середовища виконання Plugin. |
|
||||
| `id` | Так | `string` | Id провайдера, що надається під час setup або онбордингу. Зберігайте нормалізовані id глобально унікальними. |
|
||||
| `authMethods` | Ні | `string[]` | Id методів setup/auth, які цей провайдер підтримує без завантаження повного середовища виконання. |
|
||||
| `envVars` | Ні | `string[]` | Env vars, які загальні поверхні setup/status можуть перевіряти до завантаження середовища виконання plugin. |
|
||||
|
||||
### Поля `setup`
|
||||
|
||||
| Поле | Обов’язкове | Тип | Що воно означає |
|
||||
| ------------------ | ----------- | ---------- | ---------------------------------------------------------------------------------------------------- |
|
||||
| `providers` | Ні | `object[]` | Дескриптори налаштування провайдера, що надаються під час налаштування та онбордингу. |
|
||||
| `cliBackends` | Ні | `string[]` | Id backend-ів часу налаштування, що використовуються для пошуку setup за принципом descriptor-first. Зберігайте нормалізовані id глобально унікальними. |
|
||||
| `configMigrations` | Ні | `string[]` | Id міграцій конфігурації, якими володіє поверхня setup цього Plugin. |
|
||||
| `requiresRuntime` | Ні | `boolean` | Чи потребує setup виконання `setup-api` навіть після пошуку за дескриптором. |
|
||||
| `providers` | Ні | `object[]` | Дескриптори setup провайдера, що надаються під час setup та онбордингу. |
|
||||
| `cliBackends` | Ні | `string[]` | Id backend під час setup, які використовуються для пошуку setup на основі дескрипторів. Зберігайте нормалізовані id глобально унікальними. |
|
||||
| `configMigrations` | Ні | `string[]` | Id міграцій конфігурації, якими володіє поверхня setup цього plugin. |
|
||||
| `requiresRuntime` | Ні | `boolean` | Чи потребує setup виконання `setup-api` після пошуку за дескриптором. |
|
||||
|
||||
## Довідник `uiHints`
|
||||
|
||||
`uiHints` — це мапа від імен полів конфігурації до невеликих підказок рендерингу.
|
||||
`uiHints` — це мапа від назв полів конфігурації до невеликих підказок рендерингу.
|
||||
|
||||
```json
|
||||
{
|
||||
"uiHints": {
|
||||
"apiKey": {
|
||||
"label": "API key",
|
||||
"help": "Used for OpenRouter requests",
|
||||
"help": "Використовується для запитів OpenRouter",
|
||||
"placeholder": "sk-or-v1-...",
|
||||
"sensitive": true
|
||||
}
|
||||
@ -372,19 +356,19 @@ control plane/налаштування, які мають залишатися
|
||||
|
||||
Кожна підказка поля може містити:
|
||||
|
||||
| Поле | Тип | Що воно означає |
|
||||
| ------------- | ---------- | --------------------------------------- |
|
||||
| `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` | Текст placeholder для полів форми. |
|
||||
|
||||
## Довідник `contracts`
|
||||
|
||||
Використовуйте `contracts` лише для статичних метаданих володіння можливостями, які OpenClaw може
|
||||
зчитати без імпорту середовища виконання Plugin.
|
||||
прочитати без імпорту середовища виконання plugin.
|
||||
|
||||
```json
|
||||
{
|
||||
@ -406,30 +390,30 @@ control plane/налаштування, які мають залишатися
|
||||
|
||||
Кожен список є необов’язковим:
|
||||
|
||||
| Поле | Тип | Що воно означає |
|
||||
| -------------------------------- | ---------- | -------------------------------------------------------------------- |
|
||||
| `embeddedExtensionFactories` | `string[]` | Id вбудованого runtime, для яких вбудований Plugin може реєструвати фабрики. |
|
||||
| `externalAuthProviders` | `string[]` | Id провайдерів, чий зовнішній хук профілю автентифікації належить цьому Plugin. |
|
||||
| `speechProviders` | `string[]` | Id провайдерів мовлення, якими володіє цей Plugin. |
|
||||
| `realtimeTranscriptionProviders` | `string[]` | Id провайдерів транскрибування в реальному часі, якими володіє цей Plugin. |
|
||||
| `realtimeVoiceProviders` | `string[]` | Id провайдерів голосу в реальному часі, якими володіє цей Plugin. |
|
||||
| `mediaUnderstandingProviders` | `string[]` | Id провайдерів розуміння медіа, якими володіє цей Plugin. |
|
||||
| `imageGenerationProviders` | `string[]` | Id провайдерів генерації зображень, якими володіє цей Plugin. |
|
||||
| `videoGenerationProviders` | `string[]` | Id провайдерів генерації відео, якими володіє цей Plugin. |
|
||||
| `webFetchProviders` | `string[]` | Id провайдерів web-fetch, якими володіє цей Plugin. |
|
||||
| `webSearchProviders` | `string[]` | Id провайдерів web search, якими володіє цей Plugin. |
|
||||
| `tools` | `string[]` | Імена інструментів агента, якими володіє цей Plugin для перевірок вбудованих контрактів. |
|
||||
| Поле | Тип | Що воно означає |
|
||||
| -------------------------------- | ---------- | ----------------------------------------------------------------- |
|
||||
| `embeddedExtensionFactories` | `string[]` | Id вбудованого середовища виконання, для яких вбудований plugin може реєструвати factories. |
|
||||
| `externalAuthProviders` | `string[]` | Id провайдерів, hook зовнішнього профілю auth яких належить цьому plugin. |
|
||||
| `speechProviders` | `string[]` | Id провайдерів speech, якими володіє цей plugin. |
|
||||
| `realtimeTranscriptionProviders` | `string[]` | Id провайдерів realtime-transcription, якими володіє цей plugin. |
|
||||
| `realtimeVoiceProviders` | `string[]` | Id провайдерів realtime-voice, якими володіє цей plugin. |
|
||||
| `mediaUnderstandingProviders` | `string[]` | Id провайдерів media-understanding, якими володіє цей plugin. |
|
||||
| `imageGenerationProviders` | `string[]` | Id провайдерів image-generation, якими володіє цей plugin. |
|
||||
| `videoGenerationProviders` | `string[]` | Id провайдерів video-generation, якими володіє цей plugin. |
|
||||
| `webFetchProviders` | `string[]` | Id провайдерів web-fetch, якими володіє цей plugin. |
|
||||
| `webSearchProviders` | `string[]` | Id провайдерів web-search, якими володіє цей plugin. |
|
||||
| `tools` | `string[]` | Назви tools агента, якими володіє цей plugin для перевірок контрактів вбудованих plugin. |
|
||||
|
||||
Plugin провайдера, які реалізують `resolveExternalAuthProfiles`, повинні оголошувати
|
||||
Plugin провайдера, які реалізують `resolveExternalAuthProfiles`, мають оголошувати
|
||||
`contracts.externalAuthProviders`. Plugin без цього оголошення все ще працюють
|
||||
через застарілий резервний механізм сумісності, але цей механізм повільніший і
|
||||
буде видалений після завершення вікна міграції.
|
||||
через застарілий запасний механізм сумісності, але він повільніший і
|
||||
буде видалений після вікна міграції.
|
||||
|
||||
## Довідник `mediaUnderstandingProviderMetadata`
|
||||
|
||||
Використовуйте `mediaUnderstandingProviderMetadata`, коли провайдер розуміння медіа має
|
||||
моделі за замовчуванням, пріоритет резервного автоавтентифікації або власну підтримку документів, які
|
||||
універсальним допоміжним засобам ядра потрібні до завантаження runtime. Ключі також мають бути оголошені в
|
||||
Використовуйте `mediaUnderstandingProviderMetadata`, коли провайдер media-understanding має
|
||||
типові моделі, пріоритет запасного auto-auth або нативну підтримку документів, які
|
||||
загальним допоміжним засобам ядра потрібні до завантаження середовища виконання. Ключі також мають бути оголошені в
|
||||
`contracts.mediaUnderstandingProviders`.
|
||||
|
||||
```json
|
||||
@ -455,17 +439,17 @@ Plugin провайдера, які реалізують `resolveExternalAuthPro
|
||||
|
||||
Кожен запис провайдера може містити:
|
||||
|
||||
| Поле | Тип | Що воно означає |
|
||||
| ---------------------- | ----------------------------------- | --------------------------------------------------------------------------- |
|
||||
| `capabilities` | `("image" \| "audio" \| "video")[]` | Можливості медіа, які надає цей провайдер. |
|
||||
| `defaultModels` | `Record<string, string>` | Типові значення зіставлення можливостей із моделями, які використовуються, коли конфігурація не задає модель. |
|
||||
| `autoPriority` | `Record<string, number>` | Менші числа сортуються раніше для автоматичного резервного вибору провайдера на основі облікових даних. |
|
||||
| `nativeDocumentInputs` | `"pdf"[]` | Власні вхідні дані документів, які підтримує провайдер. |
|
||||
| Поле | Тип | Що воно означає |
|
||||
| ---------------------- | ----------------------------------- | ---------------------------------------------------------------------------- |
|
||||
| `capabilities` | `("image" \| "audio" \| "video")[]` | Медіаможливості, які надає цей провайдер. |
|
||||
| `defaultModels` | `Record<string, string>` | Типові відповідності можливість-модель, які використовуються, коли конфігурація не задає модель. |
|
||||
| `autoPriority` | `Record<string, number>` | Менші числа сортуються раніше для автоматичного запасного вибору провайдера на основі облікових даних. |
|
||||
| `nativeDocumentInputs` | `"pdf"[]` | Нативні входи документів, які підтримує провайдер. |
|
||||
|
||||
## Довідник `channelConfigs`
|
||||
|
||||
Використовуйте `channelConfigs`, коли Plugin каналу потребує легких метаданих конфігурації до
|
||||
завантаження runtime.
|
||||
Використовуйте `channelConfigs`, коли plugin channel потребує легких метаданих конфігурації
|
||||
до завантаження середовища виконання.
|
||||
|
||||
```json
|
||||
{
|
||||
@ -480,32 +464,32 @@ Plugin провайдера, які реалізують `resolveExternalAuthPro
|
||||
},
|
||||
"uiHints": {
|
||||
"homeserverUrl": {
|
||||
"label": "Homeserver URL",
|
||||
"label": "URL homeserver",
|
||||
"placeholder": "https://matrix.example.com"
|
||||
}
|
||||
},
|
||||
"label": "Matrix",
|
||||
"description": "Matrix homeserver connection",
|
||||
"description": "Підключення до homeserver Matrix",
|
||||
"preferOver": ["matrix-legacy"]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Кожен запис каналу може містити:
|
||||
Кожен запис channel може містити:
|
||||
|
||||
| Поле | Тип | Що воно означає |
|
||||
| ------------- | ------------------------ | ------------------------------------------------------------------------------- |
|
||||
| `schema` | `object` | Схема JSON для `channels.<id>`. Обов’язкова для кожного оголошеного запису конфігурації каналу. |
|
||||
| `uiHints` | `Record<string, object>` | Необов’язкові мітки UI/заповнювачі/підказки чутливості для цього розділу конфігурації каналу. |
|
||||
| `label` | `string` | Мітка каналу, що об’єднується в поверхні вибору та інспектування, коли метадані runtime ще не готові. |
|
||||
| `description` | `string` | Короткий опис каналу для поверхонь інспектування та каталогу. |
|
||||
| `preferOver` | `string[]` | Id застарілих або менш пріоритетних Plugin, які цей канал має перевершувати в поверхнях вибору. |
|
||||
| ------------- | ------------------------ | -------------------------------------------------------------------------------- |
|
||||
| `schema` | `object` | JSON Schema для `channels.<id>`. Обов’язкова для кожного оголошеного запису конфігурації channel. |
|
||||
| `uiHints` | `Record<string, object>` | Необов’язкові мітки UI/placeholders/підказки чутливості для цього розділу конфігурації channel. |
|
||||
| `label` | `string` | Мітка channel, що об’єднується в поверхні вибору та перевірки, коли метадані середовища виконання ще не готові. |
|
||||
| `description` | `string` | Короткий опис channel для поверхонь перевірки та каталогу. |
|
||||
| `preferOver` | `string[]` | Id застарілих plugin або plugin з нижчим пріоритетом, які цей channel має випереджати в поверхнях вибору. |
|
||||
|
||||
## Довідник `modelSupport`
|
||||
|
||||
Використовуйте `modelSupport`, коли OpenClaw має виводити ваш Plugin провайдера з
|
||||
скорочених id моделей, таких як `gpt-5.4` або `claude-sonnet-4.6`, до завантаження runtime Plugin.
|
||||
Використовуйте `modelSupport`, коли OpenClaw має виводити ваш plugin провайдера з
|
||||
скорочених id моделей, таких як `gpt-5.4` або `claude-sonnet-4.6`, до завантаження середовища виконання plugin.
|
||||
|
||||
```json
|
||||
{
|
||||
@ -519,16 +503,16 @@ Plugin провайдера, які реалізують `resolveExternalAuthPro
|
||||
OpenClaw застосовує такий пріоритет:
|
||||
|
||||
- явні посилання `provider/model` використовують метадані маніфесту `providers`, що належать власнику
|
||||
- `modelPatterns` мають вищий пріоритет за `modelPrefixes`
|
||||
- якщо збігаються один невбудований Plugin і один вбудований Plugin, перемагає невбудований
|
||||
Plugin
|
||||
- решта неоднозначностей ігнорується, доки користувач або конфігурація не вкаже провайдера
|
||||
- `modelPatterns` мають вищий пріоритет, ніж `modelPrefixes`
|
||||
- якщо збігаються один невбудований plugin і один вбудований plugin, перемагає невбудований
|
||||
plugin
|
||||
- решта неоднозначностей ігнорується, доки користувач або конфігурація не вкажуть провайдера
|
||||
|
||||
Поля:
|
||||
|
||||
| Поле | Тип | Що воно означає |
|
||||
| --------------- | ---------- | ------------------------------------------------------------------------------ |
|
||||
| `modelPrefixes` | `string[]` | Префікси, що зіставляються через `startsWith` зі скороченими id моделей. |
|
||||
| Поле | Тип | Що воно означає |
|
||||
| --------------- | ---------- | ---------------------------------------------------------------------------- |
|
||||
| `modelPrefixes` | `string[]` | Префікси, що зіставляються через `startsWith` зі скороченими id моделей. |
|
||||
| `modelPatterns` | `string[]` | Джерела regex, що зіставляються зі скороченими id моделей після видалення суфікса профілю. |
|
||||
|
||||
Застарілі ключі можливостей верхнього рівня застаріли. Використовуйте `openclaw doctor --fix`, щоб
|
||||
@ -541,77 +525,76 @@ OpenClaw застосовує такий пріоритет:
|
||||
|
||||
## Маніфест і `package.json`
|
||||
|
||||
Ці два файли виконують різні ролі:
|
||||
Ці два файли виконують різні завдання:
|
||||
|
||||
| Файл | Для чого використовувати |
|
||||
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `openclaw.plugin.json` | Виявлення, валідація конфігурації, метадані вибору автентифікації та підказки UI, які мають існувати до запуску коду Plugin |
|
||||
| `package.json` | Метадані npm, встановлення залежностей і блок `openclaw`, який використовується для точок входу, обмеження встановлення, налаштування або метаданих каталогу |
|
||||
| Файл | Для чого використовувати |
|
||||
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `openclaw.plugin.json` | Виявлення, валідація конфігурації, метадані варіантів auth і підказки UI, які мають існувати до запуску коду plugin |
|
||||
| `package.json` | Метадані npm, встановлення залежностей і блок `openclaw`, який використовується для точок входу, обмежень встановлення, setup або метаданих каталогу |
|
||||
|
||||
Якщо ви не впевнені, куди належить певний фрагмент метаданих, використовуйте таке правило:
|
||||
Якщо ви не впевнені, куди має належати певний фрагмент метаданих, використовуйте таке правило:
|
||||
|
||||
- якщо OpenClaw має знати це до завантаження коду Plugin, помістіть це в `openclaw.plugin.json`
|
||||
- якщо OpenClaw має знати це до завантаження коду plugin, помістіть це в `openclaw.plugin.json`
|
||||
- якщо це стосується пакування, файлів точок входу або поведінки встановлення npm, помістіть це в `package.json`
|
||||
|
||||
### Поля `package.json`, які впливають на виявлення
|
||||
|
||||
Деякі метадані Plugin до запуску runtime навмисно розміщено в `package.json` у блоці
|
||||
Деякі метадані plugin до запуску середовища виконання навмисно зберігаються в `package.json` у блоці
|
||||
`openclaw`, а не в `openclaw.plugin.json`.
|
||||
|
||||
Важливі приклади:
|
||||
|
||||
| Поле | Що воно означає |
|
||||
| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `openclaw.extensions` | Оголошує власні точки входу Plugin. Повинні залишатися всередині каталогу пакета Plugin. |
|
||||
| `openclaw.runtimeExtensions` | Оголошує точки входу built JavaScript runtime для встановлених пакетів. Повинні залишатися всередині каталогу пакета Plugin. |
|
||||
| `openclaw.setupEntry` | Легка точка входу лише для setup, яка використовується під час онбордингу, відкладеного запуску каналу та виявлення статусу каналу/SecretRef лише для читання. Повинна залишатися всередині каталогу пакета Plugin. |
|
||||
| `openclaw.runtimeSetupEntry` | Оголошує built JavaScript точку входу setup для встановлених пакетів. Повинна залишатися всередині каталогу пакета Plugin. |
|
||||
| `openclaw.channel` | Легкі метадані каталогу каналу, такі як мітки, шляхи до документації, псевдоніми та текст для вибору. |
|
||||
| `openclaw.channel.configuredState` | Легкі метадані перевірки налаштованого стану, які можуть відповісти на запитання «чи вже існує налаштування лише через env?» без завантаження повного runtime каналу. |
|
||||
| `openclaw.channel.persistedAuthState` | Легкі метадані перевірки збереженого стану автентифікації, які можуть відповісти на запитання «чи вже виконано вхід кудись?» без завантаження повного runtime каналу. |
|
||||
| `openclaw.install.npmSpec` / `openclaw.install.localPath` | Підказки встановлення/оновлення для вбудованих і зовнішньо опублікованих Plugin. |
|
||||
| `openclaw.install.defaultChoice` | Бажаний шлях встановлення, коли доступно кілька джерел встановлення. |
|
||||
| `openclaw.install.minHostVersion` | Мінімальна підтримувана версія хоста OpenClaw, із використанням нижньої межі semver, як-от `>=2026.3.22`. |
|
||||
| `openclaw.install.expectedIntegrity` | Очікуваний рядок npm dist integrity, наприклад `sha512-...`; потоки встановлення та оновлення звіряють із ним завантажений артефакт. |
|
||||
| `openclaw.install.allowInvalidConfigRecovery` | Дозволяє вузький шлях відновлення перевстановлення вбудованого Plugin, коли конфігурація невалідна. |
|
||||
| `openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen` | Дозволяє поверхням каналу лише для setup завантажуватися до повного Plugin каналу під час запуску. |
|
||||
| `openclaw.extensions` | Оголошує точки входу нативного plugin. Має залишатися в межах каталогу пакета plugin. |
|
||||
| `openclaw.runtimeExtensions` | Оголошує точки входу зібраного JavaScript runtime для встановлених пакетів. Має залишатися в межах каталогу пакета plugin. |
|
||||
| `openclaw.setupEntry` | Легка точка входу лише для setup, яка використовується під час онбордингу, відкладеного запуску channel і виявлення status/SecretRef channel у режимі лише читання. Має залишатися в межах каталогу пакета plugin. |
|
||||
| `openclaw.runtimeSetupEntry` | Оголошує зібрану JavaScript-точку входу setup для встановлених пакетів. Має залишатися в межах каталогу пакета plugin. |
|
||||
| `openclaw.channel` | Легкі метадані каталогу channel, такі як мітки, шляхи до документації, псевдоніми та текст для вибору. |
|
||||
| `openclaw.channel.configuredState` | Легкі метадані перевірки налаштованого стану, які можуть відповісти на запитання «чи вже існує налаштування лише через env?» без завантаження повного runtime channel. |
|
||||
| `openclaw.channel.persistedAuthState` | Легкі метадані перевірки збереженого auth-стану, які можуть відповісти на запитання «чи вже є хоч один вхід у систему?» без завантаження повного runtime channel. |
|
||||
| `openclaw.install.npmSpec` / `openclaw.install.localPath` | Підказки для встановлення/оновлення вбудованих plugin і plugin, опублікованих зовні. |
|
||||
| `openclaw.install.defaultChoice` | Бажаний шлях встановлення, коли доступно кілька джерел встановлення. |
|
||||
| `openclaw.install.minHostVersion` | Мінімальна підтримувана версія хоста OpenClaw, із використанням нижньої межі semver, наприклад `>=2026.3.22`. |
|
||||
| `openclaw.install.expectedIntegrity` | Очікуваний рядок цілісності npm dist, наприклад `sha512-...`; потоки встановлення та оновлення перевіряють завантажений артефакт за ним. |
|
||||
| `openclaw.install.allowInvalidConfigRecovery` | Дозволяє вузький шлях відновлення через перевстановлення вбудованого plugin, коли конфігурація невалідна. |
|
||||
| `openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen` | Дозволяє поверхням channel лише для setup завантажуватися під час запуску раніше, ніж повний plugin channel. |
|
||||
|
||||
Метадані маніфесту визначають, які варіанти провайдера/каналу/setup з’являються в
|
||||
Метадані маніфесту визначають, які варіанти провайдера/channel/setup з’являються в
|
||||
онбордингу до завантаження runtime. `package.json#openclaw.install` повідомляє
|
||||
онбордингу, як отримати або ввімкнути цей Plugin, коли користувач вибирає один із цих
|
||||
варіантів. Не переносіть підказки встановлення в `openclaw.plugin.json`.
|
||||
онбордингу, як отримати або ввімкнути цей plugin, коли користувач вибирає один із цих
|
||||
варіантів. Не переносіть підказки встановлення до `openclaw.plugin.json`.
|
||||
|
||||
`openclaw.install.minHostVersion` застосовується під час встановлення та завантаження
|
||||
реєстру маніфестів. Невалідні значення відхиляються; новіші, але валідні значення пропускають
|
||||
Plugin на старіших хостах.
|
||||
plugin на старіших хостах.
|
||||
|
||||
Точне закріплення версії npm уже живе в `npmSpec`, наприклад
|
||||
`"npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3"`. Поєднуйте це з
|
||||
`expectedIntegrity`, якщо хочете, щоб потоки оновлення завершувалися закритою відмовою, коли завантажений
|
||||
`expectedIntegrity`, коли хочете, щоб потоки оновлення завершувалися закритою відмовою, якщо завантажений
|
||||
артефакт npm більше не відповідає закріпленому релізу. Інтерактивний онбординг
|
||||
пропонує довірені npm-специфікації реєстру, зокрема прості назви пакетів і dist-tag. Коли
|
||||
`expectedIntegrity` присутній, потоки встановлення/оновлення застосовують його; коли його
|
||||
пропущено, дозвіл реєстру записується без закріплення цілісності.
|
||||
пропонує npm specs довіреного реєстру, включно з просто назвами пакетів і dist-tags.
|
||||
Коли присутній `expectedIntegrity`, потоки встановлення/оновлення застосовують його; коли
|
||||
він відсутній, дозвіл реєстру записується без pin цілісності.
|
||||
|
||||
Plugin каналу повинні надавати `openclaw.setupEntry`, коли статус, список каналів
|
||||
Plugin channel мають надавати `openclaw.setupEntry`, коли status, список channel
|
||||
або сканування SecretRef мають визначати налаштовані облікові записи без завантаження повного
|
||||
runtime. Точка входу setup має надавати метадані каналу разом із безпечною для setup конфігурацією,
|
||||
статусом і адаптерами секретів; зберігайте мережеві клієнти, слухачі Gateway і
|
||||
transport runtime у головній точці входу extension.
|
||||
runtime. Точка входу setup має надавати метадані channel разом із безпечними для setup адаптерами конфігурації,
|
||||
status і secrets; зберігайте мережеві клієнти, listeners Gateway і
|
||||
transport runtimes в основній точці входу extension.
|
||||
|
||||
Поля точки входу runtime не перевизначають перевірки меж пакета для полів
|
||||
точки входу вихідного коду. Наприклад, `openclaw.runtimeExtensions` не може зробити
|
||||
завантажуваним шлях `openclaw.extensions`, що виходить за межі.
|
||||
|
||||
`openclaw.install.allowInvalidConfigRecovery` навмисно вузький. Він не
|
||||
робить довільні зламані конфігурації встановлюваними. Сьогодні він лише дозволяє потокам встановлення
|
||||
відновлюватися після певних застарілих збоїв оновлення вбудованого Plugin, таких як
|
||||
відсутній шлях до вбудованого Plugin або застарілий запис `channels.<id>` для того самого
|
||||
вбудованого Plugin. Непов’язані помилки конфігурації все одно блокують встановлення і спрямовують операторів
|
||||
`openclaw.install.allowInvalidConfigRecovery` навмисно вузький. Він
|
||||
не робить довільно зламані конфігурації придатними до встановлення. Наразі він лише дозволяє потокам встановлення
|
||||
відновлюватися після певних застарілих збоїв оновлення вбудованого plugin, наприклад
|
||||
відсутнього шляху до вбудованого plugin або застарілого запису `channels.<id>` для цього ж
|
||||
вбудованого plugin. Непов’язані помилки конфігурації, як і раніше, блокують встановлення та спрямовують операторів
|
||||
до `openclaw doctor --fix`.
|
||||
|
||||
`openclaw.channel.persistedAuthState` — це метадані пакета для крихітного модуля
|
||||
перевірки:
|
||||
`openclaw.channel.persistedAuthState` — це метадані пакета для крихітного модуля перевірки:
|
||||
|
||||
```json
|
||||
{
|
||||
@ -627,12 +610,12 @@ transport runtime у головній точці входу extension.
|
||||
}
|
||||
```
|
||||
|
||||
Використовуйте це, коли потокам setup, doctor або configured-state потрібна дешева перевірка
|
||||
автентифікації «так/ні» до завантаження повного Plugin каналу. Цільовий експорт має бути невеликою
|
||||
функцією, яка читає лише збережений стан; не спрямовуйте її через повний barrel runtime
|
||||
каналу.
|
||||
Використовуйте це, коли потокам setup, doctor або configured-state потрібна дешева перевірка auth
|
||||
у форматі так/ні до завантаження повного plugin channel. Цільовий експорт має бути невеликою
|
||||
функцією, яка читає лише збережений стан; не маршрутизуйте це через повний barrel runtime
|
||||
channel.
|
||||
|
||||
`openclaw.channel.configuredState` використовує ту саму форму для дешевих перевірок
|
||||
`openclaw.channel.configuredState` має таку саму форму для дешевих перевірок
|
||||
налаштованого стану лише через env:
|
||||
|
||||
```json
|
||||
@ -649,95 +632,67 @@ transport runtime у головній точці входу extension.
|
||||
}
|
||||
```
|
||||
|
||||
Використовуйте це, коли канал може відповідати про налаштований стан через env або інші малі
|
||||
входи, не пов’язані з runtime. Якщо перевірка потребує повного розв’язання конфігурації або справжнього
|
||||
runtime каналу, зберігайте цю логіку натомість у хуку Plugin `config.hasConfiguredState`.
|
||||
Використовуйте це, коли channel може відповісти про налаштований стан через env або інші маленькі
|
||||
невиконувані входи. Якщо перевірка потребує повного розв’язання конфігурації або реального
|
||||
runtime channel, залиште цю логіку в hook plugin `config.hasConfiguredState`.
|
||||
|
||||
## Пріоритет виявлення (дублікати id Plugin)
|
||||
## Пріоритет виявлення (дублікати id plugin)
|
||||
|
||||
OpenClaw виявляє Plugin з кількох коренів (вбудовані, глобальне встановлення, workspace, явно вибрані в конфігурації шляхи). Якщо два виявлення мають спільний `id`, зберігається лише маніфест із **найвищим пріоритетом**; дублікати з нижчим пріоритетом відкидаються замість завантаження поруч.
|
||||
OpenClaw виявляє plugin із кількох коренів (вбудовані, глобальне встановлення, workspace, явно вибрані в конфігурації шляхи). Якщо два виявлені plugin мають однаковий `id`, зберігається лише маніфест із **найвищим пріоритетом**; дублікати з нижчим пріоритетом відкидаються замість завантаження поруч.
|
||||
|
||||
Пріоритет, від найвищого до найнижчого:
|
||||
Пріоритет від найвищого до найнижчого:
|
||||
|
||||
1. **Вибраний у конфігурації** — шлях, явно закріплений у `plugins.entries.<id>`
|
||||
2. **Вбудований** — Plugin, що постачаються разом з OpenClaw
|
||||
3. **Глобальне встановлення** — Plugin, встановлені в глобальний корінь Plugin OpenClaw
|
||||
4. **Workspace** — Plugin, виявлені відносно поточного workspace
|
||||
2. **Вбудований** — plugin, що постачаються з OpenClaw
|
||||
3. **Глобальне встановлення** — plugin, встановлені в глобальний корінь plugin OpenClaw
|
||||
4. **Workspace** — plugin, виявлені відносно поточного workspace
|
||||
|
||||
Наслідки:
|
||||
|
||||
- Розгалужена або застаріла копія вбудованого Plugin, що лежить у workspace, не затьмарить вбудовану збірку.
|
||||
- Щоб справді перевизначити вбудований Plugin локальним, закріпіть його через `plugins.entries.<id>`, щоб він переміг за пріоритетом, а не покладався на виявлення у workspace.
|
||||
- Відкидання дублікатів записується в журнал, щоб Doctor і діагностика запуску могли вказати на відкинуту копію.
|
||||
- Розгалужена або застаріла копія вбудованого plugin, що лежить у workspace, не перекриє вбудовану збірку.
|
||||
- Щоб справді перевизначити вбудований plugin локальним, закріпіть його через `plugins.entries.<id>`, щоб він переміг за пріоритетом, а не покладайтесь на виявлення у workspace.
|
||||
- Відкидання дублікатів логуються, щоб Doctor і діагностика запуску могли вказати на відкинуту копію.
|
||||
|
||||
## Вимоги до схеми JSON
|
||||
## Вимоги до JSON Schema
|
||||
|
||||
- **Кожен Plugin повинен постачати схему JSON**, навіть якщо він не приймає конфігурацію.
|
||||
- Порожня схема допустима (наприклад, `{ "type": "object", "additionalProperties": false }`).
|
||||
- Схеми проходять валідацію під час читання/запису конфігурації, а не під час виконання.
|
||||
- **Кожен plugin повинен постачатися з JSON Schema**, навіть якщо він не приймає конфігурацію.
|
||||
- Порожня схема прийнятна (наприклад, `{ "type": "object", "additionalProperties": false }`).
|
||||
- Схеми проходять валідацію під час читання/запису конфігурації, а не під час runtime.
|
||||
|
||||
## Поведінка валідації
|
||||
|
||||
- Невідомі ключі `channels.*` є **помилками**, якщо тільки id каналу не оголошено
|
||||
маніфестом Plugin.
|
||||
- Невідомі ключі `channels.*` — це **помилки**, якщо тільки id channel не оголошено
|
||||
в маніфесті plugin.
|
||||
- `plugins.entries.<id>`, `plugins.allow`, `plugins.deny` і `plugins.slots.*`
|
||||
повинні посилатися на id Plugin, які **можна виявити**. Невідомі id є **помилками**.
|
||||
- Якщо Plugin встановлено, але він має зламаний або відсутній маніфест чи схему,
|
||||
валідація завершується помилкою, а Doctor повідомляє про помилку Plugin.
|
||||
- Якщо конфігурація Plugin існує, але Plugin **вимкнено**, конфігурація зберігається і
|
||||
в Doctor + журналах показується **попередження**.
|
||||
мають посилатися на **виявлювані** id plugin. Невідомі id — це **помилки**.
|
||||
- Якщо plugin встановлено, але він має зламаний або відсутній маніфест чи схему,
|
||||
валідація завершується помилкою, а Doctor повідомляє про помилку plugin.
|
||||
- Якщо конфігурація plugin існує, але plugin **вимкнено**, конфігурація зберігається, і
|
||||
в Doctor + логах показується **попередження**.
|
||||
|
||||
Повну схему `plugins.*` дивіться в [Довідник конфігурації](/uk/gateway/configuration).
|
||||
Див. [Configuration reference](/uk/gateway/configuration) для повної схеми `plugins.*`.
|
||||
|
||||
## Примітки
|
||||
|
||||
- Маніфест **обов’язковий для власних Plugin OpenClaw**, зокрема для локальних завантажень із файлової системи.
|
||||
- Runtime усе одно завантажує модуль Plugin окремо; маніфест використовується лише для
|
||||
виявлення + валідації.
|
||||
- Власні маніфести розбираються через JSON5, тому коментарі, кінцеві коми та
|
||||
ключі без лапок приймаються, якщо фінальне значення все ще є об’єктом.
|
||||
- Завантажувач маніфесту читає лише задокументовані поля маніфесту. Уникайте додавання
|
||||
тут власних ключів верхнього рівня.
|
||||
- `providerAuthEnvVars` — це шлях дешевих метаданих для перевірок автентифікації, валідації
|
||||
env-marker та подібних поверхонь автентифікації провайдера, які не повинні запускати runtime Plugin
|
||||
лише для перевірки імен env.
|
||||
- `providerAuthAliases` дозволяє варіантам провайдера повторно використовувати env vars
|
||||
автентифікації, профілі автентифікації, автентифікацію на основі конфігурації та варіант
|
||||
онбордингу з API-ключем іншого провайдера без жорсткого кодування цього зв’язку в ядрі.
|
||||
- `providerEndpoints` дозволяє Plugin провайдера володіти простими метаданими
|
||||
зіставлення хостів/`baseUrl` кінцевих точок. Використовуйте це лише для класів кінцевих точок, які ядро вже підтримує;
|
||||
поведінкою runtime як і раніше володіє Plugin.
|
||||
- `syntheticAuthRefs` — це шлях дешевих метаданих для синтетичних
|
||||
хуків автентифікації, що належать провайдеру, які мають бути видимими для холодного виявлення моделей до того, як реєстр
|
||||
runtime почне існувати. Вказуйте лише посилання, чий runtime-провайдер або backend CLI справді
|
||||
реалізує `resolveSyntheticAuth`.
|
||||
- `nonSecretAuthMarkers` — це шлях дешевих метаданих для значень-заповнювачів API-ключів,
|
||||
що належать вбудованому Plugin, таких як локальні маркери, OAuth або ambient credential.
|
||||
Ядро розглядає їх як несекретні для відображення автентифікації та аудитів секретів без
|
||||
жорсткого кодування провайдера-власника.
|
||||
- `channelEnvVars` — це шлях дешевих метаданих для резервного використання shell-env, підказок setup
|
||||
та подібних поверхонь каналів, які не повинні запускати runtime Plugin
|
||||
лише для перевірки імен env. Імена env — це метадані, а не активація самі по
|
||||
собі: статус, аудит, перевірка доставки Cron та інші поверхні лише для читання все одно
|
||||
застосовують довіру до Plugin і політику ефективної активації, перш ніж
|
||||
розглядати env var як налаштований канал.
|
||||
- `providerAuthChoices` — це шлях дешевих метаданих для селекторів варіантів автентифікації,
|
||||
розв’язання `--auth-choice`, зіставлення пріоритетного провайдера та простої
|
||||
реєстрації прапорців CLI онбордингу до завантаження runtime провайдера. Для метаданих
|
||||
wizard runtime, які потребують коду провайдера, див.
|
||||
[Хуки runtime провайдера](/uk/plugins/architecture#provider-runtime-hooks).
|
||||
- Ексклюзивні типи Plugin вибираються через `plugins.slots.*`.
|
||||
- `kind: "memory"` вибирається через `plugins.slots.memory`.
|
||||
- `kind: "context-engine"` вибирається через `plugins.slots.contextEngine`
|
||||
(типово: вбудований `legacy`).
|
||||
- `channels`, `providers`, `cliBackends` і `skills` можна не вказувати, коли
|
||||
Plugin їх не потребує.
|
||||
- Якщо ваш Plugin залежить від власних модулів, задокументуйте кроки збірки та всі
|
||||
вимоги до allowlist менеджера пакетів (наприклад, pnpm `allow-build-scripts`
|
||||
- `pnpm rebuild <package>`).
|
||||
- Маніфест **обов’язковий для нативних plugin OpenClaw**, включно із завантаженням із локальної файлової системи. Runtime, як і раніше, завантажує модуль plugin окремо; маніфест потрібен лише для виявлення + валідації.
|
||||
- Нативні маніфести розбираються за допомогою JSON5, тому коментарі, завершальні коми та ключі без лапок дозволені, якщо кінцеве значення все одно є об’єктом.
|
||||
- Завантажувач маніфесту читає лише задокументовані поля маніфесту. Уникайте користувацьких ключів верхнього рівня.
|
||||
- `channels`, `providers`, `cliBackends` і `skills` можна не вказувати, якщо plugin їх не потребує.
|
||||
- Ексклюзивні типи plugin вибираються через `plugins.slots.*`: `kind: "memory"` через `plugins.slots.memory`, `kind: "context-engine"` через `plugins.slots.contextEngine` (типово `legacy`).
|
||||
- Метадані env vars (`providerAuthEnvVars`, `channelEnvVars`) є лише декларативними. Status, audit, валідація доставки Cron та інші поверхні лише для читання все одно застосовують політику довіри до plugin і ефективної активації перед тим, як вважати env var налаштованою.
|
||||
- Щодо метаданих runtime wizard, які потребують коду провайдера, див. [Provider runtime hooks](/uk/plugins/architecture#provider-runtime-hooks).
|
||||
- Якщо ваш plugin залежить від нативних модулів, задокументуйте кроки збірки та будь-які вимоги до allowlist менеджера пакетів (наприклад, pnpm `allow-build-scripts` + `pnpm rebuild <package>`).
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Створення Plugins](/uk/plugins/building-plugins) — початок роботи з Plugins
|
||||
- [Архітектура Plugin](/uk/plugins/architecture) — внутрішня архітектура
|
||||
- [Огляд SDK](/uk/plugins/sdk-overview) — довідник SDK Plugin
|
||||
<CardGroup cols={3}>
|
||||
<Card title="Створення plugin" href="/uk/plugins/building-plugins" icon="rocket">
|
||||
Початок роботи з plugin.
|
||||
</Card>
|
||||
<Card title="Архітектура plugin" href="/uk/plugins/architecture" icon="diagram-project">
|
||||
Внутрішня архітектура та модель можливостей.
|
||||
</Card>
|
||||
<Card title="Огляд SDK" href="/uk/plugins/sdk-overview" icon="book">
|
||||
Довідник SDK plugin і імпорти subpath.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
@ -6,20 +6,20 @@ read_when:
|
||||
summary: Використовуйте OpenAI через API-ключі або підписку Codex в OpenClaw
|
||||
title: OpenAI
|
||||
x-i18n:
|
||||
generated_at: "2026-04-23T16:52:29Z"
|
||||
generated_at: "2026-04-23T16:57:03Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: a7655fec1e986ccbd01a34f0434e4a88d08c672e0e0cba6c2a8978f11f5f519d
|
||||
source_hash: 4e03126c2b47514c1bfa364feb5c0c2d452d0e389030c70edd5d9dc7dee3264e
|
||||
source_path: providers/openai.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# OpenAI
|
||||
|
||||
OpenAI надає API для розробників для моделей GPT. OpenClaw підтримує два варіанти автентифікації:
|
||||
OpenAI надає API для розробників для моделей GPT. OpenClaw підтримує два способи автентифікації:
|
||||
|
||||
- **API-ключ** — прямий доступ до OpenAI Platform з тарифікацією за використання (`openai/*` models)
|
||||
- **Підписка Codex** — вхід через ChatGPT/Codex із доступом за підпискою (`openai-codex/*` models)
|
||||
- **API-ключ** — прямий доступ до OpenAI Platform з оплатою за використання (`openai/*` моделі)
|
||||
- **Підписка Codex** — вхід через ChatGPT/Codex із доступом за підпискою (`openai-codex/*` моделі)
|
||||
|
||||
OpenAI прямо підтримує використання OAuth-підписки в зовнішніх інструментах і робочих процесах, таких як OpenClaw.
|
||||
|
||||
@ -29,14 +29,14 @@ x-i18n:
|
||||
| ------------------------- | ----------------------------------------- | ------------------------------------------------------ |
|
||||
| Чат / Responses | Провайдер моделей `openai/<model>` | Так |
|
||||
| Моделі підписки Codex | Провайдер моделей `openai-codex/<model>` | Так |
|
||||
| Вебпошук на стороні сервера | Вбудований інструмент OpenAI Responses | Так, коли вебпошук увімкнено і провайдера не закріплено |
|
||||
| Пошук у вебі на стороні сервера | Власний інструмент OpenAI Responses | Так, коли пошук у вебі ввімкнено і провайдера не закріплено |
|
||||
| Зображення | `image_generate` | Так |
|
||||
| Відео | `video_generate` | Так |
|
||||
| Перетворення тексту на мовлення | `messages.tts.provider: "openai"` / `tts` | Так |
|
||||
| Пакетне перетворення мовлення на текст | `tools.media.audio` / розуміння медіа | Так |
|
||||
| Потокове перетворення мовлення на текст | Voice Call `streaming.provider: "openai"` | Так |
|
||||
| Перетворення тексту на мовлення | `messages.tts.provider: "openai"` / `tts` | Так |
|
||||
| Пакетне перетворення мовлення на текст | `tools.media.audio` / розуміння медіа | Так |
|
||||
| Потокове перетворення мовлення на текст | Voice Call `streaming.provider: "openai"` | Так |
|
||||
| Голос у реальному часі | Voice Call `realtime.provider: "openai"` | Так |
|
||||
| Векторні подання | провайдер embedding для пам’яті | Так |
|
||||
| Embeddings | Провайдер embedding для пам’яті | Так |
|
||||
|
||||
## Початок роботи
|
||||
|
||||
@ -44,13 +44,13 @@ x-i18n:
|
||||
|
||||
<Tabs>
|
||||
<Tab title="API-ключ (OpenAI Platform)">
|
||||
**Найкраще підходить для:** прямого доступу до API та тарифікації за використання.
|
||||
**Найкраще для:** прямого доступу до API та оплати за використання.
|
||||
|
||||
<Steps>
|
||||
<Step title="Отримайте свій API-ключ">
|
||||
Створіть або скопіюйте API-ключ на [панелі OpenAI Platform](https://platform.openai.com/api-keys).
|
||||
</Step>
|
||||
<Step title="Запустіть онбординг">
|
||||
<Step title="Запустіть початкове налаштування">
|
||||
```bash
|
||||
openclaw onboard --auth-choice openai-api-key
|
||||
```
|
||||
@ -61,22 +61,22 @@ x-i18n:
|
||||
openclaw onboard --openai-api-key "$OPENAI_API_KEY"
|
||||
```
|
||||
</Step>
|
||||
<Step title="Перевірте, що модель доступна">
|
||||
<Step title="Переконайтеся, що модель доступна">
|
||||
```bash
|
||||
openclaw models list --provider openai
|
||||
```
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
### Зведення маршрутів
|
||||
### Підсумок маршруту
|
||||
|
||||
| Model ref | Маршрут | Автентифікація |
|
||||
| Посилання на модель | Маршрут | Автентифікація |
|
||||
|-----------|-------|------|
|
||||
| `openai/gpt-5.4` | Прямий API OpenAI Platform | `OPENAI_API_KEY` |
|
||||
| `openai/gpt-5.4-pro` | Прямий API OpenAI Platform | `OPENAI_API_KEY` |
|
||||
|
||||
<Note>
|
||||
Вхід через ChatGPT/Codex маршрутизується через `openai-codex/*`, а не `openai/*`.
|
||||
Вхід через ChatGPT/Codex маршрутизується через `openai-codex/*`, а не через `openai/*`.
|
||||
</Note>
|
||||
|
||||
### Приклад конфігурації
|
||||
@ -89,13 +89,13 @@ x-i18n:
|
||||
```
|
||||
|
||||
<Warning>
|
||||
OpenClaw **не** надає `openai/gpt-5.3-codex-spark` у прямому маршруті API. Живі запити до OpenAI API відхиляють цю модель. Spark доступний лише для Codex.
|
||||
OpenClaw **не** надає `openai/gpt-5.3-codex-spark` на прямому шляху API. Живі запити до OpenAI API відхиляють цю модель. Spark доступний лише в Codex.
|
||||
</Warning>
|
||||
|
||||
</Tab>
|
||||
|
||||
<Tab title="Підписка Codex">
|
||||
**Найкраще підходить для:** використання вашої підписки ChatGPT/Codex замість окремого API-ключа. Codex cloud потребує входу через ChatGPT.
|
||||
**Найкраще для:** використання вашої підписки ChatGPT/Codex замість окремого API-ключа. Codex cloud потребує входу через ChatGPT.
|
||||
|
||||
<Steps>
|
||||
<Step title="Запустіть Codex OAuth">
|
||||
@ -109,33 +109,33 @@ x-i18n:
|
||||
openclaw models auth login --provider openai-codex
|
||||
```
|
||||
|
||||
Для headless-середовищ або конфігурацій, несумісних із callback, додайте `--device-code`, щоб увійти через потік device-code ChatGPT замість callback браузера на localhost:
|
||||
Для headless-середовищ або конфігурацій, де callback небажаний, додайте `--device-code`, щоб увійти через потік device-code ChatGPT замість callback браузера на localhost:
|
||||
|
||||
```bash
|
||||
openclaw models auth login --provider openai-codex --device-code
|
||||
```
|
||||
</Step>
|
||||
<Step title="Встановіть модель за замовчуванням">
|
||||
<Step title="Установіть модель за замовчуванням">
|
||||
```bash
|
||||
openclaw config set agents.defaults.model.primary openai-codex/gpt-5.4
|
||||
```
|
||||
</Step>
|
||||
<Step title="Перевірте, що модель доступна">
|
||||
<Step title="Переконайтеся, що модель доступна">
|
||||
```bash
|
||||
openclaw models list --provider openai-codex
|
||||
```
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
### Зведення маршрутів
|
||||
### Підсумок маршруту
|
||||
|
||||
| Model ref | Маршрут | Автентифікація |
|
||||
| Посилання на модель | Маршрут | Автентифікація |
|
||||
|-----------|-------|------|
|
||||
| `openai-codex/gpt-5.4` | ChatGPT/Codex OAuth | Вхід Codex |
|
||||
| `openai-codex/gpt-5.3-codex-spark` | ChatGPT/Codex OAuth | Вхід Codex (залежить від entitlement) |
|
||||
|
||||
<Note>
|
||||
Цей маршрут навмисно відокремлено від `openai/gpt-5.4`. Використовуйте `openai/*` з API-ключем для прямого доступу до Platform, а `openai-codex/*` — для доступу за підпискою Codex.
|
||||
Цей маршрут навмисно відокремлено від `openai/gpt-5.4`. Використовуйте `openai/*` з API-ключем для прямого доступу до Platform, а `openai-codex/*` — для доступу через підписку Codex.
|
||||
</Note>
|
||||
|
||||
### Приклад конфігурації
|
||||
@ -147,10 +147,10 @@ x-i18n:
|
||||
```
|
||||
|
||||
<Note>
|
||||
Онбординг більше не імпортує OAuth-матеріали з `~/.codex`. Увійдіть через OAuth у браузері (типово) або через наведений вище потік device-code — OpenClaw зберігає отримані облікові дані у власному сховищі автентифікації агентів.
|
||||
Початкове налаштування більше не імпортує OAuth-матеріали з `~/.codex`. Увійдіть через браузерний OAuth (типово) або через наведений вище потік device-code — OpenClaw зберігає отримані облікові дані у власному сховищі автентифікації агентів.
|
||||
</Note>
|
||||
|
||||
### Обмеження вікна контексту
|
||||
### Обмеження контекстного вікна
|
||||
|
||||
OpenClaw розглядає метадані моделі та обмеження контексту під час виконання як окремі значення.
|
||||
|
||||
@ -159,7 +159,7 @@ x-i18n:
|
||||
- Власне `contextWindow`: `1050000`
|
||||
- Типове обмеження `contextTokens` під час виконання: `272000`
|
||||
|
||||
Менше типове обмеження на практиці забезпечує кращі характеристики затримки та якості. Перевизначте його через `contextTokens`:
|
||||
Менше типове обмеження на практиці забезпечує кращі характеристики затримки та якості. Замініть його через `contextTokens`:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -174,7 +174,7 @@ x-i18n:
|
||||
```
|
||||
|
||||
<Note>
|
||||
Використовуйте `contextWindow`, щоб указати власні метадані моделі. Використовуйте `contextTokens`, щоб обмежити бюджет контексту під час виконання.
|
||||
Використовуйте `contextWindow`, щоб оголосити власні метадані моделі. Використовуйте `contextTokens`, щоб обмежити бюджет контексту під час виконання.
|
||||
</Note>
|
||||
|
||||
</Tab>
|
||||
@ -186,10 +186,10 @@ x-i18n:
|
||||
|
||||
| Можливість | Значення |
|
||||
| ------------------------ | ---------------------------------- |
|
||||
| Типова модель | `openai/gpt-image-2` |
|
||||
| Модель за замовчуванням | `openai/gpt-image-2` |
|
||||
| Максимум зображень на запит | 4 |
|
||||
| Режим редагування | Увімкнено (до 5 еталонних зображень) |
|
||||
| Перевизначення розміру | Підтримується, зокрема розміри 2K/4K |
|
||||
| Перевизначення розміру | Підтримується, включно з розмірами 2K/4K |
|
||||
| Співвідношення сторін / роздільна здатність | Не передається до OpenAI Images API |
|
||||
|
||||
```json5
|
||||
@ -203,32 +203,32 @@ x-i18n:
|
||||
```
|
||||
|
||||
<Note>
|
||||
Див. [Генерація зображень](/uk/tools/image-generation), щоб дізнатися про спільні параметри інструмента, вибір провайдера та поведінку failover.
|
||||
Перегляньте [Генерація зображень](/uk/tools/image-generation), щоб дізнатися про спільні параметри інструмента, вибір провайдера та поведінку резервного перемикання.
|
||||
</Note>
|
||||
|
||||
`gpt-image-2` — типова модель як для генерації зображень з тексту в OpenAI, так і для редагування зображень. `gpt-image-1` усе ще можна використовувати як явне перевизначення моделі, але нові робочі процеси OpenAI для зображень мають використовувати `openai/gpt-image-2`.
|
||||
`gpt-image-2` є типовою моделлю як для генерації зображень із тексту OpenAI, так і для редагування зображень. `gpt-image-1` і далі можна використовувати як явне перевизначення моделі, але нові робочі процеси OpenAI для зображень мають використовувати `openai/gpt-image-2`.
|
||||
|
||||
Згенерувати:
|
||||
Генерація:
|
||||
|
||||
```
|
||||
/tool image_generate model=openai/gpt-image-2 prompt="Відполірований постер запуску OpenClaw на macOS" size=3840x2160 count=1
|
||||
/tool image_generate model=openai/gpt-image-2 prompt="Вишуканий постер запуску OpenClaw на macOS" size=3840x2160 count=1
|
||||
```
|
||||
|
||||
Редагувати:
|
||||
Редагування:
|
||||
|
||||
```
|
||||
/tool image_generate model=openai/gpt-image-2 prompt="Збережи форму об’єкта, зміни матеріал на прозоре скло" image=/path/to/reference.png size=1024x1536
|
||||
/tool image_generate model=openai/gpt-image-2 prompt="Збережіть форму об’єкта, змініть матеріал на напівпрозоре скло" image=/path/to/reference.png size=1024x1536
|
||||
```
|
||||
|
||||
## Генерація відео
|
||||
|
||||
Вбудований Plugin `openai` реєструє генерацію відео через інструмент `video_generate`.
|
||||
|
||||
| Можливість | Значення |
|
||||
| --------------- | ----------------------------------------------------------------------------------- |
|
||||
| Типова модель | `openai/sora-2` |
|
||||
| Режими | Текст у відео, зображення у відео, редагування одного відео |
|
||||
| Еталонні вхідні дані | 1 зображення або 1 відео |
|
||||
| Можливість | Значення |
|
||||
| ----------------- | --------------------------------------------------------------------------------- |
|
||||
| Модель за замовчуванням | `openai/sora-2` |
|
||||
| Режими | Текст у відео, зображення у відео, редагування одного відео |
|
||||
| Еталонні входи | 1 зображення або 1 відео |
|
||||
| Перевизначення розміру | Підтримується |
|
||||
| Інші перевизначення | `aspectRatio`, `resolution`, `audio`, `watermark` ігноруються з попередженням інструмента |
|
||||
|
||||
@ -243,25 +243,25 @@ x-i18n:
|
||||
```
|
||||
|
||||
<Note>
|
||||
Див. [Генерація відео](/uk/tools/video-generation), щоб дізнатися про спільні параметри інструмента, вибір провайдера та поведінку failover.
|
||||
Перегляньте [Генерація відео](/uk/tools/video-generation), щоб дізнатися про спільні параметри інструмента, вибір провайдера та поведінку резервного перемикання.
|
||||
</Note>
|
||||
|
||||
## Внесок у промпт GPT-5
|
||||
|
||||
OpenClaw додає спільний внесок у промпт GPT-5 для запусків сімейства GPT-5 у різних провайдерів. Він застосовується за id моделі, тому `openai/gpt-5.4`, `openai-codex/gpt-5.4`, `openrouter/openai/gpt-5.4`, `opencode/gpt-5.4` та інші сумісні посилання GPT-5 отримують однакове накладання. Старіші моделі GPT-4.x — ні.
|
||||
OpenClaw додає спільний внесок у промпт GPT-5 для запусків сімейства GPT-5 у різних провайдерів. Він застосовується за ідентифікатором моделі, тому `openai/gpt-5.4`, `openai-codex/gpt-5.4`, `openrouter/openai/gpt-5.4`, `opencode/gpt-5.4` та інші сумісні посилання GPT-5 отримують той самий оверлей. Старіші моделі GPT-4.x — ні.
|
||||
|
||||
Вбудований нативний провайдер Codex harness (`codex/*`) використовує ту саму поведінку GPT-5 і накладання Heartbeat через інструкції розробника Codex app-server, тому сеанси `codex/gpt-5.x` зберігають ту саму послідовність виконання та проактивні вказівки Heartbeat, хоча рештою промпту harness керує Codex.
|
||||
Вбудований нативний провайдер harness Codex (`codex/*`) використовує ту саму поведінку GPT-5 і оверлей Heartbeat через інструкції розробника сервера застосунку Codex, тому сесії `codex/gpt-5.x` зберігають таку саму послідовність виконання та проактивні вказівки щодо Heartbeat, навіть якщо рештою промпту harness керує Codex.
|
||||
|
||||
Внесок GPT-5 додає тегований контракт поведінки для збереження персони, безпеки виконання, дисципліни інструментів, форми виводу, перевірок завершення та верифікації. Поведінка відповіді, специфічна для каналу, і поведінка тихих повідомлень залишаються у спільному системному промпті OpenClaw та політиці вихідної доставки. Вказівки GPT-5 завжди ввімкнені для відповідних моделей. Дружній стиль взаємодії є окремим і налаштовуваним.
|
||||
Внесок GPT-5 додає тегований контракт поведінки для збереження персони, безпеки виконання, дисципліни використання інструментів, форми виводу, перевірок завершення та верифікації. Специфічна для каналу поведінка відповіді та тихих повідомлень залишається у спільному системному промпті OpenClaw і політиці вихідної доставки. Вказівки GPT-5 завжди ввімкнені для відповідних моделей. Рівень дружнього стилю взаємодії є окремим і налаштовуваним.
|
||||
|
||||
| Значення | Ефект |
|
||||
| ---------------------- | ------------------------------------------ |
|
||||
| `"friendly"` (типово) | Увімкнути шар дружнього стилю взаємодії |
|
||||
| `"on"` | Псевдонім для `"friendly"` |
|
||||
| `"off"` | Вимкнути лише шар дружнього стилю |
|
||||
| Значення | Ефект |
|
||||
| ---------------------- | ------------------------------------------- |
|
||||
| `"friendly"` (типово) | Увімкнути рівень дружнього стилю взаємодії |
|
||||
| `"on"` | Псевдонім для `"friendly"` |
|
||||
| `"off"` | Вимкнути лише рівень дружнього стилю |
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Config">
|
||||
<Tab title="Конфігурація">
|
||||
```json5
|
||||
{
|
||||
agents: {
|
||||
@ -282,11 +282,11 @@ OpenClaw додає спільний внесок у промпт GPT-5 для
|
||||
</Tabs>
|
||||
|
||||
<Tip>
|
||||
Під час виконання значення не чутливі до регістру, тому і `"Off"`, і `"off"` вимикають шар дружнього стилю.
|
||||
Під час виконання значення не чутливі до регістру, тож і `"Off"`, і `"off"` вимикають рівень дружнього стилю.
|
||||
</Tip>
|
||||
|
||||
<Note>
|
||||
Застаріле `plugins.entries.openai.config.personality` усе ще зчитується як сумісний запасний варіант, якщо спільне налаштування `agents.defaults.promptOverlays.gpt5.personality` не встановлено.
|
||||
Застаріле `plugins.entries.openai.config.personality` усе ще зчитується як сумісний резервний варіант, якщо спільний параметр `agents.defaults.promptOverlays.gpt5.personality` не встановлено.
|
||||
</Note>
|
||||
|
||||
## Голос і мовлення
|
||||
@ -295,14 +295,14 @@ OpenClaw додає спільний внесок у промпт GPT-5 для
|
||||
<Accordion title="Синтез мовлення (TTS)">
|
||||
Вбудований Plugin `openai` реєструє синтез мовлення для поверхні `messages.tts`.
|
||||
|
||||
| Налаштування | Шлях конфігурації | Типове значення |
|
||||
| Параметр | Шлях конфігурації | Типове значення |
|
||||
|---------|------------|---------|
|
||||
| Модель | `messages.tts.providers.openai.model` | `gpt-4o-mini-tts` |
|
||||
| Голос | `messages.tts.providers.openai.voice` | `coral` |
|
||||
| Швидкість | `messages.tts.providers.openai.speed` | (не встановлено) |
|
||||
| Інструкції | `messages.tts.providers.openai.instructions` | (не встановлено, лише `gpt-4o-mini-tts`) |
|
||||
| Швидкість | `messages.tts.providers.openai.speed` | (не задано) |
|
||||
| Інструкції | `messages.tts.providers.openai.instructions` | (не задано, лише `gpt-4o-mini-tts`) |
|
||||
| Формат | `messages.tts.providers.openai.responseFormat` | `opus` для голосових нотаток, `mp3` для файлів |
|
||||
| API-ключ | `messages.tts.providers.openai.apiKey` | Резервно використовується `OPENAI_API_KEY` |
|
||||
| API-ключ | `messages.tts.providers.openai.apiKey` | Використовується `OPENAI_API_KEY`, якщо не задано |
|
||||
| Base URL | `messages.tts.providers.openai.baseUrl` | `https://api.openai.com/v1` |
|
||||
|
||||
Доступні моделі: `gpt-4o-mini-tts`, `tts-1`, `tts-1-hd`. Доступні голоси: `alloy`, `ash`, `ballad`, `cedar`, `coral`, `echo`, `fable`, `juniper`, `marin`, `onyx`, `nova`, `sage`, `shimmer`, `verse`.
|
||||
@ -320,7 +320,7 @@ OpenClaw додає спільний внесок у промпт GPT-5 для
|
||||
```
|
||||
|
||||
<Note>
|
||||
Установіть `OPENAI_TTS_BASE_URL`, щоб перевизначити базовий URL для TTS, не впливаючи на endpoint API чату.
|
||||
Установіть `OPENAI_TTS_BASE_URL`, щоб перевизначити базовий URL для TTS, не впливаючи на кінцеву точку API чату.
|
||||
</Note>
|
||||
|
||||
</Accordion>
|
||||
@ -330,9 +330,9 @@ OpenClaw додає спільний внесок у промпт GPT-5 для
|
||||
поверхню транскрибування media understanding в OpenClaw.
|
||||
|
||||
- Типова модель: `gpt-4o-transcribe`
|
||||
- Endpoint: OpenAI REST `/v1/audio/transcriptions`
|
||||
- Шлях введення: multipart-завантаження аудіофайлу
|
||||
- Підтримується в OpenClaw всюди, де вхідне транскрибування аудіо використовує
|
||||
- Кінцева точка: OpenAI REST `/v1/audio/transcriptions`
|
||||
- Шлях входу: multipart-завантаження аудіофайлу
|
||||
- Підтримується в OpenClaw всюди, де транскрибування вхідного аудіо використовує
|
||||
`tools.media.audio`, зокрема для сегментів голосових каналів Discord і
|
||||
аудіовкладень каналів
|
||||
|
||||
@ -356,26 +356,25 @@ OpenClaw додає спільний внесок у промпт GPT-5 для
|
||||
}
|
||||
```
|
||||
|
||||
Підказки щодо мови та prompt передаються до OpenAI, коли їх надано
|
||||
через спільну конфігурацію аудіомедіа або запит на транскрибування для
|
||||
конкретного виклику.
|
||||
Підказки мови та промпту передаються до OpenAI, коли вони надані через
|
||||
спільну конфігурацію audio media або в запиті транскрибування для окремого виклику.
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Транскрибування в реальному часі">
|
||||
Вбудований Plugin `openai` реєструє транскрибування в реальному часі для Plugin Voice Call.
|
||||
|
||||
| Налаштування | Шлях конфігурації | Типове значення |
|
||||
| Параметр | Шлях конфігурації | Типове значення |
|
||||
|---------|------------|---------|
|
||||
| Модель | `plugins.entries.voice-call.config.streaming.providers.openai.model` | `gpt-4o-transcribe` |
|
||||
| Мова | `...openai.language` | (не встановлено) |
|
||||
| Prompt | `...openai.prompt` | (не встановлено) |
|
||||
| Мова | `...openai.language` | (не задано) |
|
||||
| Промпт | `...openai.prompt` | (не задано) |
|
||||
| Тривалість тиші | `...openai.silenceDurationMs` | `800` |
|
||||
| Поріг VAD | `...openai.vadThreshold` | `0.5` |
|
||||
| API-ключ | `...openai.apiKey` | Резервно використовується `OPENAI_API_KEY` |
|
||||
| API-ключ | `...openai.apiKey` | Використовується `OPENAI_API_KEY`, якщо не задано |
|
||||
|
||||
<Note>
|
||||
Використовує з’єднання WebSocket з `wss://api.openai.com/v1/realtime` з аудіо G.711 u-law (`g711_ulaw` / `audio/pcmu`). Цей потоковий провайдер призначено для шляху транскрибування в реальному часі у Voice Call; голосовий Discord зараз натомість записує короткі сегменти й використовує пакетний шлях транскрибування `tools.media.audio`.
|
||||
Використовує WebSocket-з’єднання з `wss://api.openai.com/v1/realtime` з аудіо формату G.711 u-law (`g711_ulaw` / `audio/pcmu`). Цей потоковий провайдер призначений для шляху транскрибування в реальному часі у Voice Call; голос у Discord наразі записує короткі сегменти й замість цього використовує пакетний шлях транскрибування `tools.media.audio`.
|
||||
</Note>
|
||||
|
||||
</Accordion>
|
||||
@ -383,14 +382,14 @@ OpenClaw додає спільний внесок у промпт GPT-5 для
|
||||
<Accordion title="Голос у реальному часі">
|
||||
Вбудований Plugin `openai` реєструє голос у реальному часі для Plugin Voice Call.
|
||||
|
||||
| Налаштування | Шлях конфігурації | Типове значення |
|
||||
| Параметр | Шлях конфігурації | Типове значення |
|
||||
|---------|------------|---------|
|
||||
| Модель | `plugins.entries.voice-call.config.realtime.providers.openai.model` | `gpt-realtime` |
|
||||
| Голос | `...openai.voice` | `alloy` |
|
||||
| Temperature | `...openai.temperature` | `0.8` |
|
||||
| Поріг VAD | `...openai.vadThreshold` | `0.5` |
|
||||
| Тривалість тиші | `...openai.silenceDurationMs` | `500` |
|
||||
| API-ключ | `...openai.apiKey` | Резервно використовується `OPENAI_API_KEY` |
|
||||
| API-ключ | `...openai.apiKey` | Використовується `OPENAI_API_KEY`, якщо не задано |
|
||||
|
||||
<Note>
|
||||
Підтримує Azure OpenAI через ключі конфігурації `azureEndpoint` і `azureDeployment`. Підтримує двонапрямлений виклик інструментів. Використовує аудіоформат G.711 u-law.
|
||||
@ -399,31 +398,31 @@ OpenClaw додає спільний внесок у промпт GPT-5 для
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## Endpoint-и Azure OpenAI
|
||||
## Кінцеві точки Azure OpenAI
|
||||
|
||||
Вбудований провайдер `openai` може націлюватися на ресурс Azure OpenAI для
|
||||
генерації зображень через перевизначення базового URL. На шляху генерації
|
||||
зображень OpenClaw виявляє хости Azure у `models.providers.openai.baseUrl` і
|
||||
автоматично перемикається на формат запиту Azure.
|
||||
зображень OpenClaw виявляє імена хостів Azure у `models.providers.openai.baseUrl` і автоматично
|
||||
перемикається на формат запиту Azure.
|
||||
|
||||
<Note>
|
||||
Голос у реальному часі використовує окремий шлях конфігурації
|
||||
(`plugins.entries.voice-call.config.realtime.providers.openai.azureEndpoint`)
|
||||
і не залежить від `models.providers.openai.baseUrl`. Див. акордеон **Голос у
|
||||
реальному часі** в розділі [Голос і мовлення](#voice-and-speech) для його
|
||||
параметрів Azure.
|
||||
і на нього не впливає `models.providers.openai.baseUrl`. Дивіться акордеон **Голос
|
||||
у реальному часі** в розділі [Голос і мовлення](#voice-and-speech) для його параметрів
|
||||
Azure.
|
||||
</Note>
|
||||
|
||||
Використовуйте Azure OpenAI, якщо:
|
||||
Використовуйте Azure OpenAI, коли:
|
||||
|
||||
- у вас уже є підписка Azure OpenAI, квота або корпоративна угода
|
||||
- вам потрібна регіональна локалізація даних або засоби відповідності вимогам, які надає Azure
|
||||
- ви хочете зберігати трафік у межах наявного tenancy Azure
|
||||
- У вас уже є підписка Azure OpenAI, квота або корпоративна угода
|
||||
- Вам потрібна регіональна резидентність даних або засоби відповідності вимогам, які надає Azure
|
||||
- Ви хочете зберігати трафік у межах наявного tenancy Azure
|
||||
|
||||
### Конфігурація
|
||||
|
||||
Для генерації зображень Azure через вбудований провайдер `openai` укажіть у
|
||||
`models.providers.openai.baseUrl` ваш ресурс Azure і встановіть у `apiKey`
|
||||
Для генерації зображень в Azure через вбудований провайдер `openai` вкажіть
|
||||
`models.providers.openai.baseUrl` на ваш ресурс Azure і встановіть `apiKey` у
|
||||
ключ Azure OpenAI (а не ключ OpenAI Platform):
|
||||
|
||||
```json5
|
||||
@ -451,14 +450,14 @@ OpenClaw розпізнає такі суфікси хостів Azure для м
|
||||
- Використовує шляхи з областю deployment (`/openai/deployments/{deployment}/...`)
|
||||
- Додає `?api-version=...` до кожного запиту
|
||||
|
||||
Інші base URL (публічний OpenAI, OpenAI-сумісні проксі) зберігають стандартний
|
||||
формат запитів зображень OpenAI.
|
||||
Інші базові URL (публічний OpenAI, OpenAI-сумісні проксі) зберігають стандартний
|
||||
формат запиту зображень OpenAI.
|
||||
|
||||
<Note>
|
||||
Маршрутизація Azure для шляху генерації зображень провайдера `openai`
|
||||
потребує OpenClaw 2026.4.22 або новішої версії. У попередніх версіях будь-який
|
||||
власний `openai.baseUrl` обробляється як публічний endpoint OpenAI і не
|
||||
працюватиме з deployment-ами зображень Azure.
|
||||
потребує OpenClaw 2026.4.22 або новішої версії. Раніші версії розглядають будь-який нетиповий
|
||||
`openai.baseUrl` як публічну кінцеву точку OpenAI і не працюватимуть із deployment
|
||||
зображень Azure.
|
||||
</Note>
|
||||
|
||||
### Версія API
|
||||
@ -474,10 +473,10 @@ export AZURE_OPENAI_API_VERSION="2024-12-01-preview"
|
||||
|
||||
### Імена моделей — це імена deployment
|
||||
|
||||
Azure OpenAI прив’язує моделі до deployment-ів. Для запитів генерації зображень Azure,
|
||||
Azure OpenAI прив’язує моделі до deployment. Для запитів генерації зображень Azure,
|
||||
маршрутизованих через вбудований провайдер `openai`, поле `model` в OpenClaw
|
||||
має бути **іменем deployment Azure**, яке ви налаштували в порталі Azure, а не
|
||||
публічним id моделі OpenAI.
|
||||
ідентифікатором публічної моделі OpenAI.
|
||||
|
||||
Якщо ви створите deployment з назвою `gpt-image-2-prod`, який обслуговує `gpt-image-2`:
|
||||
|
||||
@ -490,48 +489,48 @@ Azure OpenAI прив’язує моделі до deployment-ів. Для за
|
||||
|
||||
### Регіональна доступність
|
||||
|
||||
Генерація зображень Azure наразі доступна лише в обмеженій кількості регіонів
|
||||
Генерація зображень в Azure наразі доступна лише в частині регіонів
|
||||
(наприклад, `eastus2`, `swedencentral`, `polandcentral`, `westus3`,
|
||||
`uaenorth`). Перевірте актуальний список регіонів Microsoft перед створенням
|
||||
deployment-у та підтвердьте, що конкретна модель доступна у вашому регіоні.
|
||||
deployment і підтвердьте, що потрібна модель доступна у вашому регіоні.
|
||||
|
||||
### Відмінності параметрів
|
||||
|
||||
Azure OpenAI і публічний OpenAI не завжди приймають однакові параметри зображень.
|
||||
Azure може відхиляти параметри, які публічний OpenAI дозволяє (наприклад, певні
|
||||
значення `background` для `gpt-image-2`) або надавати їх лише для конкретних
|
||||
версій моделей. Ці відмінності походять від Azure та базової моделі, а не від
|
||||
Azure може відхиляти параметри, які дозволяє публічний OpenAI (наприклад, певні
|
||||
значення `background` для `gpt-image-2`) або надавати їх лише для певних версій
|
||||
моделей. Ці відмінності походять від Azure і базової моделі, а не від
|
||||
OpenClaw. Якщо запит Azure завершується помилкою валідації, перевірте набір
|
||||
параметрів, які підтримуються вашим конкретним deployment-ом і версією API в
|
||||
параметрів, який підтримується вашим конкретним deployment і версією API в
|
||||
порталі Azure.
|
||||
|
||||
<Note>
|
||||
Azure OpenAI використовує нативний transport і поведінку сумісності, але не отримує
|
||||
приховані заголовки attribution OpenClaw — див. акордеон **Нативні маршрути та маршрути, сумісні з OpenAI**
|
||||
в розділі [Розширена конфігурація](#advanced-configuration).
|
||||
Azure OpenAI використовує нативний транспорт і сумісну поведінку, але не отримує
|
||||
прихованих заголовків атрибуції OpenClaw — дивіться акордеон **Нативні та OpenAI-сумісні
|
||||
маршрути** в розділі [Розширена конфігурація](#advanced-configuration).
|
||||
|
||||
Для чату або трафіку Responses в Azure (окрім генерації зображень) використовуйте
|
||||
потік онбордингу або окрему конфігурацію провайдера Azure — одного лише
|
||||
Для трафіку chat або Responses в Azure (окрім генерації зображень) використовуйте
|
||||
потік початкового налаштування або окрему конфігурацію провайдера Azure — одного лише
|
||||
`openai.baseUrl` недостатньо, щоб застосувати формат API/автентифікації Azure. Існує окремий
|
||||
провайдер `azure-openai-responses/*`; див.
|
||||
[Server-side Compaction](#server-side-compaction-responses-api).
|
||||
провайдер `azure-openai-responses/*`; дивіться
|
||||
акордеон Server-side compaction нижче.
|
||||
</Note>
|
||||
|
||||
## Розширена конфігурація
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Transport (WebSocket чи SSE)">
|
||||
OpenClaw використовує пріоритет WebSocket із резервним переходом на SSE (`"auto"`) як для `openai/*`, так і для `openai-codex/*`.
|
||||
<Accordion title="Транспорт (WebSocket проти SSE)">
|
||||
OpenClaw використовує WebSocket-first із резервним переходом на SSE (`"auto"`) і для `openai/*`, і для `openai-codex/*`.
|
||||
|
||||
У режимі `"auto"` OpenClaw:
|
||||
- Повторює одну ранню помилку WebSocket перед переходом на SSE
|
||||
- Після збою позначає WebSocket як деградований приблизно на 60 секунд і використовує SSE під час охолодження
|
||||
- Додає стабільні заголовки ідентичності сеансу та ходу для повторів і перепідключень
|
||||
- Нормалізує лічильники використання (`input_tokens` / `prompt_tokens`) між варіантами transport
|
||||
- Після помилки позначає WebSocket як деградований приблизно на 60 секунд і використовує SSE під час охолодження
|
||||
- Додає стабільні заголовки ідентичності сесії та ходу для повторів і перепідключень
|
||||
- Нормалізує лічильники використання (`input_tokens` / `prompt_tokens`) для різних варіантів транспорту
|
||||
|
||||
| Значення | Поведінка |
|
||||
|-------|----------|
|
||||
| `"auto"` (типово) | Спочатку WebSocket, резервно SSE |
|
||||
| `"auto"` (типово) | Спочатку WebSocket, потім резервно SSE |
|
||||
| `"sse"` | Примусово лише SSE |
|
||||
| `"websocket"` | Примусово лише WebSocket |
|
||||
|
||||
@ -550,13 +549,13 @@ Azure OpenAI використовує нативний transport і поведі
|
||||
```
|
||||
|
||||
Пов’язана документація OpenAI:
|
||||
- [Realtime API з WebSocket](https://platform.openai.com/docs/guides/realtime-websocket)
|
||||
- [Потокові відповіді API (SSE)](https://platform.openai.com/docs/guides/streaming-responses)
|
||||
- [Realtime API with WebSocket](https://platform.openai.com/docs/guides/realtime-websocket)
|
||||
- [Streaming API responses (SSE)](https://platform.openai.com/docs/guides/streaming-responses)
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Прогрів WebSocket">
|
||||
OpenClaw за замовчуванням вмикає прогрів WebSocket для `openai/*`, щоб зменшити затримку першого ходу.
|
||||
OpenClaw типово вмикає прогрів WebSocket для `openai/*`, щоб зменшити затримку першого ходу.
|
||||
|
||||
```json5
|
||||
// Вимкнути прогрів
|
||||
@ -576,12 +575,12 @@ Azure OpenAI використовує нативний transport і поведі
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Швидкий режим">
|
||||
OpenClaw надає спільний перемикач швидкого режиму для `openai/*` і `openai-codex/*`:
|
||||
OpenClaw надає спільний перемикач швидкого режиму і для `openai/*`, і для `openai-codex/*`:
|
||||
|
||||
- **Чат/UI:** `/fast status|on|off`
|
||||
- **Chat/UI:** `/fast status|on|off`
|
||||
- **Конфігурація:** `agents.defaults.models["<provider>/<model>"].params.fastMode`
|
||||
|
||||
Коли ввімкнено, OpenClaw зіставляє швидкий режим із пріоритетною обробкою OpenAI (`service_tier = "priority"`). Наявні значення `service_tier` зберігаються, а швидкий режим не переписує `reasoning` чи `text.verbosity`.
|
||||
Коли його ввімкнено, OpenClaw відображає швидкий режим на пріоритетну обробку OpenAI (`service_tier = "priority"`). Наявні значення `service_tier` зберігаються, а швидкий режим не переписує `reasoning` або `text.verbosity`.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -597,13 +596,13 @@ Azure OpenAI використовує нативний transport і поведі
|
||||
```
|
||||
|
||||
<Note>
|
||||
Перевизначення сеансу мають вищий пріоритет за конфігурацію. Очищення перевизначення сеансу в UI Sessions повертає сеанс до налаштованого типового значення.
|
||||
Перевизначення сесії мають пріоритет над конфігурацією. Очищення перевизначення сесії в інтерфейсі Sessions повертає сесію до типового значення з конфігурації.
|
||||
</Note>
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Пріоритетна обробка (service_tier)">
|
||||
API OpenAI надає пріоритетну обробку через `service_tier`. Установіть її для кожної моделі в OpenClaw:
|
||||
API OpenAI надає пріоритетну обробку через `service_tier`. Установлюйте її для кожної моделі в OpenClaw:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -621,7 +620,7 @@ Azure OpenAI використовує нативний transport і поведі
|
||||
Підтримувані значення: `auto`, `default`, `flex`, `priority`.
|
||||
|
||||
<Warning>
|
||||
`serviceTier` передається лише до нативних endpoint-ів OpenAI (`api.openai.com`) і нативних endpoint-ів Codex (`chatgpt.com/backend-api`). Якщо ви маршрутизуєте будь-який із цих провайдерів через проксі, OpenClaw не змінює `service_tier`.
|
||||
`serviceTier` передається лише до нативних кінцевих точок OpenAI (`api.openai.com`) і нативних кінцевих точок Codex (`chatgpt.com/backend-api`). Якщо ви маршрутизуєте будь-якого з цих провайдерів через проксі, OpenClaw залишає `service_tier` без змін.
|
||||
</Warning>
|
||||
|
||||
</Accordion>
|
||||
@ -634,8 +633,8 @@ Azure OpenAI використовує нативний transport і поведі
|
||||
- Типовий `compact_threshold`: 70% від `contextWindow` (або `80000`, якщо значення недоступне)
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Увімкнути явно">
|
||||
Корисно для сумісних endpoint-ів, таких як Azure OpenAI Responses:
|
||||
<Tab title="Явне ввімкнення">
|
||||
Корисно для сумісних кінцевих точок, таких як Azure OpenAI Responses:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -669,7 +668,7 @@ Azure OpenAI використовує нативний transport і поведі
|
||||
}
|
||||
```
|
||||
</Tab>
|
||||
<Tab title="Вимкнути">
|
||||
<Tab title="Вимкнення">
|
||||
```json5
|
||||
{
|
||||
agents: {
|
||||
@ -693,7 +692,7 @@ Azure OpenAI використовує нативний transport і поведі
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Суворий агентний режим GPT">
|
||||
Для запусків сімейства GPT-5 у `openai/*` і `openai-codex/*` OpenClaw може використовувати суворіший вбудований контракт виконання:
|
||||
Для запусків сімейства GPT-5 на `openai/*` і `openai-codex/*` OpenClaw може використовувати суворіший вбудований контракт виконання:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -706,32 +705,32 @@ Azure OpenAI використовує нативний transport і поведі
|
||||
```
|
||||
|
||||
Із `strict-agentic` OpenClaw:
|
||||
- Більше не вважає хід лише з планом успішним прогресом, коли доступна дія інструмента
|
||||
- Повторює хід із вказівкою діяти зараз
|
||||
- Більше не вважає хід лише з планом успішним прогресом, якщо доступна дія інструмента
|
||||
- Повторює хід зі спрямуванням діяти негайно
|
||||
- Автоматично вмикає `update_plan` для суттєвої роботи
|
||||
- Показує явний заблокований стан, якщо модель продовжує планувати без дії
|
||||
- Показує явний стан блокування, якщо модель продовжує планувати без виконання дій
|
||||
|
||||
<Note>
|
||||
Застосовується лише до запусків сімейства GPT-5 OpenAI і Codex. Інші провайдери та старіші сімейства моделей зберігають типову поведінку.
|
||||
Поширюється лише на запуски сімейства GPT-5 OpenAI і Codex. Інші провайдери та старіші сімейства моделей зберігають типову поведінку.
|
||||
</Note>
|
||||
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Нативні маршрути та маршрути, сумісні з OpenAI">
|
||||
OpenClaw по-різному обробляє прямі endpoint-и OpenAI, Codex і Azure OpenAI порівняно з типовими проксі `/v1`, сумісними з OpenAI:
|
||||
<Accordion title="Нативні та OpenAI-сумісні маршрути">
|
||||
OpenClaw по-різному обробляє прямі кінцеві точки OpenAI, Codex і Azure OpenAI порівняно із загальними OpenAI-сумісними проксі `/v1`:
|
||||
|
||||
**Нативні маршрути** (`openai/*`, `openai-codex/*`, Azure OpenAI):
|
||||
- Зберігають `reasoning: { effort: "none" }` лише для моделей, які підтримують OpenAI `none` effort
|
||||
- Пропускають вимкнений reasoning для моделей або проксі, які відхиляють `reasoning.effort: "none"`
|
||||
- За замовчуванням використовують суворий режим для схем інструментів
|
||||
- Додають приховані заголовки attribution лише на перевірених нативних хостах
|
||||
- Зберігають формування запитів, специфічне для OpenAI (`service_tier`, `store`, reasoning-compat, підказки prompt-cache)
|
||||
- Зберігають `reasoning: { effort: "none" }` лише для моделей, що підтримують OpenAI `none` effort
|
||||
- Не додають вимкнений reasoning для моделей або проксі, які відхиляють `reasoning.effort: "none"`
|
||||
- Типово використовують строгий режим для схем інструментів
|
||||
- Додають приховані заголовки атрибуції лише на перевірених нативних хостах
|
||||
- Зберігають форматування запитів, притаманне тільки OpenAI (`service_tier`, `store`, сумісність reasoning, підказки кешу промптів)
|
||||
|
||||
**Проксі/сумісні маршрути:**
|
||||
- Використовують м’якшу compat-поведінку
|
||||
- Не примушують суворі схеми інструментів або лише нативні заголовки
|
||||
- Використовують м’якшу сумісну поведінку
|
||||
- Не примушують строгі схеми інструментів або заголовки лише для нативних маршрутів
|
||||
|
||||
Azure OpenAI використовує нативний transport і compat-поведінку, але не отримує приховані заголовки attribution.
|
||||
Azure OpenAI використовує нативний транспорт і сумісну поведінку, але не отримує прихованих заголовків атрибуції.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
@ -740,15 +739,15 @@ Azure OpenAI використовує нативний transport і поведі
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Вибір моделі" href="/uk/concepts/model-providers" icon="layers">
|
||||
Вибір провайдерів, посилань на моделі та поведінки failover.
|
||||
Вибір провайдерів, посилань на моделі та поведінки резервного перемикання.
|
||||
</Card>
|
||||
<Card title="Генерація зображень" href="/uk/tools/image-generation" icon="image">
|
||||
Спільні параметри інструмента зображень і вибір провайдера.
|
||||
</Card>
|
||||
<Card title="Генерація відео" href="/uk/tools/video-generation" icon="video">
|
||||
Спільні параметри інструмента відео та вибір провайдера.
|
||||
Спільні параметри інструмента відео і вибір провайдера.
|
||||
</Card>
|
||||
<Card title="OAuth та автентифікація" href="/uk/gateway/authentication" icon="key">
|
||||
Докладно про автентифікацію та правила повторного використання облікових даних.
|
||||
<Card title="OAuth і автентифікація" href="/uk/gateway/authentication" icon="key">
|
||||
Докладніше про автентифікацію та правила повторного використання облікових даних.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user