diff --git a/docs/uk/plugins/manifest.md b/docs/uk/plugins/manifest.md index ac5b5a79a..5f157757b 100644 --- a/docs/uk/plugins/manifest.md +++ b/docs/uk/plugins/manifest.md @@ -1,38 +1,38 @@ --- read_when: - Ви створюєте Plugin для OpenClaw - - Вам потрібно випустити схему конфігурації Plugin або усунути помилки валідації Plugin -summary: Plugin manifest + вимоги до схеми JSON (сувора перевірка конфігурації) + - Вам потрібно випустити схему конфігурації Plugin або налагодити помилки валідації Plugin +summary: Маніфест Plugin + вимоги до JSON-схеми (сувора перевірка конфігурації) title: Маніфест Plugin x-i18n: - generated_at: "2026-05-01T22:03:37Z" + generated_at: "2026-05-02T02:49:18Z" model: gpt-5.5 provider: openai - source_hash: 19eb639d3a511c7be916764abdb179c6d3c126968f640836686cd2250950c795 + source_hash: 83fb98614783b679d6b49d2237148765708e5c5fc2ee40162d3ddd4752f763c2 source_path: plugins/manifest.md workflow: 16 --- Ця сторінка стосується лише **нативного маніфесту Plugin OpenClaw**. -Для сумісних макетів пакетів див. [Пакети Plugin](/uk/plugins/bundles). +Сумісні структури бандлів див. у [бандлах Plugin](/uk/plugins/bundles). -Сумісні формати пакетів використовують різні файли маніфестів: +Сумісні формати бандлів використовують інші файли маніфестів: -- Пакет Codex: `.codex-plugin/plugin.json` -- Пакет Claude: `.claude-plugin/plugin.json` або стандартний макет компонентів Claude +- Бандл Codex: `.codex-plugin/plugin.json` +- Бандл Claude: `.claude-plugin/plugin.json` або стандартна структура компонентів Claude без маніфесту -- Пакет Cursor: `.cursor-plugin/plugin.json` +- Бандл Cursor: `.cursor-plugin/plugin.json` -OpenClaw також автоматично виявляє ці макети пакетів, але вони не перевіряються +OpenClaw також автоматично виявляє ці структури бандлів, але вони не перевіряються за схемою `openclaw.plugin.json`, описаною тут. -Для сумісних пакетів OpenClaw наразі зчитує метадані пакета, а також оголошені -корені Skills, корені команд Claude, стандартні значення `settings.json` пакета Claude, -стандартні значення LSP пакета Claude і підтримувані набори хуків, коли макет відповідає +Для сумісних бандлів OpenClaw зараз читає метадані бандла плюс оголошені +корені skill, корені команд Claude, стандартні значення `settings.json` бандла Claude, +стандартні значення LSP бандла Claude та підтримувані набори хуків, коли структура відповідає очікуванням середовища виконання OpenClaw. -Кожен нативний Plugin OpenClaw **мусить** постачати файл `openclaw.plugin.json` у +Кожен нативний Plugin OpenClaw **повинен** постачати файл `openclaw.plugin.json` у **корені Plugin**. OpenClaw використовує цей маніфест для перевірки конфігурації **без виконання коду Plugin**. Відсутні або недійсні маніфести вважаються помилками Plugin і блокують перевірку конфігурації. @@ -43,19 +43,19 @@ OpenClaw також автоматично виявляє ці макети па ## Що робить цей файл -`openclaw.plugin.json` — це метадані, які OpenClaw зчитує **до завантаження вашого +`openclaw.plugin.json` — це метадані, які OpenClaw читає **перед завантаженням вашого коду Plugin**. Усе нижче має бути достатньо легким для перевірки без запуску середовища виконання Plugin. **Використовуйте його для:** -- ідентифікації Plugin, перевірки конфігурації та підказок інтерфейсу конфігурації -- метаданих автентифікації, онбордингу й налаштування (псевдонім, автоматичне ввімкнення, змінні середовища провайдера, варіанти автентифікації) +- ідентичності Plugin, перевірки конфігурації та підказок UI конфігурації +- метаданих автентифікації, онбордингу та налаштування (псевдонім, автоматичне ввімкнення, змінні середовища провайдера, варіанти автентифікації) - підказок активації для поверхонь площини керування - скороченого володіння сімейством моделей - статичних знімків володіння можливостями (`contracts`) -- метаданих QA runner, які може перевіряти спільний хост `openclaw qa` -- метаданих конфігурації для конкретного каналу, об’єднаних у каталог і поверхні перевірки +- метаданих запуску QA, які спільний хост `openclaw qa` може перевіряти +- метаданих конфігурації для окремих каналів, об'єднаних у каталог і поверхні перевірки **Не використовуйте його для:** реєстрації поведінки середовища виконання, оголошення точок входу коду або метаданих встановлення npm. Вони належать до вашого коду Plugin і `package.json`. @@ -73,7 +73,7 @@ OpenClaw також автоматично виявляє ці макети па } ``` -## Розгорнутий приклад +## Розширений приклад ```json { @@ -152,74 +152,74 @@ OpenClaw також автоматично виявляє ці макети па ## Довідник полів верхнього рівня -| Поле | Обов’язково | Тип | Що це означає | -| ------------------------------------ | -------- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `id` | Так | `string` | Канонічний ідентифікатор плагіна. Це ідентифікатор, який використовується в `plugins.entries.`. | -| `configSchema` | Так | `object` | Вбудована JSON Schema для конфігурації цього плагіна. | -| `enabledByDefault` | Ні | `true` | Позначає вбудований плагін як увімкнений за замовчуванням. Пропустіть це поле або задайте будь-яке значення, відмінне від `true`, щоб залишити плагін вимкненим за замовчуванням. | -| `legacyPluginIds` | Ні | `string[]` | Застарілі ідентифікатори, які нормалізуються до цього канонічного ідентифікатора плагіна. | -| `autoEnableWhenConfiguredProviders` | Ні | `string[]` | Ідентифікатори провайдерів, які мають автоматично вмикати цей плагін, коли auth, config або посилання на моделі згадують їх. | -| `kind` | Ні | `"memory"` \| `"context-engine"` | Оголошує ексклюзивний тип плагіна, який використовується `plugins.slots.*`. | -| `channels` | Ні | `string[]` | Ідентифікатори каналів, що належать цьому плагіну. Використовується для виявлення та перевірки конфігурації. | -| `providers` | Ні | `string[]` | Ідентифікатори провайдерів, що належать цьому плагіну. | -| `providerDiscoveryEntry` | Ні | `string` | Шлях до легковагового модуля виявлення провайдерів, відносний до кореня плагіна, для метаданих каталогу провайдерів у межах маніфесту, які можна завантажити без активації повного runtime плагіна. | -| `modelSupport` | Ні | `object` | Скорочені метадані родин моделей, що належать маніфесту та використовуються для автоматичного завантаження плагіна перед runtime. | -| `modelCatalog` | Ні | `object` | Декларативні метадані каталогу моделей для провайдерів, що належать цьому плагіну. Це контракт площини керування для майбутнього списку лише для читання, onboarding, засобів вибору моделей, псевдонімів і придушення без завантаження runtime плагіна. | -| `modelPricing` | Ні | `object` | Політика пошуку зовнішніх цін, що належить провайдеру. Використовуйте її, щоб виключити локальних або self-hosted провайдерів із віддалених каталогів цін або зіставити посилання провайдерів з ідентифікаторами каталогів OpenRouter/LiteLLM без жорсткого кодування ідентифікаторів провайдерів у core. | -| `modelIdNormalization` | Ні | `object` | Очищення псевдонімів/префіксів ідентифікаторів моделей, що належить провайдеру та має виконуватися до завантаження runtime провайдера. | -| `providerEndpoints` | Ні | `object[]` | Метадані host/baseUrl endpoint, що належать маніфесту, для маршрутів провайдерів, які core має класифікувати до завантаження runtime провайдера. | -| `providerRequest` | Ні | `object` | Дешеві метадані родини провайдера та сумісності запитів, які використовуються загальною політикою запитів до завантаження runtime провайдера. | -| `cliBackends` | Ні | `string[]` | Ідентифікатори backend CLI inference, що належать цьому плагіну. Використовується для автоматичної активації під час запуску з явних посилань у конфігурації. | -| `syntheticAuthRefs` | Ні | `string[]` | Посилання на провайдерів або backend CLI, для яких синтетичний auth hook, що належить плагіну, має перевірятися під час холодного виявлення моделей до завантаження runtime. | -| `nonSecretAuthMarkers` | Ні | `string[]` | Значення-заповнювачі API key, що належать вбудованому плагіну та представляють несекретний локальний, OAuth або ambient credential state. | -| `commandAliases` | Ні | `object[]` | Назви команд, що належать цьому плагіну та мають створювати діагностику конфігурації й CLI з урахуванням плагіна до завантаження runtime. | -| `providerAuthEnvVars` | Ні | `Record` | Застарілі метадані сумісності env для пошуку auth/status провайдера. Для нових плагінів надавайте перевагу `setup.providers[].envVars`; OpenClaw усе ще читає це протягом періоду виведення з ужитку. | -| `providerAuthAliases` | Ні | `Record` | Ідентифікатори провайдерів, які мають повторно використовувати інший ідентифікатор провайдера для auth lookup, наприклад coding provider, що спільно використовує API key базового провайдера та auth profiles. | -| `channelEnvVars` | Ні | `Record` | Дешеві метадані env каналу, які OpenClaw може перевіряти без завантаження коду плагіна. Використовуйте це для налаштування каналу через env або auth surfaces, які мають бачити загальні startup/config helpers. | -| `providerAuthChoices` | Ні | `object[]` | Дешеві метадані вибору auth для onboarding pickers, preferred-provider resolution і простого підключення CLI flags. | -| `activation` | Ні | `object` | Дешеві метадані планувальника активації для startup, provider, command, channel, route і завантаження, спричиненого capability. Лише метадані; runtime плагіна все ще володіє фактичною поведінкою. | -| `setup` | Ні | `object` | Дешеві дескриптори setup/onboarding, які поверхні discovery і setup можуть перевіряти без завантаження runtime плагіна. | -| `qaRunners` | Ні | `object[]` | Дешеві дескриптори QA runner, які використовуються спільним host `openclaw qa` до завантаження runtime плагіна. | -| `contracts` | Ні | `object` | Статичний знімок вбудованих можливостей для external auth hooks, speech, realtime transcription, realtime voice, media-understanding, image-generation, music-generation, video-generation, web-fetch, web search і володіння tools. | -| `mediaUnderstandingProviderMetadata` | Ні | `Record` | Дешеві стандартні значення media-understanding для ідентифікаторів провайдерів, оголошених у `contracts.mediaUnderstandingProviders`. | -| `channelConfigs` | Ні | `Record` | Метадані конфігурації каналів, що належать маніфесту та об’єднуються з поверхнями discovery і validation до завантаження runtime. | -| `skills` | Ні | `string[]` | Каталоги Skills для завантаження, відносно кореня плагіна. | -| `name` | Ні | `string` | Людиночитна назва плагіна. | -| `description` | Ні | `string` | Короткий підсумок, що показується в поверхнях плагіна. | -| `version` | Ні | `string` | Інформаційна версія плагіна. | -| `uiHints` | Ні | `Record` | Мітки UI, заповнювачі та підказки щодо чутливості для полів конфігурації. | +| Поле | Обов'язкове | Тип | Що це означає | +| ------------------------------------ | ----------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | Так | `string` | Канонічний ідентифікатор Plugin. Це ідентифікатор, що використовується в `plugins.entries.`. | +| `configSchema` | Так | `object` | Вбудована JSON Schema для конфігурації цього Plugin. | +| `enabledByDefault` | Ні | `true` | Позначає bundled Plugin як увімкнений за замовчуванням. Опустіть це поле або встановіть будь-яке значення, відмінне від `true`, щоб залишити Plugin вимкненим за замовчуванням. | +| `legacyPluginIds` | Ні | `string[]` | Застарілі ідентифікатори, що нормалізуються до цього канонічного ідентифікатора Plugin. | +| `autoEnableWhenConfiguredProviders` | Ні | `string[]` | Ідентифікатори провайдерів, які мають автоматично вмикати цей Plugin, коли auth, config або refs моделей згадують їх. | +| `kind` | Ні | `"memory"` \| `"context-engine"` | Оголошує ексклюзивний тип Plugin, що використовується `plugins.slots.*`. | +| `channels` | Ні | `string[]` | Ідентифікатори каналів, якими володіє цей Plugin. Використовується для виявлення та перевірки конфігурації. | +| `providers` | Ні | `string[]` | Ідентифікатори провайдерів, якими володіє цей Plugin. | +| `providerDiscoveryEntry` | Ні | `string` | Полегшений шлях до модуля виявлення провайдера, відносно кореня Plugin, для метаданих каталогу провайдерів у межах manifest, які можна завантажити без активації повного runtime Plugin. | +| `modelSupport` | Ні | `object` | Стислі метадані родини моделей, що належать manifest і використовуються для автоматичного завантаження Plugin перед runtime. | +| `modelCatalog` | Ні | `object` | Декларативні метадані каталогу моделей для провайдерів, якими володіє цей Plugin. Це контракт control plane для майбутнього read-only переліку, onboarding, вибору моделей, aliases і suppression без завантаження runtime Plugin. | +| `modelPricing` | Ні | `object` | Належна провайдеру політика зовнішнього пошуку цін. Використовуйте її, щоб виключити локальних/self-hosted провайдерів із віддалених каталогів цін або зіставити refs провайдера з ідентифікаторами каталогів OpenRouter/LiteLLM без hardcoding ідентифікаторів провайдерів у core. | +| `modelIdNormalization` | Ні | `object` | Належне провайдеру очищення alias/prefix ідентифікаторів моделей, яке має виконуватися до завантаження runtime провайдера. | +| `providerEndpoints` | Ні | `object[]` | Належні manifest метадані endpoint host/baseUrl для маршрутів провайдера, які core має класифікувати до завантаження runtime провайдера. | +| `providerRequest` | Ні | `object` | Дешеві метадані родини провайдера та сумісності запитів, які використовуються generic політикою запитів до завантаження runtime провайдера. | +| `cliBackends` | Ні | `string[]` | Ідентифікатори CLI inference backend, якими володіє цей Plugin. Використовується для автоматичної активації під час запуску з явних refs конфігурації. | +| `syntheticAuthRefs` | Ні | `string[]` | Refs провайдера або CLI backend, для яких належний Plugin synthetic auth hook має перевірятися під час холодного виявлення моделей до завантаження runtime. | +| `nonSecretAuthMarkers` | Ні | `string[]` | Належні bundled Plugin placeholder-значення API key, що представляють несекретний локальний, OAuth або ambient credential стан. | +| `commandAliases` | Ні | `object[]` | Назви команд, якими володіє цей Plugin і які мають створювати діагностику конфігурації та CLI з урахуванням Plugin до завантаження runtime. | +| `providerAuthEnvVars` | Ні | `Record` | Застарілі сумісні env-метадані для пошуку auth/status провайдера. Для нових Plugin віддавайте перевагу `setup.providers[].envVars`; OpenClaw усе ще читає це під час періоду deprecation. | +| `providerAuthAliases` | Ні | `Record` | Ідентифікатори провайдерів, які мають повторно використовувати інший ідентифікатор провайдера для auth lookup, наприклад coding provider, що спільно використовує API key базового провайдера та auth profiles. | +| `channelEnvVars` | Ні | `Record` | Дешеві env-метадані каналу, які OpenClaw може перевірити без завантаження коду Plugin. Використовуйте це для env-driven налаштування каналу або auth surfaces, які мають бачити generic startup/config helpers. | +| `providerAuthChoices` | Ні | `object[]` | Дешеві метадані auth-choice для onboarding pickers, preferred-provider resolution і простого wiring CLI flags. | +| `activation` | Ні | `object` | Дешеві метадані activation planner для завантаження, спричиненого startup, provider, command, channel, route і capability. Лише метадані; runtime Plugin усе ще володіє фактичною поведінкою. | +| `setup` | Ні | `object` | Дешеві дескриптори setup/onboarding, які discovery і setup surfaces можуть перевіряти без завантаження runtime Plugin. | +| `qaRunners` | Ні | `object[]` | Дешеві дескриптори QA runner, що використовуються спільним host `openclaw qa` до завантаження runtime Plugin. | +| `contracts` | Ні | `object` | Статичний знімок bundled capability для external auth hooks, speech, realtime transcription, realtime voice, media-understanding, image-generation, music-generation, video-generation, web-fetch, web search і tool ownership. | +| `mediaUnderstandingProviderMetadata` | Ні | `Record` | Дешеві media-understanding defaults для ідентифікаторів провайдерів, оголошених у `contracts.mediaUnderstandingProviders`. | +| `channelConfigs` | Ні | `Record` | Належні manifest метадані конфігурації каналу, об'єднані в discovery і validation surfaces до завантаження runtime. | +| `skills` | Ні | `string[]` | Каталоги Skills для завантаження, відносно кореня Plugin. | +| `name` | Ні | `string` | Зрозуміла для людини назва Plugin. | +| `description` | Ні | `string` | Короткий підсумок, що відображається на поверхнях Plugin. | +| `version` | Ні | `string` | Інформаційна версія Plugin. | +| `uiHints` | Ні | `Record` | UI labels, placeholders і sensitivity hints для полів конфігурації. | -## Довідка `providerAuthChoices` +## Довідка providerAuthChoices -Кожен запис `providerAuthChoices` описує один вибір onboarding або auth. +Кожен запис `providerAuthChoices` описує один onboarding або auth choice. OpenClaw читає це до завантаження runtime провайдера. -Списки setup провайдера використовують ці вибори з маніфесту, вибори setup, -похідні від дескрипторів, і метадані install-catalog без завантаження runtime провайдера. +Списки налаштування провайдера використовують ці manifest choices, setup choices, +отримані з descriptor, і install-catalog metadata без завантаження runtime провайдера. -| Поле | Обов’язкове | Тип | Що це означає | -| -------------------- | ----------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `provider` | Так | `string` | Ідентифікатор провайдера, якому належить цей вибір. | -| `method` | Так | `string` | Ідентифікатор методу автентифікації, до якого потрібно диспетчеризувати. | -| `choiceId` | Так | `string` | Стабільний ідентифікатор вибору автентифікації, який використовується потоками онбордингу та CLI. | -| `choiceLabel` | Ні | `string` | Мітка, видима користувачу. Якщо її пропущено, OpenClaw використовує `choiceId` як запасний варіант. | -| `choiceHint` | Ні | `string` | Короткий допоміжний текст для засобу вибору. | -| `assistantPriority` | Ні | `number` | Нижчі значення сортуються раніше в інтерактивних засобах вибору, керованих асистентом. | -| `assistantVisibility` | Ні | `"visible"` \| `"manual-only"` | Приховує вибір із засобів вибору асистента, але все ще дозволяє ручний вибір у CLI. | -| `deprecatedChoiceIds` | Ні | `string[]` | Застарілі ідентифікатори вибору, які мають перенаправляти користувачів на цей вибір-заміну. | -| `groupId` | Ні | `string` | Необов’язковий ідентифікатор групи для групування пов’язаних виборів. | -| `groupLabel` | Ні | `string` | Мітка цієї групи, видима користувачу. | -| `groupHint` | Ні | `string` | Короткий допоміжний текст для групи. | -| `optionKey` | Ні | `string` | Внутрішній ключ опції для простих потоків автентифікації з одним прапорцем. | -| `cliFlag` | Ні | `string` | Назва прапорця CLI, наприклад `--openrouter-api-key`. | -| `cliOption` | Ні | `string` | Повна форма опції CLI, наприклад `--openrouter-api-key `. | -| `cliDescription` | Ні | `string` | Опис, який використовується в довідці CLI. | -| `onboardingScopes` | Ні | `Array<"text-inference" \| "image-generation">` | У яких поверхнях онбордингу має з’являтися цей вибір. Якщо пропущено, типовим значенням є `["text-inference"]`. | +| Поле | Обов’язково | Тип | Що це означає | +| --------------------- | ----------- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `provider` | Так | `string` | Ідентифікатор провайдера, якому належить цей вибір. | +| `method` | Так | `string` | Ідентифікатор методу автентифікації, до якого потрібно спрямувати виконання. | +| `choiceId` | Так | `string` | Стабільний ідентифікатор вибору автентифікації, який використовують потоки онбордингу та CLI. | +| `choiceLabel` | Ні | `string` | Мітка, яку бачить користувач. Якщо її пропущено, OpenClaw повертається до `choiceId`. | +| `choiceHint` | Ні | `string` | Короткий допоміжний текст для засобу вибору. | +| `assistantPriority` | Ні | `number` | Нижчі значення сортуються раніше в інтерактивних засобах вибору, керованих асистентом. | +| `assistantVisibility` | Ні | `"visible"` \| `"manual-only"` | Приховує вибір із засобів вибору асистента, але й далі дозволяє ручний вибір у CLI. | +| `deprecatedChoiceIds` | Ні | `string[]` | Застарілі ідентифікатори вибору, які мають перенаправляти користувачів до цього замінного вибору. | +| `groupId` | Ні | `string` | Необов’язковий ідентифікатор групи для групування пов’язаних виборів. | +| `groupLabel` | Ні | `string` | Мітка для цієї групи, яку бачить користувач. | +| `groupHint` | Ні | `string` | Короткий допоміжний текст для групи. | +| `optionKey` | Ні | `string` | Внутрішній ключ параметра для простих потоків автентифікації з одним прапорцем. | +| `cliFlag` | Ні | `string` | Назва прапорця CLI, наприклад `--openrouter-api-key`. | +| `cliOption` | Ні | `string` | Повна форма параметра CLI, наприклад `--openrouter-api-key `. | +| `cliDescription` | Ні | `string` | Опис, який використовується в довідці CLI. | +| `onboardingScopes` | Ні | `Array<"text-inference" \| "image-generation">` | Визначає, на яких поверхнях онбордингу має з’являтися цей вибір. Якщо пропущено, типово використовується `["text-inference"]`. | -## Довідка з commandAliases +## Довідник commandAliases -Використовуйте `commandAliases`, коли plugin володіє назвою runtime-команди, яку користувачі можуть -помилково додати до `plugins.allow` або спробувати запустити як кореневу команду CLI. OpenClaw -використовує ці метадані для діагностики без імпорту runtime-коду plugin. +Використовуйте `commandAliases`, коли Plugin володіє назвою команди середовища виконання, яку користувачі можуть +помилково додати в `plugins.allow` або спробувати запустити як кореневу команду CLI. OpenClaw +використовує ці метадані для діагностики без імпортування коду середовища виконання Plugin. ```json { @@ -233,43 +233,43 @@ OpenClaw читає це до завантаження runtime провайде } ``` -| Поле | Обов’язкове | Тип | Що це означає | -| ----------- | ----------- | ----------------- | --------------------------------------------------------------------------- | -| `name` | Так | `string` | Назва команди, що належить цьому plugin. | -| `kind` | Ні | `"runtime-slash"` | Позначає псевдонім як slash-команду чату, а не як кореневу команду CLI. | -| `cliCommand` | Ні | `string` | Пов’язана коренева команда CLI, яку слід запропонувати для операцій CLI, якщо така існує. | +| Поле | Обов’язково | Тип | Що це означає | +| ------------ | ----------- | ----------------- | -------------------------------------------------------------------------- | +| `name` | Так | `string` | Назва команди, яка належить цьому Plugin. | +| `kind` | Ні | `"runtime-slash"` | Позначає псевдонім як слеш-команду чату, а не кореневу команду CLI. | +| `cliCommand` | Ні | `string` | Пов’язана коренева команда CLI, яку можна запропонувати для операцій CLI, якщо така існує. | -## Довідка з activation +## Довідник activation -Використовуйте `activation`, коли plugin може дешево оголосити, які події control plane +Використовуйте `activation`, коли Plugin може дешево оголосити, які події площини керування мають включати його до плану активації/завантаження. -Цей блок є метаданими планувальника, а не lifecycle API. Він не реєструє -runtime-поведінку, не замінює `register(...)` і не гарантує, що -код plugin уже виконано. Планувальник активації використовує ці поля, щоб -звузити plugins-кандидати перед поверненням до наявних метаданих володіння в маніфесті, +Цей блок є метаданими планувальника, а не API життєвого циклу. Він не реєструє +поведінку середовища виконання, не замінює `register(...)` і не гарантує, що +код Plugin уже виконався. Планувальник активації використовує ці поля, щоб +звузити список кандидатів Plugin перед поверненням до наявних метаданих володіння в маніфесті, як-от `providers`, `channels`, `commandAliases`, `setup.providers`, -`contracts.tools` і hooks. +`contracts.tools` і хуків. Надавайте перевагу найвужчим метаданим, які вже описують володіння. Використовуйте -`providers`, `channels`, `commandAliases`, дескриптори setup або `contracts`, -коли ці поля виражають зв’язок. Використовуйте `activation` для додаткових підказок -планувальнику, які неможливо представити цими полями володіння. -Використовуйте верхньорівневий `cliBackends` для runtime-псевдонімів CLI, як-от `claude-cli`, +`providers`, `channels`, `commandAliases`, дескриптори налаштування або `contracts`, +коли ці поля виражають зв’язок. Використовуйте `activation` для додаткових +підказок планувальнику, які неможливо представити цими полями володіння. +Використовуйте верхньорівневий `cliBackends` для псевдонімів середовища виконання CLI, як-от `claude-cli`, `codex-cli` або `google-gemini-cli`; `activation.onAgentHarnesses` призначений лише для -вбудованих ідентифікаторів agent harness, які ще не мають поля володіння. +вбудованих ідентифікаторів агентних обв’язок, які ще не мають поля володіння. -Цей блок є лише метаданими. Він не реєструє runtime-поведінку й не -замінює `register(...)`, `setupEntry` або інші runtime/plugin точки входу. -Поточні споживачі використовують його як підказку для звуження перед ширшим завантаженням plugin, тому -відсутні метадані активації не під час запуску зазвичай впливають лише на продуктивність; це -не має змінювати коректність, доки запасні варіанти володіння з маніфесту ще існують. +Цей блок є лише метаданими. Він не реєструє поведінку середовища виконання і не +замінює `register(...)`, `setupEntry` чи інші точки входу середовища виконання/Plugin. +Поточні споживачі використовують його як підказку для звуження перед ширшим завантаженням Plugin, тому +відсутність метаданих активації не під час запуску зазвичай впливає лише на продуктивність; це +не має змінювати коректність, доки ще існують резервні варіанти володіння з маніфесту. -Кожен plugin має свідомо задавати `activation.onStartup`. Встановлюйте його в `true` -лише тоді, коли plugin має запускатися під час старту Gateway. Встановлюйте його в `false`, коли -plugin інертний під час запуску й має завантажуватися лише через вужчі тригери. -Пропуск `onStartup` більше не завантажує plugin під час запуску неявно; використовуйте явні -метадані активації для запуску, каналу, конфігурації, agent-harness, пам’яті або +Кожен Plugin має навмисно встановлювати `activation.onStartup`. Установіть його в `true` +лише тоді, коли Plugin має запускатися під час запуску Gateway. Установіть його в `false`, коли +Plugin неактивний під час запуску й має завантажуватися лише за вужчими тригерами. +Пропуск `onStartup` більше не завантажує Plugin під час запуску неявно; використовуйте явні +метадані активації для запуску, каналу, конфігурації, агентної обв’язки, пам’яті або інших вужчих тригерів активації. ```json @@ -286,45 +286,45 @@ plugin інертний під час запуску й має завантаж } ``` -| Поле | Обов’язкове | Тип | Що це означає | -| ----------------- | ----------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `onStartup` | Ні | `boolean` | Явна активація під час запуску Gateway. Кожен plugin має задавати це поле. `true` імпортує plugin під час запуску; `false` лишає його лінивим під час запуску, якщо інший відповідний тригер не потребує завантаження. | -| `onProviders` | Ні | `string[]` | Ідентифікатори провайдерів, які мають включати цей plugin до планів активації/завантаження. | -| `onAgentHarnesses` | Ні | `string[]` | Runtime-ідентифікатори вбудованих agent harness, які мають включати цей plugin до планів активації/завантаження. Використовуйте верхньорівневий `cliBackends` для псевдонімів бекендів CLI. | -| `onCommands` | Ні | `string[]` | Ідентифікатори команд, які мають включати цей plugin до планів активації/завантаження. | -| `onChannels` | Ні | `string[]` | Ідентифікатори каналів, які мають включати цей plugin до планів активації/завантаження. | -| `onRoutes` | Ні | `string[]` | Види маршрутів, які мають включати цей plugin до планів активації/завантаження. | -| `onConfigPaths` | Ні | `string[]` | Шляхи конфігурації відносно кореня, які мають включати цей plugin до планів запуску/завантаження, коли шлях присутній і не вимкнений явно. | -| `onCapabilities` | Ні | `Array<"provider" \| "channel" \| "tool" \| "hook">` | Широкі підказки про можливості, які використовуються плануванням активації control plane. Коли можливо, надавайте перевагу вужчим полям. | +| Поле | Обов’язково | Тип | Що це означає | +| ------------------ | ----------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `onStartup` | Ні | `boolean` | Явна активація під час запуску Gateway. Кожен Plugin має встановлювати це поле. `true` імпортує Plugin під час запуску; `false` залишає його ледачим щодо запуску, якщо інший відповідний тригер не вимагає завантаження. | +| `onProviders` | Ні | `string[]` | Ідентифікатори провайдерів, які мають включати цей Plugin до планів активації/завантаження. | +| `onAgentHarnesses` | Ні | `string[]` | Ідентифікатори середовища виконання вбудованих агентних обв’язок, які мають включати цей Plugin до планів активації/завантаження. Використовуйте верхньорівневий `cliBackends` для псевдонімів бекендів CLI. | +| `onCommands` | Ні | `string[]` | Ідентифікатори команд, які мають включати цей Plugin до планів активації/завантаження. | +| `onChannels` | Ні | `string[]` | Ідентифікатори каналів, які мають включати цей Plugin до планів активації/завантаження. | +| `onRoutes` | Ні | `string[]` | Види маршрутів, які мають включати цей Plugin до планів активації/завантаження. | +| `onConfigPaths` | Ні | `string[]` | Шляхи конфігурації відносно кореня, які мають включати цей Plugin до планів запуску/завантаження, коли шлях присутній і не вимкнений явно. | +| `onCapabilities` | Ні | `Array<"provider" \| "channel" \| "tool" \| "hook">` | Широкі підказки щодо можливостей, які використовує планування активації площини керування. Коли можливо, надавайте перевагу вужчим полям. | -Поточні live-споживачі: +Поточні активні споживачі: - Планування запуску Gateway використовує `activation.onStartup` для явного імпорту під час запуску -- Планування CLI, ініційоване командою, повертається до застарілих +- планування CLI, ініційоване командою, повертається до застарілих `commandAliases[].cliCommand` або `commandAliases[].name` -- Планування запуску agent-runtime використовує `activation.onAgentHarnesses` для - вбудованих harness і верхньорівневий `cliBackends[]` для runtime-псевдонімів CLI -- Планування setup/channel, ініційоване каналом, повертається до застарілого - володіння `channels[]`, коли явні метадані активації каналу відсутні -- Планування plugin під час запуску використовує `activation.onConfigPaths` для неканальних кореневих - поверхонь конфігурації, як-от блок `browser` у bundled browser plugin -- Планування setup/runtime, ініційоване провайдером, повертається до застарілого +- планування запуску середовища виконання агента використовує `activation.onAgentHarnesses` для + вбудованих обв’язок і верхньорівневий `cliBackends[]` для псевдонімів середовища виконання CLI +- планування налаштування/каналу, ініційоване каналом, повертається до застарілого володіння + `channels[]`, коли явні метадані активації каналу відсутні +- планування Plugin під час запуску використовує `activation.onConfigPaths` для неканальних кореневих + поверхонь конфігурації, як-от блок `browser` вбудованого браузерного Plugin +- планування налаштування/середовища виконання, ініційоване провайдером, повертається до застарілого володіння `providers[]` і верхньорівневого `cliBackends[]`, коли явні метадані активації провайдера відсутні -Діагностика планувальника може відрізняти явні підказки активації від запасного варіанта +Діагностика планувальника може відрізняти явні підказки активації від резервного володіння з маніфесту. Наприклад, `activation-command-hint` означає, що `activation.onCommands` збігся, тоді як `manifest-command-alias` означає, що -планувальник натомість використав володіння `commandAliases`. Ці мітки причин призначені для -діагностики хоста й тестів; автори plugin мають і далі оголошувати метадані, +планувальник використав володіння `commandAliases` натомість. Ці мітки причин призначені для +діагностики хоста й тестів; автори Plugin мають продовжувати оголошувати метадані, які найкраще описують володіння. -## Довідка з qaRunners +## Довідник qaRunners -Використовуйте `qaRunners`, коли plugin додає один або кілька транспортних раннерів під -спільним коренем `openclaw qa`. Тримайте ці метадані дешевими й статичними; runtime plugin -усе ще володіє фактичною реєстрацією CLI через легковагу +Використовуйте `qaRunners`, коли Plugin додає один або кілька транспортних раннерів під +спільним коренем `openclaw qa`. Залишайте ці метадані дешевими й статичними; середовище +виконання Plugin і далі володіє фактичною реєстрацією CLI через легку поверхню `runtime-api.ts`, яка експортує `qaRunnerCliRegistrations`. ```json @@ -338,15 +338,15 @@ plugin інертний під час запуску й має завантаж } ``` -| Поле | Обов’язкове | Тип | Що це означає | -| ------------- | ----------- | -------- | ------------------------------------------------------------------------------ | -| `commandName` | Так | `string` | Підкоманда, змонтована під `openclaw qa`, наприклад `matrix`. | -| `description` | Ні | `string` | Резервний текст довідки, що використовується, коли спільному хосту потрібна stub-команда. | +| Поле | Обов’язково | Тип | Що це означає | +| ------------- | ----------- | -------- | ----------------------------------------------------------------------------- | +| `commandName` | Так | `string` | Підкоманда, змонтована під `openclaw qa`, наприклад `matrix`. | +| `description` | Ні | `string` | Резервний текст довідки, який використовується, коли спільному хосту потрібна команда-заглушка. | -## Довідка з setup +## Довідник setup -Використовуйте `setup`, коли поверхням налаштування й онбордингу потрібні дешеві метадані, -що належать plugin, перед завантаженням runtime. +Використовуйте `setup`, коли поверхням налаштування та онбордингу потрібні дешеві метадані, що належать Plugin, +перед завантаженням середовища виконання. ```json { @@ -374,53 +374,53 @@ plugin інертний під час запуску й має завантаж } ``` -Верхньорівневий `cliBackends` залишається чинним і надалі описує бекенди CLI-інференсу. `setup.cliBackends` є специфічною для налаштування поверхнею дескрипторів для потоків площини керування/налаштування, які мають залишатися лише метаданими. +Верхньорівневий `cliBackends` залишається чинним і далі описує бекенди виведення CLI. `setup.cliBackends` — це специфічна для налаштування поверхня дескрипторів для потоків площини керування/налаштування, які мають залишатися лише метаданими. -Коли вони наявні, `setup.providers` і `setup.cliBackends` є пріоритетною поверхнею пошуку за принципом «спочатку дескриптор» для виявлення налаштування. Якщо дескриптор лише звужує кандидатний plugin, а налаштування все ще потребує багатших runtime-хуків під час налаштування, задайте `requiresRuntime: true` і залиште `setup-api` як резервний шлях виконання. +Коли наявні `setup.providers` і `setup.cliBackends`, вони є бажаною поверхнею пошуку за дескрипторами для виявлення налаштування. Якщо дескриптор лише звужує кандидатний Plugin, а налаштування все ще потребує багатших runtime-хуків під час налаштування, задайте `requiresRuntime: true` і залиште `setup-api` як резервний шлях виконання. -OpenClaw також включає `setup.providers[].envVars` у загальний auth постачальника та пошук змінних середовища. `providerAuthEnvVars` залишається підтримуваним через адаптер сумісності протягом вікна припинення підтримки, але незв’язані plugins, які досі його використовують, отримують діагностику маніфесту. Нові plugins мають розміщувати метадані змінних середовища для налаштування/статусу в `setup.providers[].envVars`. +OpenClaw також включає `setup.providers[].envVars` до загальних пошуків автентифікації провайдера та env-var. `providerAuthEnvVars` залишається підтримуваним через адаптер сумісності протягом вікна застарівання, але не вбудовані plugins, які все ще його використовують, отримують діагностику маніфесту. Нові plugins мають розміщувати метадані env для налаштування/статусу в `setup.providers[].envVars`. -OpenClaw також може виводити прості варіанти налаштування з `setup.providers[].authMethods`, коли запис налаштування недоступний або коли `setup.requiresRuntime: false` оголошує, що runtime налаштування не потрібен. Явні записи `providerAuthChoices` залишаються пріоритетними для користувацьких міток, прапорців CLI, області onboarding і метаданих асистента. +OpenClaw також може виводити прості варіанти налаштування з `setup.providers[].authMethods`, коли запис налаштування відсутній або коли `setup.requiresRuntime: false` оголошує, що runtime налаштування не потрібний. Явні записи `providerAuthChoices` залишаються бажаними для власних міток, прапорців CLI, області onboarding і метаданих асистента. -Встановлюйте `requiresRuntime: false` лише тоді, коли цих дескрипторів достатньо для поверхні налаштування. OpenClaw трактує явне `false` як контракт лише на основі дескрипторів і не виконуватиме `setup-api` або `openclaw.setupEntry` для пошуку налаштування. Якщо plugin, що працює лише на основі дескрипторів, усе ж постачає один із цих runtime-записів налаштування, OpenClaw повідомляє додаткову діагностику й надалі ігнорує його. Пропущений `requiresRuntime` зберігає застарілу резервну поведінку, щоб наявні plugins, які додали дескриптори без цього прапорця, не ламалися. +Задавайте `requiresRuntime: false` лише тоді, коли цих дескрипторів достатньо для поверхні налаштування. OpenClaw розглядає явне `false` як контракт лише на основі дескрипторів і не виконуватиме `setup-api` або `openclaw.setupEntry` для пошуку налаштування. Якщо Plugin лише з дескрипторами все одно постачає один із цих runtime-записів налаштування, OpenClaw повідомляє додаткову діагностику й далі його ігнорує. Пропущений `requiresRuntime` зберігає застарілу резервну поведінку, щоб наявні plugins, які додали дескриптори без прапорця, не ламалися. -Оскільки пошук налаштування може виконувати код `setup-api`, що належить plugin, нормалізовані значення `setup.providers[].id` і `setup.cliBackends[]` мають залишатися унікальними серед виявлених plugins. Неоднозначна належність завершується закритою відмовою замість вибору переможця за порядком виявлення. +Оскільки пошук налаштування може виконувати належний Plugin код `setup-api`, нормалізовані значення `setup.providers[].id` і `setup.cliBackends[]` мають залишатися унікальними серед виявлених plugins. Неоднозначне володіння завершується закритою помилкою замість вибору переможця за порядком виявлення. -Коли runtime налаштування виконується, діагностика реєстру налаштування повідомляє про розбіжність дескрипторів, якщо `setup-api` реєструє постачальника або бекенд CLI, якого не оголошують дескриптори маніфесту, або якщо дескриптор не має відповідної runtime-реєстрації. Ці діагностики є додатковими й не відхиляють застарілі plugins. +Коли runtime налаштування виконується, діагностика реєстру налаштування повідомляє про розбіжність дескрипторів, якщо `setup-api` реєструє провайдера або бекенд CLI, який не оголошено в дескрипторах маніфесту, або якщо дескриптор не має відповідної runtime-реєстрації. Ці діагностики є додатковими й не відхиляють застарілі plugins. -### Довідка setup.providers +### Довідник setup.providers -| Поле | Обов’язково | Тип | Що це означає | -| -------------- | -------- | ---------- | ------------------------------------------------------------------------------------------------ | -| `id` | Так | `string` | Ідентифікатор постачальника, доступний під час налаштування або onboarding. Тримайте нормалізовані ідентифікатори глобально унікальними. | -| `authMethods` | Ні | `string[]` | Ідентифікатори методів налаштування/auth, які цей постачальник підтримує без завантаження повного runtime. | -| `envVars` | Ні | `string[]` | Змінні середовища, які загальні поверхні налаштування/статусу можуть перевіряти до завантаження runtime plugin. | -| `authEvidence` | Ні | `object[]` | Дешеві локальні перевірки auth-доказів для постачальників, які можуть автентифікуватися через несекретні маркери. | +| Поле | Обов'язково | Тип | Що це означає | +| ------------- | ----------- | ---------- | ---------------------------------------------------------------------------------------------------------- | +| `id` | Так | `string` | Ідентифікатор провайдера, відкритий під час налаштування або onboarding. Тримайте нормалізовані ідентифікатори глобально унікальними. | +| `authMethods` | Ні | `string[]` | Ідентифікатори методів налаштування/автентифікації, які цей провайдер підтримує без завантаження повного runtime. | +| `envVars` | Ні | `string[]` | Env vars, які загальні поверхні налаштування/статусу можуть перевіряти до завантаження runtime Plugin. | +| `authEvidence` | Ні | `object[]` | Дешеві локальні перевірки доказів автентифікації для провайдерів, які можуть автентифікуватися через несекретні маркери. | -`authEvidence` призначений для локальних маркерів облікових даних, що належать постачальнику та можуть бути перевірені без завантаження runtime-коду. Ці перевірки мають залишатися дешевими й локальними: без мережевих викликів, без читання keychain або secret-manager, без shell-команд і без проб API постачальника. +`authEvidence` призначено для належних провайдеру локальних маркерів облікових даних, які можна перевірити без завантаження runtime-коду. Ці перевірки мають залишатися дешевими й локальними: без мережевих викликів, без читання keychain або secret-manager, без shell-команд і без перевірок API провайдера. Підтримувані записи доказів: -| Поле | Обов’язково | Тип | Що це означає | -| ------------------ | -------- | ---------- | -------------------------------------------------------------------------------------------------------------- | -| `type` | Так | `string` | Наразі `local-file-with-env`. | -| `fileEnvVar` | Ні | `string` | Змінна середовища, що містить явний шлях до файла облікових даних. | -| `fallbackPaths` | Ні | `string[]` | Локальні шляхи до файлів облікових даних, що перевіряються, коли `fileEnvVar` відсутній або порожній. Підтримує `${HOME}` і `${APPDATA}`. | -| `requiresAnyEnv` | Ні | `string[]` | Принаймні одна наведена змінна середовища має бути непорожньою, перш ніж доказ буде чинним. | -| `requiresAllEnv` | Ні | `string[]` | Кожна наведена змінна середовища має бути непорожньою, перш ніж доказ буде чинним. | -| `credentialMarker` | Так | `string` | Несекретний маркер, що повертається, коли доказ наявний. | -| `source` | Ні | `string` | Видима користувачу мітка джерела для виводу auth/статусу. | +| Поле | Обов'язково | Тип | Що це означає | +| ----------------- | ----------- | ---------- | --------------------------------------------------------------------------------------------------------------- | +| `type` | Так | `string` | Наразі `local-file-with-env`. | +| `fileEnvVar` | Ні | `string` | Env var, що містить явний шлях до файлу облікових даних. | +| `fallbackPaths` | Ні | `string[]` | Локальні шляхи до файлів облікових даних, які перевіряються, коли `fileEnvVar` відсутня або порожня. Підтримує `${HOME}` і `${APPDATA}`. | +| `requiresAnyEnv` | Ні | `string[]` | Принаймні одна з перелічених env var має бути непорожньою, перш ніж доказ стане чинним. | +| `requiresAllEnv` | Ні | `string[]` | Кожна з перелічених env var має бути непорожньою, перш ніж доказ стане чинним. | +| `credentialMarker` | Так | `string` | Несекретний маркер, що повертається, коли доказ наявний. | +| `source` | Ні | `string` | Видима користувачу мітка джерела для виводу автентифікації/статусу. | ### Поля setup -| Поле | Обов’язково | Тип | Що це означає | -| ------------------ | -------- | ---------- | --------------------------------------------------------------------------------------------------- | -| `providers` | Ні | `object[]` | Дескриптори налаштування постачальника, доступні під час налаштування та onboarding. | -| `cliBackends` | Ні | `string[]` | Ідентифікатори бекендів під час налаштування, що використовуються для пошуку налаштування за принципом «спочатку дескриптор». Тримайте нормалізовані ідентифікатори глобально унікальними. | -| `configMigrations` | Ні | `string[]` | Ідентифікатори міграцій конфігурації, що належать поверхні налаштування цього plugin. | -| `requiresRuntime` | Ні | `boolean` | Чи налаштування все ще потребує виконання `setup-api` після пошуку за дескриптором. | +| Поле | Обов'язково | Тип | Що це означає | +| ----------------- | ----------- | ---------- | ------------------------------------------------------------------------------------------------------- | +| `providers` | Ні | `object[]` | Дескриптори налаштування провайдера, відкриті під час налаштування та onboarding. | +| `cliBackends` | Ні | `string[]` | Ідентифікатори бекендів під час налаштування, що використовуються для пошуку налаштування спершу за дескрипторами. Тримайте нормалізовані ідентифікатори глобально унікальними. | +| `configMigrations` | Ні | `string[]` | Ідентифікатори міграцій конфігурації, що належать поверхні налаштування цього Plugin. | +| `requiresRuntime` | Ні | `boolean` | Чи налаштуванню все ще потрібне виконання `setup-api` після пошуку за дескрипторами. | -## Довідка uiHints +## Довідник uiHints `uiHints` — це мапа від назв полів конфігурації до невеликих підказок рендерингу. @@ -439,18 +439,18 @@ OpenClaw також може виводити прості варіанти на Кожна підказка поля може містити: -| Поле | Тип | Що це означає | -| ------------- | ---------- | --------------------------------------- | -| `label` | `string` | Видима користувачу мітка поля. | -| `help` | `string` | Короткий допоміжний текст. | -| `tags` | `string[]` | Необов’язкові теги UI. | -| `advanced` | `boolean` | Позначає поле як розширене. | +| Поле | Тип | Що це означає | +| ------------- | ---------- | ------------------------------------- | +| `label` | `string` | Видима користувачу мітка поля. | +| `help` | `string` | Короткий допоміжний текст. | +| `tags` | `string[]` | Необов'язкові теги UI. | +| `advanced` | `boolean` | Позначає поле як розширене. | | `sensitive` | `boolean` | Позначає поле як секретне або чутливе. | -| `placeholder` | `string` | Текст placeholder для полів форми. | +| `placeholder` | `string` | Текст placeholder для полів форми. | -## Довідка contracts +## Довідник contracts -Використовуйте `contracts` лише для статичних метаданих належності можливостей, які OpenClaw може читати без імпорту runtime plugin. +Використовуйте `contracts` лише для статичних метаданих володіння capability, які OpenClaw може читати без імпорту runtime Plugin. ```json { @@ -472,34 +472,34 @@ OpenClaw також може виводити прості варіанти на } ``` -Кожен список є необов’язковим: +Кожен список є необов'язковим: -| Поле | Тип | Що це означає | -| -------------------------------- | ---------- | --------------------------------------------------------------------- | -| `embeddedExtensionFactories` | `string[]` | Ідентифікатори фабрик розширень app-server Codex, наразі `codex-app-server`. | -| `agentToolResultMiddleware` | `string[]` | Runtime-ідентифікатори, для яких вбудований plugin може реєструвати middleware результатів інструментів. | -| `externalAuthProviders` | `string[]` | Ідентифікатори постачальників, чий хук зовнішнього auth-профілю належить цьому plugin. | -| `speechProviders` | `string[]` | Ідентифікатори постачальників мовлення, що належать цьому plugin. | -| `realtimeTranscriptionProviders` | `string[]` | Ідентифікатори постачальників realtime-транскрипції, що належать цьому plugin. | -| `realtimeVoiceProviders` | `string[]` | Ідентифікатори постачальників realtime-голосу, що належать цьому plugin. | -| `memoryEmbeddingProviders` | `string[]` | Ідентифікатори постачальників memory embedding, що належать цьому plugin. | -| `mediaUnderstandingProviders` | `string[]` | Ідентифікатори постачальників media-understanding, що належать цьому plugin. | -| `imageGenerationProviders` | `string[]` | Ідентифікатори постачальників генерації зображень, що належать цьому plugin. | -| `videoGenerationProviders` | `string[]` | Ідентифікатори постачальників генерації відео, що належать цьому plugin. | -| `webFetchProviders` | `string[]` | Ідентифікатори постачальників web-fetch, що належать цьому plugin. | -| `webSearchProviders` | `string[]` | Ідентифікатори постачальників web-search, що належать цьому plugin. | -| `migrationProviders` | `string[]` | Ідентифікатори постачальників імпорту, що належать цьому plugin для `openclaw migrate`. | -| `tools` | `string[]` | Назви інструментів агента, що належать цьому plugin для перевірок вбудованих контрактів. | +| Поле | Тип | Що це означає | +| -------------------------------- | ---------- | ----------------------------------------------------------------------------- | +| `embeddedExtensionFactories` | `string[]` | Ідентифікатори фабрик розширень app-server Codex, наразі `codex-app-server`. | +| `agentToolResultMiddleware` | `string[]` | Runtime-ідентифікатори, для яких вбудований Plugin може реєструвати middleware результатів інструментів. | +| `externalAuthProviders` | `string[]` | Ідентифікатори провайдерів, чиїм хуком зовнішнього профілю автентифікації володіє цей Plugin. | +| `speechProviders` | `string[]` | Ідентифікатори провайдерів мовлення, якими володіє цей Plugin. | +| `realtimeTranscriptionProviders` | `string[]` | Ідентифікатори провайдерів realtime-транскрипції, якими володіє цей Plugin. | +| `realtimeVoiceProviders` | `string[]` | Ідентифікатори realtime-voice провайдерів, якими володіє цей Plugin. | +| `memoryEmbeddingProviders` | `string[]` | Ідентифікатори провайдерів memory embedding, якими володіє цей Plugin. | +| `mediaUnderstandingProviders` | `string[]` | Ідентифікатори media-understanding провайдерів, якими володіє цей Plugin. | +| `imageGenerationProviders` | `string[]` | Ідентифікатори image-generation провайдерів, якими володіє цей Plugin. | +| `videoGenerationProviders` | `string[]` | Ідентифікатори video-generation провайдерів, якими володіє цей Plugin. | +| `webFetchProviders` | `string[]` | Ідентифікатори web-fetch провайдерів, якими володіє цей Plugin. | +| `webSearchProviders` | `string[]` | Ідентифікатори web-search провайдерів, якими володіє цей Plugin. | +| `migrationProviders` | `string[]` | Ідентифікатори провайдерів імпорту, якими цей Plugin володіє для `openclaw migrate`. | +| `tools` | `string[]` | Назви інструментів агента, якими цей Plugin володіє для перевірок вбудованих контрактів. | -`contracts.embeddedExtensionFactories` збережено для вбудованих фабрик розширень, призначених лише для app-server Codex. Вбудовані перетворення результатів інструментів мають натомість оголошувати `contracts.agentToolResultMiddleware` і реєструватися через `api.registerAgentToolResultMiddleware(...)`. Зовнішні plugins не можуть реєструвати middleware результатів інструментів, бо ця поверхня може переписувати високодовірений вивід інструментів до того, як модель його побачить. +`contracts.embeddedExtensionFactories` збережено для вбудованих фабрик розширень лише для app-server Codex. Вбудовані трансформації результатів інструментів натомість мають оголошувати `contracts.agentToolResultMiddleware` і реєструватися через `api.registerAgentToolResultMiddleware(...)`. Зовнішні plugins не можуть реєструвати middleware результатів інструментів, бо ця межа може переписувати високодостовірний вивід інструментів до того, як його побачить модель. -Plugins постачальників, які реалізують `resolveExternalAuthProfiles`, мають оголошувати `contracts.externalAuthProviders`. Plugins без такого оголошення все ще виконуються через застарілий резервний шлях сумісності, але цей резервний шлях повільніший і буде вилучений після вікна міграції. +Plugins провайдерів, які реалізують `resolveExternalAuthProfiles`, мають оголошувати `contracts.externalAuthProviders`. Plugins без цього оголошення все ще проходять через застарілий резервний шлях сумісності, але цей резервний шлях повільніший і буде вилучений після вікна міграції. -Вбудовані постачальники memory embedding мають оголошувати `contracts.memoryEmbeddingProviders` для кожного ідентифікатора адаптера, який вони надають, включно з вбудованими адаптерами, такими як `local`. Автономні шляхи CLI використовують цей контракт маніфесту, щоб завантажити лише plugin-власника до того, як повний runtime Gateway зареєструє постачальників. +Вбудовані провайдери memory embedding мають оголошувати `contracts.memoryEmbeddingProviders` для кожного ідентифікатора адаптера, який вони відкривають, включно з вбудованими адаптерами, такими як `local`. Автономні шляхи CLI використовують цей контракт маніфесту, щоб завантажити лише належний Plugin до того, як повний runtime Gateway зареєструє провайдерів. -## Довідка mediaUnderstandingProviderMetadata +## Довідник mediaUnderstandingProviderMetadata -Використовуйте `mediaUnderstandingProviderMetadata`, коли постачальник media-understanding має моделі за замовчуванням, пріоритет fallback для auto-auth або нативну підтримку документів, які потрібні загальним core-хелперам до завантаження runtime. Ключі також мають бути оголошені в `contracts.mediaUnderstandingProviders`. +Використовуйте `mediaUnderstandingProviderMetadata`, коли media-understanding провайдер має стандартні моделі, пріоритет резервного auto-auth або нативну підтримку документів, які загальним core-помічникам потрібні до завантаження runtime. Ключі також мають бути оголошені в `contracts.mediaUnderstandingProviders`. ```json { @@ -522,26 +522,26 @@ Plugins постачальників, які реалізують `resolveExtern } ``` -Кожен запис постачальника може містити: +Кожен запис провайдера може містити: -| Поле | Тип | Що це означає | -| ---------------------- | ----------------------------------- | ------------------------------------------------------------------------------- | -| `capabilities` | `("image" \| "audio" \| "video")[]` | Медіаможливості, які надає цей постачальник. | -| `defaultModels` | `Record` | Типові відповідності можливостей до моделей, коли конфігурація не задає модель. | -| `autoPriority` | `Record` | Менші числа сортуються раніше для автоматичного резервного вибору постачальника на основі облікових даних. | -| `nativeDocumentInputs` | `"pdf"[]` | Нативні вхідні документи, які підтримує постачальник. | +| Поле | Тип | Що це означає | +| ---------------------- | ----------------------------------- | ---------------------------------------------------------------------------- | +| `capabilities` | `("image" \| "audio" \| "video")[]` | Медіаможливості, які надає цей провайдер. | +| `defaultModels` | `Record` | Типові відповідності можливостей моделям, що використовуються, коли конфігурація не задає модель. | +| `autoPriority` | `Record` | Менші числа сортуються раніше для автоматичного резервного вибору провайдера на основі облікових даних. | +| `nativeDocumentInputs` | `"pdf"[]` | Нативні вхідні документи, які підтримує провайдер. | -## довідка channelConfigs +## Довідник channelConfigs Використовуйте `channelConfigs`, коли Plugin каналу потребує дешевих метаданих конфігурації до -завантаження runtime. Доступне лише для читання виявлення налаштування/стану каналу може використовувати ці метадані +завантаження runtime. Виявлення налаштування/стану каналу лише для читання може використовувати ці метадані безпосередньо для налаштованих зовнішніх каналів, коли запис налаштування недоступний, або -коли `setup.requiresRuntime: false` оголошує runtime налаштування непотрібним. +коли `setup.requiresRuntime: false` оголошує, що runtime налаштування не потрібен. `channelConfigs` — це метадані маніфесту Plugin, а не новий розділ користувацької конфігурації -верхнього рівня. Користувачі й надалі налаштовують екземпляри каналів у `channels.`. -OpenClaw читає метадані маніфесту, щоб визначити, якому Plugin належить цей налаштований -канал до виконання runtime-коду Plugin. +верхнього рівня. Користувачі все ще налаштовують екземпляри каналів у `channels.`. +OpenClaw читає метадані маніфесту, щоб вирішити, який Plugin володіє цим налаштованим +каналом, до виконання runtime-коду Plugin. Для Plugin каналу `configSchema` і `channelConfigs` описують різні шляхи: @@ -549,15 +549,15 @@ OpenClaw читає метадані маніфесту, щоб визначит - `configSchema` перевіряє `plugins.entries..config` - `channelConfigs..schema` перевіряє `channels.` -Невбудовані plugins, які оголошують `channels[]`, також мають оголошувати відповідні -записи `channelConfigs`. Без них OpenClaw усе ще може завантажити Plugin, але -схема конфігурації холодного шляху, налаштування та поверхні Control UI не зможуть знати +Небандловані Plugins, які оголошують `channels[]`, також мають оголошувати відповідні +записи `channelConfigs`. Без них OpenClaw все ще може завантажити Plugin, але +схема конфігурації холодного шляху, налаштування та поверхні Control UI не можуть знати форму параметрів, що належать каналу, доки не виконається runtime Plugin. `channelConfigs..commands.nativeCommandsAutoEnabled` і `nativeSkillsAutoEnabled` можуть оголошувати статичні типові значення `auto` для перевірок конфігурації команд, -які виконуються до завантаження runtime каналу. Вбудовані канали також можуть публікувати -ті самі типові значення через `package.json#openclaw.channel.commands` разом з +які виконуються до завантаження runtime каналу. Бандловані канали також можуть публікувати +ті самі типові значення через `package.json#openclaw.channel.commands` поряд з іншими метаданими каталогу каналів, що належать пакету. ```json @@ -591,20 +591,20 @@ OpenClaw читає метадані маніфесту, щоб визначит Кожен запис каналу може містити: -| Поле | Тип | Що це означає | -| ------------- | ------------------------ | --------------------------------------------------------------------------------------------- | +| Поле | Тип | Що це означає | +| ------------- | ------------------------ | ----------------------------------------------------------------------------------------- | | `schema` | `object` | JSON Schema для `channels.`. Обов’язкова для кожного оголошеного запису конфігурації каналу. | -| `uiHints` | `Record` | Необов’язкові UI мітки/заповнювачі/підказки чутливості для цього розділу конфігурації каналу. | -| `label` | `string` | Мітка каналу, що об’єднується з поверхнями вибору й інспектування, коли runtime-метадані ще не готові. | -| `description` | `string` | Короткий опис каналу для поверхонь інспектування й каталогу. | -| `commands` | `object` | Статичні автоматичні типові значення нативних команд і нативних Skills для перевірок конфігурації до runtime. | -| `preferOver` | `string[]` | Застарілі або нижчопріоритетні ідентифікатори plugins, які цей канал має випереджати в поверхнях вибору. | +| `uiHints` | `Record` | Необов’язкові мітки UI, заповнювачі та підказки чутливості для цього розділу конфігурації каналу. | +| `label` | `string` | Мітка каналу, що додається до поверхонь вибору й інспекції, коли runtime-метадані ще не готові. | +| `description` | `string` | Короткий опис каналу для поверхонь інспекції та каталогу. | +| `commands` | `object` | Статичні типові значення auto для нативних команд і нативних Skills у перевірках конфігурації до runtime. | +| `preferOver` | `string[]` | Ідентифікатори застарілих або нижчопріоритетних Plugins, які цей канал має випереджати на поверхнях вибору. | ### Заміна іншого Plugin каналу Використовуйте `preferOver`, коли ваш Plugin є бажаним власником для ідентифікатора каналу, який -може також надавати інший Plugin. Поширені випадки — перейменований ідентифікатор Plugin, -окремий Plugin, що замінює вбудований Plugin, або підтримуваний форк, який +також може надавати інший Plugin. Поширені випадки — перейменований ідентифікатор Plugin, +окремий Plugin, що замінює бандлований Plugin, або підтримуваний форк, який зберігає той самий ідентифікатор каналу для сумісності конфігурації. ```json @@ -626,21 +626,21 @@ OpenClaw читає метадані маніфесту, щоб визначит } ``` -Коли `channels.chat` налаштовано, OpenClaw враховує і ідентифікатор каналу, і -ідентифікатор бажаного Plugin. Якщо нижчопріоритетний Plugin було вибрано лише тому, що -він вбудований або ввімкнений за замовчуванням, OpenClaw вимикає його в ефективній -runtime-конфігурації, щоб каналом і його інструментами володів один Plugin. Явний -вибір користувача все одно має перевагу: якщо користувач явно вмикає обидва plugins, OpenClaw +Коли `channels.chat` налаштовано, OpenClaw розглядає і ідентифікатор каналу, і +ідентифікатор бажаного Plugin. Якщо нижчопріоритетний Plugin був вибраний лише тому, що +він бандлований або ввімкнений за замовчуванням, OpenClaw вимикає його в ефективній +runtime-конфігурації, щоб один Plugin володів каналом і його інструментами. Явний вибір користувача +все одно має перевагу: якщо користувач явно вмикає обидва Plugins, OpenClaw зберігає цей вибір і повідомляє діагностику дубльованих каналів/інструментів замість -тихої зміни запитаного набору plugins. +мовчазної зміни запитаного набору Plugins. -Обмежуйте `preferOver` ідентифікаторами plugins, які справді можуть надавати той самий канал. -Це не загальне поле пріоритету й воно не перейменовує ключі користувацької конфігурації. +Обмежуйте `preferOver` ідентифікаторами Plugins, які справді можуть надавати той самий канал. +Це не загальне поле пріоритету і воно не перейменовує ключі користувацької конфігурації. -## довідка modelSupport +## Довідник modelSupport -Використовуйте `modelSupport`, коли OpenClaw має виводити ваш Plugin постачальника з -коротких ідентифікаторів моделей на кшталт `gpt-5.5` або `claude-sonnet-4.6` до завантаження runtime +Використовуйте `modelSupport`, коли OpenClaw має визначати ваш провайдерський Plugin з +коротких ідентифікаторів моделей, як-от `gpt-5.5` або `claude-sonnet-4.6`, до завантаження runtime Plugin. ```json @@ -655,25 +655,25 @@ Plugin. OpenClaw застосовує такий пріоритет: - явні посилання `provider/model` використовують метадані маніфесту `providers` власника -- `modelPatterns` мають перевагу над `modelPrefixes` -- якщо один невбудований Plugin і один вбудований Plugin збігаються, перемагає невбудований +- `modelPatterns` мають пріоритет над `modelPrefixes` +- якщо збігаються один небандлований Plugin і один бандлований Plugin, перемагає небандлований Plugin -- решта неоднозначностей ігнорується, доки користувач або конфігурація не задасть постачальника +- решта неоднозначностей ігнорується, доки користувач або конфігурація не задасть провайдера Поля: | Поле | Тип | Що це означає | | --------------- | ---------- | ------------------------------------------------------------------------------ | | `modelPrefixes` | `string[]` | Префікси, що зіставляються через `startsWith` із короткими ідентифікаторами моделей. | -| `modelPatterns` | `string[]` | Джерела regex, що зіставляються з короткими ідентифікаторами моделей після вилучення суфікса профілю. | +| `modelPatterns` | `string[]` | Джерела Regex, що зіставляються з короткими ідентифікаторами моделей після вилучення суфікса профілю. | -## довідка modelCatalog +## Довідник modelCatalog -Використовуйте `modelCatalog`, коли OpenClaw має знати метадані моделей постачальника до +Використовуйте `modelCatalog`, коли OpenClaw має знати метадані моделей провайдера до завантаження runtime Plugin. Це джерело, що належить маніфесту, для фіксованих рядків каталогу, -псевдонімів постачальника, правил придушення та режиму виявлення. Runtime-оновлення -й надалі належить runtime-коду постачальника, але маніфест повідомляє core, коли runtime -є обов’язковим. +псевдонімів провайдера, правил придушення та режиму виявлення. Runtime-оновлення +все ще належить runtime-коду провайдера, але маніфест повідомляє ядру, коли runtime +потрібен. ```json { @@ -726,69 +726,77 @@ OpenClaw застосовує такий пріоритет: | Поле | Тип | Що це означає | | -------------- | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | -| `providers` | `Record` | Рядки каталогу для ідентифікаторів постачальників, що належать цьому Plugin. Ключі також мають бути в `providers` верхнього рівня. | -| `aliases` | `Record` | Псевдоніми постачальників, які мають зіставлятися з власним постачальником для планування каталогу або придушень. | -| `suppressions` | `object[]` | Рядки моделей з іншого джерела, які цей Plugin придушує з причини, специфічної для постачальника. | -| `discovery` | `Record` | Чи можна каталог постачальника читати з метаданих маніфесту, оновлювати в кеші, чи він потребує runtime. | +| `providers` | `Record` | Рядки каталогу для ідентифікаторів провайдерів, що належать цьому Plugin. Ключі також мають бути в `providers` верхнього рівня. | +| `aliases` | `Record` | Псевдоніми провайдерів, які мають розв’язуватися у власний провайдер для планування каталогу або придушення. | +| `suppressions` | `object[]` | Рядки моделей з іншого джерела, які цей Plugin придушує з причини, специфічної для провайдера. | +| `discovery` | `Record` | Чи можна читати каталог провайдера з метаданих маніфесту, оновлювати його в кеш або чи потрібен runtime. | -`aliases` бере участь у пошуку власника постачальника для планування model-catalog. -Цілі псевдонімів мають бути постачальниками верхнього рівня, що належать тому самому Plugin. Коли -список, відфільтрований за постачальником, використовує псевдонім, OpenClaw може прочитати маніфест власника та -застосувати перевизначення API/base URL псевдоніма без завантаження runtime постачальника. +`aliases` бере участь у пошуку власника провайдера для планування каталогу моделей. +Цілі псевдонімів мають бути провайдерами верхнього рівня, що належать тому самому Plugin. Коли +список, відфільтрований за провайдером, використовує псевдонім, OpenClaw може прочитати маніфест власника і +застосувати перевизначення API/base URL псевдоніма без завантаження runtime провайдера. Псевдоніми не розгортають нефільтровані списки каталогу; широкі списки виводять лише -рядки канонічного постачальника-власника. +рядки канонічного провайдера-власника. -`suppressions` замінює старий runtime-хук постачальника `suppressBuiltInModel`. -Записи придушення враховуються лише тоді, коли постачальник належить Plugin або -оголошений як ключ `modelCatalog.aliases`, що вказує на власного постачальника. Runtime- -хуки придушення більше не викликаються під час розв’язання моделі. +`suppressions` замінює старий runtime-хук провайдера `suppressBuiltInModel`. +Записи придушення враховуються лише тоді, коли провайдер належить Plugin або +оголошений як ключ `modelCatalog.aliases`, що вказує на власного провайдера. Runtime-хуки +придушення більше не викликаються під час розв’язання моделі. -Поля постачальника: +Поля провайдера: | Поле | Тип | Що це означає | | --------- | ------------------------ | ----------------------------------------------------------------- | -| `baseUrl` | `string` | Необов’язкова типова базова URL-адреса для моделей у цьому каталозі постачальника. | -| `api` | `ModelApi` | Необов’язковий типовий API-адаптер для моделей у цьому каталозі постачальника. | -| `headers` | `Record` | Необов’язкові статичні заголовки, що застосовуються до цього каталогу постачальника. | +| `baseUrl` | `string` | Необов’язковий типовий базовий URL для моделей у цьому каталозі провайдера. | +| `api` | `ModelApi` | Необов’язковий типовий API-адаптер для моделей у цьому каталозі провайдера. | +| `headers` | `Record` | Необов’язкові статичні заголовки, що застосовуються до цього каталогу провайдера. | | `models` | `object[]` | Обов’язкові рядки моделей. Рядки без `id` ігноруються. | Поля моделі: -| Поле | Тип | Що це означає | -| -------------- | -------------------------------------------------------------- | --------------------------------------------------------------------------- | -| `id` | `string` | Локальний для провайдера ідентифікатор моделі без префікса `provider/`. | -| `name` | `string` | Необов’язкова назва для відображення. | -| `api` | `ModelApi` | Необов’язкове перевизначення API для окремої моделі. | -| `baseUrl` | `string` | Необов’язкове перевизначення базової URL-адреси для окремої моделі. | -| `headers` | `Record` | Необов’язкові статичні заголовки для окремої моделі. | -| `input` | `Array<"text" \| "image" \| "document" \| "audio" \| "video">` | Модальності, які модель приймає. | -| `reasoning` | `boolean` | Чи надає модель поведінку reasoning. | -| `contextWindow` | `number` | Нативне вікно контексту провайдера. | -| `contextTokens` | `number` | Необов’язкова ефективна межа контексту під час виконання, якщо вона відрізняється від `contextWindow`. | -| `maxTokens` | `number` | Максимальна кількість вихідних токенів, якщо відома. | -| `cost` | `object` | Необов’язкова ціна в доларах США за мільйон токенів, включно з необов’язковим `tieredPricing`. | -| `compat` | `object` | Необов’язкові прапорці сумісності, що відповідають сумісності конфігурації моделей OpenClaw. | -| `status` | `"available"` \| `"preview"` \| `"deprecated"` \| `"disabled"` | Статус у списку. Пригнічуйте лише тоді, коли рядок узагалі не має з’являтися. | -| `statusReason` | `string` | Необов’язкова причина, що показується зі статусом, відмінним від available. | -| `replaces` | `string[]` | Старіші локальні для провайдера ідентифікатори моделей, які ця модель замінює. | -| `replacedBy` | `string` | Локальний для провайдера ідентифікатор моделі-замінника для deprecated-рядків. | -| `tags` | `string[]` | Стабільні теги, які використовуються засобами вибору та фільтрами. | +| Поле | Тип | Що це означає | +| --------------- | -------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `id` | `string` | Локальний для провайдера ідентифікатор моделі, без префікса `provider/`. | +| `name` | `string` | Необов’язкова відображувана назва. | +| `api` | `ModelApi` | Необов’язкове перевизначення API для окремої моделі. | +| `baseUrl` | `string` | Необов’язкове перевизначення базової URL-адреси для окремої моделі. | +| `headers` | `Record` | Необов’язкові статичні заголовки для окремої моделі. | +| `input` | `Array<"text" \| "image" \| "document" \| "audio" \| "video">` | Модальності, які приймає модель. | +| `reasoning` | `boolean` | Чи надає модель поведінку reasoning. | +| `contextWindow` | `number` | Нативне контекстне вікно провайдера. | +| `contextTokens` | `number` | Необов’язкове ефективне обмеження контексту під час виконання, якщо воно відрізняється від `contextWindow`. | +| `maxTokens` | `number` | Максимальна кількість вихідних токенів, якщо відома. | +| `cost` | `object` | Необов’язкова ціна в USD за мільйон токенів, зокрема необов’язкове `tieredPricing`. | +| `compat` | `object` | Необов’язкові прапорці сумісності, що відповідають сумісності конфігурації моделей OpenClaw. | +| `status` | `"available"` \| `"preview"` \| `"deprecated"` \| `"disabled"` | Статус у списку. Пригнічуйте лише тоді, коли рядок узагалі не має з’являтися. | +| `statusReason` | `string` | Необов’язкова причина, що показується зі статусом, відмінним від available. | +| `replaces` | `string[]` | Старіші локальні для провайдера ідентифікатори моделей, які ця модель замінює. | +| `replacedBy` | `string` | Локальний для провайдера ідентифікатор моделі-замінника для застарілих рядків. | +| `tags` | `string[]` | Стабільні теги, які використовують засоби вибору й фільтри. | Поля пригнічення: -| Поле | Тип | Що це означає | -| -------------------------- | ---------- | --------------------------------------------------------------------------------------------------------- | -| `provider` | `string` | Ідентифікатор провайдера для upstream-рядка, який потрібно пригнітити. Має належати цьому plugin або бути оголошеним як власний псевдонім. | -| `model` | `string` | Локальний для провайдера ідентифікатор моделі, який потрібно пригнітити. | -| `reason` | `string` | Необов’язкове повідомлення, що показується, коли пригнічений рядок запитують напряму. | -| `when.baseUrlHosts` | `string[]` | Необов’язковий список ефективних хостів базових URL провайдера, потрібних для застосування пригнічення. | -| `when.providerConfigApiIn` | `string[]` | Необов’язковий список точних значень `api` у конфігурації провайдера, потрібних для застосування пригнічення. | +| Поле | Тип | Що це означає | +| -------------------------- | ---------- | -------------------------------------------------------------------------------------------------------- | +| `provider` | `string` | Ідентифікатор провайдера для upstream-рядка, який треба пригнітити. Має належати цьому plugin або бути оголошеним як належний alias. | +| `model` | `string` | Локальний для провайдера ідентифікатор моделі, який треба пригнітити. | +| `reason` | `string` | Необов’язкове повідомлення, що показується, коли пригнічений рядок запитують напряму. | +| `when.baseUrlHosts` | `string[]` | Необов’язковий список ефективних хостів базової URL-адреси провайдера, потрібних для застосування пригнічення. | +| `when.providerConfigApiIn` | `string[]` | Необов’язковий список точних значень `api` конфігурації провайдера, потрібних для застосування пригнічення. | -Не розміщуйте дані лише для часу виконання в `modelCatalog`. Використовуйте `static` лише тоді, коли рядки маніфесту достатньо повні, щоб поверхні списків і вибору з фільтрацією за провайдером могли пропускати виявлення registry/runtime. Використовуйте `refreshable`, коли рядки маніфесту корисні як перелічувані початкові дані або доповнення, але refresh/cache може згодом додати більше рядків; refreshable-рядки самі по собі не є авторитетними. Використовуйте `runtime`, коли OpenClaw має завантажити runtime провайдера, щоб дізнатися список. +Не розміщуйте дані лише часу виконання в `modelCatalog`. Використовуйте `static` лише тоді, коли +рядки маніфесту достатньо повні, щоб поверхні списків із фільтрацією за провайдером і засоби вибору могли пропускати +виявлення registry/runtime. Використовуйте `refreshable`, коли рядки маніфесту корисні +як початкові елементи списку або доповнення, але оновлення/кеш може додати більше рядків пізніше; +рядки refreshable самі по собі не є авторитетними. Використовуйте `runtime`, коли OpenClaw +має завантажити runtime провайдера, щоб знати список. ## Довідник modelIdNormalization -Використовуйте `modelIdNormalization` для дешевого очищення ідентифікаторів моделей, що належить провайдеру й має виконуватися до завантаження runtime провайдера. Це зберігає псевдоніми, як-от короткі назви моделей, локальні для провайдера legacy-ідентифікатори та правила префіксів proxy, у маніфесті власного plugin, а не в основних таблицях вибору моделей. +Використовуйте `modelIdNormalization` для дешевого очищення ідентифікаторів моделей, що належить провайдеру і має +відбутися до завантаження runtime провайдера. Це зберігає alias-и, як-от короткі назви моделей, +локальні для провайдера legacy-ідентифікатори та правила префіксів проксі, у маніфесті plugin-власника +замість таблиць вибору моделей у core. ```json { @@ -812,29 +820,33 @@ OpenClaw застосовує такий пріоритет: | Поле | Тип | Що це означає | | ------------------------------------ | ----------------------- | ----------------------------------------------------------------------------------------- | -| `aliases` | `Record` | Точні псевдоніми ідентифікаторів моделей без урахування регістру. Значення повертаються так, як записані. | -| `stripPrefixes` | `string[]` | Префікси, які потрібно видалити перед пошуком псевдоніма; корисно для legacy-дублювання provider/model. | -| `prefixWhenBare` | `string` | Префікс, який додається, коли нормалізований ідентифікатор моделі ще не містить `/`. | -| `prefixWhenBareAfterAliasStartsWith` | `object[]` | Умовні правила префікса bare-ідентифікатора після пошуку псевдоніма, з ключами `modelPrefix` і `prefix`. | +| `aliases` | `Record` | Точні alias-и ідентифікаторів моделей без урахування регістру. Значення повертаються як записані. | +| `stripPrefixes` | `string[]` | Префікси, які треба вилучити перед пошуком alias; корисно для legacy-дублювання provider/model. | +| `prefixWhenBare` | `string` | Префікс, який треба додати, коли нормалізований ідентифікатор моделі ще не містить `/`. | +| `prefixWhenBareAfterAliasStartsWith` | `object[]` | Умовні правила префіксів для bare-ідентифікаторів після пошуку alias, ключовані за `modelPrefix` і `prefix`. | ## Довідник providerEndpoints -Використовуйте `providerEndpoints` для класифікації endpoint, яку загальна політика запитів має знати до завантаження runtime провайдера. Core і далі визначає значення кожного `endpointClass`; маніфести plugin володіють метаданими хоста й базової URL-адреси. +Використовуйте `providerEndpoints` для класифікації endpoint-ів, яку загальна політика запитів +має знати до завантаження runtime провайдера. Core усе ще визначає значення кожного +`endpointClass`; маніфести plugin володіють метаданими хоста й базової URL-адреси. -Поля endpoint: +Поля endpoint-а: | Поле | Тип | Що це означає | | ------------------------------ | ---------- | ---------------------------------------------------------------------------------------------- | -| `endpointClass` | `string` | Відомий core-клас endpoint, наприклад `openrouter`, `moonshot-native` або `google-vertex`. | -| `hosts` | `string[]` | Точні імена хостів, які зіставляються з класом endpoint. | -| `hostSuffixes` | `string[]` | Суфікси хостів, які зіставляються з класом endpoint. Додавайте префікс `.` для зіставлення лише із суфіксом домену. | -| `baseUrls` | `string[]` | Точні нормалізовані базові HTTP(S) URL-адреси, які зіставляються з класом endpoint. | +| `endpointClass` | `string` | Відомий core-клас endpoint-а, наприклад `openrouter`, `moonshot-native` або `google-vertex`. | +| `hosts` | `string[]` | Точні імена хостів, що відповідають класу endpoint-а. | +| `hostSuffixes` | `string[]` | Суфікси хостів, що відповідають класу endpoint-а. Додавайте префікс `.` для зіставлення лише суфікса домену. | +| `baseUrls` | `string[]` | Точні нормалізовані базові HTTP(S) URL-адреси, що відповідають класу endpoint-а. | | `googleVertexRegion` | `string` | Статичний регіон Google Vertex для точних глобальних хостів. | -| `googleVertexRegionHostSuffix` | `string` | Суфікс, який потрібно видалити зі збіжних хостів, щоб відкрити префікс регіону Google Vertex. | +| `googleVertexRegionHostSuffix` | `string` | Суфікс, який треба вилучити з відповідних хостів, щоб відкрити префікс регіону Google Vertex. | ## Довідник providerRequest -Використовуйте `providerRequest` для дешевих метаданих сумісності запитів, потрібних загальній політиці запитів без завантаження runtime провайдера. Тримайте специфічне для поведінки переписування payload у runtime-хуках провайдера або спільних helper для сімейств провайдерів. +Використовуйте `providerRequest` для дешевих метаданих сумісності запитів, потрібних загальній +політиці запитів без завантаження runtime провайдера. Залишайте специфічне для поведінки +переписування payload у runtime hooks провайдера або спільних helper-ах родини провайдерів. ```json { @@ -854,15 +866,17 @@ OpenClaw застосовує такий пріоритет: Поля провайдера: -| Поле | Тип | Що це означає | -| --------------------- | ------------ | -------------------------------------------------------------------------------------- | -| `family` | `string` | Мітка сімейства провайдера, що використовується загальними рішеннями сумісності запитів і діагностикою. | -| `compatibilityFamily` | `"moonshot"` | Необов’язковий compatibility bucket сімейства провайдера для спільних helper запитів. | -| `openAICompletions` | `object` | Прапорці запитів completions, сумісних з OpenAI, наразі `supportsStreamingUsage`. | +| Поле | Тип | Що це означає | +| --------------------- | ------------ | ------------------------------------------------------------------------------------ | +| `family` | `string` | Мітка родини провайдера, яку використовують загальні рішення й діагностика сумісності запитів. | +| `compatibilityFamily` | `"moonshot"` | Необов’язковий bucket сумісності родини провайдера для спільних helper-ів запитів. | +| `openAICompletions` | `object` | Прапорці запитів completions, сумісних з OpenAI, наразі `supportsStreamingUsage`. | ## Довідник modelPricing -Використовуйте `modelPricing`, коли провайдеру потрібна поведінка pricing у control plane до завантаження runtime. Кеш pricing у Gateway читає ці метадані без імпорту runtime-коду провайдера. +Використовуйте `modelPricing`, коли провайдеру потрібна поведінка ціноутворення control plane до +завантаження runtime. Кеш цін Gateway читає ці метадані без імпорту +runtime-коду провайдера. ```json { @@ -887,131 +901,136 @@ OpenClaw застосовує такий пріоритет: | Поле | Тип | Що це означає | | ------------ | ----------------- | -------------------------------------------------------------------------------------------------- | -| `external` | `boolean` | Установіть `false` для локальних/self-hosted провайдерів, які ніколи не повинні отримувати ціни OpenRouter або LiteLLM. | -| `openRouter` | `false \| object` | Зіставлення для пошуку цін OpenRouter. `false` вимикає пошук OpenRouter для цього провайдера. | -| `liteLLM` | `false \| object` | Зіставлення для пошуку цін LiteLLM. `false` вимикає пошук LiteLLM для цього провайдера. | +| `external` | `boolean` | Установіть `false` для локальних/self-hosted провайдерів, які ніколи не мають отримувати ціни OpenRouter або LiteLLM. | +| `openRouter` | `false \| object` | Відображення для пошуку цін OpenRouter. `false` вимикає пошук OpenRouter для цього провайдера. | +| `liteLLM` | `false \| object` | Відображення для пошуку цін LiteLLM. `false` вимикає пошук LiteLLM для цього провайдера. | Поля джерела: | Поле | Тип | Що це означає | | -------------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------- | -| `provider` | `string` | Ідентифікатор зовнішнього провайдера каталогу, коли він відрізняється від ідентифікатора провайдера OpenClaw, наприклад `z-ai` для провайдера `zai`. | -| `passthroughProviderModel` | `boolean` | Обробляти ідентифікатори моделей зі скісною рискою як вкладені refs provider/model; корисно для proxy-провайдерів, як-от OpenRouter. | +| `provider` | `string` | Ідентифікатор провайдера в зовнішньому каталозі, коли він відрізняється від ідентифікатора провайдера OpenClaw, наприклад `z-ai` для провайдера `zai`. | +| `passthroughProviderModel` | `boolean` | Розглядайте ідентифікатори моделей зі скісною рискою як вкладені посилання provider/model; корисно для проксі-провайдерів, як-от OpenRouter. | | `modelIdTransforms` | `"version-dots"[]` | Додаткові варіанти ідентифікаторів моделей зовнішнього каталогу. `version-dots` пробує ідентифікатори версій із крапками, як-от `claude-opus-4.6`. | -### Індекс провайдерів OpenClaw +### OpenClaw Provider Index -Індекс провайдерів OpenClaw — це preview-метадані, якими володіє OpenClaw, для провайдерів, чиї plugins можуть ще не бути встановлені. Він не є частиною маніфесту plugin. Маніфести plugin залишаються авторитетним джерелом для встановлених plugin. Індекс провайдерів — це внутрішній fallback-контракт, який майбутні поверхні встановлюваних провайдерів і pre-install засобів вибору моделей споживатимуть, коли plugin провайдера не встановлено. +OpenClaw Provider Index — це preview-метадані, що належать OpenClaw, для провайдерів, +чиї plugins можуть ще не бути встановлені. Він не є частиною маніфесту plugin. +Маніфести plugin залишаються авторитетним джерелом для встановлених plugin. Provider Index — це +внутрішній fallback-контракт, який майбутні поверхні installable-provider і pre-install +model picker використовуватимуть, коли plugin провайдера не встановлено. Порядок авторитетності каталогу: 1. Конфігурація користувача. -2. `modelCatalog` маніфесту встановленого plugin. -3. Кеш каталогу моделей з явного refresh. -4. Preview-рядки Індексу провайдерів OpenClaw. +2. Маніфест установленого plugin `modelCatalog`. +3. Кеш каталогу моделей після явного оновлення. +4. Preview-рядки OpenClaw Provider Index. -Індекс провайдерів не повинен містити секрети, увімкнений стан, runtime-хуки або -живі дані моделей, специфічні для облікового запису. Його попередні каталоги використовують ту саму +Індекс провайдерів не повинен містити секрети, увімкнений стан, runtime hooks або +актуальні дані моделей, специфічні для облікового запису. Його preview-каталоги використовують ту саму форму рядка провайдера `modelCatalog`, що й маніфести Plugin, але мають залишатися обмеженими -стабільними відображуваними метаданими, якщо runtime-поля адаптера, як-от `api`, -`baseUrl`, ціни або прапорці сумісності, навмисно не підтримуються узгодженими з -маніфестом установленого Plugin. Провайдери з живим виявленням `/models` мають +стабільними метаданими відображення, якщо поля runtime adapter, як-от `api`, +`baseUrl`, ціни або прапорці сумісності, не підтримуються навмисно узгодженими з +маніфестом установленого Plugin. Провайдери з актуальним виявленням `/models` мають записувати оновлені рядки через явний шлях кешу каталогу моделей, а не -змушувати звичайний список або onboarding викликати API провайдера. +змушувати звичайний listing або onboarding викликати API провайдера. -Записи Індексу провайдерів також можуть містити метадані встановлюваного Plugin для провайдерів, -чий Plugin було винесено з core або який інакше ще не встановлено. Ці -метадані віддзеркалюють шаблон каталогу каналів: назви пакета, специфікації npm install, +Записи Індексу провайдерів також можуть містити метадані installable-plugin для провайдерів, +чий Plugin переміщено з core або який інакше ще не встановлено. Ці +метадані віддзеркалюють патерн каталогу каналів: назви пакета, npm install spec, очікуваної цілісності та дешевих міток вибору автентифікації достатньо, щоб показати -встановлюваний варіант налаштування. Коли Plugin встановлено, перемагає його маніфест, а -запис Індексу провайдерів для цього провайдера ігнорується. +опцію installable setup. Після встановлення Plugin його маніфест перемагає, а +запис Індексу провайдерів ігнорується для цього провайдера. -Застарілі ключі можливостей верхнього рівня вважаються deprecated. Використовуйте `openclaw doctor --fix`, щоб +Застарілі capability-ключі верхнього рівня вважаються deprecated. Використовуйте `openclaw doctor --fix`, щоб перемістити `speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders` і `webSearchProviders` під `contracts`; звичайне -завантаження маніфесту більше не розглядає ці поля верхнього рівня як володіння -можливостями. +завантаження маніфесту більше не трактує ці поля верхнього рівня як ownership +capability. -## Маніфест порівняно з package.json +## Маніфест проти package.json Ці два файли виконують різні завдання: | Файл | Для чого використовувати | -| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `openclaw.plugin.json` | Виявлення, перевірка конфігурації, метадані вибору автентифікації та UI-підказки, які мають існувати до запуску коду Plugin | -| `package.json` | Метадані npm, встановлення залежностей і блок `openclaw`, який використовується для entrypoints, install gating, налаштування або метаданих каталогу | +| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `openclaw.plugin.json` | Виявлення, валідація конфігурації, метадані вибору автентифікації та UI-підказки, які мають існувати до запуску коду Plugin | +| `package.json` | Метадані npm, встановлення залежностей і блок `openclaw`, що використовується для entrypoints, install gating, setup або метаданих каталогу | -Якщо ви не впевнені, де має бути певна частина метаданих, використовуйте це правило: +Якщо ви не впевнені, де мають бути певні метадані, користуйтеся таким правилом: -- якщо OpenClaw має знати це до завантаження коду Plugin, помістіть це в `openclaw.plugin.json` -- якщо це стосується пакування, файлів входу або поведінки npm install, помістіть це в `package.json` +- якщо OpenClaw має знати це перед завантаженням коду Plugin, помістіть це в `openclaw.plugin.json` +- якщо це стосується пакування, entry files або поведінки npm install, помістіть це в `package.json` -### Поля package.json, що впливають на виявлення +### Поля package.json, які впливають на виявлення -Деякі pre-runtime метадані Plugin навмисно зберігаються в `package.json` під -блоком `openclaw`, а не в `openclaw.plugin.json`. +Деякі pre-runtime метадані Plugin навмисно розміщуються в `package.json` у +блоці `openclaw`, а не в `openclaw.plugin.json`. Важливі приклади: | Поле | Що воно означає | | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `openclaw.extensions` | Оголошує нативні entrypoints Plugin. Має залишатися всередині директорії пакета Plugin. | -| `openclaw.runtimeExtensions` | Оголошує зібрані JavaScript runtime entrypoints для встановлених пакетів. Має залишатися всередині директорії пакета Plugin. | -| `openclaw.setupEntry` | Легкий entrypoint лише для налаштування, який використовується під час onboarding, відкладеного запуску каналу та read-only статусу каналу/виявлення SecretRef. Має залишатися всередині директорії пакета Plugin. | -| `openclaw.runtimeSetupEntry` | Оголошує зібраний JavaScript setup entrypoint для встановлених пакетів. Потребує `setupEntry`, має існувати та має залишатися всередині директорії пакета Plugin. | -| `openclaw.channel` | Дешеві метадані каталогу каналів, як-от мітки, шляхи документації, псевдоніми та текст вибору. | -| `openclaw.channel.commands` | Статичні метадані нативних команд і auto-default нативних skill, що використовуються конфігурацією, аудитом і поверхнями списку команд до завантаження runtime каналу. | -| `openclaw.channel.configuredState` | Легкі метадані перевіряча configured-state, які можуть відповісти на запитання «чи вже існує налаштування лише через env?» без завантаження повного runtime каналу. | -| `openclaw.channel.persistedAuthState` | Легкі метадані перевіряча persisted-auth, які можуть відповісти на запитання «чи вже є щось авторизоване?» без завантаження повного runtime каналу. | -| `openclaw.install.npmSpec` / `openclaw.install.localPath` | Підказки для встановлення/оновлення для bundled і зовнішньо опублікованих Plugins. | +| `openclaw.extensions` | Оголошує native entrypoints Plugin. Має залишатися всередині директорії пакета Plugin. | +| `openclaw.runtimeExtensions` | Оголошує built JavaScript runtime entrypoints для встановлених пакетів. Має залишатися всередині директорії пакета Plugin. | +| `openclaw.setupEntry` | Легкий setup-only entrypoint, що використовується під час onboarding, відкладеного запуску каналу та read-only статусу каналу/виявлення SecretRef. Має залишатися всередині директорії пакета Plugin. | +| `openclaw.runtimeSetupEntry` | Оголошує built JavaScript setup entrypoint для встановлених пакетів. Потребує `setupEntry`, має існувати й має залишатися всередині директорії пакета Plugin. | +| `openclaw.channel` | Дешеві метадані каталогу каналів, як-от labels, docs paths, aliases і selection copy. | +| `openclaw.channel.commands` | Статичні native command і native skill auto-default метадані, які використовуються поверхнями config, audit і command-list до завантаження channel runtime. | +| `openclaw.channel.configuredState` | Легкі метадані перевірки configured-state, що можуть відповісти, «чи вже існує env-only setup?» без завантаження повного channel runtime. | +| `openclaw.channel.persistedAuthState` | Легкі метадані перевірки persisted-auth, що можуть відповісти, «чи вже є щось авторизоване?» без завантаження повного channel runtime. | +| `openclaw.install.npmSpec` / `openclaw.install.localPath` | Підказки install/update для bundled і зовні опублікованих Plugins. | | `openclaw.install.defaultChoice` | Бажаний шлях встановлення, коли доступно кілька джерел встановлення. | -| `openclaw.install.minHostVersion` | Мінімальна підтримувана версія хоста OpenClaw, з використанням semver-порога на кшталт `>=2026.3.22`. | -| `openclaw.install.expectedIntegrity` | Очікуваний рядок цілісності npm dist, наприклад `sha512-...`; потоки встановлення й оновлення перевіряють отриманий артефакт за ним. | -| `openclaw.install.allowInvalidConfigRecovery` | Дозволяє вузький шлях recovery через перевстановлення bundled Plugin, коли конфігурація недійсна. | -| `openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen` | Дає змогу поверхням каналу лише для налаштування завантажуватися до повного Plugin каналу під час startup. | +| `openclaw.install.minHostVersion` | Мінімальна підтримувана версія OpenClaw host, з semver floor на кшталт `>=2026.3.22` або `>=2026.5.1-beta.1`. | +| `openclaw.install.expectedIntegrity` | Очікуваний рядок цілісності npm dist, наприклад `sha512-...`; install і update flows перевіряють отриманий артефакт за ним. | +| `openclaw.install.allowInvalidConfigRecovery` | Дозволяє вузький шлях recovery з перевстановленням bundled-plugin, коли конфігурація недійсна. | +| `openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen` | Дає змогу setup-only поверхням каналу завантажуватися перед повним Plugin каналу під час запуску. | -Метадані маніфесту визначають, які варіанти провайдера/каналу/налаштування з’являються в -onboarding до завантаження runtime. `package.json#openclaw.install` повідомляє -onboarding, як отримати або ввімкнути цей Plugin, коли користувач вибирає один із цих -варіантів. Не переміщуйте підказки встановлення в `openclaw.plugin.json`. +Метадані маніфесту визначають, які варіанти provider/channel/setup з’являються в +onboarding перед завантаженням runtime. `package.json#openclaw.install` повідомляє +onboarding, як отримати або увімкнути цей Plugin, коли користувач вибирає один із цих +варіантів. Не переміщуйте install hints у `openclaw.plugin.json`. -`openclaw.install.minHostVersion` застосовується під час встановлення та завантаження -реєстру маніфестів. Недійсні значення відхиляються; новіші, але дійсні значення пропускають -Plugin на старіших хостах. +`openclaw.install.minHostVersion` застосовується під час install і завантаження +реєстру маніфестів для non-bundled джерел Plugin. Недійсні значення відхиляються; +новіші, але дійсні значення пропускають external Plugins на старіших hosts. Bundled source +Plugins вважаються co-versioned із checkout host. -Точне фіксування версії npm уже міститься в `npmSpec`, наприклад -`"npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3"`. Офіційні записи зовнішнього каталогу -мають поєднувати точні специфікації з `expectedIntegrity`, щоб потоки оновлення fail closed, -якщо отриманий npm-артефакт більше не відповідає зафіксованому релізу. -Інтерактивний onboarding усе ще пропонує довірені специфікації npm із registry, зокрема bare -назви пакетів і dist-tags, для сумісності. Діагностика каталогу може -розрізняти точні, плаваючі, integrity-pinned джерела, missing-integrity, package-name -mismatch і invalid default-choice джерела. Вона також попереджає, коли -`expectedIntegrity` присутній, але немає дійсного npm-джерела, яке він може зафіксувати. +Точне закріплення npm-версії вже міститься в `npmSpec`, наприклад +`"npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3"`. Офіційні external catalog +entries мають поєднувати точні specs з `expectedIntegrity`, щоб update flows fail +closed, якщо отриманий npm artifact більше не відповідає pinned release. +Interactive onboarding досі пропонує trusted registry npm specs, включно з bare +package names і dist-tags, для сумісності. Catalog diagnostics можуть +розрізняти exact, floating, integrity-pinned, missing-integrity, package-name +mismatch і invalid default-choice sources. Вони також попереджають, коли +`expectedIntegrity` присутній, але немає дійсного npm source, який він може pin. Коли `expectedIntegrity` присутній, -потоки встановлення/оновлення застосовують його; коли його опущено, registry resolution +install/update flows застосовують його; коли його пропущено, registry resolution записується без integrity pin. -Channel Plugins мають надавати `openclaw.setupEntry`, коли статус, список каналів -або сканування SecretRef мають ідентифікувати налаштовані облікові записи без завантаження повного -runtime. Setup entry має експортувати метадані каналу плюс setup-safe адаптери конфігурації, -статусу та секретів; залишайте мережеві клієнти, gateway listeners і -transport runtimes в основному entrypoint extension. +Channel Plugins мають надавати `openclaw.setupEntry`, коли status, channel list +або SecretRef scans мають ідентифікувати налаштовані облікові записи без завантаження повного +runtime. Setup entry має надавати метадані каналу разом із setup-safe config, +status і secrets adapters; залишайте network clients, gateway listeners і +transport runtimes у головному extension entrypoint. Поля runtime entrypoint не перевизначають перевірки меж пакета для source entrypoint fields. Наприклад, `openclaw.runtimeExtensions` не може зробити -escaping шлях `openclaw.extensions` придатним до завантаження. +escaping path `openclaw.extensions` придатним для завантаження. -`openclaw.install.allowInvalidConfigRecovery` навмисно вузький. Він не робить -довільні зламані конфігурації встановлюваними. Сьогодні він лише дозволяє install -flows відновлюватися після конкретних застарілих помилок оновлення bundled Plugin, як-от +`openclaw.install.allowInvalidConfigRecovery` навмисно вузький. Він не +робить довільні зламані configs installable. Наразі він лише дозволяє install +flows відновлюватися після конкретних застарілих помилок upgrade bundled-plugin, як-от відсутній шлях bundled Plugin або застарілий запис `channels.` для того самого -bundled Plugin. Непов’язані помилки конфігурації все ще блокують install і спрямовують операторів +bundled Plugin. Непов’язані помилки config все одно блокують install і спрямовують операторів до `openclaw doctor --fix`. -`openclaw.channel.persistedAuthState` — це метадані пакета для крихітного checker +`openclaw.channel.persistedAuthState` — це metadata пакета для крихітного checker module: ```json @@ -1028,12 +1047,12 @@ module: } ``` -Використовуйте це, коли setup, doctor, status або read-only presence flows потребують дешевого -yes/no auth probe до завантаження повного Plugin каналу. Persisted auth state — це -не configured channel state: не використовуйте ці метадані для auto-enable Plugins, -repair runtime dependencies або рішення, чи має завантажуватися runtime каналу. -Цільовий export має бути невеликою функцією, яка читає лише persisted state; не -проводьте його через повний runtime barrel каналу. +Використовуйте це, коли setup, doctor, status або read-only presence flows потребують дешевої +yes/no auth probe до завантаження повного Plugin каналу. Persisted auth state — +це не configured channel state: не використовуйте ці метадані для auto-enable Plugins, +repair runtime dependencies або вирішення, чи має завантажуватися channel runtime. +Target export має бути невеликою функцією, що читає лише persisted state; не +спрямовуйте її через повний channel runtime barrel. `openclaw.channel.configuredState` має таку саму форму для дешевих env-only configured checks: @@ -1052,69 +1071,69 @@ configured checks: } ``` -Використовуйте це, коли канал може відповісти щодо configured-state з env або інших крихітних -non-runtime inputs. Якщо перевірка потребує повного config resolution або реального -runtime каналу, залишайте цю логіку в hook `config.hasConfiguredState` -Plugin. +Використовуйте це, коли канал може відповісти configured-state з env або інших невеликих +non-runtime inputs. Якщо перевірка потребує повного config resolution або справжнього +channel runtime, залишайте цю логіку в hook Plugin `config.hasConfiguredState`. -## Пріоритетність виявлення (дублікати id Plugin) +## Пріоритет виявлення (дублікати ідентифікаторів Plugin) -OpenClaw виявляє Plugins із кількох roots (bundled, global install, workspace, explicit config-selected paths). Якщо два виявлення мають однаковий `id`, зберігається лише маніфест із **найвищою пріоритетністю**; дублікати з нижчою пріоритетністю відкидаються замість завантаження поруч із ним. +OpenClaw виявляє Plugins з кількох roots (bundled, global install, workspace, явні config-selected paths). Якщо два виявлені елементи мають той самий `id`, зберігається лише маніфест із **найвищим пріоритетом**; дублікати з нижчим пріоритетом відкидаються замість завантаження поруч із ним. -Пріоритетність, від найвищої до найнижчої: +Пріоритет, від найвищого до найнижчого: -1. **Config-selected** — шлях, явно зафіксований у `plugins.entries.` +1. **Config-selected** — шлях, явно закріплений у `plugins.entries.` 2. **Bundled** — Plugins, що постачаються з OpenClaw -3. **Global install** — Plugins, установлені в global OpenClaw plugin root +3. **Global install** — Plugins, встановлені в глобальний корінь Plugin OpenClaw 4. **Workspace** — Plugins, виявлені відносно поточного workspace Наслідки: -- Forked або застаріла копія bundled Plugin, що лежить у workspace, не затінить bundled build. -- Щоб справді перевизначити bundled Plugin локальним, зафіксуйте його через `plugins.entries.`, щоб він переміг за пріоритетністю, а не покладайтеся на workspace discovery. +- Forked або застаріла копія bundled Plugin, що лежить у workspace, не shadow bundled build. +- Щоб справді перевизначити bundled Plugin локальним, закріпіть його через `plugins.entries.`, щоб він переміг за пріоритетом, а не покладайтеся на workspace discovery. - Відкидання дублікатів логуються, щоб Doctor і startup diagnostics могли вказати на відкинуту копію. ## Вимоги JSON Schema -- **Кожен Plugin має постачати JSON Schema**, навіть якщо він не приймає конфігурацію. +- **Кожен Plugin має постачати JSON Schema**, навіть якщо він не приймає config. - Порожня schema прийнятна (наприклад, `{ "type": "object", "additionalProperties": false }`). -- Schemas перевіряються під час читання/запису конфігурації, а не під час runtime. +- Schemas валідуються під час читання/запису config, а не під час runtime. -## Поведінка перевірки +## Поведінка валідації -- Невідомі ключі `channels.*` є **помилками**, якщо ідентифікатор каналу не оголошено в маніфесті Plugin. +- Невідомі ключі `channels.*` є **помилками**, якщо тільки ідентифікатор каналу не оголошено в + маніфесті plugin. - `plugins.entries.`, `plugins.allow`, `plugins.deny` і `plugins.slots.*` - мають посилатися на **доступні для виявлення** ідентифікатори Plugin. Невідомі ідентифікатори є **помилками**. -- Якщо Plugin встановлено, але він має пошкоджений або відсутній маніфест чи схему, - перевірка не проходить, а Doctor повідомляє про помилку Plugin. -- Якщо конфігурація Plugin існує, але Plugin **вимкнено**, конфігурація зберігається, а - **попередження** відображається в Doctor + журналах. + мають посилатися на **виявлювані** ідентифікатори plugin. Невідомі ідентифікатори є **помилками**. +- Якщо plugin встановлено, але він має пошкоджений або відсутній маніфест чи схему, + валідація завершується невдало, а Doctor повідомляє про помилку plugin. +- Якщо конфігурація plugin існує, але plugin **вимкнено**, конфігурація зберігається, а + **попередження** відображається в Doctor і журналах. -Див. [довідник конфігурації](/uk/gateway/configuration), щоб переглянути повну схему `plugins.*`. +Див. [довідник із конфігурації](/uk/gateway/configuration), щоб переглянути повну схему `plugins.*`. ## Примітки -- Маніфест **обов’язковий для нативних Plugin OpenClaw**, включно із завантаженням із локальної файлової системи. Середовище виконання все одно завантажує модуль Plugin окремо; маніфест потрібен лише для виявлення + перевірки. -- Нативні маніфести розбираються за допомогою JSON5, тому коментарі, кінцеві коми й ключі без лапок приймаються, доки кінцеве значення все ще є об’єктом. -- Завантажувач маніфестів читає лише задокументовані поля маніфесту. Уникайте власних ключів верхнього рівня. -- `channels`, `providers`, `cliBackends` і `skills` можна не вказувати, якщо Plugin вони не потрібні. -- `providerDiscoveryEntry` має залишатися легким і не повинен імпортувати великий код середовища виконання; використовуйте його для статичних метаданих каталогу провайдерів або вузьких дескрипторів виявлення, а не для виконання під час запиту. -- Ексклюзивні типи Plugin вибираються через `plugins.slots.*`: `kind: "memory"` через `plugins.slots.memory`, `kind: "context-engine"` через `plugins.slots.contextEngine` (типово `legacy`). -- Оголошуйте ексклюзивний тип Plugin у цьому маніфесті. `OpenClawPluginDefinition.kind` у точці входу середовища виконання застарів і залишається лише як резерв сумісності для старіших Plugin. -- Метадані змінних середовища (`setup.providers[].envVars`, застарілий `providerAuthEnvVars` і `channelEnvVars`) є лише декларативними. Статус, аудит, перевірка доставки cron та інші поверхні лише для читання все одно застосовують довіру до Plugin і політику ефективної активації, перш ніж вважати змінну середовища налаштованою. -- Для метаданих майстра середовища виконання, які потребують коду провайдера, див. [хуки середовища виконання провайдера](/uk/plugins/architecture-internals#provider-runtime-hooks). -- Якщо ваш Plugin залежить від нативних модулів, задокументуйте кроки збирання та будь-які вимоги до списку дозволів менеджера пакетів (наприклад, pnpm `allow-build-scripts` + `pnpm rebuild `). +- Маніфест є **обов’язковим для нативних plugin OpenClaw**, зокрема для завантажень із локальної файлової системи. Runtime все одно завантажує модуль plugin окремо; маніфест потрібен лише для виявлення й валідації. +- Нативні маніфести розбираються за допомогою JSON5, тому коментарі, кінцеві коми та ключі без лапок приймаються, якщо підсумкове значення все одно є об’єктом. +- Завантажувач маніфестів читає лише документовані поля маніфесту. Уникайте власних ключів верхнього рівня. +- `channels`, `providers`, `cliBackends` і `skills` можна не вказувати, якщо plugin вони не потрібні. +- `providerDiscoveryEntry` має залишатися легковагим і не повинен імпортувати широкий runtime-код; використовуйте його для статичних метаданих каталогу провайдерів або вузьких дескрипторів виявлення, а не для виконання під час запиту. +- Ексклюзивні види plugin вибираються через `plugins.slots.*`: `kind: "memory"` через `plugins.slots.memory`, `kind: "context-engine"` через `plugins.slots.contextEngine` (за замовчуванням `legacy`). +- Оголошуйте ексклюзивний вид plugin у цьому маніфесті. Runtime-запис `OpenClawPluginDefinition.kind` застарів і залишається лише як резервний варіант сумісності для старіших plugin. +- Метадані змінних середовища (`setup.providers[].envVars`, застарілі `providerAuthEnvVars` і `channelEnvVars`) є лише декларативними. Статус, аудит, валідація доставки cron та інші поверхні лише для читання все одно застосовують довіру до plugin і політику ефективної активації, перш ніж вважати змінну середовища налаштованою. +- Для runtime-метаданих майстра, яким потрібен код провайдера, див. [runtime-хуки провайдера](/uk/plugins/architecture-internals#provider-runtime-hooks). +- Якщо ваш plugin залежить від нативних модулів, задокументуйте кроки збирання та будь-які вимоги до allowlist менеджера пакетів (наприклад, pnpm `allow-build-scripts` + `pnpm rebuild `). ## Пов’язане - - Початок роботи з Plugin. + + Початок роботи з plugin. - + Внутрішня архітектура та модель можливостей. - Довідник SDK Plugin та імпорти підшляхів. + Довідник Plugin SDK та імпорти підшляхів. diff --git a/docs/uk/plugins/sdk-overview.md b/docs/uk/plugins/sdk-overview.md index 9000f3e1e..b68203c28 100644 --- a/docs/uk/plugins/sdk-overview.md +++ b/docs/uk/plugins/sdk-overview.md @@ -1,35 +1,36 @@ --- read_when: - - Потрібно знати, з якого підшляху SDK виконувати імпорт + - Потрібно знати, з якого підшляху SDK імпортувати - Вам потрібна довідка щодо всіх методів реєстрації в OpenClawPluginApi - Ви шукаєте конкретний експорт SDK sidebarTitle: Plugin SDK overview -summary: Мапа імпортів, довідник API реєстрації та архітектура SDK +summary: Карта імпортів, довідник API реєстрації та архітектура SDK title: Огляд Plugin SDK x-i18n: - generated_at: "2026-05-01T20:40:27Z" + generated_at: "2026-05-02T02:49:22Z" model: gpt-5.5 provider: openai - source_hash: 28da709ac7dc86e6d5b553b6c8ecaed105c68de63f94804bc5aed56ebc6c5de9 + source_hash: be5fa531e603fb6d87f84e3193ebd61be1431b57b8f284871ae15f34ca93fc69 source_path: plugins/sdk-overview.md workflow: 16 --- -SDK Plugin — це типізований контракт між Plugin і ядром. Ця сторінка є -довідником щодо **того, що імпортувати** і **що можна реєструвати**. +SDK плагінів — це типізований контракт між плагінами та ядром. Ця сторінка є +довідником щодо **того, що імпортувати** і **того, що можна реєструвати**. - Ця сторінка призначена для авторів Plugin, які використовують `openclaw/plugin-sdk/*` всередині - OpenClaw. Для зовнішніх застосунків, скриптів, панелей керування, завдань CI та розширень IDE, - які хочуть запускати агентів через Gateway, натомість використовуйте - [OpenClaw App SDK](/uk/concepts/openclaw-sdk) і пакет `@openclaw/sdk`. + Ця сторінка призначена для авторів плагінів, які використовують + `openclaw/plugin-sdk/*` всередині OpenClaw. Для зовнішніх застосунків, + скриптів, панелей керування, завдань CI та розширень IDE, які хочуть запускати + агентів через Gateway, натомість використовуйте + [SDK застосунків OpenClaw](/uk/concepts/openclaw-sdk) і пакет `@openclaw/sdk`. -Шукаєте натомість практичний посібник? Почніть із [Створення Plugin](/uk/plugins/building-plugins), використовуйте [Channel plugins](/uk/plugins/sdk-channel-plugins) для каналів Plugin, [Provider plugins](/uk/plugins/sdk-provider-plugins) для провайдерів Plugin і [Plugin hooks](/uk/plugins/hooks) для Plugin інструментів або хуків життєвого циклу. +Натомість шукаєте практичний посібник? Почніть із [Створення плагінів](/uk/plugins/building-plugins), використовуйте [Плагіни каналів](/uk/plugins/sdk-channel-plugins) для плагінів каналів, [Плагіни провайдерів](/uk/plugins/sdk-provider-plugins) для плагінів провайдерів і [Хуки Plugin](/uk/plugins/hooks) для плагінів хуків інструментів або життєвого циклу. -## Угода імпорту +## Угода щодо імпорту Завжди імпортуйте з конкретного підшляху: @@ -38,45 +39,48 @@ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry"; import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core"; ``` -Кожен підшлях — це невеликий самодостатній модуль. Це забезпечує швидкий запуск і -запобігає проблемам із циклічними залежностями. Для допоміжних засобів входу/збирання, -специфічних для каналу, надавайте перевагу `openclaw/plugin-sdk/channel-core`; залишайте -`openclaw/plugin-sdk/core` для ширшої поверхні та спільних допоміжних засобів, таких як +Кожен підшлях — це невеликий самодостатній модуль. Це забезпечує швидкий запуск +і запобігає проблемам із циклічними залежностями. Для допоміжних засобів +входу/збирання, специфічних для каналів, віддавайте перевагу +`openclaw/plugin-sdk/channel-core`; залишайте `openclaw/plugin-sdk/core` для +ширшої спільної поверхні та спільних допоміжних засобів, як-от `buildChannelConfigSchema`. Для конфігурації каналу публікуйте JSON Schema, що належить каналу, через `openclaw.plugin.json#channelConfigs`. Підшлях `plugin-sdk/channel-config-schema` -призначений для спільних примітивів схем і загального конструктора. Вбудовані Plugin -OpenClaw використовують `plugin-sdk/bundled-channel-config-schema` для збережених -схем вбудованих каналів. Застарілі експорти сумісності залишаються в -`plugin-sdk/channel-config-schema-legacy`; жоден із підшляхів вбудованих схем не є -шаблоном для нових Plugin. +призначений для спільних примітивів схеми та загального збирача. Вбудовані +плагіни OpenClaw використовують `plugin-sdk/bundled-channel-config-schema` для +збережених схем вбудованих каналів. Застарілі експорти сумісності залишаються в +`plugin-sdk/channel-config-schema-legacy`; жоден із підшляхів вбудованих схем не +є шаблоном для нових плагінів. - Не імпортуйте зручні шви, брендовані провайдерами або каналами (наприклад + Не імпортуйте зручні шви з брендингом провайдера або каналу (наприклад `openclaw/plugin-sdk/slack`, `.../discord`, `.../signal`, `.../whatsapp`). - Вбудовані Plugin компонують загальні підшляхи SDK усередині власних барелів `api.ts` / - `runtime-api.ts`; споживачі ядра мають або використовувати ці локальні для Plugin - барелі, або додати вузький загальний контракт SDK, коли потреба справді - міжканальна. + Вбудовані плагіни компонують загальні підшляхи SDK всередині власних барелів + `api.ts` / `runtime-api.ts`; споживачі ядра мають або використовувати ці + локальні для плагіна барелі, або додати вузький загальний контракт SDK, коли + потреба справді є міжканальною. -Невеликий набір допоміжних швів вбудованих Plugin досі з’являється в згенерованій мапі -експортів, коли вони мають відстежене використання власником. Вони існують лише для -обслуговування вбудованих Plugin і не рекомендовані як шляхи імпорту для нових сторонніх -Plugin. +Невеликий набір допоміжних швів вбудованих плагінів досі з’являється у +згенерованій мапі експортів, коли для них відстежено використання власником. +Вони існують лише для супроводу вбудованих плагінів і не рекомендовані як шляхи +імпорту для нових сторонніх плагінів. -`openclaw/plugin-sdk/discord` і `openclaw/plugin-sdk/telegram-account` також збережено -як застарілі фасади сумісності для відстеженого використання власником. Не копіюйте -ці шляхи імпорту в нові Plugin; натомість використовуйте ін’єктовані runtime-помічники -та загальні підшляхи SDK каналів. +`openclaw/plugin-sdk/discord` і `openclaw/plugin-sdk/telegram-account` також +збережені як застарілі фасади сумісності для відстеженого використання +власником. Не копіюйте ці шляхи імпорту в нові плагіни; натомість +використовуйте ін’єктовані runtime-допоміжні засоби та загальні підшляхи SDK +каналів. ## Довідник підшляхів -SDK Plugin доступний як набір вузьких підшляхів, згрупованих за областями (вхід -Plugin, канал, провайдер, автентифікація, runtime, можливість, пам’ять і зарезервовані -допоміжні засоби вбудованих Plugin). Повний каталог — згрупований і з посиланнями — -див. у [Підшляхи SDK Plugin](/uk/plugins/sdk-subpaths). +SDK плагінів надається як набір вузьких підшляхів, згрупованих за областями +(вхід плагіна, канал, провайдер, автентифікація, runtime, можливості, пам’ять і +зарезервовані допоміжні засоби вбудованих плагінів). Повний каталог — +згрупований і з посиланнями — дивіться в +[підшляхах SDK Plugin](/uk/plugins/sdk-subpaths). Згенерований список із понад 200 підшляхів міститься в `scripts/lib/plugin-sdk-entrypoints.json`. @@ -91,111 +95,110 @@ Plugin, канал, провайдер, автентифікація, runtime, | ------------------------------------------------ | --------------------------------------- | | `api.registerProvider(...)` | Текстове виведення (LLM) | | `api.registerAgentHarness(...)` | Експериментальний низькорівневий виконавець агента | -| `api.registerCliBackend(...)` | Локальний бекенд CLI-виведення | -| `api.registerChannel(...)` | Канал повідомлень | -| `api.registerSpeechProvider(...)` | Text-to-speech / STT-синтез | +| `api.registerCliBackend(...)` | Локальний backend виведення CLI | +| `api.registerChannel(...)` | Канал обміну повідомленнями | +| `api.registerSpeechProvider(...)` | Перетворення тексту на мовлення / синтез STT | | `api.registerRealtimeTranscriptionProvider(...)` | Потокова транскрипція в реальному часі | -| `api.registerRealtimeVoiceProvider(...)` | Дуплексні голосові сеанси в реальному часі | +| `api.registerRealtimeVoiceProvider(...)` | Дуплексні голосові сесії в реальному часі | | `api.registerMediaUnderstandingProvider(...)` | Аналіз зображень/аудіо/відео | | `api.registerImageGenerationProvider(...)` | Генерація зображень | | `api.registerMusicGenerationProvider(...)` | Генерація музики | | `api.registerVideoGenerationProvider(...)` | Генерація відео | -| `api.registerWebFetchProvider(...)` | Провайдер веб-отримання / скрейпінгу | +| `api.registerWebFetchProvider(...)` | Провайдер web fetch / scraping | | `api.registerWebSearchProvider(...)` | Вебпошук | ### Інструменти та команди -| Метод | Що він реєструє | +| Метод | Що він реєструє | | ------------------------------- | ---------------------------------------------- | | `api.registerTool(tool, opts?)` | Інструмент агента (обов’язковий або `{ optional: true }`) | -| `api.registerCommand(def)` | Користувацька команда (обходить LLM) | +| `api.registerCommand(def)` | Користувацька команда (оминає LLM) | -Команди Plugin можуть задавати `agentPromptGuidance`, коли агенту потрібна коротка -підказка маршрутизації, що належить команді. Тримайте цей текст про саму команду; -не додавайте політику, специфічну для провайдера або Plugin, до побудовників промптів ядра. +Команди плагінів можуть задавати `agentPromptGuidance`, коли агенту потрібна +коротка підказка маршрутизації, що належить команді. Тримайте цей текст про саму +команду; не додавайте політику, специфічну для провайдера або плагіна, до +збирачів prompt у ядрі. ### Інфраструктура -| Метод | Що він реєструє | -| ---------------------------------------------- | ----------------------------------------- | -| `api.registerHook(events, handler, opts?)` | Хук події | -| `api.registerHttpRoute(params)` | HTTP-ендпоїнт Gateway | -| `api.registerGatewayMethod(name, handler)` | RPC-метод Gateway | -| `api.registerGatewayDiscoveryService(service)` | Рекламодавець локального виявлення Gateway | -| `api.registerCli(registrar, opts?)` | Підкоманда CLI | -| `api.registerService(service)` | Фонова служба | -| `api.registerInteractiveHandler(registration)` | Інтерактивний обробник | -| `api.registerAgentToolResultMiddleware(...)` | Runtime-посередник результатів інструментів | -| `api.registerMemoryPromptSupplement(builder)` | Додатковий розділ промпта поруч із пам’яттю | -| `api.registerMemoryCorpusSupplement(adapter)` | Додатковий корпус пошуку/читання пам’яті | +| Метод | Що він реєструє | +| ---------------------------------------------- | --------------------------------------- | +| `api.registerHook(events, handler, opts?)` | Хук події | +| `api.registerHttpRoute(params)` | HTTP endpoint Gateway | +| `api.registerGatewayMethod(name, handler)` | Метод RPC Gateway | +| `api.registerGatewayDiscoveryService(service)` | Рекламодавець виявлення локального Gateway | +| `api.registerCli(registrar, opts?)` | Підкоманда CLI | +| `api.registerService(service)` | Фонова служба | +| `api.registerInteractiveHandler(registration)` | Інтерактивний обробник | +| `api.registerAgentToolResultMiddleware(...)` | Runtime middleware результатів інструментів | +| `api.registerMemoryPromptSupplement(builder)` | Адитивний розділ prompt поруч із пам’яттю | +| `api.registerMemoryCorpusSupplement(adapter)` | Адитивний корпус пошуку/читання пам’яті | -### Хуки хоста для workflow-Plugin +### Хостові хуки для workflow-плагінів -Хуки хоста — це шви SDK для Plugin, яким потрібно брати участь у життєвому циклі -хоста, а не лише додавати провайдера, канал або інструмент. Це загальні контракти; -Plan Mode може їх використовувати, але так само можуть workflow-процеси затвердження, -шлюзи політик робочого простору, фонові монітори, майстри налаштування та супровідні -Plugin інтерфейсу. +Хостові хуки — це шви SDK для плагінів, яким потрібно брати участь у життєвому +циклі хоста, а не лише додавати провайдера, канал або інструмент. Це загальні +контракти; Plan Mode може їх використовувати, але так само можуть workflow +погоджень, policy gates робочого простору, фонові монітори, майстри +налаштування та супровідні UI-плагіни. -| Метод | Контракт, яким він володіє | -| ------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | -| `api.registerSessionExtension(...)` | Стан сеансу, що належить Plugin, JSON-сумісний і проєктується через сеанси Gateway | -| `api.enqueueNextTurnInjection(...)` | Стійкий exactly-once контекст, ін’єктований у наступний хід агента для одного сеансу | -| `api.registerTrustedToolPolicy(...)` | Політика інструментів вбудованого/довіреного pre-plugin, яка може блокувати або переписувати параметри інструмента | -| `api.registerToolMetadata(...)` | Метадані відображення каталогу інструментів без зміни реалізації інструмента | -| `api.registerCommand(...)` | Обмежені команди Plugin; результати команд можуть задавати `continueAgent: true` | -| `api.registerControlUiDescriptor(...)` | Дескриптори внеску Control UI для поверхонь сеансу, інструмента, запуску або налаштувань | -| `api.registerRuntimeLifecycle(...)` | Зворотні виклики очищення для runtime-ресурсів, що належать Plugin, на шляхах reset/delete/reload | -| `api.registerAgentEventSubscription(...)` | Санітизовані підписки на події для стану workflow і моніторів | -| `api.setRunContext(...)` / `getRunContext(...)` / `clearRunContext(...)` | Тимчасовий стан Plugin на запуск, очищений під час термінального життєвого циклу запуску | -| `api.registerSessionSchedulerJob(...)` | Записи завдань планувальника сеансів, що належать Plugin, із детермінованим очищенням | +| Метод | Контракт, яким він володіє | +| ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- | +| `api.registerSessionExtension(...)` | Стан сесії, що належить плагіну, сумісний із JSON і проєктується через сесії Gateway | +| `api.enqueueNextTurnInjection(...)` | Стійкий рівно-один-раз контекст, ін’єктований у наступний хід агента для однієї сесії | +| `api.registerTrustedToolPolicy(...)` | Політика інструментів вбудованого/довіреного pre-plugin, яка може блокувати або переписувати параметри інструменту | +| `api.registerToolMetadata(...)` | Метадані відображення каталогу інструментів без зміни реалізації інструменту | +| `api.registerCommand(...)` | Обмежені за областю команди плагінів; результати команд можуть задавати `continueAgent: true`; нативні команди Discord підтримують `descriptionLocalizations` | +| `api.registerControlUiDescriptor(...)` | Дескриптори внеску Control UI для поверхонь сесії, інструменту, запуску або налаштувань | +| `api.registerRuntimeLifecycle(...)` | Зворотні виклики очищення для runtime-ресурсів, що належать плагіну, на шляхах reset/delete/reload | +| `api.registerAgentEventSubscription(...)` | Санітизовані підписки на події для стану workflow та моніторів | +| `api.setRunContext(...)` / `getRunContext(...)` / `clearRunContext(...)` | Чернетковий стан плагіна для окремого запуску, очищений під час термінального життєвого циклу запуску | +| `api.registerSessionSchedulerJob(...)` | Записи завдань планувальника сесій, що належать плагіну, з детермінованим очищенням | Контракти навмисно розділяють повноваження: -- Зовнішні Plugin можуть володіти розширеннями сеансів, дескрипторами UI, командами, метаданими інструментів, ін’єкціями наступного ходу та звичайними хуками. -- Довірені політики інструментів запускаються перед звичайними хуками `before_tool_call` і доступні лише для вбудованих, оскільки беруть участь у політиці безпеки хоста. -- Зарезервоване володіння командами доступне лише для вбудованих. Зовнішні Plugin мають використовувати власні назви команд або псевдоніми. -- `allowPromptInjection=false` вимикає хуки, що змінюють промпт, зокрема - `agent_turn_prepare`, `before_prompt_build`, `heartbeat_prompt_contribution`, - поля промпта зі застарілого `before_agent_start` і - `enqueueNextTurnInjection`. +- Зовнішні плагіни можуть володіти розширеннями сесій, дескрипторами UI, командами, метаданими інструментів, ін’єкціями наступного ходу та звичайними хуками. +- Довірені політики інструментів виконуються перед звичайними хуками `before_tool_call` і доступні лише вбудованим плагінам, бо вони беруть участь у політиці безпеки хоста. +- Зарезервоване володіння командами доступне лише вбудованим плагінам. Зовнішні плагіни мають використовувати власні назви команд або псевдоніми. +- `allowPromptInjection=false` вимикає хуки, що змінюють prompt, включно з `agent_turn_prepare`, `before_prompt_build`, `heartbeat_prompt_contribution`, полями prompt із застарілого `before_agent_start` та `enqueueNextTurnInjection`. -Приклади споживачів поза Plan: +Приклади споживачів, не пов’язаних із Plan: -| Архетип Plugin | Використані хуки | -| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| Workflow затвердження | Розширення сеансу, продовження команди, ін’єкція наступного ходу, дескриптор UI | -| Шлюз політики бюджету/робочого простору | Довірена політика інструментів, метадані інструментів, проєкція сеансу | -| Фоновий монітор життєвого циклу | Очищення життєвого циклу runtime, підписка на події агента, володіння/очищення планувальника сеансів, внесок heartbeat-промпта, дескриптор UI | -| Майстер налаштування або onboarding | Розширення сеансу, обмежені команди, дескриптор Control UI | +| Архетип плагіна | Використані хуки | +| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| Workflow погодження | Розширення сесії, продовження команди, ін’єкція наступного ходу, дескриптор UI | +| Policy gate бюджету/робочого простору | Довірена політика інструментів, метадані інструментів, проєкція сесії | +| Фоновий монітор життєвого циклу | Очищення runtime-життєвого циклу, підписка на події агента, володіння/очищення планувальника сесій, внесок heartbeat prompt, дескриптор UI | +| Майстер налаштування або onboarding | Розширення сесії, scoped-команди, дескриптор Control UI | - Зарезервовані core admin простори назв (`config.*`, `exec.approvals.*`, `wizard.*`, - `update.*`) завжди залишаються `operator.admin`, навіть якщо Plugin намагається - призначити вужчу область методу Gateway. Надавайте перевагу префіксам, специфічним - для Plugin, для методів, що належать Plugin. + Зарезервовані простори імен адміністрування ядра (`config.*`, + `exec.approvals.*`, `wizard.*`, `update.*`) завжди залишаються + `operator.admin`, навіть якщо плагін намагається призначити вужчу область + методу gateway. Віддавайте перевагу префіксам, специфічним для плагіна, для + методів, що належать плагіну. - - Вбудовані Plugin можуть використовувати `api.registerAgentToolResultMiddleware(...)`, коли - їм потрібно переписати результат інструмента після виконання й до того, як runtime + + Вбудовані плагіни можуть використовувати `api.registerAgentToolResultMiddleware(...)`, коли + їм потрібно переписати результат інструменту після виконання і до того, як runtime передасть цей результат назад у модель. Це довірений runtime-нейтральний шов для асинхронних редукторів виводу, таких як tokenjuice. -Вбудовані Plugin мають оголошувати `contracts.agentToolResultMiddleware` для кожного -цільового runtime, наприклад `["pi", "codex"]`. Зовнішні Plugin -не можуть реєструвати цей посередник; залишайте звичайні хуки Plugin OpenClaw для роботи, -яка не потребує pre-model таймінгу результатів інструментів. Старий шлях реєстрації -вбудованої фабрики розширень лише для Pi було вилучено. +Вбудовані плагіни мають оголошувати `contracts.agentToolResultMiddleware` для +кожного цільового runtime, наприклад `["pi", "codex"]`. Зовнішні плагіни +не можуть реєструвати цей middleware; залишайте звичайні хуки плагінів OpenClaw для роботи, +якій не потрібен timing результатів інструментів перед моделлю. Старий шлях +реєстрації вбудованої фабрики розширень лише для Pi було вилучено. ### Реєстрація виявлення Gateway -`api.registerGatewayDiscoveryService(...)` дає Plugin змогу рекламувати активний -Gateway у локальному транспорті виявлення, такому як mDNS/Bonjour. OpenClaw викликає -службу під час запуску Gateway, коли локальне виявлення ввімкнено, передає поточні -порти Gateway і несекретні TXT-підказки, а також викликає повернений обробник -`stop` під час завершення роботи Gateway. +`api.registerGatewayDiscoveryService(...)` дає плагіну змогу оголошувати активний +Gateway у локальному транспорті виявлення, як-от mDNS/Bonjour. OpenClaw викликає +службу під час запуску Gateway, коли локальне виявлення ввімкнено, передає +поточні порти Gateway і несекретні підказки TXT, а під час завершення роботи +Gateway викликає повернений обробник `stop`. ```typescript api.registerGatewayDiscoveryService({ @@ -211,9 +214,9 @@ api.registerGatewayDiscoveryService({ }); ``` -Plugin-и виявлення Gateway не повинні розглядати рекламовані значення TXT як секрети або -автентифікацію. Виявлення є підказкою для маршрутизації; автентифікація Gateway і закріплення TLS усе ще -відповідають за довіру. +Плагіни виявлення Gateway не повинні вважати оголошені значення TXT секретами чи +автентифікацією. Виявлення — це підказка для маршрутизації; автентифікація +Gateway і прив’язування TLS усе ще відповідають за довіру. ### Метадані реєстрації CLI @@ -221,11 +224,11 @@ Plugin-и виявлення Gateway не повинні розглядати р - `commands`: явні корені команд, якими володіє реєстратор - `descriptors`: дескриптори команд під час розбору, що використовуються для довідки кореневого CLI, - маршрутизації та ледачої реєстрації CLI Plugin-а + маршрутизації та лінивої реєстрації CLI плагіна -Якщо ви хочете, щоб команда Plugin-а залишалася ліниво завантажуваною у звичайному шляху кореневого CLI, -надайте `descriptors`, які охоплюють кожен корінь команди верхнього рівня, відкритий цим -реєстратором. +Якщо ви хочете, щоб команда плагіна лишалася ліниво завантажуваною у звичайному +шляху кореневого CLI, надайте `descriptors`, які охоплюють кожен корінь команди +верхнього рівня, відкритий цим реєстратором. ```typescript api.registerCli( @@ -245,98 +248,100 @@ api.registerCli( ); ``` -Використовуйте лише `commands`, тільки коли вам не потрібна ледача реєстрація кореневого CLI. -Цей eager-шлях сумісності залишається підтримуваним, але він не встановлює -заповнювачі на основі дескрипторів для ледачого завантаження під час розбору. +Використовуйте лише `commands` тільки тоді, коли вам не потрібна лінива +реєстрація кореневого CLI. Цей нетерплячий шлях сумісності й надалі +підтримується, але він не встановлює заповнювачі на основі дескрипторів для +лінивого завантаження під час розбору. ### Реєстрація бекенда CLI -`api.registerCliBackend(...)` дає Plugin-у змогу володіти типовою конфігурацією для локального -бекенда AI CLI, такого як `codex-cli`. +`api.registerCliBackend(...)` дає плагіну змогу володіти типовою конфігурацією +для локального бекенда AI CLI, як-от `codex-cli`. - `id` бекенда стає префіксом провайдера в посиланнях на моделі, як-от `codex-cli/gpt-5`. - `config` бекенда використовує ту саму форму, що й `agents.defaults.cliBackends.`. -- Конфігурація користувача все одно має пріоритет. OpenClaw зливає `agents.defaults.cliBackends.` поверх - типових значень Plugin-а перед запуском CLI. -- Використовуйте `normalizeConfig`, коли бекенду потрібні переписування сумісності після злиття +- Конфігурація користувача все одно має пріоритет. OpenClaw об’єднує `agents.defaults.cliBackends.` поверх + типового значення плагіна перед запуском CLI. +- Використовуйте `normalizeConfig`, коли бекенду потрібні переписування сумісності після об’єднання (наприклад, нормалізація старих форм прапорців). ### Ексклюзивні слоти -| Метод | Що він реєструє | -| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `api.registerContextEngine(id, factory)` | Рушій контексту (одночасно активний лише один). Callback `assemble()` отримує `availableTools` і `citationsMode`, щоб рушій міг адаптувати доповнення до промпта. | -| `api.registerMemoryCapability(capability)` | Уніфікована можливість пам’яті | -| `api.registerMemoryPromptSection(builder)` | Побудовник секції промпта пам’яті | -| `api.registerMemoryFlushPlan(resolver)` | Резолвер плану скидання пам’яті | -| `api.registerMemoryRuntime(runtime)` | Адаптер runtime пам’яті | +| Метод | Що реєструє | +| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `api.registerContextEngine(id, factory)` | Двигун контексту (один активний одночасно). Зворотний виклик `assemble()` отримує `availableTools` і `citationsMode`, щоб двигун міг адаптувати додатки до промпта. | +| `api.registerMemoryCapability(capability)` | Уніфікована можливість пам’яті | +| `api.registerMemoryPromptSection(builder)` | Побудовник розділу промпта пам’яті | +| `api.registerMemoryFlushPlan(resolver)` | Резолвер плану скидання пам’яті | +| `api.registerMemoryRuntime(runtime)` | Адаптер середовища виконання пам’яті | ### Адаптери вбудовування пам’яті -| Метод | Що він реєструє | -| ---------------------------------------------- | -------------------------------------------- | -| `api.registerMemoryEmbeddingProvider(adapter)` | Адаптер вбудовування пам’яті для активного Plugin-а | +| Метод | Що реєструє | +| ---------------------------------------------- | ----------------------------------------- | +| `api.registerMemoryEmbeddingProvider(adapter)` | Адаптер вбудовування пам’яті для активного плагіна | -- `registerMemoryCapability` є бажаним ексклюзивним API Plugin-а пам’яті. +- `registerMemoryCapability` — бажаний ексклюзивний API плагіна пам’яті. - `registerMemoryCapability` також може відкривати `publicArtifacts.listArtifacts(...)`, - щоб супутні Plugin-и могли споживати експортовані артефакти пам’яті через - `openclaw/plugin-sdk/memory-host-core`, а не звертатися до приватної структури конкретного - Plugin-а пам’яті. + щоб супровідні плагіни могли споживати експортовані артефакти пам’яті через + `openclaw/plugin-sdk/memory-host-core`, а не звертатися до приватної структури + конкретного плагіна пам’яті. - `registerMemoryPromptSection`, `registerMemoryFlushPlan` і - `registerMemoryRuntime` є ексклюзивними API Plugin-а пам’яті з підтримкою сумісності зі спадковими версіями. + `registerMemoryRuntime` — ексклюзивні API плагіна пам’яті зі спадковою сумісністю. - `MemoryFlushPlan.model` може закріпити хід скидання за точним посиланням - `provider/model`, таким як `ollama/qwen3:8b`, без успадкування активного - ланцюга fallback. -- `registerMemoryEmbeddingProvider` дає активному Plugin-у пам’яті змогу зареєструвати один - або кілька id адаптерів вбудовування (наприклад, `openai`, `gemini` або користувацький - id, визначений Plugin-ом). -- Конфігурація користувача, така як `agents.defaults.memorySearch.provider` і - `agents.defaults.memorySearch.fallback`, розв’язується відносно цих зареєстрованих - id адаптерів. + `provider/model`, як-от `ollama/qwen3:8b`, без успадкування активного ланцюжка + резервних варіантів. +- `registerMemoryEmbeddingProvider` дає активному плагіну пам’яті змогу + зареєструвати один або кілька ідентифікаторів адаптерів вбудовування + (наприклад `openai`, `gemini` або власний ідентифікатор, визначений плагіном). +- Конфігурація користувача, як-от `agents.defaults.memorySearch.provider` і + `agents.defaults.memorySearch.fallback`, розв’язується відносно цих + зареєстрованих ідентифікаторів адаптерів. ### Події та життєвий цикл -| Метод | Що він робить | -| -------------------------------------------- | ------------------------------ | +| Метод | Що робить | +| -------------------------------------------- | ------------------------------- | | `api.on(hookName, handler, opts?)` | Типізований хук життєвого циклу | -| `api.onConversationBindingResolved(handler)` | Callback прив’язки розмови | +| `api.onConversationBindingResolved(handler)` | Зворотний виклик прив’язки розмови | -Див. [Хуки Plugin-а](/uk/plugins/hooks) для прикладів, поширених назв хуків і семантики guard. +Див. [хуки плагінів](/uk/plugins/hooks), щоб знайти приклади, поширені назви хуків +і семантику запобіжників. ### Семантика рішень хуків -- `before_tool_call`: повернення `{ block: true }` є термінальним. Щойно будь-який обробник його встановлює, обробники з нижчим пріоритетом пропускаються. -- `before_tool_call`: повернення `{ block: false }` трактується як відсутність рішення (так само, як пропуск `block`), а не як перевизначення. -- `before_install`: повернення `{ block: true }` є термінальним. Щойно будь-який обробник його встановлює, обробники з нижчим пріоритетом пропускаються. -- `before_install`: повернення `{ block: false }` трактується як відсутність рішення (так само, як пропуск `block`), а не як перевизначення. -- `reply_dispatch`: повернення `{ handled: true, ... }` є термінальним. Щойно будь-який обробник заявляє dispatch, обробники з нижчим пріоритетом і типовий шлях dispatch моделі пропускаються. -- `message_sending`: повернення `{ cancel: true }` є термінальним. Щойно будь-який обробник його встановлює, обробники з нижчим пріоритетом пропускаються. -- `message_sending`: повернення `{ cancel: false }` трактується як відсутність рішення (так само, як пропуск `cancel`), а не як перевизначення. -- `message_received`: використовуйте типізоване поле `threadId`, коли вам потрібна маршрутизація вхідних гілок/тем. Зберігайте `metadata` для специфічних для каналу додаткових даних. -- `message_sending`: використовуйте типізовані поля маршрутизації `replyToId` / `threadId` перед fallback до специфічного для каналу `metadata`. +- `before_tool_call`: повернення `{ block: true }` є термінальним. Щойно будь-який обробник встановлює його, обробники з нижчим пріоритетом пропускаються. +- `before_tool_call`: повернення `{ block: false }` розглядається як відсутність рішення (так само, як пропуск `block`), а не як перевизначення. +- `before_install`: повернення `{ block: true }` є термінальним. Щойно будь-який обробник встановлює його, обробники з нижчим пріоритетом пропускаються. +- `before_install`: повернення `{ block: false }` розглядається як відсутність рішення (так само, як пропуск `block`), а не як перевизначення. +- `reply_dispatch`: повернення `{ handled: true, ... }` є термінальним. Щойно будь-який обробник заявляє про обробку відправлення, обробники з нижчим пріоритетом і типовий шлях відправлення моделі пропускаються. +- `message_sending`: повернення `{ cancel: true }` є термінальним. Щойно будь-який обробник встановлює його, обробники з нижчим пріоритетом пропускаються. +- `message_sending`: повернення `{ cancel: false }` розглядається як відсутність рішення (так само, як пропуск `cancel`), а не як перевизначення. +- `message_received`: використовуйте типізоване поле `threadId`, коли вам потрібна маршрутизація вхідної гілки/теми. Залишайте `metadata` для додаткових даних, специфічних для каналу. +- `message_sending`: використовуйте типізовані поля маршрутизації `replyToId` / `threadId`, перш ніж переходити до специфічних для каналу `metadata`. - `gateway_start`: використовуйте `ctx.config`, `ctx.workspaceDir` і `ctx.getCron?.()` для стану запуску, яким володіє Gateway, замість покладання на внутрішні хуки `gateway:startup`. -- `cron_changed`: спостерігайте за змінами життєвого циклу Cron, яким володіє Gateway. Використовуйте `event.job?.state?.nextRunAtMs` і `ctx.getCron?.()` під час синхронізації зовнішніх планувальників пробудження, і залишайте OpenClaw джерелом істини для перевірок строку виконання та виконання. +- `cron_changed`: спостерігайте за змінами життєвого циклу cron, яким володіє Gateway. Використовуйте `event.job?.state?.nextRunAtMs` і `ctx.getCron?.()` під час синхронізації зовнішніх планувальників пробудження, а OpenClaw залишайте джерелом істини для перевірок строків і виконання. ### Поля об’єкта API -| Поле | Тип | Опис | -| ------------------------ | ------------------------- | -------------------------------------------------------------------------------------------------------- | -| `api.id` | `string` | Id Plugin-а | -| `api.name` | `string` | Відображувана назва | -| `api.version` | `string?` | Версія Plugin-а (необов’язково) | -| `api.description` | `string?` | Опис Plugin-а (необов’язково) | -| `api.source` | `string` | Шлях джерела Plugin-а | -| `api.rootDir` | `string?` | Кореневий каталог Plugin-а (необов’язково) | -| `api.config` | `OpenClawConfig` | Поточний знімок конфігурації (активний runtime-знімок у пам’яті, коли доступний) | -| `api.pluginConfig` | `Record` | Конфігурація, специфічна для Plugin-а, з `plugins.entries..config` | -| `api.runtime` | `PluginRuntime` | [Runtime-хелпери](/uk/plugins/sdk-runtime) | -| `api.logger` | `PluginLogger` | Обмежений за областю logger (`debug`, `info`, `warn`, `error`) | -| `api.registrationMode` | `PluginRegistrationMode` | Поточний режим завантаження; `"setup-runtime"` — це легке стартове/setup-вікно перед повним entry point | -| `api.resolvePath(input)` | `(string) => string` | Розв’язати шлях відносно кореня Plugin-а | +| Поле | Тип | Опис | +| ------------------------ | ------------------------- | ------------------------------------------------------------------------------------------- | +| `api.id` | `string` | Ідентифікатор плагіна | +| `api.name` | `string` | Відображувана назва | +| `api.version` | `string?` | Версія плагіна (необов’язково) | +| `api.description` | `string?` | Опис плагіна (необов’язково) | +| `api.source` | `string` | Шлях до джерела плагіна | +| `api.rootDir` | `string?` | Кореневий каталог плагіна (необов’язково) | +| `api.config` | `OpenClawConfig` | Поточний знімок конфігурації (активний знімок середовища виконання в пам’яті, коли доступний) | +| `api.pluginConfig` | `Record` | Конфігурація, специфічна для плагіна, з `plugins.entries..config` | +| `api.runtime` | `PluginRuntime` | [Допоміжні засоби середовища виконання](/uk/plugins/sdk-runtime) | +| `api.logger` | `PluginLogger` | Логер з областю дії (`debug`, `info`, `warn`, `error`) | +| `api.registrationMode` | `PluginRegistrationMode` | Поточний режим завантаження; `"setup-runtime"` — це легке вікно запуску/налаштування перед повним входом | +| `api.resolvePath(input)` | `(string) => string` | Розв’язати шлях відносно кореня плагіна | -## Конвенція внутрішніх модулів +## Внутрішня домовленість щодо модулів -У межах вашого Plugin-а використовуйте локальні barrel-файли для внутрішніх імпортів: +У своєму плагіні використовуйте локальні barrel-файли для внутрішніх імпортів: ``` my-plugin/ @@ -347,56 +352,57 @@ my-plugin/ ``` - Ніколи не імпортуйте власний Plugin через `openclaw/plugin-sdk/` - з production-коду. Спрямовуйте внутрішні імпорти через `./api.ts` або - `./runtime-api.ts`. Шлях SDK є лише зовнішнім контрактом. + Ніколи не імпортуйте власний плагін через `openclaw/plugin-sdk/` + з виробничого коду. Спрямовуйте внутрішні імпорти через `./api.ts` або + `./runtime-api.ts`. Шлях SDK — це лише зовнішній контракт. -Публічні поверхні bundled Plugin-а, завантажені через фасад (`api.ts`, `runtime-api.ts`, -`index.ts`, `setup-entry.ts` і подібні публічні entry-файли), віддають перевагу -активному runtime-знімку конфігурації, коли OpenClaw уже запущено. Якщо runtime-знімка -ще немає, вони fallback до розв’язаної конфігурації на диску. -Фасади packaged bundled Plugin-а слід завантажувати через фасадні завантажувачі Plugin-ів OpenClaw; -прямі імпорти з `dist/extensions/...` обходять маніфест -і runtime-перевірки sidecar, які packaged-інсталяції використовують для коду, яким володіє Plugin. +Публічні поверхні вбудованого плагіна, завантажені через фасад (`api.ts`, `runtime-api.ts`, +`index.ts`, `setup-entry.ts` і подібні публічні вхідні файли), віддають перевагу +активному знімку конфігурації середовища виконання, коли OpenClaw уже працює. Якщо знімка +середовища виконання ще немає, вони повертаються до розв’язаної конфігурації на диску. +Фасади упакованих вбудованих плагінів слід завантажувати через фасадні завантажувачі +плагінів OpenClaw; прямі імпорти з `dist/extensions/...` обходять маніфест +і перевірки бічного середовища виконання, які упаковані встановлення використовують +для коду, яким володіє плагін. -Provider Plugin-и можуть відкривати вузький barrel контракту, локальний для Plugin-а, коли -хелпер навмисно є специфічним для провайдера і ще не належить до загального підшляху SDK. -Bundled-приклади: +Плагіни провайдерів можуть відкривати вузький локальний для плагіна контрактний +barrel-файл, коли допоміжний засіб навмисно специфічний для провайдера й поки що +не належить до загального підшляху SDK. Вбудовані приклади: -- **Anthropic**: публічна межа `api.ts` / `contract-api.ts` для Claude - beta-header і stream-хелперів `service_tier`. -- **`@openclaw/openai-provider`**: `api.ts` експортує побудовники провайдера, - хелпери типових моделей і побудовники realtime-провайдера. +- **Anthropic**: публічний шов `api.ts` / `contract-api.ts` для Claude + beta-header і потокових допоміжних засобів `service_tier`. +- **`@openclaw/openai-provider`**: `api.ts` експортує побудовники провайдерів, + допоміжні засоби типових моделей і побудовники провайдерів реального часу. - **`@openclaw/openrouter-provider`**: `api.ts` експортує побудовник провайдера - плюс хелпери onboarding/config. + разом із допоміжними засобами онбордингу/конфігурації. - Production-код Extension також має уникати імпортів `openclaw/plugin-sdk/`. - Якщо хелпер справді спільний, піднесіть його до нейтрального підшляху SDK, - такого як `openclaw/plugin-sdk/speech`, `.../provider-model-shared` або інша - поверхня, орієнтована на можливості, замість зв’язування двох Plugin-ів між собою. + Виробничий код розширення також має уникати імпортів `openclaw/plugin-sdk/`. + Якщо допоміжний засіб справді спільний, просуньте його до нейтрального підшляху SDK, + як-от `openclaw/plugin-sdk/speech`, `.../provider-model-shared` або іншої + поверхні, орієнтованої на можливості, замість зв’язування двох плагінів між собою. ## Пов’язане - - Опції `definePluginEntry` і `defineChannelPluginEntry`. + + Параметри `definePluginEntry` і `defineChannelPluginEntry`. - + Повний довідник простору імен `api.runtime`. - + Пакування, маніфести та схеми конфігурації. - Тестові утиліти та правила lint. + Тестові утиліти та правила лінтингу. Міграція із застарілих поверхонь. - + Глибока архітектура та модель можливостей. diff --git a/docs/uk/plugins/sdk-setup.md b/docs/uk/plugins/sdk-setup.md index 4026c4f24..32e444203 100644 --- a/docs/uk/plugins/sdk-setup.md +++ b/docs/uk/plugins/sdk-setup.md @@ -1,29 +1,29 @@ --- read_when: - - Ви додаєте майстер налаштування до Plugin - - Потрібно зрозуміти відмінності між setup-entry.ts і index.ts + - Ви додаєте майстер налаштування для Plugin + - Потрібно зрозуміти setup-entry.ts порівняно з index.ts - Ви визначаєте схеми конфігурації Plugin або метадані openclaw у package.json sidebarTitle: Setup and config summary: Майстри налаштування, setup-entry.ts, схеми конфігурації та метадані package.json title: Налаштування та конфігурація Plugin x-i18n: - generated_at: "2026-05-01T20:40:50Z" + generated_at: "2026-05-02T02:49:26Z" model: gpt-5.5 provider: openai - source_hash: d61cbbeb3e9e303d098fcddf4ba101ff6717c232d5db4b36c28008c84bd32be8 + source_hash: 322cf8988da686d5bf7577f9825f6f8decb738f91563e4022c14bf16dca22824 source_path: plugins/sdk-setup.md workflow: 16 --- -Довідник із пакування плагінів (метадані `package.json`), маніфестів (`openclaw.plugin.json`), записів налаштування та схем конфігурації. +Довідка з пакування Plugin (метадані `package.json`), маніфестів (`openclaw.plugin.json`), записів налаштування та схем конфігурації. -**Шукаєте покроковий посібник?** Практичні посібники охоплюють пакування в контексті: [плагіни каналів](/uk/plugins/sdk-channel-plugins#step-1-package-and-manifest) і [плагіни провайдерів](/uk/plugins/sdk-provider-plugins#step-1-package-and-manifest). +**Шукаєте покроковий посібник?** Практичні посібники розглядають пакування в контексті: [Plugin каналів](/uk/plugins/sdk-channel-plugins#step-1-package-and-manifest) і [Plugin провайдерів](/uk/plugins/sdk-provider-plugins#step-1-package-and-manifest). ## Метадані пакета -Ваш `package.json` потребує поля `openclaw`, яке повідомляє системі плагінів, що надає ваш плагін: +Ваш `package.json` потребує поля `openclaw`, яке повідомляє системі Plugin, що надає ваш Plugin: @@ -67,7 +67,7 @@ x-i18n: -Якщо ви публікуєте плагін зовнішньо в ClawHub, ці поля `compat` і `build` обов’язкові. Канонічні фрагменти публікації розташовані в `docs/snippets/plugin-publish/`. +Якщо ви публікуєте Plugin зовнішньо на ClawHub, ці поля `compat` і `build` є обов’язковими. Канонічні фрагменти для публікації розташовані в `docs/snippets/plugin-publish/`. ### Поля `openclaw` @@ -76,45 +76,45 @@ x-i18n: Файли точок входу (відносно кореня пакета). - Легкий запис лише для налаштування (необов’язково). + Легка точка входу лише для налаштування (необов’язково). - Метадані каталогу каналів для поверхонь налаштування, вибору, швидкого старту та статусу. + Метадані каталогу каналів для поверхонь налаштування, вибору, швидкого старту та стану. - Ідентифікатори провайдерів, зареєстровані цим плагіном. + Ідентифікатори провайдерів, зареєстровані цим Plugin. Підказки встановлення: `npmSpec`, `localPath`, `defaultChoice`, `minHostVersion`, `expectedIntegrity`, `allowInvalidConfigRecovery`. - Прапорці поведінки запуску. + Прапорці поведінки під час запуску. ### `openclaw.channel` -`openclaw.channel` — це легкі метадані пакета для виявлення каналів і поверхонь налаштування до завантаження середовища виконання. +`openclaw.channel` — це легкі метадані пакета для виявлення каналів і поверхонь налаштування до завантаження runtime. | Поле | Тип | Що це означає | | -------------------------------------- | ---------- | ----------------------------------------------------------------------------- | | `id` | `string` | Канонічний ідентифікатор каналу. | | `label` | `string` | Основна мітка каналу. | | `selectionLabel` | `string` | Мітка вибору/налаштування, коли вона має відрізнятися від `label`. | -| `detailLabel` | `string` | Вторинна детальна мітка для розширених каталогів каналів і поверхонь статусу. | -| `docsPath` | `string` | Шлях до документації для посилань налаштування та вибору. | -| `docsLabel` | `string` | Перевизначення мітки для посилань на документацію, коли вона має відрізнятися від ідентифікатора каналу. | -| `blurb` | `string` | Короткий опис для онбордингу/каталогу. | +| `detailLabel` | `string` | Вторинна докладна мітка для розширених каталогів каналів і поверхонь стану. | +| `docsPath` | `string` | Шлях документації для посилань налаштування й вибору. | +| `docsLabel` | `string` | Перевизначає мітку, використану для посилань на документацію, коли вона має відрізнятися від ідентифікатора каналу. | +| `blurb` | `string` | Короткий опис для onboarding/каталогу. | | `order` | `number` | Порядок сортування в каталогах каналів. | | `aliases` | `string[]` | Додаткові псевдоніми пошуку для вибору каналу. | -| `preferOver` | `string[]` | Ідентифікатори плагінів/каналів із нижчим пріоритетом, які цей канал має випереджати. | -| `systemImage` | `string` | Необов’язкова назва піктограми/системного зображення для UI-каталогів каналів. | -| `selectionDocsPrefix` | `string` | Текст-префікс перед посиланнями на документацію в поверхнях вибору. | -| `selectionDocsOmitLabel` | `boolean` | Показувати шлях документації напряму замість посилання на документацію з міткою в тексті вибору. | +| `preferOver` | `string[]` | Ідентифікатори Plugin/каналів із нижчим пріоритетом, які цей канал має випереджати. | +| `systemImage` | `string` | Необов’язкова назва іконки/system-image для UI-каталогів каналів. | +| `selectionDocsPrefix` | `string` | Текст префікса перед посиланнями на документацію в поверхнях вибору. | +| `selectionDocsOmitLabel` | `boolean` | Показувати шлях документації напряму замість підписаного посилання на документацію в тексті вибору. | | `selectionExtras` | `string[]` | Додаткові короткі рядки, додані до тексту вибору. | -| `markdownCapable` | `boolean` | Позначає канал як придатний до markdown для рішень щодо вихідного форматування. | -| `exposure` | `object` | Елементи керування видимістю каналу для налаштування, списків налаштованих каналів і поверхонь документації. | -| `quickstartAllowFrom` | `boolean` | Додає цей канал до стандартного потоку швидкого старту `allowFrom`. | -| `forceAccountBinding` | `boolean` | Вимагає явного прив’язування облікового запису, навіть коли існує лише один обліковий запис. | +| `markdownCapable` | `boolean` | Позначає канал як здатний працювати з Markdown для рішень щодо вихідного форматування. | +| `exposure` | `object` | Керування видимістю каналу для налаштування, списків налаштованого та поверхонь документації. | +| `quickstartAllowFrom` | `boolean` | Додає цей канал до стандартного потоку налаштування швидкого старту `allowFrom`. | +| `forceAccountBinding` | `boolean` | Вимагати явну прив’язку облікового запису, навіть коли існує лише один обліковий запис. | | `preferSessionLookupForAnnounceTarget` | `boolean` | Надавати перевагу пошуку сеансу під час визначення цілей оголошень для цього каналу. | Приклад: @@ -149,8 +149,8 @@ x-i18n: `exposure` підтримує: -- `configured`: включати канал у поверхні списків налаштованих каналів/статусу -- `setup`: включати канал в інтерактивні засоби вибору налаштування/конфігурації +- `configured`: включати канал у поверхні списків налаштованого/стану +- `setup`: включати канал в інтерактивні засоби вибору налаштування/конфігурування - `docs`: позначати канал як публічний у поверхнях документації/навігації @@ -161,24 +161,24 @@ x-i18n: `openclaw.install` — це метадані пакета, а не метадані маніфесту. -| Поле | Тип | Що це означає | -| ---------------------------- | -------------------- | -------------------------------------------------------------------------------- | -| `npmSpec` | `string` | Канонічна специфікація npm для потоків встановлення/оновлення. | -| `localPath` | `string` | Локальний шлях розробки або шлях до вбудованого встановлення. | -| `defaultChoice` | `"npm"` \| `"local"` | Бажане джерело встановлення, коли доступні обидва. | -| `minHostVersion` | `string` | Мінімальна підтримувана версія OpenClaw у формі `>=x.y.z`. | +| Поле | Тип | Що це означає | +| ---------------------------- | -------------------- | --------------------------------------------------------------------------------- | +| `npmSpec` | `string` | Канонічна npm-специфікація для потоків встановлення/оновлення. | +| `localPath` | `string` | Локальний шлях розробки або шлях встановлення в комплекті. | +| `defaultChoice` | `"npm"` \| `"local"` | Бажане джерело встановлення, коли доступні обидва. | +| `minHostVersion` | `string` | Мінімальна підтримувана версія OpenClaw у формі `>=x.y.z` або `>=x.y.z-prerelease`. | | `expectedIntegrity` | `string` | Очікуваний рядок цілісності npm dist, зазвичай `sha512-...`, для закріплених встановлень. | -| `allowInvalidConfigRecovery` | `boolean` | Дозволяє потокам перевстановлення вбудованих плагінів відновлюватися після конкретних помилок застарілої конфігурації. | +| `allowInvalidConfigRecovery` | `boolean` | Дозволяє потокам перевстановлення Plugin у комплекті відновлюватися після конкретних збоїв через застарілу конфігурацію. | - Інтерактивний онбординг також використовує `openclaw.install` для поверхонь встановлення на вимогу. Якщо ваш плагін показує варіанти автентифікації провайдера або метадані налаштування/каталогу каналу до завантаження середовища виконання, онбординг може показати цей вибір, запропонувати npm або локальне встановлення, встановити або ввімкнути плагін, а потім продовжити вибраний потік. Варіанти онбордингу npm потребують довірених метаданих каталогу з реєстровим `npmSpec`; точні версії та `expectedIntegrity` є необов’язковими закріпленнями. Якщо `expectedIntegrity` присутній, потоки встановлення/оновлення примусово його застосовують. Зберігайте метадані «що показувати» в `openclaw.plugin.json`, а метадані «як це встановити» — у `package.json`. + Інтерактивний onboarding також використовує `openclaw.install` для поверхонь встановлення на вимогу. Якщо ваш Plugin надає вибір автентифікації провайдера або метадані налаштування/каталогу каналу до завантаження runtime, onboarding може показати цей вибір, запропонувати npm або локальне встановлення, встановити чи ввімкнути Plugin, а потім продовжити вибраний потік. Варіанти npm для onboarding потребують довірених метаданих каталогу з реєстровим `npmSpec`; точні версії та `expectedIntegrity` є необов’язковими закріпленнями. Якщо `expectedIntegrity` присутній, потоки встановлення/оновлення забезпечують його дотримання. Зберігайте метадані "що показувати" в `openclaw.plugin.json`, а метадані "як це встановити" — у `package.json`. - Якщо `minHostVersion` задано, його примусово перевіряють як встановлення, так і завантаження реєстру маніфестів. Старіші хости пропускають плагін; недійсні рядки версій відхиляються. + Якщо `minHostVersion` задано, і встановлення, і завантаження реєстру маніфестів для невбудованих Plugin забезпечують його дотримання. Старіші хости пропускають зовнішні Plugin; недійсні рядки версій відхиляються. Вбудовані вихідні Plugin вважаються версіонованими разом із checkout хоста. - Для закріплених встановлень npm зберігайте точну версію в `npmSpec` і додайте очікувану цілісність артефакта: + Для закріплених npm-встановлень зберігайте точну версію в `npmSpec` і додайте очікувану цілісність артефакта: ```json { @@ -194,13 +194,13 @@ x-i18n: - `allowInvalidConfigRecovery` не є загальним обходом для пошкоджених конфігурацій. Він призначений лише для вузького відновлення вбудованих плагінів, щоб перевстановлення/налаштування могло виправити відомі залишки оновлення, як-от відсутній шлях до вбудованого плагіна або застарілий запис `channels.` для того самого плагіна. Якщо конфігурація пошкоджена з непов’язаних причин, встановлення все одно завершується закритою відмовою й повідомляє оператору запустити `openclaw doctor --fix`. + `allowInvalidConfigRecovery` не є загальним обходом для зламаних конфігурацій. Він призначений лише для вузького відновлення Plugin у комплекті, щоб перевстановлення/налаштування могло виправити відомі залишки після оновлення, як-от відсутній шлях Plugin у комплекті або застарілий запис `channels.` для того самого Plugin. Якщо конфігурація зламана з не пов’язаних причин, встановлення все одно безпечно завершується помилкою й повідомляє оператору запустити `openclaw doctor --fix`. ### Відкладене повне завантаження -Плагіни каналів можуть увімкнути відкладене завантаження за допомогою: +Plugin каналів можуть увімкнути відкладене завантаження за допомогою: ```json { @@ -214,17 +214,17 @@ x-i18n: } ``` -Коли це ввімкнено, OpenClaw завантажує лише `setupEntry` під час етапу запуску до прослуховування, навіть для вже налаштованих каналів. Повний запис завантажується після того, як gateway починає прослуховування. +Коли це ввімкнено, OpenClaw завантажує лише `setupEntry` під час фази запуску до початку прослуховування, навіть для вже налаштованих каналів. Повна точка входу завантажується після того, як Gateway починає прослуховування. -Вмикайте відкладене завантаження лише тоді, коли ваш `setupEntry` реєструє все, що потрібно gateway до початку прослуховування (реєстрація каналу, HTTP-маршрути, методи gateway). Якщо повний запис володіє потрібними можливостями запуску, залиште поведінку за замовчуванням. +Вмикайте відкладене завантаження лише тоді, коли ваш `setupEntry` реєструє все, що потрібно Gateway до початку прослуховування (реєстрація каналу, HTTP-маршрути, методи gateway). Якщо повна точка входу володіє потрібними можливостями запуску, залиште поведінку за замовчуванням. -Якщо ваш запис налаштування/повний запис реєструє RPC-методи gateway, тримайте їх на префіксі, специфічному для плагіна. Зарезервовані основні простори імен адміністрування (`config.*`, `exec.approvals.*`, `wizard.*`, `update.*`) залишаються власністю core і завжди розв’язуються в `operator.admin`. +Якщо ваша точка входу setup/full реєструє gateway RPC-методи, тримайте їх на префіксі, специфічному для Plugin. Зарезервовані основні простори імен адміністратора (`config.*`, `exec.approvals.*`, `wizard.*`, `update.*`) залишаються у власності core і завжди вирішуються до `operator.admin`. ## Маніфест Plugin -Кожен нативний плагін має постачати `openclaw.plugin.json` у корені пакета. OpenClaw використовує це для перевірки конфігурації без виконання коду плагіна. +Кожен нативний Plugin має постачати `openclaw.plugin.json` у корені пакета. OpenClaw використовує його для перевірки конфігурації без виконання коду Plugin. ```json { @@ -244,7 +244,7 @@ x-i18n: } ``` -Для плагінів каналів додайте `kind` і `channels`: +Для Plugin каналів додайте `kind` і `channels`: ```json { @@ -259,7 +259,7 @@ x-i18n: } ``` -Навіть плагіни без конфігурації мають постачати схему. Порожня схема є дійсною: +Навіть Plugin без конфігурації мають постачати схему. Порожня схема є дійсною: ```json { @@ -271,11 +271,11 @@ x-i18n: } ``` -Див. [маніфест Plugin](/uk/plugins/manifest) для повного довідника схеми. +Див. [Маніфест Plugin](/uk/plugins/manifest) для повної довідки зі схеми. -## Публікація в ClawHub +## Публікація ClawHub -Для пакетів плагінів використовуйте команду ClawHub, специфічну для пакета: +Для пакетів Plugin використовуйте специфічну для пакетів команду ClawHub: ```bash clawhub package publish your-org/your-plugin --dry-run @@ -283,12 +283,12 @@ clawhub package publish your-org/your-plugin ``` -Застарілий псевдонім публікації лише для skill призначений для skills. Пакети плагінів завжди мають використовувати `clawhub package publish`. +Застарілий псевдонім публікації лише для skills призначений для skills. Пакети Plugin мають завжди використовувати `clawhub package publish`. ## Запис налаштування -Файл `setup-entry.ts` — це легка альтернатива `index.ts`, яку OpenClaw завантажує, коли йому потрібні лише поверхні налаштування (онбординг, відновлення конфігурації, перевірка вимкненого каналу). +Файл `setup-entry.ts` є легкою альтернативою `index.ts`, яку OpenClaw завантажує, коли потрібні лише поверхні налаштування (онбординг, відновлення конфігурації, перевірка вимкненого каналу). ```typescript // setup-entry.ts @@ -298,9 +298,9 @@ import { myChannelPlugin } from "./src/channel.js"; export default defineSetupPluginEntry(myChannelPlugin); ``` -Це запобігає завантаженню важкого runtime-коду (криптографічних бібліотек, реєстрацій CLI, фонових сервісів) під час потоків налаштування. +Це уникає завантаження важкого коду runtime (криптографічних бібліотек, реєстрацій CLI, фонових сервісів) під час потоків налаштування. -Вбудовані канали робочого простору, які зберігають безпечні для налаштування експорти в допоміжних модулях, можуть використовувати `defineBundledChannelSetupEntry(...)` з `openclaw/plugin-sdk/channel-entry-contract` замість `defineSetupPluginEntry(...)`. Цей вбудований контракт також підтримує необов'язковий експорт `runtime`, щоб runtime-зв'язування під час налаштування залишалося легким і явним. +Вбудовані канали робочої області, які тримають безпечні для налаштування експорти в супровідних модулях, можуть використовувати `defineBundledChannelSetupEntry(...)` з `openclaw/plugin-sdk/channel-entry-contract` замість `defineSetupPluginEntry(...)`. Цей вбудований контракт також підтримує необов’язковий експорт `runtime`, щоб runtime-зв’язування під час налаштування залишалося легким і явним. @@ -309,49 +309,49 @@ export default defineSetupPluginEntry(myChannelPlugin); - Увімкнено відкладене завантаження (`deferConfiguredChannelFullLoadUntilAfterListen`). - - - Об'єкт Plugin каналу (через `defineSetupPluginEntry`). - - Будь-які HTTP-маршрути, потрібні до прослуховування Gateway. + + - Об’єкт Plugin каналу (через `defineSetupPluginEntry`). + - Будь-які HTTP-маршрути, потрібні до запуску прослуховування Gateway. - Будь-які методи Gateway, потрібні під час запуску. - Ці стартові методи Gateway усе одно мають уникати зарезервованих адміністративних просторів імен ядра, таких як `config.*` або `update.*`. + Ці стартові методи Gateway все одно мають уникати зарезервованих core-просторів імен адміністрування, як-от `config.*` або `update.*`. - - - Реєстрації CLI. - - Фонові сервіси. - - Важкі runtime-імпорти (криптографія, SDK). - - Методи Gateway, потрібні лише після запуску. + + - Реєстрацій CLI. + - Фонових сервісів. + - Важких імпортів runtime (криптографія, SDK). + - Методів Gateway, потрібних лише після запуску. -### Вузькі імпорти помічників налаштування +### Вузькі імпорти допоміжних засобів налаштування -Для гарячих шляхів, призначених лише для налаштування, надавайте перевагу вузьким швам помічників налаштування замість ширшої парасольки `plugin-sdk/setup`, коли вам потрібна лише частина поверхні налаштування: +Для гарячих шляхів лише налаштування віддавайте перевагу вузьким швам допоміжних засобів налаштування замість ширшої обгортки `plugin-sdk/setup`, коли вам потрібна лише частина поверхні налаштування: | Шлях імпорту | Для чого використовувати | Ключові експорти | | ---------------------------------- | ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `plugin-sdk/setup-runtime` | runtime-помічники часу налаштування, доступні в `setupEntry` / відкладеному запуску каналу | `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` | -| `plugin-sdk/setup-adapter-runtime` | адаптери налаштування облікових записів з урахуванням середовища | `createEnvPatchedAccountSetupAdapter` | -| `plugin-sdk/setup-tools` | помічники CLI/archive/docs для налаштування/встановлення | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` | +| `plugin-sdk/setup-runtime` | runtime-допоміжні засоби під час налаштування, які залишаються доступними в `setupEntry` / відкладеному запуску каналу | `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` | +| `plugin-sdk/setup-adapter-runtime` | адаптери налаштування облікового запису з урахуванням середовища | `createEnvPatchedAccountSetupAdapter` | +| `plugin-sdk/setup-tools` | допоміжні засоби CLI/архівів/документації для налаштування/встановлення | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` | -Використовуйте ширший шов `plugin-sdk/setup`, коли потрібен повний спільний інструментарій налаштування, зокрема помічники config-patch, як-от `moveSingleAccountChannelSectionToDefaultAccount(...)`. +Використовуйте ширший шов `plugin-sdk/setup`, коли вам потрібен повний спільний інструментарій налаштування, зокрема допоміжні засоби патчів конфігурації, як-от `moveSingleAccountChannelSectionToDefaultAccount(...)`. -Адаптери патчів налаштування залишаються безпечними для гарячого шляху під час імпорту. Їхній вбудований пошук поверхні контракту просування одного облікового запису є лінивим, тож імпорт `plugin-sdk/setup-runtime` не завантажує заздалегідь виявлення вбудованої поверхні контракту до фактичного використання адаптера. +Адаптери патчів налаштування залишаються безпечними для імпорту на гарячому шляху. Їхній пошук поверхні контракту вбудованого підвищення одного облікового запису є лінивим, тож імпорт `plugin-sdk/setup-runtime` не завантажує заздалегідь виявлення вбудованої поверхні контракту до фактичного використання адаптера. -### Просування одного облікового запису, кероване каналом +### Підвищення одного облікового запису, що належить каналу -Коли канал оновлюється з конфігурації верхнього рівня для одного облікового запису до `channels..accounts.*`, стандартна спільна поведінка переміщує просунуті значення, що належать до області облікового запису, в `accounts.default`. +Коли канал переходить від конфігурації одного облікового запису верхнього рівня до `channels..accounts.*`, стандартна спільна поведінка переносить підвищені значення, прив’язані до облікового запису, в `accounts.default`. -Вбудовані канали можуть звузити або перевизначити це просування через свою поверхню контракту налаштування: +Вбудовані канали можуть звузити або перевизначити це підвищення через свою поверхню контракту налаштування: -- `singleAccountKeysToMove`: додаткові ключі верхнього рівня, які потрібно перемістити до просунутого облікового запису -- `namedAccountPromotionKeys`: коли іменовані облікові записи вже існують, лише ці ключі переміщуються до просунутого облікового запису; спільні ключі політики/доставки залишаються в корені каналу -- `resolveSingleAccountPromotionTarget(...)`: виберіть, який наявний обліковий запис отримає просунуті значення +- `singleAccountKeysToMove`: додаткові ключі верхнього рівня, які слід перенести до підвищеного облікового запису +- `namedAccountPromotionKeys`: коли іменовані облікові записи вже існують, лише ці ключі переносяться до підвищеного облікового запису; спільні ключі політики/доставки залишаються в корені каналу +- `resolveSingleAccountPromotionTarget(...)`: вибирає, який наявний обліковий запис отримує підвищені значення -Matrix є поточним вбудованим прикладом. Якщо вже існує рівно один іменований обліковий запис Matrix або якщо `defaultAccount` вказує на наявний неканонічний ключ, такий як `Ops`, просування зберігає цей обліковий запис замість створення нового запису `accounts.default`. +Matrix є поточним вбудованим прикладом. Якщо вже існує рівно один іменований обліковий запис Matrix або якщо `defaultAccount` вказує на наявний неканонічний ключ, як-от `Ops`, підвищення зберігає цей обліковий запис замість створення нового запису `accounts.default`. ## Схема конфігурації @@ -374,7 +374,7 @@ Matrix є поточним вбудованим прикладом. Якщо в Ваш Plugin отримує цю конфігурацію як `api.pluginConfig` під час реєстрації. -Для конфігурації, специфічної для каналу, натомість використовуйте розділ конфігурації каналу: +Для конфігурації, специфічної для каналу, використовуйте натомість розділ конфігурації каналу: ```json5 { @@ -387,7 +387,7 @@ Matrix є поточним вбудованим прикладом. Якщо в } ``` -### Побудова схем конфігурації каналів +### Побудова схем конфігурації каналу Використовуйте `buildChannelConfigSchema`, щоб перетворити схему Zod на обгортку `ChannelConfigSchema`, яку використовують артефакти конфігурації, що належать Plugin: @@ -405,11 +405,11 @@ const accountSchema = z.object({ const configSchema = buildChannelConfigSchema(accountSchema); ``` -Для сторонніх plugins холодним шляхом контракту все ще є маніфест Plugin: віддзеркальте згенеровану JSON Schema в `openclaw.plugin.json#channelConfigs`, щоб схема конфігурації, налаштування та UI-поверхні могли перевіряти `channels.` без завантаження runtime-коду. +Для сторонніх plugins контракт холодного шляху все ще є маніфестом Plugin: віддзеркальте згенеровану JSON Schema в `openclaw.plugin.json#channelConfigs`, щоб схема конфігурації, налаштування й UI-поверхні могли перевіряти `channels.` без завантаження runtime-коду. ## Майстри налаштування -Plugins каналів можуть надавати інтерактивні майстри налаштування для `openclaw onboard`. Майстер є об'єктом `ChannelSetupWizard` у `ChannelPlugin`: +Plugins каналів можуть надавати інтерактивні майстри налаштування для `openclaw onboard`. Майстер є об’єктом `ChannelSetupWizard` у `ChannelPlugin`: ```typescript import type { ChannelSetupWizard } from "openclaw/plugin-sdk/channel-setup"; @@ -442,17 +442,17 @@ const setupWizard: ChannelSetupWizard = { }; ``` -Тип `ChannelSetupWizard` підтримує `credentials`, `textInputs`, `dmPolicy`, `allowFrom`, `groupAccess`, `prepare`, `finalize` та інше. Повні приклади дивіться у пакетах вбудованих plugins (наприклад, у Plugin Discord `src/channel.setup.ts`). +Тип `ChannelSetupWizard` підтримує `credentials`, `textInputs`, `dmPolicy`, `allowFrom`, `groupAccess`, `prepare`, `finalize` тощо. Повні приклади дивіться у вбудованих пакетах Plugin (наприклад, Plugin Discord `src/channel.setup.ts`). - Для запитів allowlist DM, яким потрібен лише стандартний потік `note -> prompt -> parse -> merge -> patch`, надавайте перевагу спільним помічникам налаштування з `openclaw/plugin-sdk/setup`: `createPromptParsedAllowFromForAccount(...)`, `createTopLevelChannelParsedAllowFromPrompt(...)` і `createNestedChannelParsedAllowFromPrompt(...)`. + Для запитів списку дозволених DM, яким потрібен лише стандартний потік `note -> prompt -> parse -> merge -> patch`, віддавайте перевагу спільним допоміжним засобам налаштування з `openclaw/plugin-sdk/setup`: `createPromptParsedAllowFromForAccount(...)`, `createTopLevelChannelParsedAllowFromPrompt(...)` і `createNestedChannelParsedAllowFromPrompt(...)`. - Для блоків статусу налаштування каналу, які відрізняються лише мітками, оцінками та необов'язковими додатковими рядками, надавайте перевагу `createStandardChannelSetupStatus(...)` з `openclaw/plugin-sdk/setup` замість ручного створення того самого об'єкта `status` у кожному Plugin. + Для блоків статусу налаштування каналу, які відрізняються лише мітками, оцінками та необов’язковими додатковими рядками, віддавайте перевагу `createStandardChannelSetupStatus(...)` з `openclaw/plugin-sdk/setup` замість ручного створення того самого об’єкта `status` у кожному Plugin. - - Для необов'язкових поверхонь налаштування, які мають з'являтися лише в певних контекстах, використовуйте `createOptionalChannelSetupSurface` з `openclaw/plugin-sdk/channel-setup`: + + Для необов’язкових поверхонь налаштування, які мають з’являтися лише в певних контекстах, використовуйте `createOptionalChannelSetupSurface` з `openclaw/plugin-sdk/channel-setup`: ```typescript import { createOptionalChannelSetupSurface } from "openclaw/plugin-sdk/channel-setup"; @@ -466,17 +466,17 @@ const setupWizard: ChannelSetupWizard = { // Returns { setupAdapter, setupWizard } ``` - `plugin-sdk/channel-setup` також надає нижчорівневі побудовники `createOptionalChannelSetupAdapter(...)` і `createOptionalChannelSetupWizard(...)`, коли вам потрібна лише одна половина цієї поверхні необов'язкового встановлення. + `plugin-sdk/channel-setup` також надає нижчерівневі побудовники `createOptionalChannelSetupAdapter(...)` і `createOptionalChannelSetupWizard(...)`, коли вам потрібна лише одна половина цієї поверхні необов’язкового встановлення. - Згенерований необов'язковий адаптер/майстер закривається безпечно у разі реальних записів конфігурації. Вони повторно використовують одне повідомлення про необхідність встановлення в `validateInput`, `applyAccountConfig` і `finalize` та додають посилання на документацію, коли задано `docsPath`. + Згенерований необов’язковий адаптер/майстер закрито відмовляє для реальних записів конфігурації. Вони повторно використовують одне повідомлення про необхідність встановлення в `validateInput`, `applyAccountConfig` і `finalize`, а також додають посилання на документацію, коли задано `docsPath`. - - Для UI налаштування на основі бінарних файлів надавайте перевагу спільним делегованим помічникам замість копіювання того самого зв'язувального коду binary/status у кожен канал: + + Для UI налаштування на основі binary віддавайте перевагу спільним делегованим допоміжним засобам замість копіювання того самого зв’язування binary/статусу в кожен канал: - - `createDetectedBinaryStatus(...)` для блоків статусу, які відрізняються лише мітками, підказками, оцінками та виявленням бінарного файлу - - `createCliPathTextInput(...)` для текстових вводів на основі шляху - - `createDelegatedSetupWizardStatusResolvers(...)`, `createDelegatedPrepare(...)`, `createDelegatedFinalize(...)` і `createDelegatedResolveConfigured(...)`, коли `setupEntry` має ліниво переспрямовувати до важчого повного майстра + - `createDetectedBinaryStatus(...)` для блоків статусу, що відрізняються лише мітками, підказками, оцінками та виявленням binary + - `createCliPathTextInput(...)` для текстових полів на основі шляху + - `createDelegatedSetupWizardStatusResolvers(...)`, `createDelegatedPrepare(...)`, `createDelegatedFinalize(...)` і `createDelegatedResolveConfigured(...)`, коли `setupEntry` потрібно ліниво переспрямовувати до важчого повного майстра - `createDelegatedTextInputShouldPrompt(...)`, коли `setupEntry` потрібно лише делегувати рішення `textInputs[*].shouldPrompt` @@ -484,7 +484,7 @@ const setupWizard: ChannelSetupWizard = { ## Публікація та встановлення -**Зовнішні plugins:** опублікуйте в [ClawHub](/uk/tools/clawhub), потім установіть: +**Зовнішні plugins:** опублікуйте в [ClawHub](/uk/tools/clawhub), потім встановіть: @@ -492,7 +492,7 @@ const setupWizard: ChannelSetupWizard = { openclaw plugins install @myorg/openclaw-my-plugin ``` - OpenClaw спершу пробує ClawHub і автоматично повертається до npm. + OpenClaw спочатку пробує ClawHub і автоматично переходить до npm у разі невдачі. @@ -500,7 +500,7 @@ const setupWizard: ChannelSetupWizard = { openclaw plugins install clawhub:@myorg/openclaw-my-plugin ``` - + Використовуйте npm, коли пакет ще не переміщено до ClawHub або коли вам потрібен прямий шлях встановлення npm під час міграції: @@ -511,26 +511,26 @@ const setupWizard: ChannelSetupWizard = { -**Plugins у репозиторії:** розміщуйте під деревом робочого простору вбудованих plugins, і їх буде автоматично виявлено під час збірки. +**Plugins у репозиторії:** розміщуйте під деревом робочої області вбудованих plugins, і вони автоматично виявлятимуться під час збірки. -**Користувачі можуть установити:** +**Користувачі можуть встановити:** ```bash openclaw plugins install ``` -Для встановлень із npm `openclaw plugins install` встановлює пакет у `~/.openclaw/npm` з вимкненими lifecycle-скриптами. Тримайте дерева залежностей Plugin чистими JS/TS і уникайте пакетів, які потребують збірок `postinstall`. +Для встановлень із npm `openclaw plugins install` встановлює пакет у `~/.openclaw/npm` з вимкненими lifecycle-скриптами. Тримайте дерева залежностей Plugin чистими JS/TS і уникайте пакетів, які потребують `postinstall`-збірок. -Запуск Gateway не встановлює залежності Plugin. Потоки встановлення npm/git/ClawHub відповідають за узгодження залежностей; локальні plugins уже повинні мати встановлені залежності. +Запуск Gateway не встановлює залежності Plugin. Потоки встановлення npm/git/ClawHub відповідають за збіжність залежностей; локальні plugins уже мають мати встановлені свої залежності. -Метадані пакетів у комплекті задаються явно, а не виводяться зі зібраного JavaScript під час запуску Gateway. Залежності часу виконання мають бути в пакеті Plugin, якому вони належать; запуск запакованого OpenClaw ніколи не виправляє й не віддзеркалює залежності Plugin. +Метадані вбудованого пакета задаються явно, а не виводяться зі зібраного JavaScript під час запуску Gateway. Runtime-залежності мають бути в пакеті Plugin, якому вони належать; запуск пакетованого OpenClaw ніколи не виправляє й не дзеркалить залежності Plugin. ## Пов’язане - [Створення plugins](/uk/plugins/building-plugins) — покроковий посібник для початку роботи -- [Маніфест Plugin](/uk/plugins/manifest) — повний довідник схеми маніфесту -- [Точки входу SDK](/uk/plugins/sdk-entrypoints) — `definePluginEntry` і `defineChannelPluginEntry` +- [Маніфест Plugin](/uk/plugins/manifest) — повна довідка зі схеми маніфесту +- [Точки входу SDK](/uk/plugins/sdk-entrypoints) — `definePluginEntry` та `defineChannelPluginEntry` diff --git a/docs/uk/providers/google.md b/docs/uk/providers/google.md index 5eb37aa7b..3a6900222 100644 --- a/docs/uk/providers/google.md +++ b/docs/uk/providers/google.md @@ -1,37 +1,38 @@ --- read_when: - Ви хочете використовувати моделі Google Gemini з OpenClaw - - Потрібен ключ API або потік автентифікації OAuth + - Вам потрібен ключ API або потік автентифікації OAuth summary: Налаштування Google Gemini (ключ API + OAuth, генерація зображень, розуміння медіа, TTS, вебпошук) title: Google (Gemini) x-i18n: - generated_at: "2026-04-28T11:22:43Z" + generated_at: "2026-05-02T02:49:08Z" model: gpt-5.5 provider: openai - source_hash: ea4b53dcea10fef67920da3baca4c85325ee4d4da780fbf708b67bc618e064a6 + source_hash: 17d7694408dd02ea87d71530a544ad45e0284a973803f76313338a5065b3f7d5 source_path: providers/google.md workflow: 16 --- -Plugin Google надає доступ до моделей Gemini через Google AI Studio, а також генерацію зображень, розуміння медіа (зображення/аудіо/відео), перетворення тексту на мовлення та вебпошук через +Plugin Google надає доступ до моделей Gemini через Google AI Studio, а також +генерацію зображень, розуміння медіа (зображення/аудіо/відео), перетворення тексту на мовлення та вебпошук через Gemini Grounding. - Провайдер: `google` - Автентифікація: `GEMINI_API_KEY` або `GOOGLE_API_KEY` - API: Google Gemini API - Опція середовища виконання: `agents.defaults.agentRuntime.id: "google-gemini-cli"` - повторно використовує OAuth Gemini CLI, зберігаючи посилання на моделі канонічними як `google/*`. + повторно використовує OAuth Gemini CLI, водночас зберігаючи посилання на моделі канонічними як `google/*`. ## Початок роботи -Виберіть бажаний спосіб автентифікації та виконайте кроки налаштування. +Виберіть бажаний метод автентифікації та виконайте кроки налаштування. **Найкраще для:** стандартного доступу до Gemini API через Google AI Studio. - + ```bash openclaw onboard --auth-choice gemini-api-key ``` @@ -64,7 +65,7 @@ Gemini Grounding. - Змінні середовища `GEMINI_API_KEY` і `GOOGLE_API_KEY` приймаються обидві. Використовуйте ту, яку вже налаштовано. + Змінні середовища `GEMINI_API_KEY` і `GOOGLE_API_KEY` обидві підтримуються. Використовуйте ту, яку вже налаштовано. @@ -74,12 +75,12 @@ Gemini Grounding. Провайдер `google-gemini-cli` є неофіційною інтеграцією. Деякі користувачі - повідомляють про обмеження облікового запису під час використання OAuth у такий спосіб. Використовуйте на власний ризик. + повідомляють про обмеження облікових записів під час використання OAuth у такий спосіб. Використовуйте на власний ризик. - Локальна команда `gemini` має бути доступною в `PATH`. + Локальна команда `gemini` має бути доступна в `PATH`. ```bash # Homebrew @@ -89,8 +90,8 @@ Gemini Grounding. npm install -g @google/gemini-cli ``` - OpenClaw підтримує як установлення через Homebrew, так і глобальне встановлення через npm, зокрема - поширені макети Windows/npm. + OpenClaw підтримує встановлення через Homebrew і глобальні встановлення npm, включно з + поширеними структурами Windows/npm. ```bash @@ -118,13 +119,13 @@ Gemini Grounding. (Або варіанти `GEMINI_CLI_*`.) - Якщо запити Gemini CLI OAuth не виконуються після входу, задайте `GOOGLE_CLOUD_PROJECT` або + Якщо запити Gemini CLI OAuth не вдаються після входу, задайте `GOOGLE_CLOUD_PROJECT` або `GOOGLE_CLOUD_PROJECT_ID` на хості Gateway і повторіть спробу. - Якщо вхід завершується помилкою до запуску потоку в браузері, переконайтеся, що локальну команду `gemini` - встановлено і вона є в `PATH`. + Якщо вхід не вдається до запуску браузерного потоку, переконайтеся, що локальну команду `gemini` + установлено і вона є в `PATH`. Посилання на моделі `google-gemini-cli/*` є застарілими псевдонімами сумісності. Нові @@ -137,33 +138,60 @@ Gemini Grounding. ## Можливості | Можливість | Підтримується | -| ---------------------- | ----------------------------- | -| Чат-доповнення | Так | -| Генерація зображень | Так | -| Генерація музики | Так | -| Перетворення тексту на мовлення | Так | -| Голос у реальному часі | Так (Google Live API) | -| Розуміння зображень | Так | -| Транскрипція аудіо | Так | -| Розуміння відео | Так | -| Вебпошук (Grounding) | Так | +| ---------------------- | ---------------------------- | +| Завершення чату | Так | +| Генерація зображень | Так | +| Генерація музики | Так | +| Перетворення тексту на мовлення | Так | +| Голос у реальному часі | Так (Google Live API) | +| Розуміння зображень | Так | +| Транскрипція аудіо | Так | +| Розуміння відео | Так | +| Вебпошук (Grounding) | Так | | Мислення/міркування | Так (Gemini 2.5+ / Gemini 3+) | -| Моделі Gemma 4 | Так | +| Моделі Gemma 4 | Так | + +## Вебпошук + +Вбудований провайдер вебпошуку `gemini` використовує заземлення Gemini Google Search. +Налаштуйте його в `plugins.entries.google.config.webSearch`: + +```json5 +{ + plugins: { + entries: { + google: { + config: { + webSearch: { + apiKey: "AIza...", // optional if GEMINI_API_KEY is set + baseUrl: "https://generativelanguage.googleapis.com/v1beta", + model: "gemini-2.5-flash", + }, + }, + }, + }, + }, +} +``` + +`webSearch.baseUrl` є необов'язковим і призначений для операторських проксі або сумісних +кінцевих точок Gemini API. Див. [Пошук Gemini](/uk/tools/gemini-search) щодо +поведінки інструмента, специфічної для провайдера. -Моделі Gemini 3 використовують `thinkingLevel` замість `thinkingBudget`. OpenClaw зіставляє -керування міркуванням для Gemini 3, Gemini 3.1 і псевдонімів `gemini-*-latest` із -`thinkingLevel`, щоб запуски за замовчуванням або з малою затримкою не надсилали вимкнені +Моделі Gemini 3 використовують `thinkingLevel`, а не `thinkingBudget`. OpenClaw зіставляє +керування міркуваннями для Gemini 3, Gemini 3.1 і псевдонімів `gemini-*-latest` з +`thinkingLevel`, щоб запуски за замовчуванням/із низькою затримкою не надсилали вимкнені значення `thinkingBudget`. `/think adaptive` зберігає динамічну семантику мислення Google замість вибору -фіксованого рівня OpenClaw. Gemini 3 і Gemini 3.1 не передають фіксований `thinkingLevel`, щоб -Google міг вибрати рівень; Gemini 2.5 надсилає динамічний маркер Google +фіксованого рівня OpenClaw. Gemini 3 і Gemini 3.1 пропускають фіксований `thinkingLevel`, щоб +Google міг вибрати рівень; Gemini 2.5 надсилає динамічний sentinel Google `thinkingBudget: -1`. Моделі Gemma 4 (наприклад `gemma-4-26b-a4b-it`) підтримують режим мислення. OpenClaw переписує `thinkingBudget` у підтримуваний Google `thinkingLevel` для Gemma 4. -Якщо встановити мислення на `off`, воно залишається вимкненим замість зіставлення з +Установлення мислення в `off` зберігає вимкнене мислення замість зіставлення з `MINIMAL`. @@ -174,7 +202,7 @@ Google міг вибрати рівень; Gemini 2.5 надсилає дина - Також підтримує `google/gemini-3-pro-image-preview` - Генерація: до 4 зображень на запит -- Режим редагування: увімкнений, до 5 вхідних зображень +- Режим редагування: увімкнено, до 5 вхідних зображень - Керування геометрією: `size`, `aspectRatio` і `resolution` Щоб використовувати Google як провайдера зображень за замовчуванням: @@ -201,7 +229,7 @@ Google міг вибрати рівень; Gemini 2.5 надсилає дина інструмент `video_generate`. - Модель відео за замовчуванням: `google/veo-3.1-fast-generate-preview` -- Режими: текст-у-відео, зображення-у-відео та потоки з посиланням на одне відео +- Режими: текст-у-відео, зображення-у-відео та потоки посилання на одне відео - Підтримує `aspectRatio`, `resolution` і `audio` - Поточне обмеження тривалості: **від 4 до 8 секунд** @@ -231,9 +259,9 @@ Google міг вибрати рівень; Gemini 2.5 надсилає дина - Модель музики за замовчуванням: `google/lyria-3-clip-preview` - Також підтримує `google/lyria-3-pro-preview` - Керування промптом: `lyrics` і `instrumental` -- Формат виводу: `mp3` за замовчуванням, а також `wav` у `google/lyria-3-pro-preview` -- Референсні входи: до 10 зображень -- Запуски, підтримувані сеансом, від’єднуються через спільний потік завдань/статусу, зокрема `action: "status"` +- Формат виводу: `mp3` за замовчуванням, плюс `wav` на `google/lyria-3-pro-preview` +- Вхідні референси: до 10 зображень +- Запуски з підтримкою сесії від'єднуються через спільний потік завдання/статусу, включно з `action: "status"` Щоб використовувати Google як провайдера музики за замовчуванням: @@ -255,7 +283,7 @@ Google міг вибрати рівень; Gemini 2.5 надсилає дина ## Перетворення тексту на мовлення -Вбудований мовленнєвий провайдер `google` використовує шлях TTS Gemini API з +Вбудований мовленнєвий провайдер `google` використовує шлях Gemini API TTS із `gemini-3.1-flash-tts-preview`. - Голос за замовчуванням: `Kore` @@ -285,9 +313,9 @@ Google міг вибрати рівень; Gemini 2.5 надсилає дина Gemini API TTS використовує промпти природною мовою для керування стилем. Установіть `audioProfile`, щоб додавати багаторазовий стильовий промпт перед озвучуваним текстом. Установіть -`speakerName`, коли текст промпта посилається на іменованого мовця. +`speakerName`, коли текст промпта посилається на названого мовця. -Gemini API TTS також приймає виразні аудіотеги у квадратних дужках у тексті, +Gemini API TTS також приймає виразні аудіотеги в квадратних дужках у тексті, наприклад `[whispers]` або `[laughs]`. Щоб теги не відображалися у видимій відповіді чату, але надсилалися до TTS, помістіть їх у блок `[[tts:text]]...[[/tts:text]]`: @@ -298,29 +326,29 @@ Here is the clean reply text. ``` -Ключ API Google Cloud Console, обмежений Gemini API, є дійсним для цього +Ключ API Google Cloud Console, обмежений Gemini API, є чинним для цього провайдера. Це не окремий шлях Cloud Text-to-Speech API. ## Голос у реальному часі Вбудований Plugin `google` реєструє провайдера голосу в реальному часі на базі -Gemini Live API для бекендних аудіомостів, таких як Voice Call і Google Meet. +Gemini Live API для бекенд-аудіомостів, як-от Voice Call і Google Meet. -| Налаштування | Шлях конфігурації | Значення за замовчуванням | +| Налаштування | Шлях конфігурації | За замовчуванням | | --------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | | Модель | `plugins.entries.voice-call.config.realtime.providers.google.model` | `gemini-2.5-flash-native-audio-preview-12-2025` | | Голос | `...google.voice` | `Kore` | | Температура | `...google.temperature` | (не задано) | | Чутливість початку VAD | `...google.startSensitivity` | (не задано) | -| Чутливість завершення VAD | `...google.endSensitivity` | (не задано) | +| Чутливість завершення VAD | `...google.endSensitivity` | (не задано) | | Тривалість тиші | `...google.silenceDurationMs` | (не задано) | -| Обробка активності | `...google.activityHandling` | Значення Google за замовчуванням, `start-of-activity-interrupts` | -| Покриття репліки | `...google.turnCoverage` | Значення Google за замовчуванням, `only-activity` | +| Обробка активності | `...google.activityHandling` | За замовчуванням Google, `start-of-activity-interrupts` | +| Покриття репліки | `...google.turnCoverage` | За замовчуванням Google, `only-activity` | | Вимкнути автоматичний VAD | `...google.automaticActivityDetectionDisabled` | `false` | | Ключ API | `...google.apiKey` | Повертається до `models.providers.google.apiKey`, `GEMINI_API_KEY` або `GOOGLE_API_KEY` | -Приклад конфігурації Voice Call у реальному часі: +Приклад конфігурації реального часу Voice Call: ```json5 { @@ -349,22 +377,22 @@ Gemini Live API для бекендних аудіомостів, таких я ``` -Google Live API використовує двоспрямоване аудіо та виклик функцій через WebSocket. -OpenClaw адаптує аудіо телефонії/моста Meet до потоку PCM Live API від Gemini і -зберігає виклики інструментів у спільному контракті голосу в реальному часі. Залишайте `temperature` -невстановленим, якщо вам не потрібні зміни семплінгу; OpenClaw пропускає непозитивні значення, -оскільки Google Live може повертати транскрипти без аудіо для `temperature: 0`. -Транскрибування Gemini API вмикається без `languageCodes`; поточний Google -SDK відхиляє підказки кодів мов у цьому шляху API. +Google Live API використовує двонапрямний звук і виклик функцій через WebSocket. +OpenClaw адаптує звук телефонії/моста Meet до потоку Gemini PCM Live API і +зберігає виклики інструментів у спільному контракті голосу реального часу. Залиште `temperature` +незаданим, якщо вам не потрібні зміни семплювання; OpenClaw пропускає непозитивні значення, +оскільки Google Live може повертати транскрипти без звуку для `temperature: 0`. +Транскрипцію Gemini API увімкнено без `languageCodes`; поточний Google +SDK відхиляє підказки кодів мов на цьому шляху API. -Control UI Talk підтримує браузерні сесії Google Live з обмеженими одноразовими -токенами. Провайдери голосу в реальному часі лише для бекенда також можуть працювати через загальний -транспорт ретрансляції Gateway, який зберігає облікові дані провайдера на Gateway. +Control UI Talk підтримує браузерні сеанси Google Live з обмеженими одноразовими +токенами. Постачальники голосу реального часу, що працюють лише на бекенді, також можуть працювати через загальний +транспорт ретрансляції Gateway, який зберігає облікові дані постачальника на Gateway. -Для живої перевірки мейнтейнерами виконайте +Для live-перевірки супровідником виконайте `OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts`. Гілка Google випускає токен Live API тієї самої обмеженої форми, яку використовує Control UI Talk, відкриває браузерну кінцеву точку WebSocket, надсилає початкове корисне навантаження налаштування @@ -379,9 +407,9 @@ UI Talk, відкриває браузерну кінцеву точку WebSock - Налаштуйте параметри для окремої моделі або глобально за допомогою `cachedContent` або застарілого `cached_content` - - Якщо присутні обидва, перевагу має `cachedContent` + - Якщо присутні обидва, пріоритет має `cachedContent` - Приклад значення: `cachedContents/prebuilt-context` - - Використання влучень кешу Gemini нормалізується в OpenClaw `cacheRead` з + - Використання потрапляння в кеш Gemini нормалізується в OpenClaw `cacheRead` з upstream `cachedContentTokenCount` ```json5 @@ -402,11 +430,11 @@ UI Talk, відкриває браузерну кінцеву точку WebSock - - Під час використання OAuth-провайдера `google-gemini-cli` OpenClaw нормалізує + + Під час використання OAuth-постачальника `google-gemini-cli` OpenClaw нормалізує JSON-вивід CLI так: - - Текст відповіді береться з поля CLI JSON `response`. + - Текст відповіді надходить із поля CLI JSON `response`. - Використання повертається до `stats`, коли CLI залишає `usage` порожнім. - `stats.cached` нормалізується в OpenClaw `cacheRead`. - Якщо `stats.input` відсутній, OpenClaw виводить вхідні токени з @@ -414,7 +442,7 @@ UI Talk, відкриває браузерну кінцеву точку WebSock - + Якщо Gateway працює як демон (launchd/systemd), переконайтеся, що `GEMINI_API_KEY` доступний цьому процесу (наприклад, у `~/.openclaw/.env` або через `env.shellEnv`). @@ -425,15 +453,15 @@ UI Talk, відкриває браузерну кінцеву точку WebSock - Вибір провайдерів, посилань на моделі та поведінки failover. + Вибір постачальників, посилань на моделі й поведінки відмовостійкого перемикання. - Спільні параметри інструмента зображень і вибір провайдера. + Спільні параметри інструменту зображень і вибір постачальника. - Спільні параметри інструмента відео та вибір провайдера. + Спільні параметри інструменту відео й вибір постачальника. - Спільні параметри інструмента музики та вибір провайдера. + Спільні параметри інструменту музики й вибір постачальника. diff --git a/docs/uk/providers/xai.md b/docs/uk/providers/xai.md index 5759266a4..3a67bdb26 100644 --- a/docs/uk/providers/xai.md +++ b/docs/uk/providers/xai.md @@ -5,31 +5,31 @@ read_when: summary: Використовуйте моделі xAI Grok в OpenClaw title: xAI x-i18n: - generated_at: "2026-05-02T01:45:06Z" + generated_at: "2026-05-02T02:49:09Z" model: gpt-5.5 provider: openai - source_hash: 9366d6a053fb515d843bbb984ee0fce2eb342a022a6d9aa60df983fc0f8d5745 + source_hash: 7f36b597fd5c47b61724080deb0d545bca024aca17744fc8aa6a0eb4872d12d2 source_path: providers/xai.md workflow: 16 --- -OpenClaw постачається з вбудованим плагіном провайдера `xai` для моделей Grok. +OpenClaw постачається з вбудованим Plugin провайдера `xai` для моделей Grok. ## Початок роботи - + Створіть API-ключ у [консолі xAI](https://console.x.ai/). - - Задайте `XAI_API_KEY` або виконайте: + + Налаштуйте `XAI_API_KEY` або виконайте: ```bash openclaw onboard --auth-choice xai-api-key ``` - + ```json5 { agents: { defaults: { model: { primary: "xai/grok-4.3" } } }, @@ -40,18 +40,20 @@ OpenClaw постачається з вбудованим плагіном пр OpenClaw використовує xAI Responses API як вбудований транспорт xAI. Той самий -`XAI_API_KEY` також може забезпечувати `web_search` на базі Grok, першокласний -`x_search` і віддалене `code_execution`. +`XAI_API_KEY` також може забезпечувати `web_search` на базі Grok, повноцінний `x_search` +і віддалене `code_execution`. Якщо ви зберігаєте ключ xAI у `plugins.entries.xai.config.webSearch.apiKey`, -вбудований провайдер моделей xAI також повторно використовує цей ключ як резервний. -Налаштування `code_execution` розміщено в `plugins.entries.xai.config.codeExecution`. +вбудований провайдер моделей xAI також використовує цей ключ як резервний. +Налаштуйте `plugins.entries.xai.config.webSearch.baseUrl`, щоб спрямовувати Grok `web_search` +і, за замовчуванням, `x_search` через операторський проксі xAI Responses. +Налаштування `code_execution` розміщені в `plugins.entries.xai.config.codeExecution`. ## Вбудований каталог -OpenClaw одразу містить такі сімейства моделей xAI: +OpenClaw одразу включає такі сімейства моделей xAI: -| Сімейство | Ідентифікатори моделей | +| Сімейство | Ідентифікатори моделей | | -------------- | ------------------------------------------------------------------------ | | Grok 3 | `grok-3`, `grok-3-fast`, `grok-3-mini`, `grok-3-mini-fast` | | Grok 4.3 | `grok-4.3` | @@ -61,8 +63,8 @@ OpenClaw одразу містить такі сімейства моделей | Grok 4.20 Beta | `grok-4.20-beta-latest-reasoning`, `grok-4.20-beta-latest-non-reasoning` | | Grok Code | `grok-code-fast-1` | -Плагін також перенаправляє новіші ідентифікатори `grok-4*` і `grok-code-fast*`, -коли вони мають таку саму форму API. +Plugin також напряму розпізнає новіші ідентифікатори `grok-4*` і `grok-code-fast*`, коли +вони використовують ту саму форму API. `grok-4.3`, `grok-4-fast`, `grok-4-1-fast` і варіанти `grok-4.20-beta-*` @@ -71,12 +73,12 @@ OpenClaw одразу містить такі сімейства моделей ## Покриття функцій OpenClaw -Вбудований плагін відображає поточну публічну поверхню API xAI на спільні -контракти провайдерів та інструментів OpenClaw. Можливості, які не вписуються -у спільний контракт (наприклад, потоковий TTS і голос у реальному часі), не -експонуються — див. таблицю нижче. +Вбудований Plugin відображає поточну публічну поверхню API xAI на спільні +контракти провайдера й інструментів OpenClaw. Можливості, які не вкладаються у спільний контракт +(наприклад, потоковий TTS і голос у реальному часі), не експонуються — див. таблицю +нижче. -| Можливість xAI | Поверхня OpenClaw | Стан | +| Можливість xAI | Поверхня OpenClaw | Статус | | -------------------------- | ----------------------------------------- | ------------------------------------------------------------------- | | Chat / Responses | провайдер моделей `xai/` | Так | | Серверний вебпошук | провайдер `web_search` `grok` | Так | @@ -88,45 +90,45 @@ OpenClaw одразу містить такі сімейства моделей | Потоковий TTS | — | Не експонується; контракт TTS OpenClaw повертає повні аудіобуфери | | Пакетний speech-to-text | `tools.media.audio` / розуміння медіа | Так | | Потоковий speech-to-text | Voice Call `streaming.provider: "xai"` | Так | -| Голос у реальному часі | — | Ще не експонується; інший контракт сеансу/WebSocket | -| Файли / пакети | Лише сумісність із загальним API моделей | Не першокласний інструмент OpenClaw | +| Голос у реальному часі | — | Поки не експонується; інший контракт сесії/WebSocket | +| Файли / пакети | Лише сумісність із загальним API моделей | Не є повноцінним інструментом OpenClaw | -OpenClaw використовує REST API xAI для зображень/відео/TTS/STT для генерації -медіа, мовлення та пакетної транскрипції, потоковий WebSocket STT xAI для живої -транскрипції голосових викликів і Responses API для моделей, пошуку та -інструментів виконання коду. Функції, яким потрібні інші контракти OpenClaw, -як-от сеанси голосу в реальному часі, задокументовано тут як можливості upstream, -а не як приховану поведінку плагіна. +OpenClaw використовує REST API xAI для зображень/відео/TTS/STT для генерації медіа, +мовлення й пакетної транскрипції, потоковий STT WebSocket xAI для живої +транскрипції голосових викликів і Responses API для інструментів моделей, пошуку та +виконання коду. Функції, яким потрібні інші контракти OpenClaw, як-от +голосові сесії в реальному часі, задокументовані тут як можливості upstream, +а не як прихована поведінка Plugin. -### Зіставлення Fast-режиму +### Зіставлення швидкого режиму `/fast on` або `agents.defaults.models["xai/"].params.fastMode: true` переписує нативні запити xAI так: -| Початкова модель | Ціль Fast-режиму | -| ---------------- | ----------------- | -| `grok-3` | `grok-3-fast` | -| `grok-3-mini` | `grok-3-mini-fast` | -| `grok-4` | `grok-4-fast` | -| `grok-4-0709` | `grok-4-fast` | +| Початкова модель | Ціль швидкого режиму | +| ---------------- | -------------------- | +| `grok-3` | `grok-3-fast` | +| `grok-3-mini` | `grok-3-mini-fast` | +| `grok-4` | `grok-4-fast` | +| `grok-4-0709` | `grok-4-fast` | ### Застарілі псевдоніми сумісності -Застарілі псевдоніми й надалі нормалізуються до канонічних вбудованих ідентифікаторів: +Застарілі псевдоніми й далі нормалізуються до канонічних вбудованих ідентифікаторів: -| Застарілий псевдонім | Канонічний ідентифікатор | -| ------------------------- | ------------------------------------- | -| `grok-4-fast-reasoning` | `grok-4-fast` | -| `grok-4-1-fast-reasoning` | `grok-4-1-fast` | -| `grok-4.20-reasoning` | `grok-4.20-beta-latest-reasoning` | -| `grok-4.20-non-reasoning` | `grok-4.20-beta-latest-non-reasoning` | +| Застарілий псевдонім | Канонічний ідентифікатор | +| -------------------------- | ----------------------------------- | +| `grok-4-fast-reasoning` | `grok-4-fast` | +| `grok-4-1-fast-reasoning` | `grok-4-1-fast` | +| `grok-4.20-reasoning` | `grok-4.20-beta-latest-reasoning` | +| `grok-4.20-non-reasoning` | `grok-4.20-beta-latest-non-reasoning` | ## Функції - + Вбудований провайдер вебпошуку `grok` також використовує `XAI_API_KEY`: ```bash @@ -135,28 +137,27 @@ OpenClaw використовує REST API xAI для зображень/від - - Вбудований плагін `xai` реєструє генерацію відео через спільний + + Вбудований Plugin `xai` реєструє генерацію відео через спільний інструмент `video_generate`. - - Стандартна модель відео: `xai/grok-imagine-video` - - Режими: text-to-video, image-to-video, генерація reference-image, віддалене - редагування відео та віддалене розширення відео + - Модель відео за замовчуванням: `xai/grok-imagine-video` + - Режими: text-to-video, image-to-video, генерація за еталонним зображенням, віддалене + редагування відео та віддалене продовження відео - Співвідношення сторін: `1:1`, `16:9`, `9:16`, `4:3`, `3:4`, `3:2`, `2:3` - - Роздільні здатності: `480P`, `720P` + - Роздільності: `480P`, `720P` - Тривалість: 1-15 секунд для генерації/image-to-video, 1-10 секунд під час - використання ролей `reference_image`, 2-10 секунд для розширення - - Генерація reference-image: задайте `imageRoles` як `reference_image` для + використання ролей `reference_image`, 2-10 секунд для продовження + - Генерація за еталонним зображенням: встановіть `imageRoles` на `reference_image` для кожного наданого зображення; xAI приймає до 7 таких зображень - Локальні відеобуфери не приймаються. Використовуйте віддалені URL `http(s)` - для вхідних даних редагування/розширення відео. Image-to-video приймає - локальні буфери зображень, оскільки OpenClaw може закодувати їх як data URL - для xAI. + Локальні відеобуфери не приймаються. Використовуйте віддалені URL `http(s)` для + вхідних даних редагування/продовження відео. Image-to-video приймає локальні буфери зображень, тому що + OpenClaw може закодувати їх як data URL для xAI. - Щоб використовувати xAI як стандартного постачальника відео: + Щоб використовувати xAI як провайдера відео за замовчуванням: ```json5 { @@ -172,29 +173,29 @@ OpenClaw використовує REST API xAI для зображень/від Див. [Генерація відео](/uk/tools/video-generation) щодо спільних параметрів інструмента, - вибору постачальника та поведінки перемикання в разі відмови. + вибору провайдера та поведінки failover. - Вбудований `xai` plugin реєструє генерацію зображень через спільний + Вбудований Plugin `xai` реєструє генерацію зображень через спільний інструмент `image_generate`. - - Стандартна модель зображень: `xai/grok-imagine-image` + - Модель зображень за замовчуванням: `xai/grok-imagine-image` - Додаткова модель: `xai/grok-imagine-image-pro` - - Режими: текст-у-зображення та редагування за референсним зображенням - - Референсні вхідні дані: одне `image` або до п’яти `images` + - Режими: text-to-image і редагування за еталонним зображенням + - Еталонні вхідні дані: одне `image` або до п’яти `images` - Співвідношення сторін: `1:1`, `16:9`, `9:16`, `4:3`, `3:4`, `2:3`, `3:2` - Роздільності: `1K`, `2K` - Кількість: до 4 зображень - OpenClaw запитує в xAI відповіді зображень у форматі `b64_json`, щоб згенеровані медіа можна було + OpenClaw запитує в xAI відповіді зображень `b64_json`, щоб згенеровані медіа можна було зберігати й доставляти через звичайний шлях вкладень каналу. Локальні - референсні зображення перетворюються на data URLs; віддалені посилання `http(s)` + еталонні зображення перетворюються на data URL; віддалені посилання `http(s)` передаються без змін. - Щоб використовувати xAI як стандартного постачальника зображень: + Щоб використовувати xAI як провайдера зображень за замовчуванням: ```json5 { @@ -210,25 +211,24 @@ OpenClaw використовує REST API xAI для зображень/від xAI також документує `quality`, `mask`, `user` і додаткові нативні співвідношення, - такі як `1:2`, `2:1`, `9:20` і `20:9`. Наразі OpenClaw передає лише - спільні міжпостачальницькі елементи керування зображеннями; непідтримувані параметри, - притаманні лише нативному інтерфейсу, навмисно не експонуються через `image_generate`. + як-от `1:2`, `2:1`, `9:20` і `20:9`. Сьогодні OpenClaw пересилає лише + спільні міжпровайдерні елементи керування зображеннями; непідтримувані суто нативні параметри + навмисно не експонуються через `image_generate`. - - Вбудований `xai` plugin реєструє текст-у-мовлення через спільну поверхню - постачальника `tts`. + + Вбудований Plugin `xai` реєструє text-to-speech через спільну поверхню провайдера `tts`. - Голоси: `eve`, `ara`, `rex`, `sal`, `leo`, `una` - - Стандартний голос: `eve` + - Голос за замовчуванням: `eve` - Формати: `mp3`, `wav`, `pcm`, `mulaw`, `alaw` - Мова: код BCP-47 або `auto` - - Швидкість: нативне перевизначення швидкості постачальника + - Швидкість: нативне для провайдера перевизначення швидкості - Нативний формат голосових нотаток Opus не підтримується - Щоб використовувати xAI як стандартного постачальника TTS: + Щоб використовувати xAI як провайдера TTS за замовчуванням: ```json5 { @@ -246,25 +246,25 @@ OpenClaw використовує REST API xAI для зображень/від ``` - OpenClaw використовує пакетний endpoint xAI `/v1/tts`. xAI також пропонує потоковий TTS - через WebSocket, але контракт постачальника мовлення OpenClaw наразі очікує - повний аудіобуфер перед доставленням відповіді. + OpenClaw використовує пакетний endpoint `/v1/tts` xAI. xAI також пропонує потоковий TTS + через WebSocket, але контракт провайдера мовлення OpenClaw наразі очікує + повний аудіобуфер перед доставкою відповіді. - - Вбудований `xai` plugin реєструє пакетне мовлення-у-текст через поверхню - транскрибування для розуміння медіа OpenClaw. + + Вбудований Plugin `xai` реєструє пакетний speech-to-text через поверхню + транскрипції розуміння медіа OpenClaw. - - Стандартна модель: `grok-stt` + - Модель за замовчуванням: `grok-stt` - Endpoint: xAI REST `/v1/stt` - - Шлях введення: завантаження аудіофайлу multipart - - Підтримується OpenClaw усюди, де транскрибування вхідного аудіо використовує + - Шлях вхідних даних: завантаження аудіофайлу multipart + - Підтримується OpenClaw усюди, де транскрипція вхідного аудіо використовує `tools.media.audio`, включно із сегментами голосових каналів Discord і аудіовкладеннями каналів - Щоб примусово використовувати xAI для транскрибування вхідного аудіо: + Щоб примусово використовувати xAI для транскрипції вхідного аудіо: ```json5 { @@ -285,24 +285,24 @@ OpenClaw використовує REST API xAI для зображень/від ``` Мову можна надати через спільну конфігурацію аудіомедіа або через запит - транскрибування для окремого виклику. Підказки prompt приймаються спільною поверхнею - OpenClaw, але інтеграція xAI REST STT передає лише файл, модель і - мову, оскільки вони чітко відповідають поточному публічному endpoint xAI. + транскрипції для конкретного виклику. Підказки prompt приймаються спільною поверхнею + OpenClaw, але інтеграція xAI REST STT пересилає лише файл, модель і + мову, бо саме вони чітко відповідають поточному публічному endpoint xAI. - - Вбудований `xai` plugin також реєструє постачальника транскрибування в реальному часі - для аудіо живих голосових викликів. + + Вбудований Plugin `xai` також реєструє провайдера транскрипції в реальному часі + для живого аудіо голосових викликів. - Endpoint: xAI WebSocket `wss://api.x.ai/v1/stt` - - Стандартне кодування: `mulaw` - - Стандартна частота дискретизації: `8000` - - Стандартне визначення завершення: `800ms` + - Кодування за замовчуванням: `mulaw` + - Частота дискретизації за замовчуванням: `8000` + - Endpointing за замовчуванням: `800ms` - Проміжні транскрипти: увімкнено за замовчуванням Медіапотік Twilio у Voice Call надсилає аудіокадри G.711 µ-law, тому - постачальник xAI може передавати ці кадри напряму без перекодування: + провайдер xAI може пересилати ці кадри напряму без транскодування: ```json5 { @@ -328,30 +328,31 @@ OpenClaw використовує REST API xAI для зображень/від } ``` - Конфігурація, що належить постачальнику, розміщується в + Конфігурація, що належить провайдеру, міститься в `plugins.entries.voice-call.config.streaming.providers.xai`. Підтримувані ключі: `apiKey`, `baseUrl`, `sampleRate`, `encoding` (`pcm`, `mulaw` або `alaw`), `interimResults`, `endpointingMs` і `language`. - Цей потоковий провайдер призначений для шляху транскрипції в реальному часі Voice Call. - Голос Discord наразі записує короткі сегменти й натомість використовує пакетний - шлях транскрипції `tools.media.audio`. + Цей потоковий провайдер призначений для шляху транскрипції в реальному часі + Voice Call. Голос Discord наразі записує короткі сегменти й натомість + використовує пакетний шлях транскрипції `tools.media.audio`. - Вбудований xAI Plugin надає `x_search` як інструмент OpenClaw для пошуку + Вбудований Plugin xAI надає `x_search` як інструмент OpenClaw для пошуку вмісту X (раніше Twitter) через Grok. Шлях конфігурації: `plugins.entries.xai.config.xSearch` - | Ключ | Тип | Типове значення | Опис | + | Ключ | Тип | Типове значення | Опис | | ------------------ | ------- | ------------------ | ------------------------------------ | | `enabled` | boolean | — | Увімкнути або вимкнути x_search | | `model` | string | `grok-4-1-fast` | Модель, що використовується для запитів x_search | - | `inlineCitations` | boolean | — | Додавати вбудовані цитати в результати | + | `baseUrl` | string | — | Перевизначення базової URL-адреси xAI Responses | + | `inlineCitations` | boolean | — | Додавати в результати вбудовані цитування | | `maxTurns` | number | — | Максимальна кількість ходів розмови | | `timeoutSeconds` | number | — | Тайм-аут запиту в секундах | | `cacheTtlMinutes` | number | — | Час життя кешу в хвилинах | @@ -365,6 +366,7 @@ OpenClaw використовує REST API xAI для зображень/від xSearch: { enabled: true, model: "grok-4-1-fast", + baseUrl: "https://api.x.ai/v1", inlineCitations: true, }, }, @@ -377,20 +379,20 @@ OpenClaw використовує REST API xAI для зображень/від - Вбудований xAI Plugin надає `code_execution` як інструмент OpenClaw для - віддаленого виконання коду в пісочниці xAI. + Вбудований Plugin xAI надає `code_execution` як інструмент OpenClaw для + віддаленого виконання коду в sandbox-середовищі xAI. Шлях конфігурації: `plugins.entries.xai.config.codeExecution` - | Ключ | Тип | Типове значення | Опис | - | ----------------- | ------- | ------------------------- | --------------------------------- | + | Ключ | Тип | Типове значення | Опис | + | ----------------- | ------- | ------------------------- | ------------------------------------- | | `enabled` | boolean | `true` (якщо ключ доступний) | Увімкнути або вимкнути виконання коду | | `model` | string | `grok-4-1-fast` | Модель, що використовується для запитів виконання коду | - | `maxTurns` | number | — | Максимальна кількість ходів розмови | - | `timeoutSeconds` | number | — | Тайм-аут запиту в секундах | + | `maxTurns` | number | — | Максимальна кількість ходів розмови | + | `timeoutSeconds` | number | — | Тайм-аут запиту в секундах | - Це віддалене виконання в пісочниці xAI, а не локальний [`exec`](/uk/tools/exec). + Це віддалене виконання в sandbox xAI, а не локальний [`exec`](/uk/tools/exec). ```json5 @@ -413,42 +415,46 @@ OpenClaw використовує REST API xAI для зображень/від - - Сьогодні автентифікація доступна лише за API-ключем. В OpenClaw ще немає - потоку xAI OAuth або device-code. - - `grok-4.20-multi-agent-experimental-beta-0304` не підтримується на - звичайному шляху провайдера xAI, оскільки він потребує іншої поверхні - upstream API, ніж стандартний транспорт xAI в OpenClaw. - - Голос xAI Realtime ще не зареєстрований як провайдер OpenClaw. Для нього - потрібен інший контракт двонапрямної голосової сесії, ніж для пакетного STT або - потокової транскрипції. - - `quality` зображення xAI, `mask` зображення та додаткові власні співвідношення сторін - не надаються, доки спільний інструмент `image_generate` не матиме відповідних - міжпровайдерних елементів керування. + - Сьогодні автентифікація працює лише через API-ключ. В OpenClaw поки немає + xAI OAuth або потоку з кодом пристрою. + - `grok-4.20-multi-agent-experimental-beta-0304` не підтримується у + звичайному шляху провайдера xAI, бо потребує іншої поверхні вищого API, + ніж стандартний транспорт OpenClaw для xAI. + - Голос xAI Realtime ще не зареєстровано як провайдер OpenClaw. Для нього + потрібен інший контракт двоспрямованого голосового сеансу, ніж для + пакетного STT або потокової транскрипції. + - `quality` зображення xAI, `mask` зображення та додаткові власні лише для + xAI співвідношення сторін не відкриті, доки спільний інструмент + `image_generate` не матиме відповідних міжпровайдерних елементів керування. - - OpenClaw автоматично застосовує специфічні для xAI виправлення сумісності - схем інструментів і викликів інструментів на спільному шляху runner. - - Власні запити xAI типово використовують `tool_stream: true`. Установіть - `agents.defaults.models["xai/"].params.tool_stream` на `false`, щоб - вимкнути це. - - Вбудована обгортка xAI вилучає непідтримувані суворі прапорці схем інструментів і - ключі payload reasoning перед надсиланням власних запитів xAI. - - `web_search`, `x_search` і `code_execution` надаються як інструменти OpenClaw. - OpenClaw вмикає конкретний вбудований інструмент xAI, потрібний у кожному запиті - інструмента, замість прикріплення всіх власних інструментів до кожного ходу чату. - - `x_search` і `code_execution` належать вбудованому xAI Plugin, а не жорстко - закодовані в базовому runtime моделі. - - `code_execution` — це віддалене виконання в пісочниці xAI, а не локальний + - OpenClaw автоматично застосовує виправлення сумісності схем інструментів і + викликів інструментів, специфічні для xAI, у спільному шляху runner. + - Власні запити xAI за замовчуванням використовують `tool_stream: true`. + Установіть `agents.defaults.models["xai/"].params.tool_stream` у + `false`, щоб вимкнути це. + - Вбудована обгортка xAI прибирає непідтримувані суворі прапорці схем + інструментів і ключі payload міркування перед надсиланням власних запитів xAI. + - `web_search`, `x_search` і `code_execution` надаються як інструменти + OpenClaw. OpenClaw вмикає потрібний конкретний вбудований інструмент xAI + всередині кожного запиту інструмента, а не приєднує всі власні інструменти + до кожного ходу чату. + - Grok `web_search` читає `plugins.entries.xai.config.webSearch.baseUrl`. + `x_search` читає `plugins.entries.xai.config.xSearch.baseUrl`, а потім + повертається до базової URL-адреси вебпошуку Grok. + - `x_search` і `code_execution` належать вбудованому Plugin xAI, а не + жорстко закодовані в основний runtime моделей. + - `code_execution` — це віддалене виконання в sandbox xAI, а не локальний [`exec`](/uk/tools/exec). ## Live testing -Медійні шляхи xAI покриті модульними тестами та opt-in live-наборами. Live -команди завантажують секрети з вашої login shell, зокрема `~/.profile`, перед -перевіркою `XAI_API_KEY`. +Шляхи медіа xAI покриті модульними тестами та live-наборами, що вмикаються +явно. Live-команди завантажують секрети з вашої login shell, зокрема з +`~/.profile`, перед перевіркою `XAI_API_KEY`. ```bash pnpm test extensions/xai @@ -456,11 +462,11 @@ OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_TEST_QUIET=1 pnpm test:live -- extensions/xai OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_TEST_QUIET=1 OPENCLAW_LIVE_IMAGE_GENERATION_PROVIDERS=xai pnpm test:live -- test/image-generation.runtime.live.test.ts ``` -Специфічний для провайдера live-файл синтезує звичайний TTS, дружній до телефонії PCM -TTS, транскрибує аудіо через пакетний STT xAI, передає той самий PCM потоком через -xAI realtime STT, генерує результат text-to-image і редагує еталонне зображення. Спільний -live-файл зображень перевіряє той самий провайдер xAI через шлях вибору runtime, -fallback, нормалізації та медійних вкладень OpenClaw. +Live-файл, специфічний для провайдера, синтезує звичайний TTS, телефонно-зручний +PCM TTS, транскрибує аудіо через пакетний STT xAI, потоково передає той самий +PCM через realtime STT xAI, генерує text-to-image результат і редагує еталонне +зображення. Спільний live-файл зображень перевіряє того самого провайдера xAI +через шлях вибору runtime, fallback, нормалізації та медіавкладення OpenClaw. ## Пов’язане @@ -474,7 +480,7 @@ fallback, нормалізації та медійних вкладень OpenCl Ширший огляд провайдерів. - + Поширені проблеми та виправлення. diff --git a/docs/uk/tools/gemini-search.md b/docs/uk/tools/gemini-search.md index 1767fe19e..fe1e3ae0e 100644 --- a/docs/uk/tools/gemini-search.md +++ b/docs/uk/tools/gemini-search.md @@ -1,23 +1,23 @@ --- read_when: - Ви хочете використовувати Gemini для web_search - - Вам потрібен `GEMINI_API_KEY` - - Ви хочете grounding через Google Search -summary: Web search Gemini з grounding через Google Search + - Потрібен GEMINI_API_KEY + - Вам потрібне обґрунтування через Google Search +summary: Вебпошук Gemini із прив’язкою до Google Search title: Пошук Gemini x-i18n: - generated_at: "2026-04-23T21:14:55Z" - model: gpt-5.4 + generated_at: "2026-05-02T02:49:20Z" + model: gpt-5.5 provider: openai - source_hash: 0778ae326e23ea1bb719fdc694b2accc5a6651e08658a695d4d70e20fc5943a4 + source_hash: 5e36382dc6a4f9a30f12025cc81bb7ed4999e56a236fc85ee7a37444674bf798 source_path: tools/gemini-search.md - workflow: 15 + workflow: 16 --- OpenClaw підтримує моделі Gemini з вбудованим -[grounding через Google Search](https://ai.google.dev/gemini-api/docs/grounding), який повертає -AI-синтезовані відповіді, підкріплені живими результатами Google Search з -цитуванням. +[обґрунтуванням Google Search](https://ai.google.dev/gemini-api/docs/grounding), +яке повертає AI-синтезовані відповіді на основі живих результатів Google Search +із цитуваннями. ## Отримайте API-ключ @@ -46,6 +46,7 @@ AI-синтезовані відповіді, підкріплені живим config: { webSearch: { apiKey: "AIza...", // optional if GEMINI_API_KEY is set + baseUrl: "https://generativelanguage.googleapis.com/v1beta", // optional proxy/base URL override model: "gemini-2.5-flash", // default }, }, @@ -67,37 +68,44 @@ AI-синтезовані відповіді, підкріплені живим ## Як це працює -На відміну від традиційних search-провайдерів, які повертають список посилань і snippets, -Gemini використовує grounding через Google Search, щоб створювати AI-синтезовані відповіді з -inline-цитуванням. Результати містять і синтезовану відповідь, і URL -джерел. +На відміну від традиційних пошукових провайдерів, які повертають список посилань і фрагментів, +Gemini використовує обґрунтування Google Search, щоб створювати AI-синтезовані відповіді з +вбудованими цитуваннями. Результати містять як синтезовану відповідь, так і вихідні +URL. -- Citation URL з grounding Gemini автоматично розв’язуються з URL-перенаправлень - Google у прямі URL. -- Розв’язання перенаправлень використовує шлях захисту SSRF (перевірки HEAD + redirect + - валідація http/https) до повернення фінального citation URL. -- Розв’язання перенаправлень використовує суворі типові налаштування SSRF, тому перенаправлення на +- URL цитувань із обґрунтування Gemini автоматично перетворюються з URL + переспрямування Google на прямі URL. +- Перетворення переспрямувань використовує шлях захисту від SSRF (HEAD + перевірки переспрямувань + + перевірка http/https) перед поверненням фінального URL цитування. +- Перетворення переспрямувань використовує строгі типові налаштування SSRF, тому переспрямування на приватні/внутрішні цілі блокуються. ## Підтримувані параметри Пошук Gemini підтримує `query`. -`count` приймається для сумісності зі спільним `web_search`, але grounding Gemini -усе одно повертає одну синтезовану відповідь із цитуванням, а не список з N -результатів. +`count` приймається для сумісності зі спільним `web_search`, але обґрунтування Gemini +все одно повертає одну синтезовану відповідь із цитуваннями, а не список із N результатів. -Специфічні для provider фільтри, такі як `country`, `language`, `freshness` і +Фільтри, специфічні для провайдера, як-от `country`, `language`, `freshness` і `domain_filter`, не підтримуються. ## Вибір моделі -Типова модель — `gemini-2.5-flash` (швидка й економічно ефективна). Будь-яку модель Gemini, -що підтримує grounding, можна використовувати через +Типова модель — `gemini-2.5-flash` (швидка й економічна). Будь-яку модель Gemini, +що підтримує обґрунтування, можна використовувати через `plugins.entries.google.config.webSearch.model`. +## Перевизначення базового URL + +Задайте `plugins.entries.google.config.webSearch.baseUrl`, коли вебпошук Gemini +має проходити через проксі оператора або власну Gemini-сумісну кінцеву точку. Просте +значення `https://generativelanguage.googleapis.com` нормалізується до +`https://generativelanguage.googleapis.com/v1beta`; власні шляхи проксі зберігаються +як надано після обрізання кінцевих скісних рисок. + ## Пов’язане -- [Огляд Web Search](/uk/tools/web) -- усі providers і автовизначення -- [Brave Search](/uk/tools/brave-search) -- структуровані результати зі snippets +- [Огляд Web Search](/uk/tools/web) -- усі провайдери й автоматичне виявлення +- [Brave Search](/uk/tools/brave-search) -- структуровані результати з фрагментами - [Perplexity Search](/uk/tools/perplexity-search) -- структуровані результати + витягування вмісту diff --git a/docs/uk/tools/grok-search.md b/docs/uk/tools/grok-search.md index 62958d7fc..8f6ce0784 100644 --- a/docs/uk/tools/grok-search.md +++ b/docs/uk/tools/grok-search.md @@ -1,23 +1,30 @@ --- read_when: - Ви хочете використовувати Grok для web_search - - Для веб-пошуку потрібен XAI_API_KEY -summary: Вебпошук Grok через вебобґрунтовані відповіді xAI + - Для вебпошуку потрібен XAI_API_KEY +summary: Вебпошук Grok через відповіді xAI з опорою на веб title: Пошук Grok x-i18n: - generated_at: "2026-05-02T01:59:43Z" + generated_at: "2026-05-02T02:49:13Z" model: gpt-5.5 provider: openai - source_hash: ab38ee8614ba4bab9a3bf91cb14d4565f1766513594fd2d1a280ff4b2fed1478 + source_hash: 7238be2b488ba285c948065f5c1deff21898409aa11bdaa9ec893274d0eadd4a source_path: tools/grok-search.md workflow: 16 --- -OpenClaw підтримує Grok як постачальника `web_search`, використовуючи відповіді xAI, підкріплені веб-даними, для створення синтезованих ШІ відповідей на основі актуальних результатів пошуку з посиланнями на джерела. +OpenClaw підтримує Grok як провайдера `web_search`, використовуючи відповіді xAI, +обґрунтовані веб-пошуком, для створення синтезованих ШІ відповідей, підкріплених +актуальними результатами пошуку з цитуваннями. -Той самий `XAI_API_KEY` також може забезпечувати роботу вбудованого інструмента `x_search` для пошуку дописів X (раніше Twitter). Якщо ви зберігаєте ключ у `plugins.entries.xai.config.webSearch.apiKey`, OpenClaw тепер також повторно використовує його як резервний варіант для вбудованого постачальника моделей xAI. +Той самий `XAI_API_KEY` також може забезпечувати роботу вбудованого інструмента +`x_search` для пошуку дописів X (раніше Twitter). Якщо ви зберігаєте ключ у +`plugins.entries.xai.config.webSearch.apiKey`, OpenClaw тепер також повторно +використовує його як резервний варіант для вбудованого провайдера моделей xAI. -Для метрик X на рівні допису, як-от репости, відповіді, закладки або перегляди, надавайте перевагу `x_search` з точною URL-адресою допису або ID статусу замість широкого пошукового запиту. +Для метрик X на рівні допису, як-от репости, відповіді, закладки або перегляди, +надавайте перевагу `x_search` з точною URL-адресою допису або ID статусу замість +широкого пошукового запиту. ## Онбординг і налаштування @@ -26,22 +33,23 @@ OpenClaw підтримує Grok як постачальника `web_search`, - `openclaw onboard` - `openclaw configure --section web` -OpenClaw може показати окремий наступний крок для ввімкнення `x_search` з тим самим `XAI_API_KEY`. Цей наступний крок: +OpenClaw може показати окремий наступний крок, щоб увімкнути `x_search` з тим +самим `XAI_API_KEY`. Цей наступний крок: - з’являється лише після вибору Grok для `web_search` -- не є окремим вибором постачальника веб-пошуку верхнього рівня -- може додатково встановити модель `x_search` під час того самого процесу +- не є окремим вибором провайдера веб-пошуку верхнього рівня +- може додатково задати модель `x_search` під час того самого процесу -Якщо ви пропустите його, ви зможете ввімкнути або змінити `x_search` пізніше в конфігурації. +Якщо ви його пропустите, ви зможете ввімкнути або змінити `x_search` пізніше в конфігурації. ## Отримання API-ключа - Отримайте API-ключ у [xAI](https://console.x.ai/). + Отримайте API-ключ від [xAI](https://console.x.ai/). - Установіть `XAI_API_KEY` в середовищі Gateway або налаштуйте через: + Установіть `XAI_API_KEY` у середовищі Gateway або налаштуйте через: ```bash openclaw configure --section web @@ -60,6 +68,7 @@ OpenClaw може показати окремий наступний крок д config: { webSearch: { apiKey: "xai-...", // optional if XAI_API_KEY is set + baseUrl: "https://api.x.ai/v1", // optional Responses API proxy/base URL override }, }, }, @@ -75,25 +84,37 @@ OpenClaw може показати окремий наступний крок д } ``` -**Альтернатива через середовище:** установіть `XAI_API_KEY` в середовищі Gateway. -Для встановлення gateway помістіть його в `~/.openclaw/.env`. +**Альтернатива через середовище:** установіть `XAI_API_KEY` у середовищі Gateway. +Для встановлення gateway додайте його в `~/.openclaw/.env`. ## Як це працює -Grok використовує відповіді xAI, підкріплені веб-даними, щоб синтезувати відповіді з вбудованими посиланнями на джерела, подібно до підходу Gemini з прив’язкою до Google Search. +Grok використовує відповіді xAI, обґрунтовані веб-пошуком, щоб синтезувати відповіді +з вбудованими цитуваннями, подібно до підходу Gemini з обґрунтуванням через Google Search. ## Підтримувані параметри Пошук Grok підтримує `query`. -`count` приймається для сумісності зі спільним `web_search`, але Grok все одно повертає одну синтезовану відповідь із посиланнями на джерела, а не список із N результатів. +`count` приймається для сумісності зі спільним `web_search`, але Grok усе одно +повертає одну синтезовану відповідь із цитуваннями, а не список із N результатів. -Фільтри, специфічні для постачальника, наразі не підтримуються. +Фільтри, специфічні для провайдера, наразі не підтримуються. -Grok використовує специфічний для постачальника стандартний тайм-аут 60 секунд, оскільки пошуки xAI Responses з опорою на веб-дані можуть виконуватися довше, ніж спільний стандартний тайм-аут `web_search`. Установіть `tools.web.search.timeoutSeconds`, щоб перевизначити його. +Grok використовує специфічний для провайдера стандартний тайм-аут 60 секунд, тому що +веб-пошуки xAI Responses з обґрунтуванням можуть тривати довше, ніж стандартне +значення спільного `web_search`. Установіть `tools.web.search.timeoutSeconds`, щоб перевизначити його. + +## Перевизначення базової URL-адреси + +Установіть `plugins.entries.xai.config.webSearch.baseUrl`, коли веб-пошук Grok має +маршрутизуватися через операторський проксі або xAI-сумісну кінцеву точку Responses. +OpenClaw надсилає POST-запити до `/responses` після обрізання кінцевих скісних рисок. `x_search` +використовує той самий резервний варіант `webSearch.baseUrl`, якщо +`plugins.entries.xai.config.xSearch.baseUrl` не задано. ## Пов’язане -- [Огляд Web Search](/uk/tools/web) -- усі постачальники й автовиявлення +- [Огляд Web Search](/uk/tools/web) -- усі провайдери й автовиявлення - [`x_search` у Web Search](/uk/tools/web#x_search) -- повноцінний пошук X через xAI -- [Gemini Search](/uk/tools/gemini-search) -- синтезовані ШІ відповіді через прив’язку до Google grounding +- [Пошук Gemini](/uk/tools/gemini-search) -- синтезовані ШІ відповіді через обґрунтування Google diff --git a/docs/uk/tools/slash-commands.md b/docs/uk/tools/slash-commands.md index 61e9dadc0..f9b025b2b 100644 --- a/docs/uk/tools/slash-commands.md +++ b/docs/uk/tools/slash-commands.md @@ -3,38 +3,38 @@ read_when: - Використання або налаштування чат-команд - Налагодження маршрутизації команд або дозволів sidebarTitle: Slash commands -summary: 'Slash-команди: текстові й нативні, конфігурація та підтримувані команди' -title: Команди зі скісною рискою +summary: 'Слеш-команди: текстові проти нативних, конфігурація та підтримувані команди' +title: Слеш-команди x-i18n: - generated_at: "2026-05-01T10:03:23Z" + generated_at: "2026-05-02T02:49:16Z" model: gpt-5.5 provider: openai - source_hash: cfa4c8e294080e824b15f0b54842718f7913cf6d42b7edd4ca9695c3d4113924 + source_hash: 00a00619cc0eff25b81b475eab5b0b3d808bf067e6e004a491a90ec3982149b7 source_path: tools/slash-commands.md workflow: 16 --- -Команди обробляються Gateway. Більшість команд потрібно надсилати як **окреме** повідомлення, що починається з `/`. Команда bash-чату лише для хоста використовує `! ` (з `/bash ` як псевдонімом). +Команди обробляє Gateway. Більшість команд потрібно надсилати як **окреме** повідомлення, що починається з `/`. Команда bash-чату лише для хоста використовує `! ` (з `/bash ` як псевдонімом). -Коли розмова або гілка прив’язана до сеансу ACP, звичайний подальший текст спрямовується до цього середовища ACP. Команди керування Gateway все одно залишаються локальними: `/acp ...` завжди потрапляє до обробника команд OpenClaw ACP, а `/status` плюс `/unfocus` залишаються локальними щоразу, коли для поверхні ввімкнено обробку команд. +Коли розмову або гілку прив’язано до ACP-сесії, звичайний подальший текст спрямовується до цього ACP harness. Команди керування Gateway усе одно залишаються локальними: `/acp ...` завжди потрапляє до обробника команд OpenClaw ACP, а `/status` і `/unfocus` залишаються локальними, коли для цієї поверхні ввімкнено обробку команд. Є дві пов’язані системи: - + Окремі повідомлення `/...`. - + `/think`, `/fast`, `/verbose`, `/trace`, `/reasoning`, `/elevated`, `/exec`, `/model`, `/queue`. - - Директиви вилучаються з повідомлення до того, як модель його побачить. - - У звичайних повідомленнях чату (не лише з директивами) вони трактуються як «вбудовані підказки» і **не** зберігають налаштування сеансу. - - У повідомленнях лише з директивами (повідомлення містить тільки директиви) вони зберігаються в сеансі й відповідають підтвердженням. - - Директиви застосовуються лише для **авторизованих відправників**. Якщо встановлено `commands.allowFrom`, використовується тільки цей список дозволених; інакше авторизація надходить зі списків дозволених/сполучення каналу плюс `commands.useAccessGroups`. Для неавторизованих відправників директиви трактуються як звичайний текст. + - Directives вилучаються з повідомлення до того, як модель його побачить. + - У звичайних повідомленнях чату (не лише з directives) вони трактуються як «вбудовані підказки» і **не** зберігають налаштування сесії. + - У повідомленнях лише з directives (повідомлення містить тільки directives) вони зберігаються в сесії й відповідають підтвердженням. + - Directives застосовуються лише для **авторизованих відправників**. Якщо встановлено `commands.allowFrom`, використовується тільки цей список дозволених; інакше авторизація походить зі списків дозволених каналу/сполучення плюс `commands.useAccessGroups`. Неавторизовані відправники бачать directives як звичайний текст. - - Лише відправники зі списку дозволених/авторизовані відправники: `/help`, `/commands`, `/status`, `/whoami` (`/id`). + + Лише відправники зі списку дозволених/авторизовані: `/help`, `/commands`, `/status`, `/whoami` (`/id`). Вони виконуються негайно, вилучаються до того, як модель побачить повідомлення, а решта тексту продовжує проходити звичайним потоком. @@ -69,123 +69,124 @@ x-i18n: ``` - Увімкнює розбір `/...` у повідомленнях чату. На поверхнях без нативних команд (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams) текстові команди все одно працюють, навіть якщо встановити це значення на `false`. + Вмикає розбір `/...` у повідомленнях чату. На поверхнях без нативних команд (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams) текстові команди все одно працюють, навіть якщо встановити це значення на `false`. - Реєструє нативні команди. Авто: увімкнено для Discord/Telegram; вимкнено для Slack (доки ви не додасте slash-команди); ігнорується для провайдерів без нативної підтримки. Встановіть `channels.discord.commands.native`, `channels.telegram.commands.native` або `channels.slack.commands.native`, щоб перевизначити для окремого провайдера (bool або `"auto"`). `false` очищає раніше зареєстровані команди в Discord/Telegram під час запуску. Команди Slack керуються в застосунку Slack і не видаляються автоматично. + Реєструє нативні команди. Авто: увімкнено для Discord/Telegram; вимкнено для Slack (доки ви не додасте slash commands); ігнорується для провайдерів без нативної підтримки. Установіть `channels.discord.commands.native`, `channels.telegram.commands.native` або `channels.slack.commands.native`, щоб перевизначити для окремого провайдера (bool або `"auto"`). `false` очищає раніше зареєстровані команди в Discord/Telegram під час запуску. Командами Slack керують у застосунку Slack, і вони не видаляються автоматично. +У Discord специфікації нативних команд можуть містити `descriptionLocalizations`, які OpenClaw публікує як Discord `description_localizations` і включає до порівнянь узгодження. - Реєструє команди **skill** нативно, коли це підтримується. Авто: увімкнено для Discord/Telegram; вимкнено для Slack (Slack вимагає створення slash-команди для кожного skill). Встановіть `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills` або `channels.slack.commands.nativeSkills`, щоб перевизначити для окремого провайдера (bool або `"auto"`). + Реєструє команди **skill** нативно, коли це підтримується. Авто: увімкнено для Discord/Telegram; вимкнено для Slack (Slack вимагає створення slash command для кожного skill). Установіть `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills` або `channels.slack.commands.nativeSkills`, щоб перевизначити для окремого провайдера (bool або `"auto"`). - Увімкнює `! ` для запуску shell-команд хоста (`/bash ` є псевдонімом; потребує allowlist-ів `tools.elevated`). + Вмикає `! ` для запуску команд оболонки хоста (`/bash ` є псевдонімом; потрібні списки дозволених `tools.elevated`). - Керує тим, як довго bash чекає перед перемиканням у фоновий режим (`0` одразу переводить у фон). + Керує тим, як довго bash очікує перед переходом у фоновий режим (`0` одразу переводить у фон). - Увімкнює `/config` (читає/записує `openclaw.json`). + Вмикає `/config` (читає/записує `openclaw.json`). - Увімкнює `/mcp` (читає/записує MCP-конфігурацію під керуванням OpenClaw у `mcp.servers`). + Вмикає `/mcp` (читає/записує MCP-конфігурацію, керовану OpenClaw, у `mcp.servers`). - Увімкнює `/plugins` (виявлення/стан plugins, а також елементи керування встановленням і ввімкненням/вимкненням). + Вмикає `/plugins` (виявлення/статус plugin, а також елементи керування встановленням і ввімкненням/вимкненням). - Увімкнює `/debug` (лише runtime-перевизначення). + Вмикає `/debug` (лише runtime-перевизначення). - Увімкнює `/restart` і дії інструмента перезапуску Gateway. + Вмикає `/restart` плюс дії інструментів перезапуску Gateway. - Задає явний allowlist власника для командних/інструментальних поверхонь, доступних лише власнику. Це обліковий запис оператора-людини, який може схвалювати небезпечні дії та запускати команди на кшталт `/diagnostics`, `/export-trajectory` і `/config`. Він відокремлений від `commands.allowFrom` і доступу через DM-парування. + Задає явний список дозволених власника для командних/інструментальних поверхонь лише для власника. Це обліковий запис людини-оператора, який може схвалювати небезпечні дії та запускати команди, як-от `/diagnostics`, `/export-trajectory` і `/config`. Він відокремлений від `commands.allowFrom` і від доступу через DM-сполучення. - Для окремого каналу: змушує команди лише для власника вимагати **ідентичність власника** для запуску на цій поверхні. Коли `true`, відправник має або збігатися з визначеним кандидатом у власники (наприклад, записом у `commands.ownerAllowFrom` чи нативними метаданими власника від провайдера), або мати внутрішню область дії `operator.admin` у внутрішньому каналі повідомлень. Запис із wildcard у `allowFrom` каналу або порожній/невизначений список кандидатів у власники **не** є достатнім — команди лише для власника на цьому каналі завершуються закрито. Залиште це вимкненим, якщо хочете, щоб команди лише для власника обмежувалися тільки `ownerAllowFrom` і стандартними allowlist-ами команд. + Для окремого каналу: змушує команди лише для власника вимагати **ідентичність власника** для запуску на цій поверхні. Коли `true`, відправник має або збігатися з визначеним кандидатом-власником (наприклад, записом у `commands.ownerAllowFrom` або нативними метаданими власника провайдера), або мати внутрішній scope `operator.admin` у внутрішньому каналі повідомлень. Запис із wildcard у канальному `allowFrom` або порожній/невизначений список кандидатів-власників **не** є достатнім — команди лише для власника в цьому каналі fail closed. Залиште це вимкненим, якщо хочете, щоб команди лише для власника обмежувалися тільки `ownerAllowFrom` і стандартними списками дозволених команд. - Керує тим, як ідентифікатори власників відображаються в системному prompt. + Керує тим, як owner ids відображаються в системному prompt. - Необов’язково задає HMAC-секрет, який використовується, коли `commands.ownerDisplay="hash"`. + За бажанням задає секрет HMAC, який використовується, коли `commands.ownerDisplay="hash"`. - Allowlist для авторизації команд для окремих провайдерів. Коли налаштовано, це єдине джерело авторизації для команд і директив (allowlist-и/парування каналів і `commands.useAccessGroups` ігноруються). Використовуйте `"*"` для глобального значення за замовчуванням; ключі для конкретних провайдерів його перевизначають. + Список дозволених для кожного провайдера для авторизації команд. Коли він налаштований, це єдине джерело авторизації для команд і directives (списки дозволених каналу/сполучення та `commands.useAccessGroups` ігноруються). Використовуйте `"*"` як глобальне значення за замовчуванням; ключі конкретних провайдерів його перевизначають. - Забезпечує застосування allowlist-ів/політик для команд, коли `commands.allowFrom` не встановлено. + Забезпечує застосування списків дозволених/політик для команд, коли `commands.allowFrom` не встановлено. ## Список команд Поточне джерело істини: -- вбудовані команди core походять із `src/auto-reply/commands-registry.shared.ts` +- вбудовані core-команди походять із `src/auto-reply/commands-registry.shared.ts` - згенеровані команди dock походять із `src/auto-reply/commands-registry.data.ts` -- команди plugin походять із викликів `registerCommand()` у plugin +- команди plugin походять із викликів plugin `registerCommand()` - фактична доступність на вашому gateway усе ще залежить від прапорців конфігурації, поверхні каналу та встановлених/увімкнених plugins -### Вбудовані команди core +### Вбудовані core-команди - `/new [model]` запускає нову сесію; `/reset` є псевдонімом скидання. - - `/reset soft [message]` зберігає поточний transcript, відкидає повторно використані ідентифікатори CLI-сесій backend і повторно запускає завантаження startup/system-prompt на місці. - - `/compact [instructions]` ущільнює контекст сесії. Див. [Compaction](/uk/concepts/compaction). + - `/reset soft [message]` зберігає поточну стенограму, відкидає повторно використані ідентифікатори сесій CLI backend і повторно запускає завантаження startup/system-prompt на місці. + - `/compact [instructions]` стискає контекст сесії. Див. [Compaction](/uk/concepts/compaction). - `/stop` перериває поточний запуск. - - `/session idle ` і `/session max-age ` керують закінченням строку дії прив’язки thread. + - `/session idle ` і `/session max-age ` керують закінченням терміну прив’язки гілки. - `/export-session [path]` експортує поточну сесію в HTML. Псевдонім: `/export`. - - `/export-trajectory [path]` запитує схвалення exec, а потім експортує JSONL [trajectory bundle](/uk/tools/trajectory) для поточної сесії. Використовуйте це, коли вам потрібна часова шкала prompt, tool і transcript для однієї сесії OpenClaw. У групових чатах prompt схвалення та результат експорту надсилаються власнику приватно. Псевдонім: `/trajectory`. + - `/export-trajectory [path]` запитує схвалення exec, а потім експортує JSONL [пакет trajectory](/uk/tools/trajectory) для поточної сесії. Використовуйте це, коли потрібна хронологія prompt, tool і стенограми для однієї сесії OpenClaw. У групових чатах prompt схвалення та результат експорту надсилаються власнику приватно. Псевдонім: `/trajectory`. - - `/think ` задає рівень thinking. Параметри надходять із профілю провайдера активної моделі; поширені рівні: `off`, `minimal`, `low`, `medium` і `high`, а користувацькі рівні, як-от `xhigh`, `adaptive`, `max`, або бінарний `on`, доступні лише там, де підтримуються. Псевдоніми: `/thinking`, `/t`. - - `/verbose on|off|full` перемикає verbose-вивід. Псевдонім: `/v`. - - `/trace on|off` перемикає trace-вивід plugin для поточної сесії. + - `/think ` задає рівень мислення. Варіанти походять із профілю провайдера активної моделі; поширені рівні: `off`, `minimal`, `low`, `medium` і `high`, а спеціальні рівні, як-от `xhigh`, `adaptive`, `max`, або бінарний `on`, доступні лише там, де підтримуються. Псевдоніми: `/thinking`, `/t`. + - `/verbose on|off|full` перемикає докладний вивід. Псевдонім: `/v`. + - `/trace on|off` перемикає вивід trace plugin для поточної сесії. - `/fast [status|on|off]` показує або задає fast mode. - `/reasoning [on|off|stream]` перемикає видимість reasoning. Псевдонім: `/reason`. - `/elevated [on|off|ask|full]` перемикає elevated mode. Псевдонім: `/elev`. - - `/exec host= security= ask= node=` показує або задає exec-значення за замовчуванням. + - `/exec host= security= ask= node=` показує або задає exec defaults. - `/model [name|#|status]` показує або задає модель. - - `/models [provider] [page] [limit=|size=|all]` перелічує налаштованих/доступних за автентифікацією провайдерів або моделі для провайдера; додайте `all`, щоб переглянути повний каталог цього провайдера. - - `/queue ` керує поведінкою черги (`steer`, застаріле `queue`, `followup`, `collect`, `steer-backlog`, `interrupt`) і параметрами на кшталт `debounce:0.5s cap:25 drop:summarize`; `/queue default` або `/queue reset` очищає перевизначення сесії. Див. [Command queue](/uk/concepts/queue) і [Steering queue](/uk/concepts/queue-steering). + - `/models [provider] [page] [limit=|size=|all]` перелічує налаштованих/доступних через auth провайдерів або моделі для провайдера; додайте `all`, щоб переглянути повний каталог цього провайдера. + - `/queue ` керує поведінкою черги (`steer`, застаріле `queue`, `followup`, `collect`, `steer-backlog`, `interrupt`) плюс параметрами на кшталт `debounce:0.5s cap:25 drop:summarize`; `/queue default` або `/queue reset` очищає перевизначення сесії. Див. [Черга команд](/uk/concepts/queue) і [Steering queue](/uk/concepts/queue-steering). - - `/help` показує коротке зведення довідки. + - `/help` показує коротке зведення допомоги. - `/commands` показує згенерований каталог команд. - - `/tools [compact|verbose]` показує, що поточний agent може використовувати прямо зараз. - - `/status` показує стан виконання/runtime, зокрема мітки `Execution`/`Runtime` і використання/квоту провайдера, коли доступно. - - `/diagnostics [note]` — це потік звіту підтримки лише для власника для багів Gateway і запусків Codex harness. Він щоразу запитує явне схвалення exec перед запуском `openclaw gateway diagnostics export --json`; не схвалюйте diagnostics правилом allow-all. Після схвалення він надсилає придатний для вставлення звіт із локальним шляхом bundle, зведенням manifest, нотатками щодо приватності та відповідними ідентифікаторами сесій. У групових чатах prompt схвалення та звіт надсилаються власнику приватно. Коли активна сесія використовує OpenAI Codex harness, те саме схвалення також надсилає відповідний feedback Codex на сервери OpenAI, а завершена відповідь перелічує ідентифікатори сесій OpenClaw, ідентифікатори thread Codex і команди `codex resume `. Див. [Diagnostics Export](/uk/gateway/diagnostics). - - `/crestodian ` запускає helper налаштування та repair Crestodian з owner DM. - - `/tasks` перелічує активні/недавні фонові завдання для поточної сесії. - - `/context [list|detail|json]` пояснює, як збирається контекст. - - `/whoami` показує ваш ідентифікатор відправника. Псевдонім: `/id`. - - `/usage off|tokens|full|cost` керує footer використання для кожної відповіді або друкує локальне зведення витрат. + - `/tools [compact|verbose]` показує, що поточний agent може використовувати просто зараз. + - `/status` показує статус виконання/runtime, включно з мітками `Execution`/`Runtime` та використанням/квотою провайдера, коли доступно. + - `/diagnostics [note]` — це support-report flow лише для власника для багів Gateway і запусків Codex harness. Він щоразу запитує явне схвалення exec перед запуском `openclaw gateway diagnostics export --json`; не схвалюйте diagnostics правилом allow-all. Після схвалення він надсилає звіт, придатний для вставлення, з локальним шляхом до bundle, зведенням manifest, нотатками про приватність і релевантними ідентифікаторами сесій. У групових чатах prompt схвалення та звіт надсилаються власнику приватно. Коли активна сесія використовує OpenAI Codex harness, те саме схвалення також надсилає релевантний Codex feedback на сервери OpenAI, а завершена відповідь перелічує ідентифікатори сесій OpenClaw, ідентифікатори гілок Codex і команди `codex resume `. Див. [Експорт діагностики](/uk/gateway/diagnostics). + - `/crestodian ` запускає помічник налаштування та відновлення Crestodian з DM власника. + - `/tasks` перелічує активні/нещодавні фонові задачі для поточної сесії. + - `/context [list|detail|json]` пояснює, як складається контекст. + - `/whoami` показує ваш sender id. Псевдонім: `/id`. + - `/usage off|tokens|full|cost` керує футером використання для кожної відповіді або друкує локальне зведення вартості. - `/skill [input]` запускає skill за назвою. - - `/allowlist [list|add|remove] ...` керує записами allowlist. Лише текст. - - `/approve ` розв’язує prompts схвалення exec. + - `/allowlist [list|add|remove] ...` керує записами списку дозволених. Лише текст. + - `/approve ` вирішує prompts схвалення exec. - `/btw ` ставить побічне запитання без зміни майбутнього контексту сесії. Див. [BTW](/uk/tools/btw). - `/subagents list|kill|log|info|send|steer|spawn` керує запусками sub-agent для поточної сесії. - `/acp spawn|cancel|steer|close|sessions|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|help` керує ACP-сесіями та runtime-параметрами. - - `/focus ` прив’язує поточний thread Discord або тему/розмову Telegram до цільової сесії. + - `/focus ` прив’язує поточну гілку Discord або тему/розмову Telegram до цільової сесії. - `/unfocus` видаляє поточну прив’язку. - - `/agents` перелічує agent-ів, прив’язаних до thread, для поточної сесії. - - `/kill ` перериває одного або всіх запущених sub-agent-ів. - - `/steer ` надсилає steer-повідомлення запущеному sub-agent. Псевдонім: `/tell`. + - `/agents` перелічує прив’язаних до гілки agents для поточної сесії. + - `/kill ` перериває одного або всіх запущених sub-agents. + - `/steer ` надсилає steering запущеному sub-agent. Псевдонім: `/tell`. - `/config show|get|set|unset` читає або записує `openclaw.json`. Лише для власника. Потребує `commands.config: true`. - - `/mcp show|get|set|unset` читає або записує конфігурацію MCP-сервера під керуванням OpenClaw у `mcp.servers`. Лише для власника. Потребує `commands.mcp: true`. - - `/plugins list|inspect|show|get|install|enable|disable` перевіряє або змінює стан плагінів. `/plugin` — псевдонім. Записи лише для власника. Потребує `commands.plugins: true`. + - `/mcp show|get|set|unset` читає або записує конфігурацію MCP-сервера, керовану OpenClaw, у `mcp.servers`. Лише для власника. Потребує `commands.mcp: true`. + - `/plugins list|inspect|show|get|install|enable|disable` перевіряє або змінює стан plugin. `/plugin` є псевдонімом. Записи лише для власника. Потребує `commands.plugins: true`. - `/debug show|set|unset|reset` керує лише runtime-перевизначеннями конфігурації. Лише для власника. Потребує `commands.debug: true`. - `/restart` перезапускає OpenClaw, коли ввімкнено. Типово: ввімкнено; задайте `commands.restart: false`, щоб вимкнути. - `/send on|off|inherit` задає політику надсилання. Лише для власника. @@ -194,42 +195,41 @@ x-i18n: - `/tts on|off|status|chat|latest|provider|limit|summary|audio|help` керує TTS. Див. [TTS](/uk/tools/tts). - `/activation mention|always` задає режим активації в групі. - - `/bash ` виконує команду оболонки хоста. Лише текст. Псевдонім: `! `. Потребує `commands.bash: true` плюс списки дозволеного `tools.elevated`. - - `!poll [sessionId]` перевіряє фонове bash-завдання. - - `!stop [sessionId]` зупиняє фонове bash-завдання. + - `/bash ` запускає команду оболонки хоста. Лише текст. Псевдонім: `! `. Потребує `commands.bash: true` плюс списки дозволів `tools.elevated`. + - `!poll [sessionId]` перевіряє фонове завдання bash. + - `!stop [sessionId]` зупиняє фонове завдання bash. -### Згенеровані dock-команди +### Згенеровані команди dock -Dock-команди перемикають маршрут відповіді поточної сесії на інший пов'язаний -канал. Див. [докінг каналів](/uk/concepts/channel-docking) щодо налаштування, -прикладів і усунення несправностей. +Команди dock перемикають маршрут відповіді поточного сеансу на інший пов’язаний +канал. Налаштування, приклади й усунення несправностей див. у [стикуванні каналів](/uk/concepts/channel-docking). -Dock-команди генеруються з плагінів каналів із підтримкою native-command. Поточний вбудований набір: +Команди dock генеруються з channel plugins із підтримкою нативних команд. Поточний вбудований набір: - `/dock-discord` (псевдонім: `/dock_discord`) - `/dock-mattermost` (псевдонім: `/dock_mattermost`) - `/dock-slack` (псевдонім: `/dock_slack`) - `/dock-telegram` (псевдонім: `/dock_telegram`) -Використовуйте dock-команди з прямого чату, щоб перемкнути маршрут відповіді поточної сесії на інший пов'язаний канал. Агент зберігає той самий контекст сесії, але майбутні відповіді для цієї сесії доставляються вибраному співрозмовнику каналу. +Використовуйте команди dock із прямого чату, щоб перемкнути маршрут відповіді поточного сеансу на інший пов’язаний канал. Агент зберігає той самий контекст сеансу, але майбутні відповіді для цього сеансу доставляються вибраному peer каналу. -Dock-команди потребують `session.identityLinks`. Відправник-джерело й цільовий співрозмовник мають бути в одній групі ідентичностей, наприклад `["telegram:123", "discord:456"]`. Якщо користувач Telegram з id `123` надсилає `/dock_discord`, OpenClaw зберігає `lastChannel: "discord"` і `lastTo: "456"` в активній сесії. Якщо відправник не пов'язаний зі співрозмовником Discord, команда відповідає підказкою з налаштування замість переходу до звичайного чату. +Команди dock потребують `session.identityLinks`. Відправник-джерело й цільовий peer мають бути в одній групі ідентичностей, наприклад `["telegram:123", "discord:456"]`. Якщо користувач Telegram з id `123` надсилає `/dock_discord`, OpenClaw зберігає `lastChannel: "discord"` і `lastTo: "456"` в активному сеансі. Якщо відправник не пов’язаний із peer Discord, команда відповідає підказкою з налаштування замість переходу до звичайного чату. -Докінг змінює лише маршрут активної сесії. Він не створює облікові записи каналів, не надає доступ, не обходить списки дозволеного каналів і не переносить історію транскрипту в іншу сесію. Використовуйте `/dock-telegram`, `/dock-slack`, `/dock-mattermost` або іншу згенеровану dock-команду, щоб знову перемкнути маршрут. +Docking змінює лише маршрут активного сеансу. Це не створює облікові записи каналів, не надає доступ, не обходить списки дозволів каналів і не переносить історію транскрипта до іншого сеансу. Використовуйте `/dock-telegram`, `/dock-slack`, `/dock-mattermost` або іншу згенеровану команду dock, щоб знову перемкнути маршрут. -### Вбудовані команди плагінів +### Команди вбудованих plugins -Вбудовані плагіни можуть додавати більше slash-команд. Поточні вбудовані команди в цьому репозиторії: +Вбудовані plugins можуть додавати більше slash-команд. Поточні вбудовані команди в цьому репозиторії: -- `/dreaming [on|off|status|help]` перемикає dreaming пам'яті. Див. [Dreaming](/uk/concepts/dreaming). -- `/pair [qr|status|pending|approve|cleanup|notify]` керує потоком сполучення/налаштування пристрою. Див. [Сполучення](/uk/channels/pairing). -- `/phone status|arm [duration]|disarm` тимчасово активує високоризикові команди телефонного вузла. -- `/voice status|list [limit]|set ` керує конфігурацією голосу Talk. У Discord назва native-команди — `/talkvoice`. -- `/card ...` надсилає пресети багатих карток LINE. Див. [LINE](/uk/channels/line). -- `/codex status|models|threads|resume|compact|review|diagnostics|account|mcp|skills` перевіряє й керує вбудованим app-server harness Codex. Див. [harness Codex](/uk/plugins/codex-harness). +- `/dreaming [on|off|status|help]` перемикає Dreaming пам’яті. Див. [Dreaming](/uk/concepts/dreaming). +- `/pair [qr|status|pending|approve|cleanup|notify]` керує потоком сполучення/налаштування пристрою. Див. [Pairing](/uk/channels/pairing). +- `/phone status|arm [duration]|disarm` тимчасово озброює високоризикові команди телефонного вузла. +- `/voice status|list [limit]|set ` керує конфігурацією голосу Talk. У Discord нативна назва команди — `/talkvoice`. +- `/card ...` надсилає пресети насичених карток LINE. Див. [LINE](/uk/channels/line). +- `/codex status|models|threads|resume|compact|review|diagnostics|account|mcp|skills` перевіряє й керує вбудованим app-server harness Codex. Див. [Codex harness](/uk/plugins/codex-harness). - Команди лише для QQBot: - `/bot-ping` - `/bot-version` @@ -237,89 +237,90 @@ Dock-команди потребують `session.identityLinks`. Відправ - `/bot-upgrade` - `/bot-logs` -### Динамічні команди Skills +### Динамічні команди skills -Викликані користувачем Skills також доступні як slash-команди: +Skills, які може викликати користувач, також доступні як slash-команди: -- `/skill [input]` завжди працює як універсальна точка входу. -- Skills також можуть з'являтися як прямі команди на кшталт `/prose`, коли skill/plugin їх реєструє. -- Реєстрація native-команд Skills керується `commands.nativeSkills` і `channels..commands.nativeSkills`. +- `/skill [input]` завжди працює як загальна точка входу. +- skills також можуть з’являтися як прямі команди на кшталт `/prose`, коли skill/plugin їх реєструє. +- реєстрацією нативних команд skill керують `commands.nativeSkills` і `channels..commands.nativeSkills`. +- специфікації команд можуть надавати `descriptionLocalizations` для нативних поверхонь, які підтримують локалізовані описи, зокрема Discord. - - - Команди приймають необов'язковий `:` між командою та аргументами (наприклад, `/think: high`, `/send: on`, `/help:`). - - `/new ` приймає псевдонім моделі, `provider/model` або назву провайдера (нечіткий збіг); якщо збігу немає, текст розглядається як тіло повідомлення. - - Для повної розбивки використання провайдера використовуйте `openclaw status --usage`. + + - Команди приймають необов’язковий `:` між командою й аргументами (наприклад, `/think: high`, `/send: on`, `/help:`). + - `/new ` приймає псевдонім моделі, `provider/model` або назву provider (нечіткий збіг); якщо збігу немає, текст обробляється як тіло повідомлення. + - Для повної розбивки використання provider скористайтеся `openclaw status --usage`. - `/allowlist add|remove` потребує `commands.config=true` і враховує `configWrites` каналу. - - У багатооблікових каналах `/allowlist --account `, спрямований на конфігурацію, і `/config set channels..accounts....` також враховують `configWrites` цільового облікового запису. - - `/usage` керує футером використання для кожної відповіді; `/usage cost` друкує локальне зведення витрат із журналів сесій OpenClaw. - - `/restart` увімкнено типово; задайте `commands.restart: false`, щоб вимкнути. - - `/plugins install ` приймає ті самі специфікації плагінів, що й `openclaw plugins install`: локальний шлях/архів, npm-пакет, `git:` або `clawhub:`. - - `/plugins enable|disable` оновлює конфігурацію плагінів і може запропонувати перезапуск. + - У каналах із кількома обліковими записами орієнтовані на конфігурацію `/allowlist --account ` і `/config set channels..accounts....` також враховують `configWrites` цільового облікового запису. + - `/usage` керує футером використання для кожної відповіді; `/usage cost` друкує локальний підсумок вартості з журналів сеансу OpenClaw. + - `/restart` типово ввімкнено; задайте `commands.restart: false`, щоб вимкнути. + - `/plugins install ` приймає ті самі специфікації plugin, що й `openclaw plugins install`: локальний шлях/архів, npm-пакет, `git:` або `clawhub:`. + - `/plugins enable|disable` оновлює конфігурацію plugin і може запропонувати перезапуск. - - Native-команда лише для Discord: `/vc join|leave|status` керує голосовими каналами (недоступно як текст). `join` потребує guild і вибраного голосового/сценічного каналу. Потребує `channels.discord.voice` і native-команд. - - Команди прив'язки тредів Discord (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) потребують увімкнених ефективних прив'язок тредів (`session.threadBindings.enabled` та/або `channels.discord.threadBindings.enabled`). - - Довідник команд ACP і runtime-поведінка: [агенти ACP](/uk/tools/acp-agents). + - Нативна команда лише для Discord: `/vc join|leave|status` керує голосовими каналами (недоступно як текст). `join` потребує guild і вибраного голосового/stage-каналу. Потребує `channels.discord.voice` і нативних команд. + - Команди прив’язки thread у Discord (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) потребують увімкнених ефективних прив’язок thread (`session.threadBindings.enabled` та/або `channels.discord.threadBindings.enabled`). + - Довідник команд ACP і поведінка runtime: [агенти ACP](/uk/tools/acp-agents). - - `/verbose` призначено для налагодження та додаткової видимості; тримайте його **вимкненим** під час звичайного використання. - - `/trace` вужчий за `/verbose`: він показує лише trace/debug-рядки, що належать плагінам, і не вмикає звичайний verbose-шум інструментів. - - `/fast on|off` зберігає перевизначення сесії. Використовуйте опцію `inherit` в UI сесій, щоб очистити його й повернутися до типових значень конфігурації. - - `/fast` залежить від провайдера: OpenAI/OpenAI Codex відображають його в `service_tier=priority` на native Responses endpoints, тоді як прямі публічні запити Anthropic, зокрема OAuth-автентифікований трафік, надісланий до `api.anthropic.com`, відображають його в `service_tier=auto` або `standard_only`. Див. [OpenAI](/uk/providers/openai) і [Anthropic](/uk/providers/anthropic). - - Зведення збоїв інструментів усе ще показуються, коли доречно, але докладний текст збою включається лише коли `/verbose` має значення `on` або `full`. - - `/reasoning`, `/verbose` і `/trace` ризиковані в групових налаштуваннях: вони можуть розкрити внутрішнє reasoning, вивід інструментів або діагностику плагінів, які ви не мали наміру показувати. Краще залишати їх вимкненими, особливо в групових чатах. + - `/verbose` призначено для налагодження й додаткової видимості; тримайте його **вимкненим** під час звичайного використання. + - `/trace` вужчий за `/verbose`: він показує лише trace/debug-рядки, що належать plugin, і залишає звичайний докладний шум інструментів вимкненим. + - `/fast on|off` зберігає перевизначення сеансу. Використовуйте опцію `inherit` в інтерфейсі Sessions, щоб очистити його й повернутися до типових значень конфігурації. + - `/fast` залежить від provider: OpenAI/OpenAI Codex зіставляють його з `service_tier=priority` на нативних endpoints Responses, тоді як прямі публічні запити Anthropic, зокрема OAuth-автентифікований трафік, надісланий до `api.anthropic.com`, зіставляють його з `service_tier=auto` або `standard_only`. Див. [OpenAI](/uk/providers/openai) і [Anthropic](/uk/providers/anthropic). + - Підсумки збоїв інструментів усе ще показуються, коли доречно, але докладний текст збою включається лише коли `/verbose` має значення `on` або `full`. + - `/reasoning`, `/verbose` і `/trace` ризиковані в групових налаштуваннях: вони можуть розкрити внутрішнє reasoning, вивід інструментів або діагностику plugin, які ви не мали наміру показувати. Бажано залишати їх вимкненими, особливо в групових чатах. - - - `/model` негайно зберігає нову модель сесії. + + - `/model` негайно зберігає нову модель сеансу. - Якщо агент неактивний, наступний запуск одразу використовує її. - - Якщо запуск уже активний, OpenClaw позначає live-перемикання як очікуване й перезапускає в нову модель лише в чистій точці повторної спроби. + - Якщо запуск уже активний, OpenClaw позначає live-перемикання як очікуване й перезапускається в нову модель лише в чистій точці повторної спроби. - Якщо активність інструментів або вивід відповіді вже почалися, очікуване перемикання може залишатися в черзі до пізнішої можливості повторної спроби або наступного ходу користувача. - - У локальному TUI `/crestodian [request]` повертає зі звичайного TUI агента до Crestodian. Це окремо від режиму порятунку каналів повідомлень і не надає віддалених повноважень конфігурації. + - У локальному TUI `/crestodian [request]` повертає зі звичайного TUI агента до Crestodian. Це окремо від режиму rescue для каналів повідомлень і не надає віддалених повноважень конфігурації. - - **Швидкий шлях:** повідомлення лише з командами від відправників зі списку дозволеного обробляються негайно (обхід черги + моделі). - - **Обмеження згадкою в групі:** повідомлення лише з командами від відправників зі списку дозволеного обходять вимоги згадки. - - **Inline-скорочення (лише відправники зі списку дозволеного):** певні команди також працюють, коли вбудовані у звичайне повідомлення, і видаляються до того, як модель побачить решту тексту. - - Приклад: `hey /status` запускає відповідь зі статусом, а решта тексту продовжує звичайний потік. + - **Швидкий шлях:** повідомлення лише з командами від відправників зі списку дозволів обробляються негайно (обхід черги + моделі). + - **Обмеження згадками в групі:** повідомлення лише з командами від відправників зі списку дозволів обходять вимоги до згадок. + - **Inline-скорочення (лише відправники зі списку дозволів):** деякі команди також працюють, коли вбудовані у звичайне повідомлення, і вилучаються до того, як модель побачить решту тексту. + - Приклад: `hey /status` викликає відповідь зі статусом, а решта тексту продовжує проходити звичайним потоком. - Наразі: `/help`, `/commands`, `/status`, `/whoami` (`/id`). - - Неавторизовані повідомлення лише з командами мовчки ігноруються, а inline-токени `/...` розглядаються як звичайний текст. + - Неавторизовані повідомлення лише з командами мовчки ігноруються, а inline-токени `/...` обробляються як звичайний текст. - - - **Команди Skills:** Skills з `user-invocable` доступні як slash-команди. Назви очищуються до `a-z0-9_` (макс. 32 символи); колізії отримують числові суфікси (наприклад, `_2`). - - `/skill [input]` запускає Skill за назвою (корисно, коли обмеження native-команд не дають створити окремі команди для кожного Skill). - - Типово команди Skills передаються моделі як звичайний запит. - - Skills можуть необов'язково оголосити `command-dispatch: tool`, щоб спрямувати команду безпосередньо до інструмента (детерміновано, без моделі). - - Приклад: `/prose` (плагін OpenProse) — див. [OpenProse](/uk/prose). - - **Аргументи native-команд:** Discord використовує автозавершення для динамічних опцій (і меню кнопок, коли ви пропускаєте обов'язкові аргументи). Telegram і Slack показують меню кнопок, коли команда підтримує варіанти вибору, а ви пропускаєте аргумент. Динамічні варіанти розв'язуються відносно цільової моделі сесії, тому специфічні для моделі опції, як-от рівні `/think`, дотримуються перевизначення `/model` цієї сесії. + + - **Команди Skills:** skills `user-invocable` доступні як slash-команди. Імена нормалізуються до `a-z0-9_` (макс. 32 символи); колізії отримують числові суфікси (наприклад, `_2`). + - `/skill [input]` запускає skill за назвою (корисно, коли обмеження нативних команд не дають створити окремі команди для кожного skill). + - Типово команди skill пересилаються моделі як звичайний запит. + - Skills можуть необов’язково оголошувати `command-dispatch: tool`, щоб спрямувати команду безпосередньо до інструмента (детерміновано, без моделі). + - Приклад: `/prose` (OpenProse plugin) — див. [OpenProse](/uk/prose). + - **Аргументи нативних команд:** Discord використовує автодоповнення для динамічних опцій (і меню кнопок, коли ви пропускаєте обов’язкові аргументи). Telegram і Slack показують меню кнопок, коли команда підтримує варіанти вибору, а ви пропускаєте аргумент. Динамічні варіанти розв’язуються відносно цільової моделі сеансу, тому специфічні для моделі опції, як-от рівні `/think`, наслідують перевизначення `/model` цього сеансу. ## `/tools` -`/tools` відповідає на runtime-питання, а не на питання конфігурації: **що цей агент може використовувати прямо зараз у цій розмові**. +`/tools` відповідає на runtime-запитання, а не на запитання конфігурації: **що цей агент може використовувати прямо зараз у цій розмові**. - Типовий `/tools` компактний і оптимізований для швидкого перегляду. - `/tools verbose` додає короткі описи. -- Поверхні native-команд, які підтримують аргументи, надають той самий перемикач режиму: `compact|verbose`. -- Результати прив'язані до сесії, тому зміна агента, каналу, треду, авторизації відправника або моделі може змінити вивід. -- `/tools` включає інструменти, які фактично доступні під час runtime, зокрема основні інструменти, підключені інструменти плагінів та інструменти, що належать каналам. +- Поверхні нативних команд, які підтримують аргументи, надають той самий перемикач режиму `compact|verbose`. +- Результати прив’язані до сеансу, тому зміна агента, каналу, thread, авторизації відправника або моделі може змінити вивід. +- `/tools` включає інструменти, які фактично доступні під час runtime, зокрема core-інструменти, підключені інструменти plugin та інструменти, що належать каналу. -Для редагування профілю й перевизначень використовуйте панель інструментів Control UI або поверхні конфігурації/каталогу, а не розглядайте `/tools` як статичний каталог. +Для редагування профілю й перевизначень використовуйте панель Tools в Control UI або поверхні конфігурації/каталогу, замість того щоб трактувати `/tools` як статичний каталог. ## Поверхні використання (що де показується) -- **Використання/квота провайдера** (приклад: "Claude 80% left") показується в `/status` для поточного провайдера моделі, коли ввімкнено відстеження використання. OpenClaw нормалізує вікна провайдера до `% left`; для MiniMax поля відсотків лише залишку інвертуються перед показом, а відповіді `model_remains` віддають перевагу запису chat-model плюс мітці плану з тегом моделі. -- **Рядки токенів/кешу** в `/status` можуть повертатися до останнього запису використання транскрипту, коли live-знімок сесії розріджений. Наявні ненульові live-значення все ще мають пріоритет, а fallback транскрипту також може відновити активну мітку runtime-моделі плюс більший prompt-орієнтований підсумок, коли збережені підсумки відсутні або менші. -- **Виконання проти runtime:** `/status` повідомляє `Execution` для ефективного шляху sandbox і `Runtime` для того, хто фактично запускає сесію: `OpenClaw Pi Default`, `OpenAI Codex`, CLI-бекенд або ACP-бекенд. -- **Токени/вартість для кожної відповіді** керується `/usage off|tokens|full` (додається до звичайних відповідей). -- `/model status` стосується **моделей/автентифікації/endpoints**, а не використання. +- **Використання/квота provider** (приклад: "Claude 80% left") показується в `/status` для provider поточної моделі, коли відстеження використання ввімкнено. OpenClaw нормалізує вікна provider до `% left`; для MiniMax поля відсотків лише залишку інвертуються перед показом, а відповіді `model_remains` надають перевагу запису chat-моделі плюс позначці plan із тегом моделі. +- **Рядки token/cache** у `/status` можуть повертатися до останнього запису використання транскрипта, коли live-знімок сеансу розріджений. Наявні ненульові live-значення все ще мають пріоритет, а fallback транскрипта також може відновити активну мітку runtime-моделі плюс більший prompt-орієнтований підсумок, коли збережені підсумки відсутні або менші. +- **Execution проти runtime:** `/status` повідомляє `Execution` для ефективного шляху sandbox і `Runtime` для того, хто фактично запускає сеанс: `OpenClaw Pi Default`, `OpenAI Codex`, CLI backend або ACP backend. +- **Token/cost для кожної відповіді** керується `/usage off|tokens|full` (додається до звичайних відповідей). +- `/model status` стосується **models/auth/endpoints**, а не використання. ## Вибір моделі (`/model`) @@ -336,16 +337,16 @@ Dock-команди потребують `session.identityLinks`. Відправ /model status ``` -Примітки: +Нотатки: -- `/model` і `/model list` показують компактний нумерований picker (родина моделі + доступні провайдери). -- У Discord `/model` і `/models` відкривають інтерактивний picker із dropdown-полями провайдера й моделі плюс крок Submit. -- `/model <#>` вибирає з цього picker (і віддає перевагу поточному провайдеру, коли можливо). -- `/model status` показує докладний перегляд, зокрема налаштований endpoint провайдера (`baseUrl`) і режим API (`api`), коли доступно. +- `/model` і `/model list` показують компактний нумерований вибір (сімейство моделей + доступні провайдери). +- У Discord `/model` і `/models` відкривають інтерактивний вибір із випадними списками провайдера й моделі, а також кроком Submit. +- `/model <#>` вибирає з цього списку (і за можливості надає перевагу поточному провайдеру). +- `/model status` показує детальний вигляд, зокрема налаштований endpoint провайдера (`baseUrl`) і режим API (`api`), коли вони доступні. -## Debug-перевизначення +## Перевизначення для налагодження -`/debug` дає змогу встановлювати **лише runtime** перевизначення конфігурації (у памʼяті, не на диску). Лише для власника. За замовчуванням вимкнено; увімкніть за допомогою `commands.debug: true`. +`/debug` дає змогу встановити **лише runtime** перевизначення конфігурації (у пам’яті, не на диску). Лише для власника. Вимкнено за замовчуванням; увімкніть за допомогою `commands.debug: true`. Приклади: @@ -358,12 +359,12 @@ Dock-команди потребують `session.identityLinks`. Відправ ``` -Перевизначення застосовуються негайно для нових зчитувань конфігурації, але **не** записуються в `openclaw.json`. Скористайтеся `/debug reset`, щоб очистити всі перевизначення й повернутися до конфігурації на диску. +Перевизначення негайно застосовуються до нових читань конфігурації, але **не** записуються в `openclaw.json`. Використовуйте `/debug reset`, щоб очистити всі перевизначення й повернутися до конфігурації на диску. ## Вивід трасування Plugin -`/trace` дає змогу перемикати **рядки трасування/налагодження plugin у межах сеансу** без увімкнення повного докладного режиму. +`/trace` дає змогу перемикати **прив’язані до сесії рядки трасування/налагодження Plugin** без увімкнення повного докладного режиму. Приклади: @@ -375,16 +376,16 @@ Dock-команди потребують `session.identityLinks`. Відправ Примітки: -- `/trace` без аргументу показує поточний стан трасування сеансу. -- `/trace on` вмикає рядки трасування plugin для поточного сеансу. +- `/trace` без аргументу показує поточний стан трасування сесії. +- `/trace on` вмикає рядки трасування Plugin для поточної сесії. - `/trace off` знову вимикає їх. -- Рядки трасування Plugin можуть зʼявлятися в `/status` і як додаткове діагностичне повідомлення після звичайної відповіді асистента. -- `/trace` не замінює `/debug`; `/debug` і надалі керує лише runtime перевизначеннями конфігурації. -- `/trace` не замінює `/verbose`; звичайний докладний вивід інструментів/статусу й надалі належить до `/verbose`. +- Рядки трасування Plugin можуть з’являтися в `/status` і як подальше діагностичне повідомлення після звичайної відповіді асистента. +- `/trace` не замінює `/debug`; `/debug` і далі керує лише runtime перевизначеннями конфігурації. +- `/trace` не замінює `/verbose`; звичайний докладний вивід інструментів/статусу й далі належить до `/verbose`. ## Оновлення конфігурації -`/config` записує у вашу конфігурацію на диску (`openclaw.json`). Лише для власника. За замовчуванням вимкнено; увімкніть за допомогою `commands.config: true`. +`/config` записує у вашу конфігурацію на диску (`openclaw.json`). Лише для власника. Вимкнено за замовчуванням; увімкніть за допомогою `commands.config: true`. Приклади: @@ -397,12 +398,12 @@ Dock-команди потребують `session.identityLinks`. Відправ ``` -Конфігурація перевіряється перед записом; недійсні зміни відхиляються. Оновлення `/config` зберігаються між перезапусками. +Конфігурацію перевіряють перед записом; недійсні зміни відхиляються. Оновлення `/config` зберігаються після перезапусків. ## Оновлення MCP -`/mcp` записує керовані OpenClaw визначення серверів MCP у `mcp.servers`. Лише для власника. За замовчуванням вимкнено; увімкніть за допомогою `commands.mcp: true`. +`/mcp` записує визначення MCP-серверів, керовані OpenClaw, у `mcp.servers`. Лише для власника. Вимкнено за замовчуванням; увімкніть за допомогою `commands.mcp: true`. Приклади: @@ -414,12 +415,12 @@ Dock-команди потребують `session.identityLinks`. Відправ ``` -`/mcp` зберігає конфігурацію в конфігурації OpenClaw, а не в налаштуваннях проєкту, що належать Pi. Runtime-адаптери вирішують, які транспорти фактично можна виконати. +`/mcp` зберігає конфігурацію в конфігурації OpenClaw, а не в налаштуваннях проєкту, якими володіє Pi. Runtime-адаптери вирішують, які транспорти фактично можна виконати. ## Оновлення Plugin -`/plugins` дає операторам змогу переглядати виявлені plugins і перемикати ввімкнення в конфігурації. Потоки лише для читання можуть використовувати `/plugin` як псевдонім. За замовчуванням вимкнено; увімкніть за допомогою `commands.plugins: true`. +`/plugins` дає операторам змогу переглядати виявлені Plugin і перемикати ввімкнення в конфігурації. Потоки лише для читання можуть використовувати `/plugin` як псевдонім. Вимкнено за замовчуванням; увімкніть за допомогою `commands.plugins: true`. Приклади: @@ -432,45 +433,45 @@ Dock-команди потребують `session.identityLinks`. Відправ ``` -- `/plugins list` і `/plugins show` використовують реальне виявлення plugin для поточного робочого простору та конфігурації на диску. -- `/plugins enable|disable` оновлює лише конфігурацію plugin; це не встановлює й не видаляє plugins. -- Після змін увімкнення/вимкнення перезапустіть gateway, щоб застосувати їх. +- `/plugins list` і `/plugins show` використовують реальне виявлення Plugin у поточній робочій області разом із конфігурацією на диску. +- `/plugins enable|disable` оновлює лише конфігурацію Plugin; це не встановлює й не видаляє Plugin. +- Після змін увімкнення/вимкнення перезапустіть Gateway, щоб застосувати їх. ## Примітки щодо поверхонь - - - **Текстові команди** виконуються у звичайному чат-сеансі (DM використовують спільний `main`, групи мають власний сеанс). - - **Нативні команди** використовують ізольовані сеанси: + + - **Текстові команди** виконуються у звичайній чат-сесії (DM використовують спільну `main`, групи мають власну сесію). + - **Нативні команди** використовують ізольовані сесії: - Discord: `agent::discord:slash:` - Slack: `agent::slack:slash:` (префікс налаштовується через `channels.slack.slashCommand.sessionPrefix`) - - Telegram: `telegram:slash:` (спрямовується на чат-сеанс через `CommandTargetSessionKey`) - - **`/stop`** спрямовується на активний чат-сеанс, щоб він міг перервати поточний запуск. + - Telegram: `telegram:slash:` (спрямовує на чат-сесію через `CommandTargetSessionKey`) + - **`/stop`** спрямовується на активну чат-сесію, щоб вона могла перервати поточний запуск. - `channels.slack.slashCommand` і надалі підтримується для однієї команди в стилі `/openclaw`. Якщо ви вмикаєте `commands.native`, потрібно створити одну slash-команду Slack для кожної вбудованої команди (ті самі назви, що й у `/help`). Меню аргументів команд для Slack доставляються як ефемерні кнопки Block Kit. + `channels.slack.slashCommand` усе ще підтримується для однієї команди в стилі `/openclaw`. Якщо ви вмикаєте `commands.native`, потрібно створити одну slash-команду Slack для кожної вбудованої команди (ті самі назви, що й у `/help`). Меню аргументів команд для Slack доставляються як ephemeral кнопки Block Kit. - Виняток для нативних команд Slack: зареєструйте `/agentstatus` (не `/status`), оскільки Slack резервує `/status`. Текстова `/status` і надалі працює в повідомленнях Slack. + Виняток для нативних команд Slack: зареєструйте `/agentstatus` (не `/status`), бо Slack резервує `/status`. Текстова `/status` і далі працює в повідомленнях Slack. ## Побічні запитання BTW -`/btw` — це швидке **побічне запитання** про поточний сеанс. +`/btw` — це швидке **побічне запитання** щодо поточної сесії. На відміну від звичайного чату: -- воно використовує поточний сеанс як фоновий контекст, -- виконується як окремий одноразовий виклик **без інструментів**, -- не змінює майбутній контекст сеансу, -- не записується в історію стенограми, -- доставляється як live-побічний результат замість звичайного повідомлення асистента. +- воно використовує поточну сесію як фоновий контекст, +- воно виконується як окремий одноразовий виклик **без інструментів**, +- воно не змінює майбутній контекст сесії, +- воно не записується в історію транскрипта, +- воно доставляється як живий побічний результат, а не як звичайне повідомлення асистента. -Це робить `/btw` корисним, коли потрібне тимчасове уточнення, поки основне завдання продовжує виконуватися. +Це робить `/btw` корисним, коли потрібне тимчасове уточнення, поки основне завдання триває. Приклад: @@ -478,9 +479,9 @@ Dock-команди потребують `session.identityLinks`. Відправ /btw what are we doing right now? ``` -Див. [Побічні запитання BTW](/uk/tools/btw), щоб отримати повну інформацію про поведінку та UX клієнта. +Див. [Побічні запитання BTW](/uk/tools/btw), щоб ознайомитися з повною поведінкою та деталями UX клієнта. -## Повʼязане +## Пов’язане - [Створення skills](/uk/tools/creating-skills) - [Skills](/uk/tools/skills) diff --git a/docs/uk/tools/web.md b/docs/uk/tools/web.md index 5b37ada39..fc3091749 100644 --- a/docs/uk/tools/web.md +++ b/docs/uk/tools/web.md @@ -2,30 +2,30 @@ read_when: - Ви хочете ввімкнути або налаштувати web_search - Ви хочете ввімкнути або налаштувати x_search - - Вам потрібно вибрати провайдера пошуку - - Ви хочете зрозуміти автоматичне виявлення та fallback провайдера + - Потрібно вибрати пошукового провайдера + - Ви хочете зрозуміти автовиявлення та резервний перехід провайдера sidebarTitle: Web Search -summary: web_search, x_search і web_fetch — пошук у вебі, пошук дописів у X або отримання вмісту сторінки -title: Вебпошук +summary: web_search, x_search і web_fetch -- пошук в інтернеті, пошук дописів X або отримання вмісту сторінки +title: Пошук в інтернеті x-i18n: - generated_at: "2026-04-27T06:29:17Z" - model: gpt-5.4 + generated_at: "2026-05-02T02:50:03Z" + model: gpt-5.5 provider: openai - source_hash: 9f8233a33f0729c6413eda59c4ebc3338a1e398e8280eb12650197225ef8981e + source_hash: 4de24a2430bbdfb0926dcec9dc3b44cc3a0af07f06ff2926e486168eac3d76d0 source_path: tools/web.md - workflow: 15 + workflow: 16 --- -Інструмент `web_search` виконує пошук у вебі за допомогою налаштованого провайдера і -повертає результати. Результати кешуються за запитом на 15 хвилин (це можна налаштувати). +Інструмент `web_search` шукає в інтернеті за допомогою налаштованого вами провайдера та +повертає результати. Результати кешуються за запитом на 15 хвилин (налаштовується). OpenClaw також містить `x_search` для дописів X (раніше Twitter) і -`web_fetch` для полегшеного отримання URL. На цьому етапі `web_fetch` залишається -локальним, тоді як `web_search` і `x_search` можуть під капотом використовувати xAI Responses. +`web_fetch` для легкого отримання URL. На цьому етапі `web_fetch` залишається +локальним, тоді як `web_search` і `x_search` можуть використовувати xAI Responses під капотом. `web_search` — це легкий HTTP-інструмент, а не автоматизація браузера. Для - сайтів із важким JS або логінами використовуйте [Web Browser](/uk/tools/browser). Для + сайтів із великою кількістю JS або входів в обліковий запис використовуйте [Веббраузер](/uk/tools/browser). Для отримання конкретного URL використовуйте [Web Fetch](/uk/tools/web-fetch). @@ -33,17 +33,17 @@ OpenClaw також містить `x_search` для дописів X (рані - Виберіть провайдера та завершіть усі необхідні кроки налаштування. Деякі провайдери - не потребують ключів, тоді як інші використовують API key. Докладніше - див. на сторінках провайдерів нижче. + Виберіть провайдера та виконайте потрібне налаштування. Деякі провайдери + не потребують ключа, тоді як інші використовують API-ключі. Докладніше див. + на сторінках провайдерів нижче. ```bash openclaw configure --section web ``` - Це збереже провайдера та всі потрібні облікові дані. Ви також можете задати env - var (наприклад, `BRAVE_API_KEY`) і пропустити цей крок для - провайдерів на основі API. + Це зберігає провайдера та всі потрібні облікові дані. Ви також можете задати змінну + середовища (наприклад `BRAVE_API_KEY`) і пропустити цей крок для провайдерів, + що працюють через API. Тепер агент може викликати `web_search`: @@ -52,7 +52,7 @@ OpenClaw також містить `x_search` для дописів X (рані await web_search({ query: "OpenClaw plugin SDK" }); ``` - Для дописів у X використовуйте: + Для дописів X використовуйте: ```javascript await x_search({ query: "dinner recipes" }); @@ -65,75 +65,75 @@ OpenClaw також містить `x_search` для дописів X (рані - Структуровані результати зі snippet. Підтримує режим `llm-context`, фільтри країни/мови. Доступний безкоштовний тариф. + Структуровані результати з фрагментами. Підтримує режим `llm-context`, фільтри країни/мови. Доступний безкоштовний рівень. - Fallback без ключа. API key не потрібен. Неофіційна інтеграція на основі HTML. + Резервний варіант без ключа. API-ключ не потрібен. Неофіційна інтеграція на основі HTML. - Нейронний + ключовий пошук із витяганням вмісту (highlights, текст, підсумки). + Нейронний + ключовий пошук із витягуванням вмісту (виділення, текст, підсумки). - Структуровані результати. Найкраще поєднується з `firecrawl_search` і `firecrawl_scrape` для глибокого витягання. + Структуровані результати. Найкраще поєднувати з `firecrawl_search` і `firecrawl_scrape` для глибокого витягування. - AI-синтезовані відповіді з цитуванням через grounding Google Search. + Відповіді, синтезовані ШІ, із цитуваннями через прив’язку до Google Search. - AI-синтезовані відповіді з цитуванням через web grounding xAI. + Відповіді, синтезовані ШІ, із цитуваннями через вебприв’язку xAI. - AI-синтезовані відповіді з цитуванням через вебпошук Moonshot. + Відповіді, синтезовані ШІ, із цитуваннями через вебпошук Moonshot. - Структуровані результати через API пошуку MiniMax Coding Plan. + Структуровані результати через пошуковий API MiniMax Coding Plan. - Пошук через локальний хост Ollama з входом у систему або розміщений API Ollama. + Пошук через локальний хост Ollama із виконаним входом або розміщений API Ollama. - Структуровані результати з елементами керування витяганням вмісту та фільтрацією доменів. + Структуровані результати з елементами керування витягуванням вмісту та фільтрацією доменів. - Самостійно розміщений метапошук. API key не потрібен. Агрегує Google, Bing, DuckDuckGo та інші. + Самостійно розміщений метапошук. API-ключ не потрібен. Агрегує Google, Bing, DuckDuckGo тощо. - Структуровані результати з глибиною пошуку, фільтрацією тем і `tavily_extract` для витягання URL. + Структуровані результати з глибиною пошуку, фільтрацією за темою та `tavily_extract` для витягування URL. ### Порівняння провайдерів -| Провайдер | Стиль результатів | Фільтри | API key | -| ----------------------------------------- | --------------------------- | ------------------------------------------------ | --------------------------------------------------------------------------------------- | -| [Brave](/uk/tools/brave-search) | Структуровані snippet | Країна, мова, час, режим `llm-context` | `BRAVE_API_KEY` | -| [DuckDuckGo](/uk/tools/duckduckgo-search) | Структуровані snippet | -- | Немає (без ключа) | -| [Exa](/uk/tools/exa-search) | Структуровані + витягнуті | Нейронний/ключовий режим, дата, витягання вмісту | `EXA_API_KEY` | -| [Firecrawl](/uk/tools/firecrawl) | Структуровані snippet | Через інструмент `firecrawl_search` | `FIRECRAWL_API_KEY` | -| [Gemini](/uk/tools/gemini-search) | AI-синтезовані + цитування | -- | `GEMINI_API_KEY` | -| [Grok](/uk/tools/grok-search) | AI-синтезовані + цитування | -- | `XAI_API_KEY` | -| [Kimi](/uk/tools/kimi-search) | AI-синтезовані + цитування | -- | `KIMI_API_KEY` / `MOONSHOT_API_KEY` | -| [MiniMax Search](/uk/tools/minimax-search) | Структуровані snippet | Регіон (`global` / `cn`) | `MINIMAX_CODE_PLAN_KEY` / `MINIMAX_CODING_API_KEY` | -| [Ollama Web Search](/uk/tools/ollama-search) | Структуровані snippet | -- | Немає для локальних хостів із входом у систему; `OLLAMA_API_KEY` для прямого пошуку `https://ollama.com` | -| [Perplexity](/uk/tools/perplexity-search) | Структуровані snippet | Країна, мова, час, домени, обмеження вмісту | `PERPLEXITY_API_KEY` / `OPENROUTER_API_KEY` | -| [SearXNG](/uk/tools/searxng-search) | Структуровані snippet | Категорії, мова | Немає (самостійно розміщений) | -| [Tavily](/uk/tools/tavily) | Структуровані snippet | Через інструмент `tavily_search` | `TAVILY_API_KEY` | +| Провайдер | Стиль результатів | Фільтри | API-ключ | +| ----------------------------------------- | -------------------------- | ----------------------------------------------- | --------------------------------------------------------------------------------------- | +| [Brave](/uk/tools/brave-search) | Структуровані фрагменти | Країна, мова, час, режим `llm-context` | `BRAVE_API_KEY` | +| [DuckDuckGo](/uk/tools/duckduckgo-search) | Структуровані фрагменти | -- | Немає (без ключа) | +| [Exa](/uk/tools/exa-search) | Структуровані + витягнуті | Нейронний/ключовий режим, дата, витягування вмісту | `EXA_API_KEY` | +| [Firecrawl](/uk/tools/firecrawl) | Структуровані фрагменти | Через інструмент `firecrawl_search` | `FIRECRAWL_API_KEY` | +| [Gemini](/uk/tools/gemini-search) | Синтезовані ШІ + цитування | -- | `GEMINI_API_KEY` | +| [Grok](/uk/tools/grok-search) | Синтезовані ШІ + цитування | -- | `XAI_API_KEY` | +| [Kimi](/uk/tools/kimi-search) | Синтезовані ШІ + цитування | -- | `KIMI_API_KEY` / `MOONSHOT_API_KEY` | +| [MiniMax Search](/uk/tools/minimax-search) | Структуровані фрагменти | Регіон (`global` / `cn`) | `MINIMAX_CODE_PLAN_KEY` / `MINIMAX_CODING_API_KEY` | +| [Ollama Web Search](/uk/tools/ollama-search) | Структуровані фрагменти | -- | Немає для локальних хостів із виконаним входом; `OLLAMA_API_KEY` для прямого пошуку `https://ollama.com` | +| [Perplexity](/uk/tools/perplexity-search) | Структуровані фрагменти | Країна, мова, час, домени, обмеження вмісту | `PERPLEXITY_API_KEY` / `OPENROUTER_API_KEY` | +| [SearXNG](/uk/tools/searxng-search) | Структуровані фрагменти | Категорії, мова | Немає (самостійне розміщення) | +| [Tavily](/uk/tools/tavily) | Структуровані фрагменти | Через інструмент `tavily_search` | `TAVILY_API_KEY` | ## Автовиявлення -## Власний вебпошук OpenAI +## Вбудований вебпошук OpenAI -Прямі моделі OpenAI Responses автоматично використовують розміщений OpenAI інструмент `web_search`, коли вебпошук OpenClaw увімкнено й не зафіксовано керований провайдер. Це поведінка, що належить провайдеру у вбудованому plugin OpenAI, і вона застосовується лише до нативного API-трафіку OpenAI, а не до сумісних з OpenAI proxy base URL чи маршрутів Azure. Установіть `tools.web.search.provider` на іншого провайдера, наприклад `brave`, щоб зберегти керований інструмент `web_search` для моделей OpenAI, або встановіть `tools.web.search.enabled: false`, щоб вимкнути і керований пошук, і власний пошук OpenAI. +Прямі моделі OpenAI Responses автоматично використовують розміщений OpenAI інструмент `web_search`, коли вебпошук OpenClaw увімкнено й не закріплено керованого провайдера. Це поведінка, що належить провайдеру, у вбудованому OpenAI plugin, і вона застосовується лише до нативного трафіку OpenAI API, а не до OpenAI-сумісних проксі-базових URL або маршрутів Azure. Задайте для `tools.web.search.provider` іншого провайдера, наприклад `brave`, щоб зберегти керований інструмент `web_search` для моделей OpenAI, або задайте `tools.web.search.enabled: false`, щоб вимкнути і керований пошук, і нативний пошук OpenAI. -## Власний вебпошук Codex +## Вбудований вебпошук Codex -Моделі з підтримкою Codex можуть за бажанням використовувати власний інструмент `web_search` провайдера Responses замість керованої функції `web_search` OpenClaw. +Моделі з підтримкою Codex можуть за бажанням використовувати провайдерський нативний інструмент Responses `web_search` замість керованої функції OpenClaw `web_search`. -- Налаштовується через `tools.web.search.openaiCodex` -- Активується лише для моделей із підтримкою Codex (`openai-codex/*` або провайдерів, що використовують `api: "openai-codex-responses"`) +- Налаштуйте його в `tools.web.search.openaiCodex` +- Він активується лише для моделей із підтримкою Codex (`openai-codex/*` або провайдерів, що використовують `api: "openai-codex-responses"`) - Керований `web_search` і далі застосовується до моделей без Codex -- `mode: "cached"` — типове та рекомендоване значення -- `tools.web.search.enabled: false` вимикає і керований, і власний пошук +- `mode: "cached"` є стандартним і рекомендованим налаштуванням +- `tools.web.search.enabled: false` вимикає і керований, і нативний пошук ```json5 { @@ -158,15 +158,15 @@ OpenClaw також містить `x_search` для дописів X (рані } ``` -Якщо власний пошук Codex увімкнено, але поточна модель не підтримує Codex, OpenClaw зберігає звичайну поведінку керованого `web_search`. +Якщо нативний пошук Codex увімкнено, але поточна модель не підтримує Codex, OpenClaw зберігає звичайну поведінку керованого `web_search`. ## Налаштування вебпошуку -Списки провайдерів у документації та потоках налаштування наведено за алфавітом. Автовиявлення використовує -окремий порядок пріоритетів. +Списки провайдерів у документації та потоках налаштування впорядковані за абеткою. Автовиявлення зберігає +окремий порядок пріоритету. -Якщо `provider` не задано, OpenClaw перевіряє провайдерів у такому порядку й використовує -першого, який готовий: +Якщо `provider` не задано, OpenClaw перевіряє провайдерів у такому порядку та використовує +першого готового: Спочатку провайдери на основі API: @@ -180,25 +180,25 @@ OpenClaw також містить `x_search` для дописів X (рані 8. **Exa** -- `EXA_API_KEY` або `plugins.entries.exa.config.webSearch.apiKey` (порядок 65) 9. **Tavily** -- `TAVILY_API_KEY` або `plugins.entries.tavily.config.webSearch.apiKey` (порядок 70) -Після цього fallback без ключа: +Після цього резервні варіанти без ключа: -10. **DuckDuckGo** -- HTML-fallback без ключа, без облікового запису чи API key (порядок 100) -11. **Ollama Web Search** -- fallback без ключа через ваш налаштований локальний хост Ollama, коли він доступний і виконано `ollama signin`; може повторно використовувати bearer auth провайдера Ollama, коли це потрібно хосту, і може викликати прямий пошук `https://ollama.com`, якщо налаштовано `OLLAMA_API_KEY` (порядок 110) +10. **DuckDuckGo** -- резервний HTML-варіант без ключа, без облікового запису чи API-ключа (порядок 100) +11. **Ollama Web Search** -- резервний варіант без ключа через ваш налаштований локальний хост Ollama, коли він доступний і в ньому виконано вхід за допомогою `ollama signin`; може повторно використовувати bearer-автентифікацію провайдера Ollama, коли хост її потребує, і може викликати прямий пошук `https://ollama.com`, коли налаштовано `OLLAMA_API_KEY` (порядок 110) 12. **SearXNG** -- `SEARXNG_BASE_URL` або `plugins.entries.searxng.config.webSearch.baseUrl` (порядок 200) -Якщо жодного провайдера не виявлено, використовується Brave (ви отримаєте помилку -про відсутній ключ із пропозицією налаштувати його). +Якщо жодного провайдера не виявлено, він повертається до Brave (ви отримаєте помилку про відсутній ключ +із запитом налаштувати його). - Усі поля ключів провайдерів підтримують об’єкти SecretRef. SecretRef - у межах plugin у `plugins.entries..config.webSearch.apiKey` визначаються для - вбудованих провайдерів вебпошуку на основі API, включно з Brave, Exa, Firecrawl, + Усі поля ключів провайдерів підтримують об’єкти SecretRef. SecretRef у межах plugin + за шляхом `plugins.entries..config.webSearch.apiKey` розв’язуються для + вбудованих провайдерів вебпошуку на основі API, зокрема Brave, Exa, Firecrawl, Gemini, Grok, Kimi, MiniMax, Perplexity і Tavily, - незалежно від того, чи провайдер вибрано явно через `tools.web.search.provider`, чи - через автовиявлення. У режимі автовиявлення OpenClaw визначає лише ключ - вибраного провайдера — SecretRef невибраних провайдерів залишаються неактивними, тож ви можете - тримати налаштованими кількох провайдерів, не сплачуючи вартість визначення для - тих, які не використовуєте. + незалежно від того, чи провайдера явно вибрано через `tools.web.search.provider`, чи + вибрано через автовиявлення. У режимі автовиявлення OpenClaw розв’язує лише + ключ вибраного провайдера -- невибрані SecretRef залишаються неактивними, тож ви можете + тримати налаштованими кілька провайдерів без витрат на розв’язання для тих, + які ви не використовуєте. ## Конфігурація @@ -208,8 +208,8 @@ OpenClaw також містить `x_search` для дописів X (рані tools: { web: { search: { - enabled: true, // типово: true - provider: "brave", // або пропустіть для автовиявлення + enabled: true, // default: true + provider: "brave", // or omit for auto-detection maxResults: 5, timeoutSeconds: 30, cacheTtlMinutes: 15, @@ -219,37 +219,34 @@ OpenClaw також містить `x_search` для дописів X (рані } ``` -Конфігурація для конкретного провайдера (API key, base URL, режими) знаходиться в +Конфігурація, специфічна для провайдера (API-ключі, базові URL, режими), розміщується в `plugins.entries..config.webSearch.*`. Приклади див. на сторінках провайдерів. -Вибір fallback-провайдера для `web_fetch` виконується окремо: +Вибір резервного провайдера `web_fetch` є окремим: -- виберіть його через `tools.web.fetch.provider` -- або пропустіть це поле й дозвольте OpenClaw автоматично виявити першого готового - провайдера web-fetch серед доступних облікових даних -- наразі вбудованим провайдером web-fetch є Firecrawl, який налаштовується через +- виберіть його за допомогою `tools.web.fetch.provider` +- або опустіть це поле та дозвольте OpenClaw автоматично виявити першого готового провайдера web-fetch + з доступних облікових даних +- наразі вбудований провайдер web-fetch — Firecrawl, налаштований у `plugins.entries.firecrawl.config.webFetch.*` Коли ви вибираєте **Kimi** під час `openclaw onboard` або `openclaw configure --section web`, OpenClaw також може запитати: -- API-регіон Moonshot (`https://api.moonshot.ai/v1` або `https://api.moonshot.cn/v1`) -- типову модель вебпошуку Kimi (типово `kimi-k2.6`) +- регіон Moonshot API (`https://api.moonshot.ai/v1` або `https://api.moonshot.cn/v1`) +- стандартну модель вебпошуку Kimi (стандартно `kimi-k2.6`) -Для `x_search` налаштуйте `plugins.entries.xai.config.xSearch.*`. Він використовує -той самий fallback `XAI_API_KEY`, що й вебпошук Grok. -Застарілу конфігурацію `tools.web.x_search.*` автоматично мігрує `openclaw doctor --fix`. +Для `x_search` налаштуйте `plugins.entries.xai.config.xSearch.*`. Він використовує той самий резервний `XAI_API_KEY`, що й вебпошук Grok. +Застаріла конфігурація `tools.web.x_search.*` автоматично мігрується командою `openclaw doctor --fix`. Коли ви вибираєте Grok під час `openclaw onboard` або `openclaw configure --section web`, OpenClaw також може запропонувати необов’язкове налаштування `x_search` з тим самим ключем. -Це окремий подальший крок усередині шляху Grok, а не окремий вибір провайдера -вебпошуку верхнього рівня. Якщо ви виберете іншого провайдера, OpenClaw не -показуватиме запит для `x_search`. +Це окремий наступний крок усередині шляху Grok, а не окремий вибір провайдера вебпошуку верхнього рівня. Якщо ви виберете іншого провайдера, OpenClaw не показуватиме запит `x_search`. -### Зберігання API key +### Зберігання API-ключів - Запустіть `openclaw configure --section web` або задайте ключ безпосередньо: + Запустіть `openclaw configure --section web` або задайте ключ напряму: ```json5 { @@ -269,14 +266,14 @@ OpenClaw також може запропонувати необов’язко - Задайте env var провайдера в середовищі процесу Gateway: + Задайте змінну середовища провайдера в середовищі процесу Gateway: ```bash export BRAVE_API_KEY="YOUR_KEY" ``` Для встановлення gateway помістіть її в `~/.openclaw/.env`. - Див. [Змінні env](/uk/help/faq#env-vars-and-env-loading). + Див. [Змінні середовища](/uk/help/faq#env-vars-and-env-loading). @@ -284,44 +281,49 @@ OpenClaw також може запропонувати необов’язко ## Параметри інструмента | Параметр | Опис | -| -------------------- | ----------------------------------------------------- | -| `query` | Пошуковий запит (обов’язково) | -| `count` | Кількість результатів для повернення (1-10, типово: 5) | -| `country` | 2-літерний код країни ISO (наприклад, "US", "DE") | -| `language` | Код мови ISO 639-1 (наприклад, "en", "de") | -| `search_lang` | Код мови пошуку (лише Brave) | -| `freshness` | Фільтр часу: `day`, `week`, `month` або `year` | -| `date_after` | Результати після цієї дати (YYYY-MM-DD) | -| `date_before` | Результати до цієї дати (YYYY-MM-DD) | -| `ui_lang` | Код мови UI (лише Brave) | -| `domain_filter` | Масив allowlist/denylist доменів (лише Perplexity) | -| `max_tokens` | Загальний бюджет вмісту, типово 25000 (лише Perplexity) | -| `max_tokens_per_page`| Обмеження токенів на сторінку, типово 2048 (лише Perplexity) | +| --------------------- | ----------------------------------------------------- | +| `query` | Пошуковий запит (обов’язково) | +| `count` | Кількість результатів для повернення (1-10, типово: 5) | +| `country` | 2-літерний код країни ISO (наприклад, "US", "DE") | +| `language` | Код мови ISO 639-1 (наприклад, "en", "de") | +| `search_lang` | Код мови пошуку (лише Brave) | +| `freshness` | Фільтр часу: `day`, `week`, `month` або `year` | +| `date_after` | Результати після цієї дати (YYYY-MM-DD) | +| `date_before` | Результати до цієї дати (YYYY-MM-DD) | +| `ui_lang` | Код мови інтерфейсу (лише Brave) | +| `domain_filter` | Масив дозволених/заборонених доменів (лише Perplexity) | +| `max_tokens` | Загальний бюджет вмісту, типово 25000 (лише Perplexity) | +| `max_tokens_per_page` | Обмеження токенів на сторінку, типово 2048 (лише Perplexity) | - Не всі параметри працюють з усіма провайдерами. Режим `llm-context` у Brave + Не всі параметри працюють з усіма провайдерами. Режим Brave `llm-context` відхиляє `ui_lang`, `freshness`, `date_after` і `date_before`. - Gemini, Grok і Kimi повертають одну AI-синтезовану відповідь із цитуваннями. Вони + Gemini, Grok і Kimi повертають одну синтезовану відповідь із цитуваннями. Вони приймають `count` для сумісності зі спільним інструментом, але це не змінює - форму grounded answer. + форму обґрунтованої відповіді. Perplexity поводиться так само, коли ви використовуєте шлях сумісності Sonar/OpenRouter (`plugins.entries.perplexity.config.webSearch.baseUrl` / `model` або `OPENROUTER_API_KEY`). - SearXNG приймає `http://` лише для довірених хостів у приватній мережі або loopback; + SearXNG приймає `http://` лише для довірених хостів приватної мережі або local loopback; публічні кінцеві точки SearXNG мають використовувати `https://`. - Firecrawl і Tavily підтримують через `web_search` - лише `query` і `count` -- для розширених параметрів використовуйте їхні спеціалізовані інструменти. + Firecrawl і Tavily підтримують лише `query` і `count` через `web_search` + -- використовуйте їхні спеціалізовані інструменти для розширених параметрів. ## x_search -`x_search` виконує запити до дописів у X (раніше Twitter) через xAI і повертає -AI-синтезовані відповіді з цитуваннями. Він приймає запити природною мовою та -необов’язкові структуровані фільтри. OpenClaw вмикає вбудований інструмент `x_search` -xAI лише для запиту, який обслуговує цей виклик інструмента. +`x_search` запитує дописи X (раніше Twitter) за допомогою xAI і повертає +синтезовані ШІ відповіді з цитуваннями. Він приймає запити природною мовою та +необов’язкові структуровані фільтри. OpenClaw вмикає вбудований інструмент xAI +`x_search` лише для запиту, який обслуговує цей виклик інструмента. - xAI документує `x_search` як інструмент із підтримкою пошуку за ключовими словами, семантичного пошуку, пошуку користувачів і отримання thread. Для статистики взаємодії на рівні окремого допису, як-от repost, replies, bookmarks або views, краще використовувати цільовий пошук за точним URL допису або status ID. Широкі пошуки за ключовими словами можуть знайти потрібний допис, але повернути менш повні метадані для конкретного допису. Гарний шаблон такий: спочатку знайдіть допис, а потім виконайте другий запит `x_search`, зосереджений саме на цьому дописі. + xAI документує `x_search` як такий, що підтримує пошук за ключовими словами, семантичний пошук, пошук користувачів + і отримання тредів. Для статистики взаємодії окремого допису, як-от репости, + відповіді, закладки або перегляди, віддавайте перевагу цільовому пошуку за точною URL-адресою допису + або ID статусу. Широкі пошуки за ключовими словами можуть знайти правильний допис, але повернути менш + повні метадані окремого допису. Добрий шаблон: спочатку знайдіть допис, а потім + запустіть другий запит `x_search`, зосереджений саме на цьому дописі. ### Конфігурація x_search @@ -335,13 +337,15 @@ xAI лише для запиту, який обслуговує цей викл xSearch: { enabled: true, model: "grok-4-1-fast-non-reasoning", + baseUrl: "https://api.x.ai/v1", // optional, overrides webSearch.baseUrl inlineCitations: false, maxTurns: 2, timeoutSeconds: 30, cacheTtlMinutes: 15, }, webSearch: { - apiKey: "xai-...", // необов’язково, якщо задано XAI_API_KEY + apiKey: "xai-...", // optional if XAI_API_KEY is set + baseUrl: "https://api.x.ai/v1", // optional shared xAI Responses base URL }, }, }, @@ -350,17 +354,22 @@ xAI лише для запиту, який обслуговує цей викл } ``` +`x_search` надсилає POST до `/responses`, коли +`plugins.entries.xai.config.xSearch.baseUrl` задано. Якщо це поле пропущено, +він повертається до `plugins.entries.xai.config.webSearch.baseUrl`, потім до +застарілого `tools.web.search.grok.baseUrl`, і зрештою до публічної кінцевої точки xAI. + ### Параметри x_search -| Параметр | Опис | -| -------------------------- | ------------------------------------------------------ | -| `query` | Пошуковий запит (обов’язково) | -| `allowed_x_handles` | Обмежити результати конкретними X handle | -| `excluded_x_handles` | Виключити конкретні X handle | -| `from_date` | Включати лише дописи, створені в цю дату або пізніше (YYYY-MM-DD) | -| `to_date` | Включати лише дописи, створені в цю дату або раніше (YYYY-MM-DD) | -| `enable_image_understanding` | Дозволити xAI аналізувати зображення, вкладені у відповідні дописи | -| `enable_video_understanding` | Дозволити xAI аналізувати відео, вкладені у відповідні дописи | +| Параметр | Опис | +| ---------------------------- | ------------------------------------------------------ | +| `query` | Пошуковий запит (обов’язково) | +| `allowed_x_handles` | Обмежити результати певними X handles | +| `excluded_x_handles` | Виключити певні X handles | +| `from_date` | Включати лише дописи на цю дату або після неї (YYYY-MM-DD) | +| `to_date` | Включати лише дописи на цю дату або до неї (YYYY-MM-DD) | +| `enable_image_understanding` | Дозволити xAI перевіряти зображення, прикріплені до відповідних дописів | +| `enable_video_understanding` | Дозволити xAI перевіряти відео, прикріплені до відповідних дописів | ### Приклад x_search @@ -373,7 +382,7 @@ await x_search({ ``` ```javascript -// Статистика окремого допису: використовуйте точний status URL або status ID, коли це можливо +// Per-post stats: use the exact status URL or status ID when possible await x_search({ query: "https://x.com/huntharo/status/1905678901234567890", }); @@ -382,23 +391,23 @@ await x_search({ ## Приклади ```javascript -// Базовий пошук +// Basic search await web_search({ query: "OpenClaw plugin SDK" }); -// Пошук для Німеччини +// German-specific search await web_search({ query: "TV online schauen", country: "DE", language: "de" }); -// Недавні результати (за минулий тиждень) +// Recent results (past week) await web_search({ query: "AI developments", freshness: "week" }); -// Діапазон дат +// Date range await web_search({ query: "climate research", date_after: "2024-01-01", date_before: "2024-06-30", }); -// Фільтрація доменів (лише Perplexity) +// Domain filtering (Perplexity only) await web_search({ query: "product reviews", domain_filter: ["-reddit.com", "-pinterest.com"], @@ -407,20 +416,20 @@ await web_search({ ## Профілі інструментів -Якщо ви використовуєте профілі інструментів або allowlist, додайте `web_search`, `x_search` або `group:web`: +Якщо ви використовуєте профілі інструментів або списки дозволів, додайте `web_search`, `x_search` або `group:web`: ```json5 { tools: { allow: ["web_search", "x_search"], - // або: allow: ["group:web"] (включає web_search, x_search і web_fetch) + // or: allow: ["group:web"] (includes web_search, x_search, and web_fetch) }, } ``` ## Пов’язане -- [Web Fetch](/uk/tools/web-fetch) -- отримання URL і витягання придатного для читання вмісту -- [Web Browser](/uk/tools/browser) -- повна автоматизація браузера для сайтів із важким JS +- [Web Fetch](/uk/tools/web-fetch) -- отримати URL і витягти читабельний вміст +- [Web Browser](/uk/tools/browser) -- повна автоматизація браузера для сайтів із великою кількістю JS - [Grok Search](/uk/tools/grok-search) -- Grok як провайдер `web_search` - [Ollama Web Search](/uk/tools/ollama-search) -- вебпошук без ключа через ваш хост Ollama