From 7ead56016730edc202b6792d9c8eb7f8459986fb Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Sat, 11 Apr 2026 01:20:47 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/gateway/cli-backends.md | 198 +++++++------- docs/uk/plugins/sdk-provider-plugins.md | 327 +++++++++++++----------- 2 files changed, 287 insertions(+), 238 deletions(-) diff --git a/docs/uk/gateway/cli-backends.md b/docs/uk/gateway/cli-backends.md index 841524719..ba9b751af 100644 --- a/docs/uk/gateway/cli-backends.md +++ b/docs/uk/gateway/cli-backends.md @@ -1,41 +1,41 @@ --- read_when: - - Ви хочете надійний резервний варіант, коли постачальники API зазнають збою - - Ви використовуєте Codex CLI або інші локальні CLI для AI і хочете повторно використовувати їх - - Ви хочете зрозуміти міст локального loopback MCP для доступу інструментів до бекенду CLI -summary: 'Бекенди CLI: локальний резервний CLI для AI з необов’язковим мостом інструментів MCP' + - Вам потрібен надійний резервний варіант, коли провайдери API виходять з ладу + - Ви використовуєте Codex CLI або інші локальні AI CLI і хочете повторно використовувати їх + - Ви хочете зрозуміти міст MCP local loopback для доступу CLI-бекенда до інструментів +summary: 'Бекенди CLI: локальний резервний варіант AI CLI з необов’язковим мостом інструментів MCP' title: Бекенди CLI x-i18n: - generated_at: "2026-04-10T12:46:33Z" + generated_at: "2026-04-11T01:19:12Z" model: gpt-5.4 provider: openai - source_hash: e122831eec29a5df302a7a72e57882c566398d29d6a79be924f601ce2f7a2291 + source_hash: d108dbea043c260a80d15497639298f71a6b4d800f68d7b39bc129f7667ca608 source_path: gateway/cli-backends.md workflow: 15 --- # Бекенди CLI (резервне середовище виконання) -OpenClaw може запускати **локальні CLI для AI** як **лише текстовий резервний варіант**, коли постачальники API недоступні, -обмежені за частотою запитів або тимчасово працюють нестабільно. Це навмисно консервативний підхід: +OpenClaw може запускати **локальні AI CLI** як **лише текстовий резервний варіант**, коли провайдери API недоступні, +обмежені за частотою запитів або тимчасово працюють некоректно. Це навмисно консервативний підхід: - **Інструменти OpenClaw не впроваджуються напряму**, але бекенди з `bundleMcp: true` - можуть отримувати інструменти шлюзу через міст локального loopback MCP. -- **JSONL-стримінг** для CLI, які це підтримують. + можуть отримувати інструменти шлюзу через міст MCP local loopback. +- **Потокова передача JSONL** для CLI, які це підтримують. - **Сесії підтримуються** (тому наступні ходи залишаються узгодженими). -- **Зображення можна передавати наскрізно**, якщо CLI приймає шляхи до зображень. +- **Зображення можна передавати далі**, якщо CLI приймає шляхи до зображень. -Це задумано як **страхувальна сітка**, а не як основний шлях. Використовуйте це, коли ви -хочете отримувати текстові відповіді у стилі «працює завжди» без залежності від зовнішніх API. +Це задумано як **страхувальна сітка**, а не як основний шлях. Використовуйте це, коли вам +потрібні текстові відповіді у стилі «завжди працює» без залежності від зовнішніх API. -Якщо вам потрібне повноцінне середовище з керуванням сесіями ACP, фоновими завданнями, -прив’язкою до потоку/розмови та постійними зовнішніми сесіями кодування, використовуйте -[Агенти ACP](/uk/tools/acp-agents). Бекенди CLI — це не ACP. +Якщо вам потрібне повне середовище виконання harness із керуванням сесіями ACP, фоновими завданнями, +прив’язкою до тредів/розмов і постійними зовнішніми сесіями кодування, використовуйте +[ACP Agents](/uk/tools/acp-agents). Бекенди CLI — це не ACP. ## Швидкий старт для початківців Ви можете використовувати Codex CLI **без жодної конфігурації** (вбудований плагін OpenAI -реєструє типовий бекенд): +реєструє стандартний бекенд): ```bash openclaw agent --message "hi" --model codex-cli/gpt-5.4 @@ -58,16 +58,16 @@ openclaw agent --message "hi" --model codex-cli/gpt-5.4 } ``` -От і все. Жодних ключів і жодної додаткової конфігурації автентифікації, окрім самої CLI. +І це все. Жодних ключів, жодної додаткової конфігурації автентифікації, окрім самої CLI. -Якщо ви використовуєте вбудований бекенд CLI як **основного постачальника повідомлень** на +Якщо ви використовуєте вбудований бекенд CLI як **основного провайдера повідомлень** на хості шлюзу, OpenClaw тепер автоматично завантажує вбудований плагін-власник, коли ваша конфігурація -явно посилається на цей бекенд у посиланні моделі або в +явно посилається на цей бекенд у посиланні на модель або в `agents.defaults.cliBackends`. -## Використання як резервного варіанту +## Використання як резервного варіанта -Додайте бекенд CLI до свого списку резервних варіантів, щоб він запускався лише тоді, коли основні моделі не працюють: +Додайте бекенд CLI до списку резервних варіантів, щоб він запускався лише тоді, коли основні моделі не працюють: ```json5 { @@ -88,20 +88,20 @@ openclaw agent --message "hi" --model codex-cli/gpt-5.4 Примітки: -- Якщо ви використовуєте `agents.defaults.models` (дозволений список), ви також повинні включити туди моделі вашого бекенду CLI. -- Якщо основний постачальник зазнає збою (автентифікація, обмеження швидкості, тайм-аути), OpenClaw - спробує далі бекенд CLI. +- Якщо ви використовуєте `agents.defaults.models` (allowlist), ви також маєте включити туди моделі вашого CLI-бекенда. +- Якщо основний провайдер не працює (автентифікація, обмеження частоти, тайм-аути), OpenClaw + спробує далі CLI-бекенд. ## Огляд конфігурації -Усі бекенди CLI знаходяться в: +Усі бекенди CLI розташовані за адресою: ``` agents.defaults.cliBackends ``` -Кожен запис має ключ у вигляді **id постачальника** (наприклад, `codex-cli`, `my-cli`). -ID постачальника стає лівою частиною вашого посилання моделі: +Кожен запис має ключ у вигляді **ідентифікатора провайдера** (наприклад, `codex-cli`, `my-cli`). +Ідентифікатор провайдера стає лівою частиною посилання на модель: ``` / @@ -131,7 +131,7 @@ ID постачальника стає лівою частиною вашого sessionMode: "existing", sessionIdFields: ["session_id", "conversation_id"], systemPromptArg: "--system", - // CLI у стилі Codex можуть замість цього вказувати на файл підказки: + // CLI у стилі Codex можуть натомість вказувати на файл prompt: // systemPromptFileConfigArg: "-c", // systemPromptFileConfigKey: "model_instructions_file", systemPromptWhen: "first", @@ -147,11 +147,11 @@ ID постачальника стає лівою частиною вашого ## Як це працює -1. **Вибирає бекенд** на основі префікса постачальника (`codex-cli/...`). -2. **Будує системну підказку** з використанням тієї ж підказки OpenClaw і контексту робочого простору. -3. **Запускає CLI** з ідентифікатором сесії (якщо підтримується), щоб історія залишалася узгодженою. +1. **Вибирає бекенд** на основі префікса провайдера (`codex-cli/...`). +2. **Створює системний prompt** з використанням того самого prompt OpenClaw і контексту робочого простору. +3. **Виконує CLI** з ідентифікатором сесії (якщо підтримується), щоб історія залишалася узгодженою. 4. **Розбирає вивід** (`JSON` або звичайний текст) і повертає фінальний текст. -5. **Зберігає ідентифікатори сесій** для кожного бекенду, щоб наступні ходи повторно використовували ту саму CLI-сесію. +5. **Зберігає ідентифікатори сесій** для кожного бекенда, щоб наступні запити повторно використовували ту саму CLI-сесію. Вбудований бекенд Anthropic `claude-cli` знову підтримується. Співробітники Anthropic @@ -160,66 +160,67 @@ ID постачальника стає лівою частиною вашого нову політику. -Вбудований бекенд OpenAI `codex-cli` передає системну підказку OpenClaw через -перевизначення конфігурації Codex `model_instructions_file` (`-c -model_instructions_file="..."`). Codex не надає прапорець у стилі Claude -`--append-system-prompt`, тому OpenClaw записує зібрану підказку у +Вбудований бекенд OpenAI `codex-cli` передає системний prompt OpenClaw через +перевизначення конфігурації `model_instructions_file` у Codex (`-c +model_instructions_file="..."`). Codex не надає прапорець +`--append-system-prompt`, як у Claude, тому OpenClaw записує зібраний prompt у тимчасовий файл для кожної нової сесії Codex CLI. -Вбудований бекенд Anthropic `claude-cli` отримує знімок навичок OpenClaw -двома способами: компактний каталог навичок OpenClaw у доданій системній підказці та +Вбудований бекенд Anthropic `claude-cli` отримує знімок Skills OpenClaw +двома способами: компактний каталог Skills OpenClaw у доданому системному prompt, а також тимчасовий плагін Claude Code, переданий через `--plugin-dir`. Плагін містить -лише допустимі навички для цього агента/сесії, тому рідний розпізнавач навичок Claude Code +лише ті Skills, які доступні для цього агента/сесії, тому вбудований резолвер Skills у Claude Code бачить той самий відфільтрований набір, який OpenClaw інакше рекламував би в -підказці. Перевизначення skill env/API key, як і раніше, застосовуються OpenClaw до середовища дочірнього процесу під час виконання. +prompt. Перевизначення env/API-ключів для Skills, як і раніше, застосовуються OpenClaw до +середовища дочірнього процесу під час запуску. ## Сесії -- Якщо CLI підтримує сесії, установіть `sessionArg` (наприклад, `--session-id`) або +- Якщо CLI підтримує сесії, задайте `sessionArg` (наприклад, `--session-id`) або `sessionArgs` (заповнювач `{sessionId}`), коли ідентифікатор потрібно вставити в кілька прапорців. -- Якщо CLI використовує **підкоманду відновлення** з іншими прапорцями, установіть +- Якщо CLI використовує **підкоманду resume** з іншими прапорцями, задайте `resumeArgs` (замінює `args` під час відновлення) і, за потреби, `resumeOutput` - (для відновлень не у форматі JSON). + (для відновлення без JSON). - `sessionMode`: - - `always`: завжди надсилає ідентифікатор сесії (новий UUID, якщо нічого не збережено). - - `existing`: надсилає ідентифікатор сесії лише якщо його вже було раніше збережено. - - `none`: ніколи не надсилає ідентифікатор сесії. + - `always`: завжди надсилати ідентифікатор сесії (новий UUID, якщо нічого не збережено). + - `existing`: надсилати ідентифікатор сесії, лише якщо його вже було збережено раніше. + - `none`: ніколи не надсилати ідентифікатор сесії. Примітки щодо серіалізації: -- `serialize: true` зберігає впорядкованість запусків у тій самій смузі. -- Більшість CLI серіалізують виконання в межах однієї смуги постачальника. -- OpenClaw скидає повторне використання збереженої CLI-сесії, коли змінюється стан автентифікації бекенду, зокрема після повторного входу, ротації токена або зміни облікових даних профілю автентифікації. +- `serialize: true` зберігає порядок запусків у тій самій лінії. +- Більшість CLI серіалізують роботу в межах однієї лінії провайдера. +- OpenClaw скидає повторне використання збереженої CLI-сесії, коли змінюється стан автентифікації бекенда, зокрема після повторного входу, ротації токена або зміни облікових даних профілю автентифікації. -## Зображення (наскрізна передача) +## Зображення (передавання далі) -Якщо ваша CLI приймає шляхи до зображень, установіть `imageArg`: +Якщо ваша CLI приймає шляхи до зображень, задайте `imageArg`: ```json5 imageArg: "--image", imageMode: "repeat" ``` -OpenClaw записуватиме зображення base64 у тимчасові файли. Якщо задано `imageArg`, ці +OpenClaw записуватиме зображення base64 у тимчасові файли. Якщо `imageArg` задано, ці шляхи передаються як аргументи CLI. Якщо `imageArg` відсутній, OpenClaw додає -шляхи до файлів у підказку (ін’єкція шляху), чого достатньо для CLI, які автоматично +шляхи до файлів у prompt (path injection), чого достатньо для CLI, які автоматично завантажують локальні файли зі звичайних шляхів. ## Входи / виходи - `output: "json"` (типово) намагається розібрати JSON і витягти текст + ідентифікатор сесії. -- Для JSON-виводу Gemini CLI OpenClaw зчитує текст відповіді з `response`, а - використання — з `stats`, коли `usage` відсутній або порожній. -- `output: "jsonl"` розбирає потоки JSONL (наприклад Codex CLI `--json`) і витягує фінальне повідомлення агента, а також ідентифікатори сесії, +- Для JSON-виводу Gemini CLI OpenClaw читає текст відповіді з `response`, а + використання — зі `stats`, якщо `usage` відсутнє або порожнє. +- `output: "jsonl"` розбирає потоки JSONL (наприклад, Codex CLI `--json`) і витягує фінальне повідомлення агента та ідентифікатори сесії, якщо вони присутні. - `output: "text"` трактує stdout як фінальну відповідь. Режими введення: -- `input: "arg"` (типово) передає підказку як останній аргумент CLI. -- `input: "stdin"` надсилає підказку через stdin. -- Якщо підказка дуже довга і встановлено `maxPromptArgChars`, використовується stdin. +- `input: "arg"` (типово) передає prompt як останній аргумент CLI. +- `input: "stdin"` надсилає prompt через stdin. +- Якщо prompt дуже довгий і задано `maxPromptArgChars`, використовується stdin. ## Типові значення (належать плагіну) @@ -249,26 +250,51 @@ OpenClaw записуватиме зображення base64 у тимчасо `gemini` у `PATH` (`brew install gemini-cli` або `npm install -g @google/gemini-cli`). -Примітки щодо JSON у Gemini CLI: +Примітки щодо JSON Gemini CLI: -- Текст відповіді зчитується з поля JSON `response`. -- Показники використання беруться з `stats`, якщо `usage` відсутній або порожній. -- `stats.cached` нормалізується в OpenClaw `cacheRead`. -- Якщо `stats.input` відсутній, OpenClaw виводить кількість вхідних токенів із +- Текст відповіді читається з поля JSON `response`. +- Використання бере резервне значення зі `stats`, якщо `usage` відсутнє або порожнє. +- `stats.cached` нормалізується до OpenClaw `cacheRead`. +- Якщо `stats.input` відсутнє, OpenClaw обчислює вхідні токени з `stats.input_tokens - stats.cached`. -Перевизначайте це лише за потреби (типовий випадок: абсолютний шлях `command`). +Перевизначайте лише за потреби (поширений випадок: абсолютний шлях `command`). ## Типові значення, що належать плагіну Типові значення бекендів CLI тепер є частиною поверхні плагіна: -- Плагіни реєструють їх через `api.registerCliBackend(...)`. -- `id` бекенду стає префіксом постачальника в посиланнях моделей. -- Конфігурація користувача в `agents.defaults.cliBackends.` як і раніше перевизначає типове значення плагіна. -- Очищення конфігурації, специфічне для бекенду, залишається у власності плагіна через необов’язковий +- Плагіни реєструють їх за допомогою `api.registerCliBackend(...)`. +- `id` бекенда стає префіксом провайдера в посиланнях на моделі. +- Конфігурація користувача в `agents.defaults.cliBackends.` усе ще перевизначає типове значення плагіна. +- Очищення конфігурації, специфічне для бекенда, залишається у власності плагіна через необов’язковий хук `normalizeConfig`. +Плагіни, яким потрібні невеликі суміснісні shim для prompt/повідомлень, можуть оголошувати +двонапрямні текстові перетворення без заміни провайдера або CLI-бекенда: + +```typescript +api.registerTextTransforms({ + input: [ + { from: /red basket/g, to: "blue basket" }, + { from: /paper ticket/g, to: "digital ticket" }, + { from: /left shelf/g, to: "right shelf" }, + ], + output: [ + { from: /blue basket/g, to: "red basket" }, + { from: /digital ticket/g, to: "paper ticket" }, + { from: /right shelf/g, to: "left shelf" }, + ], +}); +``` + +`input` переписує системний prompt і користувацький prompt, передані до CLI. `output` +переписує потокові дельти асистента та розібраний фінальний текст до того, як OpenClaw обробить +власні контрольні маркери та доставку каналом. + +Для CLI, які видають JSONL, сумісний із Claude Code stream-json, задайте +`jsonlDialect: "claude-stream-json"` у конфігурації цього бекенда. + ## Накладки bundle MCP Бекенди CLI **не** отримують виклики інструментів OpenClaw напряму, але бекенд може @@ -276,7 +302,7 @@ OpenClaw записуватиме зображення base64 у тимчасо Поточна вбудована поведінка: -- `claude-cli`: згенерований строгий файл конфігурації MCP +- `claude-cli`: згенерований файл суворої конфігурації MCP - `codex-cli`: вбудовані перевизначення конфігурації для `mcp_servers` - `google-gemini-cli`: згенерований файл системних налаштувань Gemini @@ -285,29 +311,29 @@ OpenClaw записуватиме зображення base64 у тимчасо - запускає loopback HTTP MCP-сервер, який надає інструменти шлюзу процесу CLI - автентифікує міст за допомогою токена для кожної сесії (`OPENCLAW_MCP_TOKEN`) - обмежує доступ до інструментів поточною сесією, обліковим записом і контекстом каналу -- завантажує увімкнені bundle-MCP сервери для поточного робочого простору -- об’єднує їх з будь-якою наявною формою конфігурації/налаштувань MCP бекенду -- переписує конфігурацію запуску з використанням режиму інтеграції, що належить бекенду з розширення-власника +- завантажує ввімкнені bundle-MCP-сервери для поточного робочого простору +- об’єднує їх із будь-якою наявною формою конфігурації/налаштувань MCP бекенда +- переписує конфігурацію запуску з використанням режиму інтеграції, що належить бекенду, від розширення-власника -Якщо сервери MCP не увімкнено, OpenClaw все одно впроваджує строгу конфігурацію, коли -бекенд використовує bundle MCP, щоб фонові запуски залишалися ізольованими. +Якщо жоден MCP-сервер не ввімкнено, OpenClaw все одно впроваджує сувору конфігурацію, коли +бекенд увімкнув bundle MCP, щоб фонові запуски залишалися ізольованими. ## Обмеження - **Немає прямих викликів інструментів OpenClaw.** OpenClaw не впроваджує виклики інструментів у - протокол бекенду CLI. Бекенди бачать інструменти шлюзу лише тоді, коли вони вмикають + протокол CLI-бекенда. Бекенди бачать інструменти шлюзу лише тоді, коли вони ввімкнули `bundleMcp: true`. -- **Стримінг залежить від конкретного бекенду.** Деякі бекенди передають JSONL потоком; інші буферизують - до завершення. +- **Потокова передача залежить від бекенда.** Деякі бекенди передають JSONL потоком; інші буферизують + дані до завершення. - **Структуровані виходи** залежать від JSON-формату CLI. -- **Сесії Codex CLI** відновлюються через текстовий вивід (без JSONL), що є менш - структурованим, ніж початковий запуск `--json`. Сесії OpenClaw при цьому все одно працюють - нормально. +- **Сесії Codex CLI** відновлюються через текстовий вивід (без JSONL), що менш + структуровано, ніж початковий запуск `--json`. Сесії OpenClaw при цьому все одно + працюють нормально. -## Усунення несправностей +## Усунення проблем -- **CLI не знайдено**: установіть для `command` повний шлях. +- **CLI не знайдено**: задайте `command` як повний шлях. - **Неправильна назва моделі**: використовуйте `modelAliases`, щоб зіставити `provider/model` → модель CLI. -- **Немає безперервності сесії**: переконайтеся, що встановлено `sessionArg` і що `sessionMode` не дорівнює +- **Немає безперервності сесії**: переконайтеся, що `sessionArg` задано, а `sessionMode` не дорівнює `none` (Codex CLI наразі не може відновлюватися з JSON-виводом). -- **Зображення ігноруються**: установіть `imageArg` (і перевірте, що CLI підтримує шляхи до файлів). +- **Зображення ігноруються**: задайте `imageArg` (і переконайтеся, що CLI підтримує шляхи до файлів). diff --git a/docs/uk/plugins/sdk-provider-plugins.md b/docs/uk/plugins/sdk-provider-plugins.md index 43f15c053..3790acaf3 100644 --- a/docs/uk/plugins/sdk-provider-plugins.md +++ b/docs/uk/plugins/sdk-provider-plugins.md @@ -1,37 +1,37 @@ --- read_when: - Ви створюєте новий плагін постачальника моделей - - Ви хочете додати до OpenClaw сумісний з OpenAI проксі або власну LLM - - Вам потрібно зрозуміти автентифікацію постачальника, каталоги та хуки середовища виконання + - Ви хочете додати до OpenClaw OpenAI-сумісний проксі або користувацьку LLM + - Вам потрібно зрозуміти автентифікацію постачальника, каталоги та runtime-хуки sidebarTitle: Provider Plugins summary: Покроковий посібник зі створення плагіна постачальника моделей для OpenClaw title: Створення плагінів постачальників x-i18n: - generated_at: "2026-04-10T20:23:46Z" + generated_at: "2026-04-11T01:19:09Z" model: gpt-5.4 provider: openai - source_hash: b81b80627fd594e2dc889c95359df665ebbbb85c74c231a226219dcb556f193b + source_hash: 06d7c5da6556dc3d9673a31142ff65eb67ddc97fc0c1a6f4826a2c7693ecd5e3 source_path: plugins/sdk-provider-plugins.md workflow: 15 --- # Створення плагінів постачальників -Цей посібник описує створення плагіна постачальника, який додає постачальника -моделей (LLM) до OpenClaw. Наприкінці у вас буде постачальник із каталогом -моделей, автентифікацією через API-ключ і динамічним визначенням моделей. +Цей посібник покроково пояснює створення плагіна постачальника, який додає постачальника моделей +(LLM) до OpenClaw. Наприкінці у вас буде постачальник із каталогом моделей, +автентифікацією за API-ключем і динамічним визначенням моделі. - Якщо ви ще не створювали жодного плагіна OpenClaw, спочатку прочитайте + Якщо ви раніше не створювали жодного плагіна OpenClaw, спочатку прочитайте [Початок роботи](/uk/plugins/building-plugins), щоб ознайомитися з базовою структурою пакета та налаштуванням маніфесту. Плагіни постачальників додають моделі до стандартного циклу інференсу OpenClaw. Якщо модель - має працювати через нативний демон агента, який керує потоками, компакцією або подіями - інструментів, поєднайте постачальника з [agent harness](/uk/plugins/sdk-agent-harness) - замість того, щоб виносити деталі протоколу демона в core. + має працювати через нативний демон агента, який керує потоками, ущільненням або подіями + інструментів, поєднуйте постачальника з [обв’язкою агента](/uk/plugins/sdk-agent-harness), + а не виносьте деталі протоколу демона в core. ## Покроковий приклад @@ -97,12 +97,12 @@ x-i18n: Маніфест оголошує `providerAuthEnvVars`, щоб OpenClaw міг виявляти - облікові дані без завантаження середовища виконання вашого плагіна. Додайте `providerAuthAliases`, - якщо варіант постачальника має повторно використовувати автентифікацію іншого ідентифікатора постачальника. `modelSupport` - є необов’язковим і дає OpenClaw змогу автоматично завантажувати ваш плагін постачальника зі скорочених - ідентифікаторів моделей, як-от `acme-large`, ще до появи хуків середовища виконання. Якщо ви публікуєте + облікові дані без завантаження runtime вашого плагіна. Додавайте `providerAuthAliases`, + коли варіант постачальника має повторно використовувати автентифікацію іншого id постачальника. `modelSupport` + є необов’язковим і дозволяє OpenClaw автоматично завантажувати ваш плагін постачальника зі скорочених + id моделей, таких як `acme-large`, ще до появи runtime-хуків. Якщо ви публікуєте постачальника на ClawHub, поля `openclaw.compat` і `openclaw.build` - у `package.json` є обов’язковими. + є обов’язковими в `package.json`. @@ -182,8 +182,30 @@ x-i18n: `openclaw onboard --acme-ai-api-key ` і вибрати `acme-ai/acme-large` як свою модель. + Якщо постачальник вище за потоком використовує інші керівні токени, ніж OpenClaw, додайте + невелике двостороннє текстове перетворення замість заміни шляху потоку: + + ```typescript + api.registerTextTransforms({ + input: [ + { from: /red basket/g, to: "blue basket" }, + { from: /paper ticket/g, to: "digital ticket" }, + { from: /left shelf/g, to: "right shelf" }, + ], + output: [ + { from: /blue basket/g, to: "red basket" }, + { from: /digital ticket/g, to: "paper ticket" }, + { from: /right shelf/g, to: "left shelf" }, + ], + }); + ``` + + `input` переписує фінальний системний промпт і текстовий вміст повідомлення перед + транспортуванням. `output` переписує текстові дельти відповіді асистента та фінальний текст до того, як + OpenClaw розбере власні керівні маркери або виконає доставку каналом. + Для вбудованих постачальників, які реєструють лише одного текстового постачальника з - автентифікацією через API-ключ плюс одне середовище виконання на основі каталогу, краще використовувати вужчий + автентифікацією за API-ключем і одним runtime, що працює через каталог, краще використовувати вужчий помічник `defineSingleProviderPluginEntry(...)`: ```typescript @@ -219,25 +241,25 @@ x-i18n: }); ``` - Якщо під час онбордингу ваш потік автентифікації також має змінювати `models.providers.*`, псевдоніми та - модель агента за замовчуванням, використовуйте готові помічники з - `openclaw/plugin-sdk/provider-onboard`. Найвужчі помічники — + Якщо вашому потоку автентифікації також потрібно змінювати `models.providers.*`, псевдоніми та + стандартну модель агента під час онбордингу, використовуйте preset-хелпери з + `openclaw/plugin-sdk/provider-onboard`. Найвужчі хелпери: `createDefaultModelPresetAppliers(...)`, `createDefaultModelsPresetAppliers(...)` і `createModelCatalogPresetAppliers(...)`. - Коли нативна кінцева точка постачальника підтримує потокові блоки використання у - стандартному транспорті `openai-completions`, віддавайте перевагу спільним помічникам каталогу з - `openclaw/plugin-sdk/provider-catalog-shared` замість жорстко закодованих перевірок ідентифікатора постачальника. + Коли нативний endpoint постачальника підтримує потокові блоки використання в межах + звичайного транспорту `openai-completions`, віддавайте перевагу спільним хелперам каталогу з + `openclaw/plugin-sdk/provider-catalog-shared` замість жорстко закодованих перевірок id постачальника. `supportsNativeStreamingUsageCompat(...)` і - `applyProviderNativeStreamingUsageCompat(...)` визначають підтримку за картою можливостей кінцевої точки, - тому нативні кінцеві точки на кшталт Moonshot/DashScope теж можуть увімкнути цю можливість, - навіть якщо плагін використовує власний ідентифікатор постачальника. + `applyProviderNativeStreamingUsageCompat(...)` визначають підтримку за мапою можливостей endpoint, тому + нативні endpoint-и у стилі Moonshot/DashScope також зможуть увімкнути цю функцію, навіть якщо плагін + використовує власний id постачальника. - - Якщо ваш постачальник приймає довільні ідентифікатори моделей (як проксі або маршрутизатор), + + Якщо ваш постачальник приймає довільні id моделей (наприклад, проксі або маршрутизатор), додайте `resolveDynamicModel`: ```typescript @@ -260,16 +282,16 @@ x-i18n: ``` Якщо для визначення потрібен мережевий виклик, використовуйте `prepareDynamicModel` для асинхронного - прогріву — після його завершення `resolveDynamicModel` виконається знову. + прогріву — після його завершення `resolveDynamicModel` запускається знову. - + Більшості постачальників потрібні лише `catalog` + `resolveDynamicModel`. Додавайте хуки - поступово, у міру потреб вашого постачальника. + поступово, у міру того як цього вимагатиме ваш постачальник. - Спільні генератори-помічники тепер охоплюють найпоширеніші сімейства сумісності replay/tool, - тому плагінам зазвичай не потрібно вручну підключати кожен хук окремо: + Спільні builder-хелпери тепер покривають найпоширеніші сімейства повторного відтворення та + сумісності інструментів, тому плагінам зазвичай не потрібно вручну підключати кожен хук окремо: ```typescript import { buildProviderReplayFamilyHooks } from "openclaw/plugin-sdk/provider-model-shared"; @@ -289,17 +311,17 @@ x-i18n: }); ``` - Наразі доступні такі сімейства replay: + Доступні сьогодні сімейства повторного відтворення: | Сімейство | Що воно підключає | | --- | --- | - | `openai-compatible` | Спільна політика replay у стилі OpenAI для сумісних з OpenAI транспортів, включно з очищенням ідентифікаторів викликів інструментів, виправленнями порядку assistant-first і загальною валідацією Gemini-turn там, де це потрібно транспорту | - | `anthropic-by-model` | Політика replay з урахуванням Claude, що вибирається за `modelId`, тому транспорти Anthropic-message отримують специфічне очищення thinking-block для Claude лише тоді, коли визначена модель справді є ідентифікатором Claude | - | `google-gemini` | Нативна політика replay для Gemini плюс очищення bootstrap replay і режим reasoning-output з тегами | - | `passthrough-gemini` | Очищення thought-signature для моделей Gemini, що працюють через сумісні з OpenAI проксі-транспорти; не вмикає нативну валідацію replay Gemini або переписування bootstrap | - | `hybrid-anthropic-openai` | Гібридна політика для постачальників, які поєднують поверхні моделей Anthropic-message і сумісні з OpenAI в одному плагіні; необов’язкове відкидання thinking-block лише для Claude залишається обмеженим стороною Anthropic | + | `openai-compatible` | Спільну політику повторного відтворення у стилі OpenAI для OpenAI-сумісних транспортів, зокрема санітизацію id викликів інструментів, виправлення порядку “assistant-first” і загальну валідацію ходів Gemini там, де цього потребує транспорт | + | `anthropic-by-model` | Політику повторного відтворення з урахуванням Claude, яка вибирається за `modelId`, щоб транспорти повідомлень Anthropic отримували специфічне очищення thinking-блоків Claude лише тоді, коли визначена модель справді має id Claude | + | `google-gemini` | Нативну політику повторного відтворення Gemini, а також санітизацію bootstrap replay і режим тегованого виводу міркувань | + | `passthrough-gemini` | Санітизацію сигнатури думок Gemini для моделей Gemini, що працюють через OpenAI-сумісні проксі-транспорти; не вмикає нативну валідацію повторного відтворення Gemini або переписування bootstrap | + | `hybrid-anthropic-openai` | Гібридну політику для постачальників, які поєднують поверхні моделей Anthropic-message та OpenAI-compatible в одному плагіні; необов’язкове відкидання thinking-блоків лише для Claude залишається обмеженим стороною Anthropic | - Реальні приклади вбудованих плагінів: + Реальні вбудовані приклади: - `google` і `google-gemini-cli`: `google-gemini` - `openrouter`, `kilocode`, `opencode` і `opencode-go`: `passthrough-gemini` @@ -307,19 +329,19 @@ x-i18n: - `minimax`: `hybrid-anthropic-openai` - `moonshot`, `ollama`, `xai` і `zai`: `openai-compatible` - Наразі доступні такі сімейства stream: + Доступні сьогодні сімейства потоків: | Сімейство | Що воно підключає | | --- | --- | - | `google-thinking` | Нормалізація payload thinking Gemini у спільному шляху stream | - | `kilocode-thinking` | Обгортка reasoning Kilo у спільному шляху проксі-stream, де `kilo/auto` і непідтримувані ідентифікатори reasoning проксі пропускають інжектований thinking | - | `moonshot-thinking` | Відображення бінарного payload native-thinking Moonshot із конфігурації та рівня `/think` | - | `minimax-fast-mode` | Переписування моделей MiniMax fast-mode у спільному шляху stream | - | `openai-responses-defaults` | Спільні нативні обгортки OpenAI/Codex Responses: заголовки атрибуції, `/fast`/`serviceTier`, деталізація тексту, нативний вебпошук Codex, формування payload для сумісності reasoning і керування контекстом Responses | - | `openrouter-thinking` | Обгортка reasoning OpenRouter для проксі-маршрутів, де пропуски для непідтримуваних моделей і `auto` централізовано обробляються | - | `tool-stream-default-on` | Обгортка `tool_stream`, увімкнена за замовчуванням, для постачальників на кшталт Z.AI, які хочуть потокову передачу інструментів, якщо її явно не вимкнено | + | `google-thinking` | Нормалізацію thinking payload Gemini на спільному шляху потоку | + | `kilocode-thinking` | Обгортку міркувань Kilo на спільному шляху проксі-потоку, де `kilo/auto` і непідтримувані id міркувань проксі пропускають ін’єктований thinking | + | `moonshot-thinking` | Мапінг binary native-thinking payload Moonshot із config + рівня `/think` | + | `minimax-fast-mode` | Переписування моделі MiniMax fast-mode на спільному шляху потоку | + | `openai-responses-defaults` | Спільні нативні обгортки OpenAI/Codex Responses: заголовки attribution, `/fast`/`serviceTier`, деталізація тексту, нативний вебпошук Codex, формування payload для сумісності з reasoning і керування контекстом Responses | + | `openrouter-thinking` | Обгортку міркувань OpenRouter для проксі-маршрутів, із централізованою обробкою пропусків для непідтримуваних моделей/`auto` | + | `tool-stream-default-on` | Стандартно ввімкнену обгортку `tool_stream` для постачальників на кшталт Z.AI, яким потрібен потоковий режим інструментів, якщо його явно не вимкнено | - Реальні приклади вбудованих плагінів: + Реальні вбудовані приклади: - `google` і `google-gemini-cli`: `google-thinking` - `kilocode`: `kilocode-thinking` @@ -330,24 +352,24 @@ x-i18n: - `zai`: `tool-stream-default-on` `openclaw/plugin-sdk/provider-model-shared` також експортує enum сімейств - replay, а також спільні помічники, з яких побудовані ці сімейства. Серед - поширених публічних експортів: + повторного відтворення, а також спільні хелпери, з яких ці сімейства будуються. Поширені публічні + експорти включають: - `ProviderReplayFamily` - `buildProviderReplayFamilyHooks(...)` - - спільні генератори replay, такі як `buildOpenAICompatibleReplayPolicy(...)`, + - спільні builder-и повторного відтворення, такі як `buildOpenAICompatibleReplayPolicy(...)`, `buildAnthropicReplayPolicyForModel(...)`, `buildGoogleGeminiReplayPolicy(...)` і `buildHybridAnthropicOrOpenAIReplayPolicy(...)` - - помічники replay для Gemini, такі як `sanitizeGoogleGeminiReplayHistory(...)` + - хелпери повторного відтворення Gemini, такі як `sanitizeGoogleGeminiReplayHistory(...)` і `resolveTaggedReasoningOutputMode()` - - помічники для endpoint/моделей, такі як `resolveProviderEndpoint(...)`, + - хелпери endpoint-ів/моделей, такі як `resolveProviderEndpoint(...)`, `normalizeProviderId(...)`, `normalizeGooglePreviewModelId(...)` і `normalizeNativeXaiModelId(...)` - `openclaw/plugin-sdk/provider-stream` надає як генератор сімейств, так і - публічні помічники-обгортки, які ці сімейства повторно використовують. Серед - поширених публічних експортів: + `openclaw/plugin-sdk/provider-stream` надає як builder сімейств, так і + публічні хелпери-обгортки, які ці сімейства повторно використовують. Поширені публічні експорти + включають: - `ProviderStreamFamily` - `buildProviderStreamFamilyHooks(...)` @@ -361,45 +383,45 @@ x-i18n: - спільні обгортки проксі/постачальників, такі як `createOpenRouterWrapper(...)`, `createToolStreamWrapper(...)` і `createMinimaxFastModeWrapper(...)` - Деякі помічники stream навмисно залишаються локальними для постачальника. Поточний - вбудований приклад: `@openclaw/anthropic-provider` експортує + Деякі потокові хелпери навмисно залишаються локальними для постачальника. Поточний вбудований + приклад: `@openclaw/anthropic-provider` експортує `wrapAnthropicProviderStream`, `resolveAnthropicBetas`, `resolveAnthropicFastMode`, `resolveAnthropicServiceTier` і - низькорівневі генератори обгорток Anthropic зі свого публічного шва `api.ts` / - `contract-api.ts`. Ці помічники залишаються специфічними для Anthropic, оскільки - вони також кодують обробку Claude OAuth beta і gating для `context1m`. + низькорівневі builder-и обгорток Anthropic через свій публічний seam `api.ts` / + `contract-api.ts`. Ці хелпери залишаються специфічними для Anthropic, оскільки + також кодують обробку Claude OAuth beta і gating для `context1m`. - Інші вбудовані постачальники також тримають локальними обгортки, специфічні для транспорту, коли - цю поведінку неможливо чисто поділити між сімействами. Поточний приклад: вбудований - плагін xAI зберігає нативне формування Responses для xAI у власному - `wrapStreamFn`, включно з переписуванням псевдонімів `/fast`, `tool_stream` - за замовчуванням, очищенням непідтримуваних strict-tool і видаленням payload reasoning, + Інші вбудовані постачальники також зберігають локальні обгортки, специфічні для транспорту, коли + цю поведінку не можна чисто повторно використати між сімействами. Поточний приклад: вбудований + плагін xAI зберігає нативне формування xAI Responses у власному + `wrapStreamFn`, включно з переписуванням псевдонімів `/fast`, стандартним `tool_stream`, + очищенням непідтримуваних strict-tool і видаленням payload міркувань, специфічним для xAI. `openclaw/plugin-sdk/provider-tools` наразі надає одне спільне - сімейство схем інструментів, а також спільні помічники схем/сумісності: + сімейство схем інструментів, а також спільні хелпери схем/сумісності: - - `ProviderToolCompatFamily` документує поточний перелік спільних сімейств. + - `ProviderToolCompatFamily` документує наявний сьогодні набір спільних сімейств. - `buildProviderToolCompatFamilyHooks("gemini")` підключає очищення схем Gemini + діагностику для постачальників, яким потрібні безпечні для Gemini схеми інструментів. - `normalizeGeminiToolSchemas(...)` і `inspectGeminiToolSchemas(...)` - — це базові публічні помічники схем Gemini. - - `resolveXaiModelCompatPatch()` повертає вбудований compat patch для xAI: - `toolSchemaProfile: "xai"`, непідтримувані ключові слова схем, нативну - підтримку `web_search` і декодування аргументів викликів інструментів з HTML-entity. - - `applyXaiModelCompat(model)` застосовує той самий compat patch для xAI до - визначеної моделі до того, як вона потрапить до runner. + — це базові публічні хелпери схем Gemini. + - `resolveXaiModelCompatPatch()` повертає вбудований patch сумісності xAI: + `toolSchemaProfile: "xai"`, непідтримувані ключові слова схеми, нативну + підтримку `web_search` і декодування аргументів виклику інструментів з HTML-сутностей. + - `applyXaiModelCompat(model)` застосовує той самий patch сумісності xAI до + визначеної моделі перед тим, як вона потрапить до runner-а. - Реальний вбудований приклад: плагін xAI використовує `normalizeResolvedModel` разом із - `contributeResolvedModelCompat`, щоб метадані compat залишалися у власності постачальника, - а не були жорстко закодовані в core як правила xAI. + Реальний вбудований приклад: плагін xAI використовує `normalizeResolvedModel` плюс + `contributeResolvedModelCompat`, щоб залишити ці метадані сумісності у власності + постачальника, замість жорсткого кодування правил xAI в core. - Той самий шаблон кореня пакета також лежить в основі інших вбудованих постачальників: + Той самий шаблон на рівні кореня пакета також лежить в основі інших вбудованих постачальників: - - `@openclaw/openai-provider`: `api.ts` експортує генератори постачальника, - помічники моделей за замовчуванням і генератори realtime-постачальника - - `@openclaw/openrouter-provider`: `api.ts` експортує генератор постачальника - разом із помічниками онбордингу/конфігурації + - `@openclaw/openai-provider`: `api.ts` експортує builder-и постачальника, + хелпери стандартної моделі та builder-и постачальників realtime + - `@openclaw/openrouter-provider`: `api.ts` експортує builder + постачальника, а також хелпери онбордингу/config @@ -416,8 +438,8 @@ x-i18n: }, ``` - - Для постачальників, яким потрібні власні заголовки запитів або зміни тіла запиту: + + Для постачальників, яким потрібні користувацькі заголовки запиту або модифікації тіла: ```typescript // wrapStreamFn returns a StreamFn derived from ctx.streamFn @@ -436,7 +458,7 @@ x-i18n: Для постачальників, яким потрібні нативні заголовки запиту/сесії або метадані в - узагальнених HTTP або WebSocket транспортах: + узагальнених HTTP- або WebSocket-транспортах: ```typescript resolveTransportTurnState: (ctx) => ({ @@ -472,82 +494,83 @@ x-i18n: - OpenClaw викликає хуки в такому порядку. Більшість постачальників використовують лише 2-3: + OpenClaw викликає хуки в такому порядку. Більшість постачальників використовують лише 2–3: - | # | Hook | Коли використовувати | + | # | Хук | Коли використовувати | | --- | --- | --- | - | 1 | `catalog` | Каталог моделей або значення `baseUrl` за замовчуванням | - | 2 | `applyConfigDefaults` | Глобальні значення за замовчуванням, що належать постачальнику, під час матеріалізації конфігурації | - | 3 | `normalizeModelId` | Очищення застарілих/preview-псевдонімів `model-id` перед пошуком | - | 4 | `normalizeTransport` | Очищення `api` / `baseUrl` для сімейства постачальника перед загальним складанням моделі | - | 5 | `normalizeConfig` | Нормалізація конфігурації `models.providers.` | - | 6 | `applyNativeStreamingUsageCompat` | Переписування сумісності native streaming-usage для конфігураційних постачальників | + | 1 | `catalog` | Каталог моделей або стандартні значення `baseUrl` | + | 2 | `applyConfigDefaults` | Глобальні стандартні значення, що належать постачальнику, під час materialization config | + | 3 | `normalizeModelId` | Очищення псевдонімів застарілих/preview id моделей перед пошуком | + | 4 | `normalizeTransport` | Очищення `api` / `baseUrl` сімейства постачальника перед загальним складанням моделі | + | 5 | `normalizeConfig` | Нормалізація config `models.providers.` | + | 6 | `applyNativeStreamingUsageCompat` | Переписування сумісності нативного потокового usage для config-постачальників | | 7 | `resolveConfigApiKey` | Визначення автентифікації env-marker, що належить постачальнику | - | 8 | `resolveSyntheticAuth` | Синтетична автентифікація для local/self-hosted або конфігураційна автентифікація | - | 9 | `shouldDeferSyntheticProfileAuth` | Знижує пріоритет синтетичних placeholder збереженого профілю порівняно з env/config auth | - | 10 | `resolveDynamicModel` | Приймає довільні upstream-ідентифікатори моделей | + | 8 | `resolveSyntheticAuth` | Синтетична автентифікація для local/self-hosted або така, що спирається на config | + | 9 | `shouldDeferSyntheticProfileAuth` | Зниження пріоритету синтетичних placeholder-ів збереженого профілю порівняно з env/config auth | + | 10 | `resolveDynamicModel` | Прийом довільних id моделей upstream | | 11 | `prepareDynamicModel` | Асинхронне отримання метаданих перед визначенням | - | 12 | `normalizeResolvedModel` | Переписування транспорту перед runner | + | 12 | `normalizeResolvedModel` | Переписування транспорту перед runner-ом | - Примітки щодо fallback у середовищі виконання: + Нотатки щодо runtime fallback: - - `normalizeConfig` спочатку перевіряє відповідний постачальник, а потім інші - плагіни постачальників із підтримкою хуків, доки один із них справді не змінить конфігурацію. - Якщо жоден хук постачальника не переписує підтримуваний запис конфігурації сімейства Google, - усе одно застосовується вбудований нормалізатор конфігурації Google. + - `normalizeConfig` спочатку перевіряє відповідного постачальника, а потім інші + плагіни постачальників із підтримкою хуків, доки один із них справді не змінить config. + Якщо жоден хук постачальника не переписує підтримуваний запис config сімейства Google, + усе одно застосовується вбудований нормалізатор config Google. - `resolveConfigApiKey` використовує хук постачальника, якщо він доступний. Вбудований шлях `amazon-bedrock` також має тут вбудований resolver AWS env-marker, - хоча сама runtime-автентифікація Bedrock усе ще використовує ланцюжок за замовчуванням AWS SDK. - | 13 | `contributeResolvedModelCompat` | Прапорці compat для моделей постачальників за іншим сумісним транспортом | + хоча сама runtime-автентифікація Bedrock і далі використовує стандартний + ланцюжок AWS SDK. + | 13 | `contributeResolvedModelCompat` | Прапори сумісності для моделей постачальника за іншим сумісним транспортом | | 14 | `capabilities` | Застарілий статичний набір можливостей; лише для сумісності | | 15 | `normalizeToolSchemas` | Очищення схем інструментів, що належить постачальнику, перед реєстрацією | | 16 | `inspectToolSchemas` | Діагностика схем інструментів, що належить постачальнику | - | 17 | `resolveReasoningOutputMode` | Контракт tagged vs native reasoning-output | - | 18 | `prepareExtraParams` | Параметри запиту за замовчуванням | - | 19 | `createStreamFn` | Повністю власний транспорт StreamFn | - | 20 | `wrapStreamFn` | Власні обгортки заголовків/тіла у стандартному шляху stream | - | 21 | `resolveTransportTurnState` | Нативні заголовки/метадані для кожного turn | - | 22 | `resolveWebSocketSessionPolicy` | Нативні заголовки сесії WS/cool-down | - | 23 | `formatApiKey` | Власна форма runtime-токена | - | 24 | `refreshOAuth` | Власне оновлення OAuth | - | 25 | `buildAuthDoctorHint` | Підказка для виправлення автентифікації | - | 26 | `matchesContextOverflowError` | Виявлення overflow, що належить постачальнику | + | 17 | `resolveReasoningOutputMode` | Контракт тегованого чи нативного виводу reasoning | + | 18 | `prepareExtraParams` | Стандартні параметри запиту | + | 19 | `createStreamFn` | Повністю користувацький транспорт StreamFn | + | 20 | `wrapStreamFn` | Користувацькі обгортки заголовків/тіла на звичайному шляху потоку | + | 21 | `resolveTransportTurnState` | Нативні заголовки/метадані для кожного ходу | + | 22 | `resolveWebSocketSessionPolicy` | Нативні заголовки сесії WS / cooldown | + | 23 | `formatApiKey` | Користувацька форма runtime-токена | + | 24 | `refreshOAuth` | Користувацьке оновлення OAuth | + | 25 | `buildAuthDoctorHint` | Рекомендації щодо виправлення автентифікації | + | 26 | `matchesContextOverflowError` | Виявлення переповнення, що належить постачальнику | | 27 | `classifyFailoverReason` | Класифікація rate-limit/overload, що належить постачальнику | - | 28 | `isCacheTtlEligible` | Керування TTL кешу prompt | - | 29 | `buildMissingAuthMessage` | Власна підказка про відсутню автентифікацію | - | 30 | `suppressBuiltInModel` | Приховати застарілі upstream-рядки | + | 28 | `isCacheTtlEligible` | Керування TTL кешу промптів | + | 29 | `buildMissingAuthMessage` | Користувацька підказка про відсутню автентифікацію | + | 30 | `suppressBuiltInModel` | Приховування застарілих рядків upstream | | 31 | `augmentModelCatalog` | Синтетичні рядки для forward-compat | - | 32 | `isBinaryThinking` | Бінарний режим thinking увімк./вимк. | + | 32 | `isBinaryThinking` | Увімкнення/вимкнення binary thinking | | 33 | `supportsXHighThinking` | Підтримка reasoning `xhigh` | - | 34 | `resolveDefaultThinkingLevel` | Політика `/think` за замовчуванням | + | 34 | `resolveDefaultThinkingLevel` | Стандартна політика `/think` | | 35 | `isModernModelRef` | Відповідність моделей live/smoke | | 36 | `prepareRuntimeAuth` | Обмін токенів перед інференсом | - | 37 | `resolveUsageAuth` | Власний розбір облікових даних usage | - | 38 | `fetchUsageSnapshot` | Власна endpoint usage | + | 37 | `resolveUsageAuth` | Користувацький розбір облікових даних usage | + | 38 | `fetchUsageSnapshot` | Користувацький endpoint usage | | 39 | `createEmbeddingProvider` | Адаптер embedding, що належить постачальнику, для пам’яті/пошуку | - | 40 | `buildReplayPolicy` | Власна політика replay/compaction для transcript | - | 41 | `sanitizeReplayHistory` | Переписування replay, специфічні для постачальника, після загального очищення | - | 42 | `validateReplayTurns` | Строга валідація replay-turn перед вбудованим runner | + | 40 | `buildReplayPolicy` | Користувацька політика повторного відтворення/ущільнення транскрипту | + | 41 | `sanitizeReplayHistory` | Специфічні для постачальника переписування історії повторного відтворення після загального очищення | + | 42 | `validateReplayTurns` | Строга валідація ходів повторного відтворення перед вбудованим runner-ом | | 43 | `onModelSelected` | Зворотний виклик після вибору моделі (наприклад, telemetry) | - Примітка щодо налаштування prompt: + Нотатка щодо налаштування промптів: - - `resolveSystemPromptContribution` дає постачальнику змогу додавати - cache-aware інструкції system-prompt для сімейства моделей. Віддавайте йому перевагу замість + - `resolveSystemPromptContribution` дає змогу постачальнику ін’єктувати + cache-aware інструкції системного промпту для сімейства моделей. Віддавайте йому перевагу перед `before_prompt_build`, коли поведінка належить одному сімейству постачальника/моделі і має зберігати стабільний/динамічний поділ кешу. - Докладні описи та приклади з реального світу дивіться в - [Внутрішня будова: хуки runtime постачальника](/uk/plugins/architecture#provider-runtime-hooks). + Детальні описи та реальні приклади дивіться в + [Внутрішні механізми: Runtime-хуки постачальника](/uk/plugins/architecture#provider-runtime-hooks). - Плагін постачальника може реєструвати мовлення, транскрипцію в realtime, realtime-голос, - розуміння медіа, генерацію зображень, генерацію відео, веб-отримання, - і вебпошук разом із текстовим інференсом: + Плагін постачальника може реєструвати speech, realtime transcription, realtime + voice, media understanding, image generation, video generation, web fetch + і web search поряд із текстовим інференсом: ```typescript register(api) { @@ -656,18 +679,18 @@ x-i18n: ``` OpenClaw класифікує це як плагін **hybrid-capability**. Це - рекомендований шаблон для корпоративних плагінів (один плагін на одного постачальника). - Див. [Внутрішня будова: володіння можливостями](/uk/plugins/architecture#capability-ownership-model). + рекомендований шаблон для корпоративних плагінів (один плагін на одного постачальника). Див. + [Внутрішні механізми: Володіння можливостями](/uk/plugins/architecture#capability-ownership-model). - Для генерації відео віддавайте перевагу наведеній вище структурі можливостей із урахуванням режимів: - `generate`, `imageToVideo` і `videoToVideo`. Плоских агрегованих полів, таких - як `maxInputImages`, `maxInputVideos` і `maxDurationSeconds`, недостатньо, - щоб коректно оголосити підтримку режимів трансформації або вимкнених режимів. + Для генерації відео віддавайте перевагу показаній вище структурі можливостей з урахуванням режимів: + `generate`, `imageToVideo` і `videoToVideo`. Плоских агрегованих полів на кшталт + `maxInputImages`, `maxInputVideos` і `maxDurationSeconds` недостатньо, + щоб коректно оголосити підтримку режиму трансформації або вимкнених режимів. Постачальники генерації музики мають дотримуватися того самого шаблону: - `generate` для генерації лише за prompt і `edit` для генерації - на основі зображення-посилання. Плоских агрегованих полів, таких як `maxInputImages`, - `supportsLyrics` і `supportsFormat`, недостатньо, щоб оголосити підтримку + `generate` для генерації лише за промптом і `edit` для генерації + на основі референсного зображення. Плоских агрегованих полів на кшталт `maxInputImages`, + `supportsLyrics` і `supportsFormat` недостатньо для оголошення підтримки редагування; очікуваним контрактом є явні блоки `generate` / `edit`. @@ -709,7 +732,7 @@ x-i18n: ## Публікація в ClawHub -Плагіни постачальників публікуються так само, як і будь-які інші зовнішні кодові плагіни: +Плагіни постачальників публікуються так само, як і будь-які інші зовнішні плагіни коду: ```bash clawhub package publish your-org/your-plugin --dry-run @@ -723,8 +746,8 @@ clawhub package publish your-org/your-plugin ``` /acme-ai/ -├── package.json # Метадані openclaw.providers -├── openclaw.plugin.json # Маніфест із метаданими автентифікації постачальника +├── package.json # metadata openclaw.providers +├── openclaw.plugin.json # Маніфест із metadata автентифікації постачальника ├── index.ts # definePluginEntry + registerProvider └── src/ ├── provider.test.ts # Тести @@ -736,16 +759,16 @@ clawhub package publish your-org/your-plugin `catalog.order` визначає, коли ваш каталог зливається відносно вбудованих постачальників: -| Порядок | Коли | Випадок використання | +| Порядок | Коли | Варіант використання | | --------- | ------------- | ----------------------------------------------- | -| `simple` | Перший прохід | Звичайні постачальники з API-ключем | +| `simple` | Перший прохід | Звичайні постачальники з API-ключем | | `profile` | Після simple | Постачальники, що залежать від профілів автентифікації | -| `paired` | Після profile | Синтез кількох пов’язаних записів | -| `late` | Останній прохід | Перевизначення наявних постачальників (виграє при конфлікті) | +| `paired` | Після profile | Синтез кількох пов’язаних записів | +| `late` | Останній прохід | Перевизначення наявних постачальників (перемагає при колізії) | ## Наступні кроки - [Плагіни каналів](/uk/plugins/sdk-channel-plugins) — якщо ваш плагін також надає канал -- [SDK Runtime](/uk/plugins/sdk-runtime) — помічники `api.runtime` (TTS, пошук, subagent) -- [Огляд SDK](/uk/plugins/sdk-overview) — повна довідка щодо імпорту subpath -- [Внутрішня будова плагінів](/uk/plugins/architecture#provider-runtime-hooks) — деталі хуків і приклади вбудованих плагінів +- [SDK Runtime](/uk/plugins/sdk-runtime) — хелпери `api.runtime` (TTS, пошук, субагент) +- [Огляд SDK](/uk/plugins/sdk-overview) — повний довідник щодо імпорту subpath +- [Внутрішні механізми плагінів](/uk/plugins/architecture#provider-runtime-hooks) — деталі хуків і приклади вбудованих рішень