chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-30 00:51:01 +00:00
parent 1228bc109f
commit 28a192e600
3 changed files with 503 additions and 459 deletions

View File

@ -1,119 +1,126 @@
---
read_when:
- Ви проєктуєте або реалізуєте публічний SDK для застосунків OpenClaw
- Ви порівнюєте API агентів OpenClaw з Cursor, Claude Agent SDK, OpenAI Agents, Google ADK, OpenCode, Codex або ACP
- Потрібно визначити, чи належить можливість до публічного SDK застосунку, Plugin SDK, протоколу Gateway, бекенду ACP або шару керованого середовища
summary: Проєктна пропозиція щодо публічного SDK застосунків OpenClaw для запусків агентів, сеансів, завдань, артефактів і керованих середовищ
title: Дизайн SDK OpenClaw
- Ви проєктуєте або реалізуєте публічний SDK застосунку OpenClaw
- Ви порівнюєте API агентів OpenClaw із Cursor, Claude Agent SDK, OpenAI Agents, Google ADK, OpenCode, Codex або ACP
- Потрібно вирішити, чи належить можливість до публічного App SDK, Plugin SDK, протоколу Gateway, бекенду ACP або шару керованого середовища
sidebarTitle: App SDK
summary: Дизайн публічного SDK застосунків OpenClaw для зовнішніх застосунків, скриптів, панелей моніторингу, завдань CI та розширень IDE
title: SDK застосунків OpenClaw
x-i18n:
generated_at: "2026-04-29T23:55:40Z"
generated_at: "2026-04-30T00:49:49Z"
model: gpt-5.5
provider: openai
source_hash: ffd4380e556e0e2e1218acaa9e5934e8b308b3420aa25a6d2598d35c7f9a7ab2
source_hash: 227d3baf3aaf54bf35288214b051e2e284280165e1283d476594feda26d56bb9
source_path: concepts/openclaw-sdk.md
workflow: 16
---
Ця сторінка є проєктною пропозицією для майбутнього публічного **SDK застосунків OpenClaw**. Вона
окрема від наявного [Plugin SDK](/uk/plugins/sdk-overview).
Ця сторінка є проєктною пропозицією для публічного **OpenClaw App SDK**. Вона
відокремлена від наявного [Plugin SDK](/uk/plugins/sdk-overview).
Plugin SDK призначений для коду, який виконується всередині OpenClaw і розширює провайдерів,
канали, інструменти, хуки та довірені середовища виконання. SDK застосунків має бути призначений для
зовнішніх застосунків, скриптів, інформаційних панелей, завдань CI, розширень IDE та
систем автоматизації, які хочуть запускати й спостерігати за агентами OpenClaw через стабільний
<Note>
Використовуйте `@openclaw/sdk`, коли зовнішній застосунок, скрипт, dashboard, CI job або IDE
extension хоче запускати агентів OpenClaw і спостерігати за ними через Gateway. Використовуйте
`openclaw/plugin-sdk/*` лише під час написання Plugin, який працює всередині OpenClaw.
</Note>
Plugin SDK призначений для коду, який працює всередині OpenClaw і розширює providers,
channels, tools, hooks і trusted runtimes. App SDK має бути призначений для
зовнішніх застосунків, скриптів, dashboards, CI jobs, IDE extensions і
систем автоматизації, які хочуть запускати агентів OpenClaw і спостерігати за ними через стабільний
публічний API.
## Статус
Чернетка архітектури.
Цей документ фіксує напрям дизайну з порівняльного огляду цих
SDK агентів і поверхонь середовища виконання:
Цей документ фіксує напрям дизайну на основі порівняльного огляду цих
agent SDK і runtime surfaces:
| Проєкт | Корисний висновок |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Cursor SDK cookbook | Найкращий високорівневий продуктовий API: `Agent`, `Run`, локальні та хмарні середовища виконання, потокова передача, скасування, виявлення моделей, репозиторії, артефакти та хмарні потоки pull request. |
| Claude Agent SDK | Сильний двонапрямний клієнт сесії, підтримка переривання й керування, режими дозволів, хуки, користувацькі інструменти, сховища сесій і відновлювані транскрипти. |
| OpenAI Agents SDK | Сильні концепції робочих процесів: передавання керування, запобіжники, людські схвалення, трасування, стан запуску, об’єкти результатів потокової передачі та відновлення після переривань. |
| Google ADK | Сильна внутрішня архітектура: runner, сервіс сесій, сервіс пам’яті, сервіс артефактів, сервіс облікових даних, Plugins, дії подій і підтвердження довготривалих інструментів. |
| OpenCode | Сильна форма клієнт/сервер: згенерований API-клієнт, REST плюс SSE, сесії, робочі простори, worktrees, дозволи, запитання, файли, VCS, PTY, інструменти, агенти, Skills і MCP. |
| Codex | Сильна межа локального середовища виконання: схвалення, ізоляція sandbox, мережева політика, локальні та віддалені сервери exec, структуровані події протоколу та сесії app-server з урахуванням тредів. |
| ACP and acpx | Сильний шар взаємодії для зовнішніх coding harnesses з іменованими сесіями, чергами підказок, кооперативним скасуванням і адаптерами середовища виконання. |
| Cursor SDK cookbook | Найкращий високорівневий продуктовий API: `Agent`, `Run`, локальні та хмарні runtimes, streaming, cancellation, model discovery, repositories, artifacts і cloud pull request flows. |
| Claude Agent SDK | Потужний двоспрямований session client, підтримка interrupt і steer, permission modes, hooks, custom tools, session stores і resumable transcripts. |
| OpenAI Agents SDK | Сильні концепції workflow: handoffs, guardrails, human approvals, tracing, run state, streaming result objects і resume after interruptions. |
| Google ADK | Потужна внутрішня архітектура: runner, session service, memory service, artifact service, credential service, plugins, event actions і long running tool confirmations. |
| OpenCode | Сильна форма client/server: generated API client, REST plus SSE, sessions, workspaces, worktrees, permissions, questions, files, VCS, PTY, tools, agents, skills і MCP. |
| Codex | Сильна межа локального runtime: approvals, sandboxing, network policy, локальні та віддалені exec servers, structured protocol events і thread aware app-server sessions. |
| ACP і acpx | Сильний шар сумісності для зовнішніх coding harnesses із named sessions, prompt queues, cooperative cancellation і runtime adapters. |
Рекомендація полягає в тому, щоб побудувати простий, як у Cursor, публічний фасад поверх
згенерованого клієнта Gateway у стилі OpenCode, зберігаючи концепції Claude, OpenAI Agents,
ADK, Codex і ACP як внутрішні проєктні орієнтири там, де вони доречні.
Рекомендація полягає в тому, щоб побудувати публічний facade у стилі Cursor-simple поверх
згенерованого Gateway client у стилі OpenCode, зберігаючи концепції Claude, OpenAI Agents,
ADK, Codex і ACP як внутрішні дизайнерські орієнтири там, де вони доречні.
## Цілі
- Надати розробникам застосунків мінімальний високорівневий API для запуску агентів OpenClaw.
- Зберегти локальний за замовчуванням OpenClaw як стандартне середовище виконання.
- Зробити хмарні або керовані середовища додатковим провайдером середовища, а не
іншим API агента.
- Зберегти наявні межі OpenClaw: Gateway володіє публічним протоколом, Plugin
SDK володіє внутрішньопроцесними розширеннями, ACP володіє взаємодією із зовнішніми harnesses.
- Підтримувати `stream`, `wait`, `cancel`, `resume`, `fork`, артефакти, схвалення
та фонові завдання як першокласні операції.
- Надавати стабільні нормалізовані події, зберігаючи водночас сирі події, нативні для середовища виконання, для
- Дати розробникам застосунків мінімальний високорівневий API для запуску агентів OpenClaw.
- Зберегти local-first OpenClaw як runtime за замовчуванням.
- Зробити хмарні або managed environments додатковим environment provider, а не
іншим agent API.
- Зберегти наявні межі OpenClaw: Gateway володіє публічним protocol, plugin
SDK володіє in-process extensions, ACP володіє interop із external harness.
- Підтримувати `stream`, `wait`, `cancel`, `resume`, `fork`, artifacts, approvals,
і background tasks як першокласні операції.
- Надавати стабільні нормалізовані events, зберігаючи runtime-native raw events для
просунутих споживачів.
- Зробити дозволи SDK, передавання секретів, схвалення, sandboxing і віддалені
середовища явними.
- Зробити SDK permissions, secret forwarding, approvals, sandboxing і remote
environments явними.
- Зберегти публічний контракт достатньо малим, щоб його можна було документувати, тестувати, версіонувати та
генерувати.
## Нецілі
- Не відкривати `openclaw/plugin-sdk/*` як SDK застосунків.
- Не робити ACP єдиною моделлю середовища виконання.
- Не вимагати хмарного сервісу до того, як SDK стане корисним.
- Не відкривати `openclaw/plugin-sdk/*` як app SDK.
- Не робити ACP єдиною runtime model.
- Не вимагати cloud service до того, як SDK стане корисним.
- Не клонувати API Cursor, Claude, OpenAI, ADK, OpenCode, Codex або ACP
буквально.
- Не відкривати необмежені payloads подій `any` як єдиний публічний контракт.
- Не обіцяти ізоляцію sandbox або мережеву ізоляцію для зовнішнього harness, якщо
вибране середовище не може фактично її забезпечити.
- Не змушувати авторів Plugin залежати від об’єктів SDK застосунків усередині коду
середовища виконання Plugin.
дослівно.
- Не виставляти необмежені payloads подій `any` як єдиний публічний контракт.
- Не обіцяти sandbox або network isolation для external harness, якщо
вибране середовище не може реально це забезпечити.
- Не змушувати авторів plugin залежати від об’єктів app SDK всередині runtime
code plugin.
## Поточна відповідність OpenClaw
OpenClaw уже має більшу частину основи:
OpenClaw уже має більшість основи:
| Наявна поверхня | Що вона дає |
| Наявна surface | Що вона дає |
| --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| [Цикл агента](/uk/concepts/agent-loop) | Життєвий цикл запуску `agent` і `agent.wait`, потокова передача, тайм-аут і серіалізація сесії. |
| [Середовища виконання агентів](/uk/concepts/agent-runtimes) | Розділення провайдера, моделі, середовища виконання та каналу. |
| [Агенти ACP](/uk/tools/acp-agents) | Сесії зовнішніх harnesses для Claude Code, Cursor, Gemini CLI, OpenCode, явного Codex ACP та подібних інструментів. |
| [Фонові завдання](/uk/automation/tasks) | Відокремлений журнал активності для ACP, субагентів, Cron, операцій CLI та асинхронних медіазавдань. |
| [Субагенти](/uk/tools/subagents) | Ізольовані фонові запуски агентів, необов’язковий forked context, доставлення назад у сесії запитувача. |
| [Plugins harness агентів](/uk/plugins/sdk-agent-harness) | Реєстрація довіреного нативного середовища виконання для вбудованих harnesses, таких як Codex. |
| Схеми протоколу Gateway | Поточні типізовані визначення методів і подій для параметрів агентів, сесій, підписок, переривань, Compaction і контрольних точок. |
| [Agent loop](/uk/concepts/agent-loop) | Життєвий цикл запуску `agent` і `agent.wait`, streaming, timeout і session serialization. |
| [Agent runtimes](/uk/concepts/agent-runtimes) | Розділення provider, model, runtime і channel. |
| [ACP agents](/uk/tools/acp-agents) | Sessions зовнішнього harness для Claude Code, Cursor, Gemini CLI, OpenCode, explicit Codex ACP і подібних інструментів. |
| [Background tasks](/uk/automation/tasks) | Відокремлений ledger активності для ACP, subagents, Cron, CLI operations і async media jobs. |
| [Sub-agents](/uk/tools/subagents) | Ізольовані фонові agent runs, optional forked context, доставка назад у requester sessions. |
| [Agent harness plugins](/uk/plugins/sdk-agent-harness) | Реєстрація trusted native runtime для embedded harnesses, таких як Codex. |
| Gateway protocol schemas | Поточні типізовані визначення method і event для agent params, sessions, subscriptions, aborts, Compaction і checkpoints. |
Прогалина не в запуску агентів. Прогалина в стабільному, зручному публічному фасаді поверх
цих частин.
Прогалина не в agent execution. Прогалина — у стабільному, зручному публічному facade над
цими компонентами.
## Базова модель
## Основна модель
SDK застосунків має використовувати невеликий набір стійких іменників.
App SDK має використовувати невеликий набір стійких іменників.
| Іменник | Значення |
| ------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `OpenClaw` | Точка входу клієнта. Володіє виявленням Gateway, автентифікацією, низькорівневим доступом клієнта та фабриками просторів імен. |
| `Agent` | Налаштований актор. Містить id агента, модель за замовчуванням, середовище виконання за замовчуванням, політику інструментів за замовчуванням і помічники для застосунків. |
| `Session` | Стійкий транскрипт, маршрутизація, робочий простір, контекст і прив’язка середовища виконання. |
| `Run` | Один надісланий хід або завдання. Потоково передає події, очікує на результат, скасовує та відкриває артефакти. |
| `Task` | Запис у журналі відокремленої або фонової активності. Охоплює субагентів, породження ACP, завдання Cron, запуски CLI та асинхронні завдання. |
| `Artifact` | Файли, патчі, diff-и, медіа, журнали, траєкторії, pull requests, знімки екрана та згенеровані bundles. |
| `Environment` | Де виконується запуск: локальний Gateway, локальний робочий простір, хост node, ACP harness, керований runner або майбутній хмарний робочий простір. |
| `ToolSpace` | Ефективна поверхня інструментів: інструменти OpenClaw, сервери MCP, інструменти каналів, інструменти застосунків, правила схвалення та метадані інструментів. |
| `Approval` | Рішення людини або політики, запитане запуском, інструментом, середовищем або harness. |
| `OpenClaw` | Точка входу клієнта. Володіє Gateway discovery, auth, low-level client access і namespace factories. |
| `Agent` | Налаштований actor. Містить agent id, default model, default runtime, default tool policy і app-facing helpers. |
| `Session` | Стійкий transcript, routing, workspace, context і runtime binding. |
| `Run` | Один надісланий turn або task. Streams events, waits for result, cancels і exposes artifacts. |
| `Task` | Detached або background activity ledger entry. Охоплює subagents, ACP spawns, Cron jobs, CLI runs і async jobs. |
| `Artifact` | Files, patches, diffs, media, logs, trajectories, pull requests, screenshots і generated bundles. |
| `Environment` | Де виконується run: local Gateway, local workspace, node host, ACP harness, managed runner або майбутній cloud workspace. |
| `ToolSpace` | Ефективна tool surface: OpenClaw tools, MCP servers, channel tools, app tools, approval rules і tool metadata. |
| `Approval` | Рішення людини або політики, запитане run, tool, environment або harness. |
Ці іменники чисто відображаються на наявні концепції OpenClaw, але не розкривають
назви, специфічні для реалізації, такі як внутрішні деталі PI runner, реєстрація Plugin harness
або деталі адаптера ACP.
Ці іменники добре мапляться на наявні концепції OpenClaw, але не розкривають
implementation-specific names, такі як внутрішні механізми PI runner, реєстрація plugin harness
або деталі ACP adapter.
## Форма продукту
Високорівневий SDK має виглядати так:
Високорівневий SDK має відчуватися так:
```typescript
import { OpenClaw } from "@openclaw/sdk";
@ -136,7 +143,7 @@ const result = await run.wait();
console.log(result.status);
```
Той самий застосунок має вміти використовувати стійкий сеанс:
Той самий застосунок має мати змогу використовувати durable session:
```typescript
const session = await oc.sessions.create({
@ -148,9 +155,16 @@ const run = await session.send("Prepare release notes from the current diff.");
await run.wait();
```
Примітка щодо поточної реалізації: `@openclaw/sdk` починає з поверхні, підтримуваної Gateway, яка існує сьогодні. Посилання на моделі з уточненням провайдера, як-от `openai/gpt-5.5`, розділяються на перевизначення Gateway `provider` і `model`. Вибір `workspace`, `runtime`, `environment` і `approvals` для окремого запуску все ще є цільовим дизайном; клієнт викидає помилку, коли викликачі задають їх, щоб запити не виконувалися мовчки зі значеннями за замовчуванням. Допоміжні засоби для завдань, артефактів, середовищ і загального виклику інструментів також заготовлені як майбутня форма API та викидають явні помилки про непідтримуваність, доки для них не з’являться Gateway RPC.
Поточна примітка щодо реалізації: `@openclaw/sdk` починається з Gateway-backed
surface, яка існує сьогодні. Provider-qualified model refs, такі як
`openai/gpt-5.5`, розділяються на Gateway `provider` і `model` overrides.
Per-run вибори `workspace`, `runtime`, `environment` і `approvals` усе ще є
дизайнерськими цілями; клієнт кидає помилку, коли callers задають їх, щоб requests не
виконувалися мовчки з defaults. Task, artifact, environment і generic tool
invocation helpers також scaffolded як майбутня форма API і кидають явні
unsupported errors, доки для них не існує Gateway RPCs.
І той самий API має вміти використовувати зовнішній ACP harness:
І той самий API має мати змогу використовувати зовнішній ACP harness:
```typescript
const run = await oc.runs.create({
@ -161,7 +175,7 @@ const run = await oc.runs.create({
});
```
Керовані середовища не мають змінювати API верхнього рівня:
Managed environments не мають змінювати top-level API:
```typescript
const run = await agent.run({
@ -175,9 +189,9 @@ const run = await agent.run({
});
```
## Вибір середовища виконання
## Вибір runtime
SDK застосунку має надавати вибір середовища виконання як нормалізоване об’єднання:
App SDK має надавати вибір runtime як normalized union:
```typescript
type RuntimeSelection =
@ -190,17 +204,22 @@ type RuntimeSelection =
Правила:
- `auto` дотримується правил вибору середовища виконання OpenClaw.
- `embedded` націлюється на довірені внутрішньопроцесні harnesses, зареєстровані через plugin SDK, як-от `pi` або `codex`.
- `cli` націлюється на виконання через CLI backend, що належить OpenClaw, де це доступно.
- `auto` дотримується правил вибору runtime OpenClaw.
- `embedded` націлюється на trusted in-process harnesses, зареєстровані через plugin
SDK, такі як `pi` або `codex`.
- `cli` націлюється на OpenClaw-owned CLI backend execution там, де вона доступна.
- `acp` націлюється на зовнішні harnesses через ACP/acpx.
- `managed` націлюється на провайдера середовища й усе ще може запускати embedded, CLI або ACP runtime всередині цього середовища.
- `managed` націлюється на environment provider і все ще може запускати embedded,
CLI або ACP runtime всередині цього environment.
Об’єкт вибору середовища виконання має бути описовим. Це не має бути місцем, де приховуються обробка секретів, політика пісочниці або підготовка робочого простору.
Об’єкт вибору runtime має бути описовим. Він не має бути місцем,
де ховаються secret handling, sandbox policy або workspace provisioning.
## Модель середовища
## Модель environment
Середовище є субстратом виконання. Воно має бути явним, оскільки локальні CLI-запуски, зовнішні harnesses, хости node і хмарні робочі простори мають різні властивості безпеки та життєвого циклу.
Environment — це execution substrate. Він має бути явним, оскільки локальні
CLI runs, external harnesses, node hosts і cloud workspaces мають різні
властивості безпеки та життєвого циклу.
```typescript
type EnvironmentSelection =
@ -211,40 +230,43 @@ type EnvironmentSelection =
| { type: "ephemeral"; provider: string; repo?: string; ref?: string };
```
Середовище відповідає за:
Environment володіє:
- підготовку checkout або робочого простору
- доступ до процесів і файлів
- застосування пісочниці та мережевих обмежень
- змінні середовища та посилання на секрети
- журнали, трасування й артефакти
- очищення та зберігання
- доступність середовища виконання
- підготовкою checkout або workspace
- доступом до процесів і файлів
- забезпеченням sandbox і network
- environment variables і secret references
- logs, traces і artifacts
- cleanup і retention
- availability runtime
Такий поділ робить керованих агентів природним розширенням SDK. Керований агент — це звичайний запуск у керованому середовищі, а не спеціальне відгалуження продукту.
Це розділення робить managed agents природним розширенням SDK. Managed
agent — це звичайний run у managed environment, а не окреме продуктове відгалуження.
Докладні контракти простору імен, подій, результатів, схвалень, артефактів, безпеки, пакетів і провайдерів середовищ містяться в [дизайні OpenClaw SDK API](/uk/reference/openclaw-sdk-api-design).
Детальні контракти namespace, event, result, approval, artifact, security, package,
і environment provider містяться в
[OpenClaw App SDK API design](/uk/reference/openclaw-sdk-api-design).
## План збірника рецептів
## План cookbook
SDK має постачатися зі збірником рецептів, а не лише з довідковою документацією.
SDK має постачатися з кулінарною книгою, а не лише з довідковою документацією.
Рекомендовані приклади:
| Приклад | Показує |
| ---------------------------- | -------------------------------------------------------------------------------------------- |
| Швидкий старт | Створення клієнта, запуск агента, потокове виведення, очікування результату. |
| CLI кодингового агента | Локальний робочий простір, вибір моделі, скасування, затвердження, JSON-вивід. |
| Панель агента | Сесії, запуски, фонові завдання, артефакти, повторне відтворення подій, фільтри статусу. |
| CLI кодувального агента | Локальний робочий простір, вибір моделі, скасування, схвалення, JSON-вивід. |
| Панель агента | Сесії, запуски, фонові завдання, артефакти, відтворення подій, фільтри статусу. |
| Конструктор застосунків | Агент редагує робочий простір, поки поруч працює сервер попереднього перегляду. |
| Рецензент pull request | Запуск для посилання на репозиторій, збирання коментарів до diff і артефактів. |
| Консоль затверджень | Підписка на затвердження й відповіді на них з UI. |
| Запускач ACP harness | Запуск Claude Code, Cursor, Gemini CLI або OpenCode через ACP з використанням того самого API `Run`. |
| Провайдер керованого середовища | Мінімальний провайдер, який готує робочий простір, транслює події, зберігає артефакти та очищає ресурси. |
| Міст Slack або Discord | Зовнішній застосунок отримує події та публікує підсумки прогресу, не стаючи Plugin каналу. |
| Рецензент pull request | Запуск для посилання репозиторію, збирання коментарів до diff і артефактів. |
| Консоль схвалень | Підписка на схвалення та відповіді на них з UI. |
| Запускач ACP harness | Запуск Claude Code, Cursor, Gemini CLI або OpenCode через ACP за допомогою того самого API `Run`. |
| Постачальник керованого середовища | Мінімальний постачальник, який готує робочий простір, транслює події, зберігає артефакти та очищує ресурси. |
| Міст Slack або Discord | Зовнішній застосунок отримує події та публікує зведення прогресу, не стаючи Plugin каналу. |
| Багатоагентне дослідження | Породження паралельних запусків, збирання артефактів і синтез фінального звіту. |
Приклади cookbook мають спершу використовувати високорівневий API. Приклади низькорівневого згенерованого
Приклади кулінарної книги мають спершу використовувати високорівневий API. Приклади низькорівневого згенерованого
клієнта належать до розширеного розділу.
## Поетапна реалізація
@ -254,105 +276,106 @@ SDK має постачатися зі збірником рецептів, а
- Узгодити публічні іменники та назви.
- Визначити назви пакетів.
- Визначити першу таксономію подій.
- Позначити в документації поточний Plugin SDK як навмисно окремий.
- Позначити поточний Plugin SDK у документації як навмисно окремий.
### Фаза 1: Низькорівневий згенерований клієнт
- Згенерувати TypeScript-клієнт зі схем протоколу Gateway.
- Спершу охопити `agent`, `agent.wait`, сесії, підписки, переривання та завдання.
- Додати smoke-тести, які перевіряють, що згенеровані методи відповідають назвам методів Gateway і формам схем.
- Спершу покрити `agent`, `agent.wait`, сесії, підписки, переривання та завдання.
- Додати smoke-тести, які перевіряють, що згенеровані методи відповідають назвам методів Gateway і
формам схем.
- Опублікувати як експериментальний або внутрішній пакет.
### Фаза 2: Високорівневий API запуску
- Додати `OpenClaw`, `Agent`, `Session` і `Run`.
- Підтримати `run.events()`, `run.wait()` і `run.cancel()`.
- Підтримати локальне виявлення Gateway та явні URL Gateway.
- Підтримати виявлення локального Gateway і явні URL Gateway.
- Підтримати довговічні сесії та надсилання в сесію.
### Фаза 3: Нормалізована проєкція подій
- Додати на боці Gateway нормалізовану проєкцію подій поруч з наявними сирими подіями.
- Зберігати сирі події середовища виконання там, де це дозволяє політика.
- Додати курсори повторного відтворення та поведінку повторного підключення.
- Зберегти сирі події середовища виконання там, де це дозволяє політика.
- Додати курсори відтворення та поведінку повторного підключення.
- Відобразити події PI, Codex, ACP і завдань у стабільну таксономію.
### Фаза 4: Артефакти та затвердження
### Фаза 4: Артефакти та схвалення
- Додати перелік і завантаження артефактів.
- Додати підписку на затвердження та помічники для відповідей.
- Додати підписку на запитання та помічники для відповідей.
- Додати cookbook-консоль затверджень.
- Додати помічники підписки на схвалення та відповіді.
- Додати помічники підписки на запитання та відповіді.
- Додати консоль схвалень до кулінарної книги.
### Фаза 5: Провайдери середовищ
### Фаза 5: Постачальники середовищ
- Запровадити контракти локального, node- і керованого провайдерів середовищ.
- Почати із середовища, яке вже існує операційно.
- Додати підготовку робочого простору, журнали, артефакти, timeout, очищення та утримання.
- Запровадити контракти постачальників локального, вузлового та керованого середовища.
- Почати з середовища, яке вже існує операційно.
- Додати підготовку робочого простору, журнали, артефакти, тайм-аут, очищення та зберігання.
### Фаза 6: Робочі процеси у хмарному стилі
### Фаза 6: Робочі процеси в хмарному стилі
- Додати запуски, орієнтовані на репозиторій і гілку.
- Додати артефакти pull request.
- Додати дошки запусків, згруповані за репозиторієм, гілкою, статусом і виконавцем.
- Додати довготривалі керовані сесії та політику утримання.
- Додати довготривалі керовані сесії та політику зберігання.
## Проєктні рішення для наслідування
## Дизайн-рішення для наслідування
Скопіювати ці ідеї:
- З Cursor: `Agent` плюс `Run`, симетрія локального й хмарного режимів, виявлення моделей,
артефакти та онбординг на основі cookbook.
- З Claude Agent SDK: двонапрямні клієнти, interrupt, permissions, hooks,
custom tools, сховища сесій і семантика resume.
- З OpenAI Agents: handoffs, guardrails, відновлення після затвердження людиною, трасування та
- З Cursor: `Agent` плюс `Run`, симетрія локального та хмарного режимів, виявлення моделей,
артефакти й onboarding через кулінарну книгу.
- З Claude Agent SDK: двонапрямні клієнти, переривання, дозволи, hooks,
користувацькі інструменти, сховища сесій і семантика відновлення.
- З OpenAI Agents: передавання керування, захисні обмеження, відновлення після людського схвалення, трасування та
структуровані об’єкти потокового результату.
- З Google ADK: сервіси за runner, дії подій, пам’ять, артефакти,
сервіси облікових даних і Plugin-перехоплення навколо життєвого циклу запуску.
сервіси облікових даних і перехоплення Plugin навколо життєвого циклу запуску.
- З OpenCode: згенерований клієнт протоколу, REST плюс SSE, сесії,
робочі простори, запитання, дозволи, файли, VCS, PTY, MCP, агенти та skills.
- З Codex: явні sandbox, approval, network, локальне й віддалене виконання, а також
робочі простори, запитання, дозволи, файли, VCS, PTY, MCP, агенти та Skills.
- З Codex: явні пісочниця, схвалення, мережа, локальне та віддалене виконання, а також
межі потоків app-server.
- З ACP і acpx: сумісність зовнішніх harness на основі адаптерів і іменовані
черги prompt.
## Проєктні рішення, яких слід уникати
## Дизайн-рішення, яких слід уникати
Уникайте цих пасток:
- Публічний SDK, який є лише тонким вивантаженням внутрішніх деталей Gateway.
- Публічний SDK, який імпортує підшляхи Plugin SDK.
- Публічний SDK, де події є лише `stream` плюс `data`.
- API, орієнтований насамперед на хмару, через який локальний OpenClaw відчувається як застарілий режим.
- Вибір середовища виконання, прихований у префіксах id моделей.
- Публічний SDK, де події — це лише `stream` плюс `data`.
- API з пріоритетом хмари, через який локальний OpenClaw відчувається як застарілий режим.
- Вибір середовища виконання, прихований у префіксах ідентифікаторів моделей.
- Передавання секретів, приховане в мапах середовища.
- ACP-специфічні параметри на верхньому рівні кожного запуску.
- Прапорці sandbox, які неможливо забезпечити вибраним середовищем виконання.
- Один об’єкт SDK, який одночасно намагається бути Plugin провайдера, Plugin каналу, клієнтом застосунку
- Прапорці пісочниці, які неможливо забезпечити вибраним середовищем виконання.
- Один об’єкт SDK, який одночасно намагається бути provider Plugin, channel Plugin, клієнтом застосунку
і керованим runner.
## Відкриті питання
- Початковий пакет має жити в цьому репозиторії чи в окремому SDK-репозиторії?
- Чи слід публічно опублікувати згенерований низькорівневий клієнт до того, як
стабілізується високорівнева обгортка?
- Який перший підтримуваний механізм автентифікації застосунку: локальний токен, адмін-токен,
- Чи має початковий пакет жити в цьому репозиторії чи в окремому репозиторії SDK?
- Чи слід публікувати згенерований низькорівневий клієнт публічно до стабілізації
високорівневої обгортки?
- Який перший підтримуваний механізм автентифікації застосунку: локальний токен, admin-токен,
OAuth device flow чи підписана реєстрація застосунку?
- Скільки історії повідомлень сесії SDK має відкривати за замовчуванням?
- Чи керовані середовища мають налаштовуватися лише в конфігурації Gateway, чи виклики SDK
- Чи мають керовані середовища налаштовуватися лише в конфігурації Gateway, чи виклики SDK
можуть запитувати їх напряму зі scoped tokens?
- Які правила утримання застосовуються до артефактів, згенерованих локальними запусками?
- Які правила зберігання застосовуються до артефактів, згенерованих локальними запусками?
- Які payload подій потребують редагування перед доставленням у застосунок?
- Чи має `Run` охоплювати звичайні чат-ходи й відокремлені завдання, чи відокремлена
- Чи має `Run` покривати звичайні ходи чату й відокремлені завдання, чи відокремлена
фонова робота завжди має повертати обгортку `Task` з вкладеним `Run`?
## Пов’язані документи
- [Цикл агента](/uk/concepts/agent-loop)
- [Середовища виконання агентів](/uk/concepts/agent-runtimes)
- [Середовища виконання агента](/uk/concepts/agent-runtimes)
- [Сесія](/uk/concepts/session)
- [Субагенти](/uk/tools/subagents)
- [Фонові завдання](/uk/automation/tasks)
- [ACP-агенти](/uk/tools/acp-agents)
- [Plugins agent harness](/uk/plugins/sdk-agent-harness)
- [Агенти ACP](/uk/tools/acp-agents)
- [Agent harness plugins](/uk/plugins/sdk-agent-harness)
- [Огляд Plugin SDK](/uk/plugins/sdk-overview)

View File

@ -1,27 +1,35 @@
---
read_when:
- Потрібно знати, з якого підшляху SDK виконувати імпорт
- Потрібно знати, з якого підшляху SDK імпортувати
- Вам потрібна довідка щодо всіх методів реєстрації в OpenClawPluginApi
- Ви шукаєте конкретний експорт SDK
sidebarTitle: SDK overview
summary: Карта імпортів, довідник API реєстрації та архітектура SDK
sidebarTitle: Plugin SDK overview
summary: Мапа імпортів, довідник API реєстрації та архітектура SDK
title: Огляд Plugin SDK
x-i18n:
generated_at: "2026-04-29T04:42:21Z"
generated_at: "2026-04-30T00:49:45Z"
model: gpt-5.5
provider: openai
source_hash: 7652c2be756dad14792f59f36fa2fc2becd1681454005cf391e401b89999b857
source_hash: 1749ad99c55ffd14624b817aba963bd93ebe7976937138693177523bbe3aa88c
source_path: plugins/sdk-overview.md
workflow: 16
---
SDK Plugin є типізованим контрактом між плагінами та ядром. Ця сторінка є довідником щодо того, **що імпортувати** і **що можна реєструвати**.
Plugin SDK — це типізований контракт між plugins і ядром. Ця сторінка є
довідником щодо **того, що імпортувати** і **що можна реєструвати**.
<Note>
Ця сторінка призначена для авторів plugins, які використовують `openclaw/plugin-sdk/*` всередині
OpenClaw. Для зовнішніх застосунків, скриптів, панелей керування, завдань CI та розширень IDE,
які хочуть запускати агентів через Gateway, натомість використовуйте
[OpenClaw App SDK](/uk/concepts/openclaw-sdk) і пакет `@openclaw/sdk`.
</Note>
<Tip>
Шукаєте натомість практичний посібник? Почніть із [Створення плагінів](/uk/plugins/building-plugins), використовуйте [Плагіни каналів](/uk/plugins/sdk-channel-plugins) для плагінів каналів, [Плагіни провайдерів](/uk/plugins/sdk-provider-plugins) для плагінів провайдерів і [Хуки Plugin](/uk/plugins/hooks) для плагінів інструментів або хуків життєвого циклу.
Шукаєте натомість практичний посібник? Почніть із [Створення plugins](/uk/plugins/building-plugins), використовуйте [Channel plugins](/uk/plugins/sdk-channel-plugins) для channel plugins, [Provider plugins](/uk/plugins/sdk-provider-plugins) для provider plugins і [Plugin hooks](/uk/plugins/hooks) для plugins інструментів або хуків життєвого циклу.
</Tip>
## Угода про імпорт
## Угода щодо імпорту
Завжди імпортуйте з конкретного підшляху:
@ -30,163 +38,166 @@ 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` для
ширшої узагальнювальної поверхні та спільних допоміжних засобів, таких як
Кожен підшлях — це невеликий самодостатній модуль. Це пришвидшує запуск і
запобігає проблемам із циклічними залежностями. Для специфічних для каналів помічників entry/build
надавайте перевагу `openclaw/plugin-sdk/channel-core`; залишайте `openclaw/plugin-sdk/core` для
ширшої парасолькової поверхні та спільних помічників, як-от
`buildChannelConfigSchema`.
Для конфігурації каналу публікуйте JSON Schema, що належить каналу, через
`openclaw.plugin.json#channelConfigs`. Підшлях `plugin-sdk/channel-config-schema`
призначений для спільних примітивів схем і загального конструктора. Вбудовані
плагіни OpenClaw використовують `plugin-sdk/bundled-channel-config-schema` для збережених
призначений для спільних примітивів схем і універсального збирача. Вбудовані
plugins OpenClaw використовують `plugin-sdk/bundled-channel-config-schema` для збережених
схем вбудованих каналів. Застарілі експорти сумісності залишаються в
`plugin-sdk/channel-config-schema-legacy`; жоден із підшляхів вбудованих схем не є
шаблоном для нових плагінів.
`plugin-sdk/channel-config-schema-legacy`; жоден із підшляхів схем вбудованих каналів не є
шаблоном для нових plugins.
<Warning>
Не імпортуйте зручні seams із брендингом провайдера або каналу (наприклад,
Не імпортуйте provider- або channel-брендовані допоміжні межі (наприклад
`openclaw/plugin-sdk/slack`, `.../discord`, `.../signal`, `.../whatsapp`).
Вбудовані плагіни компонують загальні підшляхи SDK у власних barrel-файлах `api.ts` /
`runtime-api.ts`; споживачі ядра мають або використовувати ці локальні для плагіна
barrel-файли, або додати вузький загальний контракт SDK, коли потреба справді є
Вбудовані plugins компонують універсальні підшляхи SDK всередині власних barrel-файлів `api.ts` /
`runtime-api.ts`; споживачі ядра мають або використовувати ці локальні для plugin
barrel-файли, або додавати вузький універсальний контракт SDK, коли потреба справді є
міжканальною.
Невеликий набір допоміжних seams вбудованих плагінів досі з'являється у згенерованій мапі експортів,
коли для них відстежується використання власником. Вони існують лише для
супроводу вбудованих плагінів і не рекомендовані як шляхи імпорту для нових сторонніх
плагінів.
Невеликий набір допоміжних меж для вбудованих plugins усе ще з’являється у згенерованій мапі експортів,
коли вони мають відстежене використання власником. Вони існують лише для супроводу вбудованих plugins
і не рекомендовані як шляхи імпорту для нових сторонніх
plugins.
`openclaw/plugin-sdk/discord` і `openclaw/plugin-sdk/telegram-account` також
збережені як застарілі фасади сумісності для відстежуваного використання власником. Не
копіюйте ці шляхи імпорту в нові плагіни; натомість використовуйте ін'єктовані runtime-допоміжні засоби та
загальні підшляхи SDK каналів.
збережені як застарілі фасади сумісності для відстеженого використання власником. Не
копіюйте ці шляхи імпорту в нові plugins; натомість використовуйте ін’єктовані runtime-помічники та
універсальні підшляхи channel SDK.
</Warning>
## Довідник підшляхів
SDK Plugin надається як набір вузьких підшляхів, згрупованих за областями (вхід
плагіна, канал, провайдер, автентифікація, runtime, capability, пам'ять і зарезервовані
допоміжні засоби вбудованих плагінів). Повний каталог — згрупований і з посиланнями — див.
[Підшляхи SDK Plugin](/uk/plugins/sdk-subpaths).
Plugin SDK надається як набір вузьких підшляхів, згрупованих за областями (entry plugin,
канал, provider, автентифікація, runtime, capability, пам’ять і зарезервовані
помічники вбудованих plugins). Повний каталог — згрупований і з посиланнями — див.
[Підшляхи Plugin SDK](/uk/plugins/sdk-subpaths).
Згенерований список із понад 200 підшляхів розміщено в `scripts/lib/plugin-sdk-entrypoints.json`.
Згенерований список із понад 200 підшляхів розміщений у `scripts/lib/plugin-sdk-entrypoints.json`.
## API реєстрації
Callback `register(api)` отримує об'єкт `OpenClawPluginApi` з такими
Зворотний виклик `register(api)` отримує обєкт `OpenClawPluginApi` з такими
методами:
### Реєстрація capability
### Реєстрація capabilities
| Метод | Що він реєструє |
| ------------------------------------------------ | -------------------------------------- |
| `api.registerProvider(...)` | Текстове виведення (LLM) |
| `api.registerAgentHarness(...)` | Експериментальний низькорівневий виконавець агента |
| `api.registerCliBackend(...)` | Локальний backend виведення CLI |
| `api.registerChannel(...)` | Канал обміну повідомленнями |
| `api.registerSpeechProvider(...)` | Синтез text-to-speech / STT |
| Метод | Що реєструє |
| ------------------------------------------------ | ------------------------------------- |
| `api.registerProvider(...)` | Текстовий inference (LLM) |
| `api.registerAgentHarness(...)` | Експериментальний низькорівневий виконавець агентів |
| `api.registerCliBackend(...)` | Локальний backend inference для CLI |
| `api.registerChannel(...)` | Канал повідомлень |
| `api.registerSpeechProvider(...)` | Синтез text-to-speech / STT |
| `api.registerRealtimeTranscriptionProvider(...)` | Потокова транскрипція в реальному часі |
| `api.registerRealtimeVoiceProvider(...)` | Дуплексні голосові сесії в реальному часі |
| `api.registerMediaUnderstandingProvider(...)` | Аналіз зображень/аудіо/відео |
| `api.registerImageGenerationProvider(...)` | Генерація зображень |
| `api.registerMusicGenerationProvider(...)` | Генерація музики |
| `api.registerVideoGenerationProvider(...)` | Генерація відео |
| `api.registerWebFetchProvider(...)` | Провайдер веботримання / скрейпінгу |
| `api.registerWebSearchProvider(...)` | Вебпошук |
| `api.registerRealtimeVoiceProvider(...)` | Дуплексні голосові сеанси в реальному часі |
| `api.registerMediaUnderstandingProvider(...)` | Аналіз зображень/аудіо/відео |
| `api.registerImageGenerationProvider(...)` | Генерація зображень |
| `api.registerMusicGenerationProvider(...)` | Генерація музики |
| `api.registerVideoGenerationProvider(...)` | Генерація відео |
| `api.registerWebFetchProvider(...)` | Provider web fetch / scrape |
| `api.registerWebSearchProvider(...)` | Вебпошук |
### Інструменти та команди
### Інструменти й команди
| Метод | Що він реєструє |
| ------------------------------- | ------------------------------------------------ |
| `api.registerTool(tool, opts?)` | Інструмент агента (обов'язковий або `{ optional: true }`) |
| `api.registerCommand(def)` | Користувацька команда (оминає LLM) |
| Метод | Що реєструє |
| ------------------------------- | -------------------------------------------- |
| `api.registerTool(tool, opts?)` | Інструмент агента (обовязковий або `{ optional: true }`) |
| `api.registerCommand(def)` | Користувацька команда (оминає LLM) |
Команди Plugin можуть задавати `agentPromptGuidance`, коли агенту потрібна коротка,
належна команді підказка маршрутизації. Тримайте цей текст про саму команду; не додавайте
політику, специфічну для провайдера або плагіна, до конструкторів core prompt.
належна команді підказка для маршрутизації. Тримайте цей текст про саму команду; не додавайте
provider- або plugin-специфічну політику до збирачів prompt ядра.
### Інфраструктура
| Метод | Що він реєструє |
| ---------------------------------------------- | --------------------------------------- |
| `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)` | Додатковий корпус пошуку/читання пам'яті |
| Метод | Що реєструє |
| ---------------------------------------------- | -------------------------------------- |
| `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
### Host hooks для workflow plugins
Хост-хуки — це seams SDK для плагінів, яким потрібно брати участь у життєвому циклі хоста,
а не лише додавати провайдера, канал або інструмент. Вони є
загальними контрактами; Plan Mode може їх використовувати, але так само можуть workflow затверджень,
гейти політик робочого простору, фонові монітори, майстри налаштування та супровідні UI
плагіни.
Host hooks — це межі SDK для plugins, яким потрібно брати участь у життєвому циклі хоста,
а не лише додавати provider, канал або інструмент. Це
універсальні контракти; Plan Mode може їх використовувати, але так само можуть workflow-и погодження,
шлюзи політик робочого простору, фонові монітори, майстри налаштування та UI companion
plugins.
| Метод | Контракт, яким він володіє |
| ------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- |
| `api.registerSessionExtension(...)` | Належний Plugin JSON-сумісний стан сесії, проєктований через сесії Gateway |
| `api.enqueueNextTurnInjection(...)` | Стійкий контекст exactly-once, ін'єктований у наступний хід агента для однієї сесії |
| `api.registerTrustedToolPolicy(...)` | Політика інструментів до Plugin для вбудованих/довірених інструментів, що може блокувати або переписувати параметри інструмента |
| `api.registerToolMetadata(...)` | Метадані відображення каталогу інструментів без зміни реалізації інструмента |
| `api.registerCommand(...)` | Обмежені за scope команди Plugin; результати команд можуть задавати `continueAgent: true` |
| `api.registerControlUiDescriptor(...)` | Дескриптори внеску Control UI для поверхонь сесії, інструмента, запуску або налаштувань |
| `api.registerRuntimeLifecycle(...)` | Callback-и очищення для належних Plugin runtime-ресурсів на шляхах reset/delete/reload |
| `api.registerAgentEventSubscription(...)` | Санітизовані підписки на події для стану workflow та моніторів |
| `api.setRunContext(...)` / `getRunContext(...)` / `clearRunContext(...)` | Належний Plugin scratch-стан для кожного запуску, очищений у термінальному життєвому циклі запуску |
| `api.registerSessionSchedulerJob(...)` | Належні Plugin записи завдань планувальника сесій із детермінованим очищенням |
| Метод | Контракт, яким він володіє |
| ------------------------------------------------------------------------ | --------------------------------------------------------------------------------- |
| `api.registerSessionExtension(...)` | Належний plugin JSON-сумісний стан сеансу, спроєктований через сеанси Gateway |
| `api.enqueueNextTurnInjection(...)` | Надійний exactly-once контекст, ін’єктований у наступний хід агента для одного сеансу |
| `api.registerTrustedToolPolicy(...)` | Політика інструментів перед bundled/trusted pre-plugin, яка може блокувати або переписувати параметри інструментів |
| `api.registerToolMetadata(...)` | Метадані відображення каталогу інструментів без зміни реалізації інструмента |
| `api.registerCommand(...)` | Scoped команди plugin; результати команд можуть задавати `continueAgent: true` |
| `api.registerControlUiDescriptor(...)` | Дескриптори внеску Control UI для поверхонь сеансу, інструмента, запуску або налаштувань |
| `api.registerRuntimeLifecycle(...)` | Зворотні виклики очищення для runtime-ресурсів, що належать plugin, на шляхах reset/delete/reload |
| `api.registerAgentEventSubscription(...)` | Санітизовані підписки на події для стану workflow і моніторів |
| `api.setRunContext(...)` / `getRunContext(...)` / `clearRunContext(...)` | Scratch-стан plugin для кожного запуску, очищений на термінальному життєвому циклі запуску |
| `api.registerSessionSchedulerJob(...)` | Належні plugin записи завдань планувальника сеансів із детермінованим очищенням |
Контракти навмисно розділяють повноваження:
- Зовнішні плагіни можуть володіти розширеннями сесій, UI-дескрипторами, командами, метаданими інструментів, ін'єкціями наступного ходу та звичайними хуками.
- Довірені політики інструментів виконуються перед звичайними хуками `before_tool_call` і доступні лише для вбудованих компонентів, бо беруть участь у політиці безпеки хоста.
- Зарезервоване володіння командами доступне лише для вбудованих компонентів. Зовнішні плагіни мають використовувати власні назви команд або псевдоніми.
- `allowPromptInjection=false` вимикає хуки, що змінюють prompt, включно з
- Зовнішні plugins можуть володіти session extensions, UI descriptors, commands, tool
metadata, next-turn injections і звичайними hooks.
- Trusted tool policies виконуються перед звичайними hooks `before_tool_call` і є
лише вбудованими, бо вони беруть участь у політиці безпеки хоста.
- Зарезервоване володіння командами доступне лише вбудованим plugins. Зовнішні plugins мають використовувати
власні імена команд або псевдоніми.
- `allowPromptInjection=false` вимикає hooks, що змінюють prompt, зокрема
`agent_turn_prepare`, `before_prompt_build`, `heartbeat_prompt_contribution`,
полями prompt із застарілого `before_agent_start` і
поля prompt із legacy `before_agent_start` і
`enqueueNextTurnInjection`.
Приклади споживачів, що не належать до Plan:
| Архетип Plugin | Використані хуки |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Workflow затвердження | Розширення сесії, продовження команди, ін'єкція наступного ходу, UI-дескриптор |
| Гейт політики бюджету/робочого простору | Довірена політика інструментів, метадані інструментів, проєкція сесії |
| Фоновий монітор життєвого циклу | Очищення runtime-життєвого циклу, підписка на події агента, володіння/очищення планувальника сесій, внесок Heartbeat prompt, UI-дескриптор |
| Майстер налаштування або onboarding | Розширення сесії, обмежені за scope команди, дескриптор Control UI |
| Архетип plugin | Використані hooks |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| Workflow погодження | Session extension, command continuation, next-turn injection, UI descriptor |
| Шлюз політик бюджету/робочого простору | Trusted tool policy, tool metadata, session projection |
| Фоновий монітор життєвого циклу | Runtime lifecycle cleanup, agent event subscription, session scheduler ownership/cleanup, heartbeat prompt contribution, UI descriptor |
| Майстер налаштування або onboarding | Session extension, scoped commands, Control UI descriptor |
<Note>
Зарезервовані core admin namespaces (`config.*`, `exec.approvals.*`, `wizard.*`,
`update.*`) завжди залишаються `operator.admin`, навіть якщо Plugin намагається призначити
вужчий scope методу gateway. Віддавайте перевагу префіксам, специфічним для Plugin, для
методів, якими володіє Plugin.
`update.*`) завжди залишаються `operator.admin`, навіть якщо plugin намагається призначити
вужчу область gateway method. Надавайте перевагу plugin-specific prefixes для
методів, що належать plugin.
</Note>
<Accordion title="Коли використовувати middleware результатів інструментів">
Вбудовані плагіни можуть використовувати `api.registerAgentToolResultMiddleware(...)`, коли
Вбудовані plugins можуть використовувати `api.registerAgentToolResultMiddleware(...)`, коли
їм потрібно переписати результат інструмента після виконання і до того, як runtime
передасть цей результат назад у модель. Це довірений runtime-нейтральний
seam для асинхронних редукторів виводу, таких як tokenjuice.
передасть цей результат назад у модель. Це trusted runtime-neutral
межа для async output reducers, таких як tokenjuice.
Вбудовані плагіни мають оголошувати `contracts.agentToolResultMiddleware` для кожного
цільового runtime, наприклад `["pi", "codex"]`. Зовнішні плагіни
не можуть реєструвати це middleware; залишайте звичайні хуки Plugin OpenClaw для роботи,
яка не потребує timing результату інструмента до моделі. Старий вбудований
шлях реєстрації фабрики розширення лише для Pi було видалено.
Вбудовані plugins мають оголошувати `contracts.agentToolResultMiddleware` для кожного
цільового runtime, наприклад `["pi", "codex"]`. Зовнішні plugins
не можуть реєструвати це middleware; залишайте звичайні hooks OpenClaw plugin для роботи,
якій не потрібен таймінг результату інструмента перед моделлю. Старий Pi-only embedded
шлях реєстрації extension factory було вилучено.
</Accordion>
### Реєстрація виявлення Gateway
`api.registerGatewayDiscoveryService(...)` дає Plugin змогу оголошувати активний
Gateway на локальному транспорті виявлення, наприклад mDNS/Bonjour. OpenClaw викликає
сервіс під час запуску Gateway, коли локальне виявлення увімкнене, передає
поточні порти Gateway і несекретні TXT hint-дані, а також викликає повернений
`api.registerGatewayDiscoveryService(...)` дає plugin змогу рекламувати активний
Gateway у локальному транспорті виявлення, як-от mDNS/Bonjour. OpenClaw викликає
сервіс під час запуску Gateway, коли локальне виявлення ввімкнено, передає
поточні порти Gateway і несекретні TXT hint-дані та викликає повернений
обробник `stop` під час завершення роботи Gateway.
```typescript
@ -203,19 +214,19 @@ api.registerGatewayDiscoveryService({
});
```
Плагіни виявлення Gateway не повинні трактувати оголошені TXT-значення як секрети або
автентифікацію. Виявлення є routing hint; автентифікація Gateway і TLS pinning і далі
Плагіни виявлення Gateway не повинні розглядати оголошені значення TXT як секрети або
автентифікацію. Виявлення є підказкою для маршрутизації; автентифікація Gateway і прив’язка TLS і далі
відповідають за довіру.
### Метадані реєстрації CLI
`api.registerCli(registrar, opts?)` приймає два види метаданих верхнього рівня:
`api.registerCli(registrar, opts?)` приймає два типи метаданих верхнього рівня:
- `commands`: явні корені команд, якими володіє реєстратор
- `descriptors`: дескриптори команд часу розбору, які використовуються для довідки кореневого CLI,
маршрутизації та лінивої реєстрації CLI Plugin
- `descriptors`: дескриптори команд часу розбору, що використовуються для довідки кореневого CLI,
маршрутизації та лінивої реєстрації CLI плагіна
Якщо ви хочете, щоб команда Plugin залишалася ліниво завантажуваною у звичайному кореневому шляху CLI,
Якщо ви хочете, щоб команда плагіна залишалася ліниво завантажуваною у звичайному шляху кореневого CLI,
надайте `descriptors`, які охоплюють кожен корінь команди верхнього рівня, відкритий цим
реєстратором.
@ -229,7 +240,7 @@ api.registerCli(
descriptors: [
{
name: "matrix",
description: "Manage Matrix accounts, verification, devices, and profile state",
description: "Керування обліковими записами Matrix, перевіркою, пристроями та станом профілю",
hasSubcommands: true,
},
],
@ -237,53 +248,53 @@ api.registerCli(
);
```
Використовуйте `commands` окремо лише тоді, коли вам не потрібна лінива реєстрація кореневого CLI.
Цей енергійний шлях сумісності й надалі підтримується, але він не встановлює
Використовуйте лише `commands`, тільки коли вам не потрібна лінива реєстрація кореневого CLI.
Цей шлях енергійної сумісності й надалі підтримується, але він не встановлює
заповнювачі на основі дескрипторів для лінивого завантаження під час розбору.
### Реєстрація бекенду CLI
`api.registerCliBackend(...)` дає Plugin змогу володіти типовою конфігурацією для локального
бекенду AI CLI, такого як `codex-cli`.
`api.registerCliBackend(...)` дає плагіну змогу володіти типовою конфігурацією для локального
бекенду AI CLI, як-от `codex-cli`.
- `id` бекенду стає префіксом провайдера в посиланнях на моделі на кшталт `codex-cli/gpt-5`.
- `id` бекенду стає префіксом провайдера в посиланнях на моделі, як-от `codex-cli/gpt-5`.
- `config` бекенду використовує ту саму форму, що й `agents.defaults.cliBackends.<id>`.
- Конфігурація користувача все одно має пріоритет. OpenClaw об’єднує `agents.defaults.cliBackends.<id>` поверх
типових налаштувань Plugin перед запуском CLI.
типових значень плагіна перед запуском CLI.
- Використовуйте `normalizeConfig`, коли бекенду потрібні переписування для сумісності після об’єднання
(наприклад, нормалізація старих форм прапорців).
### Ексклюзивні слоти
| Метод | Що він реєструє |
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `api.registerContextEngine(id, factory)` | Контекстний рушій (одночасно активний лише один). Зворотний виклик `assemble()` отримує `availableTools` і `citationsMode`, щоб рушій міг адаптувати доповнення до промпта. |
| `api.registerMemoryCapability(capability)` | Уніфікована можливість пам’яті |
| `api.registerMemoryPromptSection(builder)` | Побудовник секції промпта пам’яті |
| `api.registerMemoryFlushPlan(resolver)` | Резолвер плану скидання пам’яті |
| `api.registerMemoryRuntime(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` також може надавати `publicArtifacts.listArtifacts(...)`,
щоб супровідні Plugins могли споживати експортовані артефакти пам’яті через
`openclaw/plugin-sdk/memory-host-core`, а не звертатися до приватної структури
конкретного Plugin пам’яті.
- `registerMemoryCapability` є бажаним ексклюзивним API плагіна пам’яті.
- `registerMemoryCapability` також може відкривати `publicArtifacts.listArtifacts(...)`,
щоб супутні плагіни могли споживати експортовані артефакти пам’яті через
`openclaw/plugin-sdk/memory-host-core` замість доступу до приватної структури
конкретного плагіна пам’яті.
- `registerMemoryPromptSection`, `registerMemoryFlushPlan` і
`registerMemoryRuntime` — це сумісні зі спадщиною ексклюзивні API Plugin пам’яті.
- `MemoryFlushPlan.model` може прив’язати хід скидання до точного посилання
`provider/model`, такого як `ollama/qwen3:8b`, без успадкування активного
ланцюжка резервних варіантів.
- `registerMemoryEmbeddingProvider` дає активному Plugin пам’яті змогу зареєструвати один
або кілька ідентифікаторів адаптерів ембедингів (наприклад, `openai`, `gemini` або власний
ідентифікатор, визначений Plugin).
- Конфігурація користувача, така як `agents.defaults.memorySearch.provider` і
`agents.defaults.memorySearch.fallback`, розв’язується відносно цих зареєстрованих
`registerMemoryRuntime` є ексклюзивними API плагіна пам’яті зі збереженням сумісності зі спадщиною.
- `MemoryFlushPlan.model` може закріпити хід скидання за точним посиланням
`provider/model`, як-от `ollama/qwen3:8b`, без успадкування активного ланцюга
резервних варіантів.
- `registerMemoryEmbeddingProvider` дає активному плагіну пам’яті змогу зареєструвати один
або кілька ідентифікаторів адаптерів ембедингів (наприклад `openai`, `gemini` або власний
ідентифікатор, визначений плагіном).
- Користувацька конфігурація, як-от `agents.defaults.memorySearch.provider` і
`agents.defaults.memorySearch.fallback`, резолвиться відносно цих зареєстрованих
ідентифікаторів адаптерів.
### Події та життєвий цикл
@ -293,7 +304,8 @@ api.registerCli(
| `api.on(hookName, handler, opts?)` | Типізований хук життєвого циклу |
| `api.onConversationBindingResolved(handler)` | Зворотний виклик прив’язки розмови |
Див. [хуки Plugin](/uk/plugins/hooks) для прикладів, поширених назв хуків і семантики захисту.
Див. [хуки плагінів](/uk/plugins/hooks) для прикладів, поширених назв хуків і семантики
запобіжників.
### Семантика рішень хуків
@ -301,94 +313,94 @@ api.registerCli(
- `before_tool_call`: повернення `{ block: false }` трактується як відсутність рішення (так само, як пропуск `block`), а не як перевизначення.
- `before_install`: повернення `{ block: true }` є термінальним. Щойно будь-який обробник встановлює його, обробники з нижчим пріоритетом пропускаються.
- `before_install`: повернення `{ block: false }` трактується як відсутність рішення (так само, як пропуск `block`), а не як перевизначення.
- `reply_dispatch`: повернення `{ handled: true, ... }` є термінальним. Щойно будь-який обробник бере dispatch на себе, обробники з нижчим пріоритетом і типовий шлях dispatch моделі пропускаються.
- `reply_dispatch`: повернення `{ handled: true, ... }` є термінальним. Щойно будь-який обробник бере на себе доставлення, обробники з нижчим пріоритетом і типовий шлях доставлення моделі пропускаються.
- `message_sending`: повернення `{ cancel: true }` є термінальним. Щойно будь-який обробник встановлює його, обробники з нижчим пріоритетом пропускаються.
- `message_sending`: повернення `{ cancel: false }` трактується як відсутність рішення (так само, як пропуск `cancel`), а не як перевизначення.
- `message_received`: використовуйте типізоване поле `threadId`, коли потрібна маршрутизація вхідної гілки/теми. Залишайте `metadata` для специфічних для каналу додаткових даних.
- `message_sending`: використовуйте типізовані поля маршрутизації `replyToId` / `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` | Ідентифікатор Plugin |
| `api.name` | `string` | Відображувана назва |
| `api.version` | `string?` | Версія Plugin (необов’язково) |
| `api.description` | `string?` | Опис Plugin (необов’язково) |
| `api.source` | `string` | Шлях до джерела Plugin |
| `api.rootDir` | `string?` | Кореневий каталог Plugin (необов’язково) |
| `api.config` | `OpenClawConfig` | Поточний знімок конфігурації (активний знімок середовища виконання в пам’яті, коли доступний) |
| `api.pluginConfig` | `Record<string, unknown>` | Специфічна для Plugin конфігурація з `plugins.entries.<id>.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 |
| Поле | Тип | Опис |
| ------------------------ | ------------------------- | ----------------------------------------------------------------------------------------------------- |
| `api.id` | `string` | Ідентифікатор плагіна |
| `api.name` | `string` | Відображувана назва |
| `api.version` | `string?` | Версія плагіна (необов’язково) |
| `api.description` | `string?` | Опис плагіна (необов’язково) |
| `api.source` | `string` | Шлях до джерела плагіна |
| `api.rootDir` | `string?` | Кореневий каталог плагіна (необов’язково) |
| `api.config` | `OpenClawConfig` | Поточний знімок конфігурації (активний знімок середовища виконання в пам’яті, коли доступний) |
| `api.pluginConfig` | `Record<string, unknown>` | Конфігурація, специфічна для плагіна, з `plugins.entries.<id>.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/
api.ts # Public exports for external consumers
runtime-api.ts # Internal-only runtime exports
index.ts # Plugin entry point
setup-entry.ts # Lightweight setup-only entry (optional)
api.ts # Публічні експорти для зовнішніх споживачів
runtime-api.ts # Внутрішні експорти середовища виконання
index.ts # Точка входу плагіна
setup-entry.ts # Полегшений вхід лише для налаштування (необов’язково)
```
<Warning>
Ніколи не імпортуйте власний Plugin через `openclaw/plugin-sdk/<your-plugin>`
з виробничого коду. Спрямовуйте внутрішні імпорти через `./api.ts` або
`./runtime-api.ts`. Шлях SDK — лише зовнішній контракт.
Ніколи не імпортуйте власний плагін через `openclaw/plugin-sdk/<your-plugin>`
з production-коду. Спрямовуйте внутрішні імпорти через `./api.ts` або
`./runtime-api.ts`. Шлях SDK є лише зовнішнім контрактом.
</Warning>
Публічні поверхні вбудованих Plugin, завантажені через фасад (`api.ts`, `runtime-api.ts`,
Публічні поверхні вбудованого плагіна, завантажені через фасад (`api.ts`, `runtime-api.ts`,
`index.ts`, `setup-entry.ts` і подібні публічні вхідні файли), віддають перевагу
активному знімку конфігурації середовища виконання, коли OpenClaw уже запущено. Якщо знімка середовища
виконання ще немає, вони повертаються до розв’язаної конфігурації на диску.
Фасади упакованих вбудованих Plugin слід завантажувати через фасадні завантажувачі OpenClaw SDK;
прямі імпорти з `dist/extensions/...` оминають поетапні дзеркала залежностей середовища виконання,
які упаковані встановлення використовують для залежностей, якими володіє Plugin.
активному знімку конфігурації середовища виконання, коли OpenClaw уже працює. Якщо знімка середовища виконання
ще немає, вони повертаються до розв’язаної конфігурації на диску.
Запаковані фасади вбудованих плагінів слід завантажувати через завантажувачі фасадів плагінів
OpenClaw; прямі імпорти з `dist/extensions/...` оминають staged-дзеркала залежностей середовища виконання,
які запаковані встановлення використовують для залежностей, що належать плагіну.
Plugin провайдерів можуть надавати вузький локальний для Plugin contract barrel, коли
допоміжний засіб навмисно специфічний для провайдера і ще не належить до загального підшляху SDK.
Плагіни провайдерів можуть відкривати вузький локальний для плагіна barrel контракту, коли
помічник навмисно специфічний для провайдера й поки що не належить до загального підшляху SDK.
Вбудовані приклади:
- **Anthropic**: публічний шов `api.ts` / `contract-api.ts` для beta-header Claude
і допоміжних засобів потоків `service_tier`.
- **`@openclaw/openai-provider`**: `api.ts` експортує побудовники провайдера,
допоміжні засоби типових моделей і побудовники realtime-провайдера.
- **`@openclaw/openrouter-provider`**: `api.ts` експортує побудовник провайдера,
а також допоміжні засоби onboarding/конфігурації.
- **Anthropic**: публічний шов `api.ts` / `contract-api.ts` для Claude
beta-header і помічників потоку `service_tier`.
- **`@openclaw/openai-provider`**: `api.ts` експортує побудовники провайдерів,
помічники типових моделей і побудовники провайдерів realtime.
- **`@openclaw/openrouter-provider`**: `api.ts` експортує побудовник провайдера
плюс помічники онбордингу/конфігурації.
<Warning>
Виробничому коду розширення також слід уникати імпортів `openclaw/plugin-sdk/<other-plugin>`.
Якщо допоміжний засіб справді спільний, піднесіть його до нейтрального підшляху SDK,
такого як `openclaw/plugin-sdk/speech`, `.../provider-model-shared` або інша
поверхня, орієнтована на можливість, замість того щоб зв’язувати два Plugins між собою.
Production-коду розширень також слід уникати імпортів `openclaw/plugin-sdk/<other-plugin>`.
Якщо помічник справді спільний, підніміть його до нейтрального підшляху SDK,
як-от `openclaw/plugin-sdk/speech`, `.../provider-model-shared` або іншої
поверхні, орієнтованої на можливість, замість зв’язування двох плагінів між собою.
</Warning>
## Пов’язане
<CardGroup cols={2}>
<Card title="Entry points" icon="door-open" href="/uk/plugins/sdk-entrypoints">
<Card title="Точки входу" icon="door-open" href="/uk/plugins/sdk-entrypoints">
Параметри `definePluginEntry` і `defineChannelPluginEntry`.
</Card>
<Card title="Runtime helpers" icon="gears" href="/uk/plugins/sdk-runtime">
<Card title="Помічники середовища виконання" icon="gears" href="/uk/plugins/sdk-runtime">
Повна довідка простору імен `api.runtime`.
</Card>
<Card title="Setup and config" icon="sliders" href="/uk/plugins/sdk-setup">
<Card title="Налаштування й конфігурація" icon="sliders" href="/uk/plugins/sdk-setup">
Пакування, маніфести та схеми конфігурації.
</Card>
<Card title="Testing" icon="vial" href="/uk/plugins/sdk-testing">
Утиліти тестування та правила lint.
<Card title="Тестування" icon="vial" href="/uk/plugins/sdk-testing">
Тестові утиліти та правила lint.
</Card>
<Card title="SDK migration" icon="arrows-turn-right" href="/uk/plugins/sdk-migration">
<Card title="Міграція SDK" icon="arrows-turn-right" href="/uk/plugins/sdk-migration">
Міграція із застарілих поверхонь.
</Card>
<Card title="Plugin internals" icon="diagram-project" href="/uk/plugins/architecture">
<Card title="Внутрішня архітектура плагінів" icon="diagram-project" href="/uk/plugins/architecture">
Глибока архітектура та модель можливостей.
</Card>
</CardGroup>

View File

@ -1,30 +1,37 @@
---
read_when:
- Ви реалізуєте запропонований публічний SDK застосунку OpenClaw
- Вам потрібен чернетковий простір імен, подія, результат, артефакт, затвердження або контракт безпеки для SDK застосунку
- Ви порівнюєте ресурси протоколу Gateway з високорівневою обгорткою OpenClaw SDK
summary: Еталонний дизайн запропонованого публічного API SDK застосунку OpenClaw, таксономії подій, артефактів, схвалень і структури пакета
title: Дизайн API OpenClaw SDK
- Ви впроваджуєте запропонований публічний SDK застосунку OpenClaw
- Вам потрібен чернетковий контракт простору імен, події, результату, артефакту, затвердження або безпеки для SDK застосунку
- Ви порівнюєте ресурси протоколу Gateway з високорівневою обгорткою OpenClaw App SDK
sidebarTitle: App SDK API design
summary: Еталонний дизайн для публічного OpenClaw App SDK API, таксономії подій, артефактів, затверджень і структури пакета
title: Проєктування API SDK застосунків OpenClaw
x-i18n:
generated_at: "2026-04-29T23:55:35Z"
generated_at: "2026-04-30T00:49:55Z"
model: gpt-5.5
provider: openai
source_hash: c4dd0123581f4ba8332b6af9c673467092082a16488a61b5cbeac1b33e9a5dd1
source_hash: cacc5329942798b6876dba6ab8d6a9193291ddda81db5cb2ed492cc42a810099
source_path: reference/openclaw-sdk-api-design.md
workflow: 16
---
Ця сторінка є докладним проєктом довідника API для запропонованого публічного
[OpenClaw SDK](/uk/concepts/openclaw-sdk). Вона навмисно відокремлена від
[plugin SDK](/uk/plugins/sdk-overview).
Ця сторінка є докладним проєктом довідника API для публічного
[OpenClaw App SDK](/uk/concepts/openclaw-sdk). Вона навмисно відокремлена від
[Plugin SDK](/uk/plugins/sdk-overview).
Публічний SDK застосунку має бути побудований у двох шарах:
<Note>
`@openclaw/sdk` — це зовнішній пакет застосунку/клієнта для взаємодії з
Gateway. `openclaw/plugin-sdk/*` — це внутрішньопроцесний контракт для створення Plugin.
Не імпортуйте підшляхи Plugin SDK із застосунків, яким потрібно лише запускати агентів.
</Note>
Публічний SDK застосунку має бути побудований у два шари:
1. Низькорівневий згенерований клієнт Gateway.
2. Високорівнева ергономічна обгортка з обʼєктами `OpenClaw`, `Agent`, `Session`, `Run`,
`Task`, `Artifact`, `Approval` та `Environment`.
2. Високорівнева ергономічна обгортка з обєктами `OpenClaw`, `Agent`, `Session`, `Run`,
`Task`, `Artifact`, `Approval` і `Environment`.
## Проєктування простору імен
## Проєкт простору імен
Низькорівневі простори імен мають точно відповідати ресурсам Gateway:
@ -73,7 +80,7 @@ oc.environments.status(environmentId); // future API: current SDK throws unsuppo
oc.environments.delete(environmentId); // future API: current SDK throws unsupported
```
Високорівневі обгортки мають повертати обʼєкти, які роблять типові потоки зручними:
Високорівневі обгортки мають повертати об’єкти, які роблять поширені потоки зручними:
```typescript
const run = await agent.run(inputOrParams);
@ -108,43 +115,43 @@ type OpenClawEvent = {
};
```
`id` є курсором відтворення. Споживачі мають мати змогу повторно підключитися через
`events({ after: id })` і отримати пропущені події, якщо це дозволяє термін зберігання.
`id` — це курсор відтворення. Споживачі мають мати змогу повторно підключитися з
`events({ after: id })` і отримати пропущені події, якщо це дозволяє утримання.
Рекомендовані нормалізовані сімейства подій:
Рекомендовані сімейства нормалізованих подій:
| Подія | Значення |
| --------------------- | ---------------------------------------------------------- |
| `run.created` | Запуск прийнято. |
| `run.queued` | Запуск очікує на лінію сесії, runtime або середовище. |
| `run.started` | Runtime почав виконання. |
| `run.completed` | Запуск успішно завершився. |
| `run.failed` | Запуск завершився з помилкою. |
| `run.cancelled` | Запуск було скасовано. |
| `run.timed_out` | Запуск перевищив свій тайм-аут. |
| `assistant.delta` | Дельта тексту асистента. |
| `assistant.message` | Повне повідомлення асистента або заміна. |
| `thinking.delta` | Дельта міркування або плану, коли політика дозволяє показ. |
| `tool.call.started` | Виклик інструмента розпочався. |
| `tool.call.delta` | Виклик інструмента передав прогрес або частковий вивід. |
| `tool.call.completed` | Виклик інструмента успішно повернув результат. |
| `tool.call.failed` | Виклик інструмента завершився помилкою. |
| `approval.requested` | Запуск або інструмент потребує схвалення. |
| `approval.resolved` | Схвалення надано, відхилено, прострочено або скасовано. |
| `question.requested` | Runtime просить користувача або застосунок-хост надати дані. |
| `question.answered` | Застосунок-хост надав відповідь. |
| `artifact.created` | Доступний новий артефакт. |
| `artifact.updated` | Наявний артефакт змінено. |
| `session.created` | Сесію створено. |
| `session.updated` | Метадані сесії змінено. |
| `session.compacted` | Відбулася Compaction сесії. |
| `task.updated` | Стан фонової задачі змінено. |
| `git.branch` | Runtime спостеріг або змінив стан гілки. |
| `git.diff` | Runtime створив або змінив diff. |
| `git.pr` | Runtime відкрив, оновив або повʼязав pull request. |
| Подія | Значення |
| --------------------- | ----------------------------------------------------------- |
| `run.created` | Запуск прийнято. |
| `run.queued` | Запуск очікує смуги сеансу, середовища виконання або оточення. |
| `run.started` | Середовище виконання почало виконання. |
| `run.completed` | Запуск успішно завершено. |
| `run.failed` | Запуск завершився з помилкою. |
| `run.cancelled` | Запуск скасовано. |
| `run.timed_out` | Запуск перевищив свій тайм-аут. |
| `assistant.delta` | Дельта тексту асистента. |
| `assistant.message` | Повне повідомлення асистента або заміна. |
| `thinking.delta` | Дельта міркування або плану, коли політика дозволяє показ. |
| `tool.call.started` | Виклик інструмента розпочато. |
| `tool.call.delta` | Виклик інструмента передав прогрес або частковий результат. |
| `tool.call.completed` | Виклик інструмента успішно повернув результат. |
| `tool.call.failed` | Виклик інструмента завершився невдало. |
| `approval.requested` | Запуск або інструмент потребує схвалення. |
| `approval.resolved` | Схвалення надано, відхилено, прострочено або скасовано. |
| `question.requested` | Середовище виконання запитує ввід у користувача або хост-застосунку. |
| `question.answered` | Хост-застосунок надав відповідь. |
| `artifact.created` | Доступний новий артефакт. |
| `artifact.updated` | Наявний артефакт змінено. |
| `session.created` | Сеанс створено. |
| `session.updated` | Метадані сеансу змінено. |
| `session.compacted` | Відбулася Compaction сеансу. |
| `task.updated` | Стан фонового завдання змінено. |
| `git.branch` | Середовище виконання виявило або змінило стан гілки. |
| `git.diff` | Середовище виконання створило або змінило diff. |
| `git.pr` | Середовище виконання відкрило, оновило або пов’язало pull request. |
Нативні для runtime корисні навантаження мають бути доступні через `raw`, але застосунки не повинні
розбирати `raw` для звичайного UI.
Власні корисні навантаження середовища виконання мають бути доступні через `raw`, але застосунки не повинні
парсити `raw` для звичайного UI.
## Контракт результату
@ -176,16 +183,17 @@ type RunResult = {
Результат має бути простим і стабільним. Значення часових міток зберігають форму Gateway,
тому поточні запуски на основі життєвого циклу зазвичай повідомляють числа мілісекунд епохи,
тоді як адаптери все ще можуть повертати ISO-рядки. Багатий UI, трасування інструментів і
нативні для runtime деталі належать до подій та артефактів.
тоді як адаптери все ще можуть показувати рядки ISO. Багатий UI, траси інструментів і
власні деталі середовища виконання належать до подій та артефактів.
`accepted` є нетермінальним результатом очікування: це означає, що дедлайн очікування Gateway
`accepted` — це нетермінальний результат очікування: він означає, що крайній термін очікування Gateway
минув до того, як запуск створив завершення життєвого циклу або помилку. Його не можна трактувати як
`timed_out`; `timed_out` зарезервовано для запуску, який перевищив власний тайм-аут runtime.
`timed_out`; `timed_out` зарезервовано для запуску, який перевищив власний тайм-аут
середовища виконання.
## Схвалення та запитання
Схвалення мають бути сутностями першого класу, тому що агенти кодування постійно перетинають межі безпеки.
Схвалення мають бути першокласними, оскільки агенти коду постійно перетинають межі безпеки.
```typescript
run.onApproval(async (request) => {
@ -199,17 +207,18 @@ run.onApproval(async (request) => {
Події схвалення мають містити:
- id схвалення
- id запуску та id сесії
- ідентифікатор схвалення
- ідентифікатор запуску та ідентифікатор сеансу
- тип запиту
- підсумок запитуваної дії
- зведення запитаної дії
- назву інструмента або дію середовища
- рівень ризику
- доступні рішення
- строк дії
- чи можна повторно використати рішення
Запитання відокремлені від схвалень. Запитання просить у користувача або застосунку-хоста інформацію. Схвалення просить дозволу виконати дію.
Запитання відокремлені від схвалень. Запитання просить у користувача або хост-застосунку
інформацію. Схвалення просить дозвіл виконати дію.
## Модель ToolSpace
@ -225,14 +234,15 @@ for (const tool of tools.list()) {
SDK має надавати:
- нормалізовані метадані інструментів
- джерело: OpenClaw, MCP, Plugin, канал, runtime або застосунок
- підсумок схеми
- нормалізовані метадані інструмента
- джерело: OpenClaw, MCP, Plugin, канал, середовище виконання або застосунок
- зведення схеми
- політику схвалення
- сумісність із runtime
- чи інструмент прихований, readonly, здатний до запису або здатний до хост-дій
- сумісність із середовищем виконання
- чи є інструмент прихованим, лише для читання, здатним до запису або здатним працювати з хостом
Виклик інструментів через SDK має бути явним і обмеженим за областю. Більшість застосунків мають запускати агентів, а не викликати довільні інструменти напряму.
Виклик інструмента через SDK має бути явним і обмеженим за областю. Більшість застосунків мають
запускати агентів, а не напряму викликати довільні інструменти.
## Модель артефактів
@ -261,54 +271,54 @@ type ArtifactSummary = {
};
```
Типові приклади:
Поширені приклади:
- редагування файлів і згенеровані файли
- пакети patch
- пакети патчів
- diff VCS
- знімки екрана та медіавиводи
- журнали та пакети трасування
- журнали та пакети трас
- посилання на pull request
- траєкторії runtime
- знімки робочих просторів керованих середовищ
- траєкторії середовища виконання
- знімки робочого простору керованого середовища
Доступ до артефактів має підтримувати редагування чутливих даних, зберігання та URL для завантаження без
Доступ до артефактів має підтримувати редагування чутливих даних, утримання та URL-адреси для завантаження без
припущення, що кожен артефакт є звичайним локальним файлом.
## Модель безпеки
SDK застосунку має явно визначати повноваження.
SDK застосунку має явно описувати повноваження.
Рекомендовані області токена:
Рекомендовані області токенів:
| Область | Дозволяє |
| ------------------- | ---------------------------------------------------- |
| `agent.read` | Перелічувати й переглядати агентів. |
| `agent.run` | Запускати запуски. |
| `session.read` | Читати метадані та повідомлення сесій. |
| `session.write` | Створювати, надсилати до, форкати, compact і переривати сесії. |
| `task.read` | Читати стан фонових задач. |
| `task.write` | Скасовувати або змінювати політику сповіщень задач. |
| `agent.read` | Перелічувати та переглядати агентів. |
| `agent.run` | Запускати виконання. |
| `session.read` | Читати метадані та повідомлення сеансу. |
| `session.write` | Створювати, надсилати до, форкати, compact і переривати сеанси. |
| `task.read` | Читати стан фонового завдання. |
| `task.write` | Скасовувати або змінювати політику сповіщень завдань. |
| `approval.respond` | Схвалювати або відхиляти запити. |
| `tools.invoke` | Викликати відкриті інструменти напряму. |
| `artifacts.read` | Перелічувати й завантажувати артефакти. |
| `tools.invoke` | Напряму викликати відкриті інструменти. |
| `artifacts.read` | Перелічувати та завантажувати артефакти. |
| `environment.write` | Створювати або знищувати керовані середовища. |
| `admin` | Адміністративні операції. |
Типові значення:
- без пересилання секретів за замовчуванням
- без необмеженого пропускання змінних середовища
- без необмеженого наскрізного передавання змінних середовища
- посилання на секрети замість значень секретів
- явна політика sandbox і мережі
- явне зберігання віддаленого середовища
- схвалення для виконання на хості, якщо політика не доводить інше
- необроблені події runtime редагуються для вилучення чутливих даних перед виходом із Gateway, якщо викликач не має
- явна політика пісочниці та мережі
- явне утримання віддаленого середовища
- схвалення для виконання на хості, якщо політика не доводить протилежне
- сирі події середовища виконання редагуються до того, як залишають Gateway, якщо викликач не має
сильнішої діагностичної області
## Провайдер керованого середовища
## Постачальник керованого середовища
Керовані агенти мають реалізовуватися як провайдери середовищ.
Керовані агенти мають бути реалізовані як постачальники середовищ.
```typescript
type EnvironmentProvider = {
@ -326,60 +336,59 @@ type EnvironmentProvider = {
};
```
Перша реалізація не обовʼязково має бути hosted SaaS. Вона може націлюватися на
наявні хости node, ефемерні робочі простори, runners у стилі CI або середовища
у стилі Testbox. Важливий контракт такий:
Перша реалізація не обов’язково має бути розміщеним SaaS. Вона може бути націлена на
наявні хости Node, ефемерні робочі простори, runner-и у стилі CI або середовища у стилі Testbox.
Важливий контракт такий:
1. підготувати робочий простір
2. привʼязати безпечне середовище й секрети
3. запустити запуск
2. прив’язати безпечне середовище та секрети
3. запустити виконання
4. транслювати події
5. зібрати артефакти
6. очистити або зберегти згідно з політикою
6. очистити або утримати відповідно до політики
Коли це стабілізується, hosted cloud service зможе реалізувати той самий контракт провайдера.
Коли це стане стабільним, розміщений хмарний сервіс зможе реалізувати той самий контракт
постачальника.
## Структура пакунків
## Структура пакетів
Рекомендовані пакунки:
Рекомендовані пакети:
| Пакунок | Призначення |
| ----------------------- | ------------------------------------------------------------- |
| Пакет | Призначення |
| ----------------------- | ------------------------------------------------------------ |
| `@openclaw/sdk` | Публічний високорівневий SDK і згенерований низькорівневий клієнт Gateway. |
| `@openclaw/sdk-react` | Опціональні хуки React для dashboards і розробників застосунків. |
| `@openclaw/sdk-react` | Необов’язкові React-хуки для панелей керування та розробників застосунків. |
| `@openclaw/sdk-testing` | Тестові помічники та фальшивий сервер Gateway для інтеграцій застосунків. |
У репозиторії вже є `openclaw/plugin-sdk/*` для plugins. Тримайте цей простір імен
У репозиторії вже є `openclaw/plugin-sdk/*` для Plugin. Тримайте цей простір імен
окремо, щоб не плутати авторів Plugin із розробниками застосунків.
## Стратегія згенерованого клієнта
Низькорівневий клієнт має генеруватися з версійованих схем протоколу Gateway,
а потім обгортатися рукописними ергономічними класами.
Низькорівневий клієнт має генеруватися з версійованих схем протоколу Gateway, а потім обгортатися написаними вручну зручними класами.
Шарування:
Шари:
1. Джерело істини для схеми Gateway.
2. Згенерований низькорівневий клієнт TypeScript.
3. Валідатори часу виконання для зовнішніх вхідних даних і даних подій.
4. Високорівневі обгортки `OpenClaw`, `Agent`, `Session`, `Run`, `Task` і `Artifact`
.
5. Практичні приклади та інтеграційні тести.
1. Схеми Gateway як джерело істини.
2. Згенерований низькорівневий TypeScript-клієнт.
3. Валідатори часу виконання для зовнішніх вхідних даних і корисного навантаження подій.
4. Високорівневі обгортки `OpenClaw`, `Agent`, `Session`, `Run`, `Task` і `Artifact`.
5. Приклади рецептів і інтеграційні тести.
Переваги:
- дрейф протоколу помітний
- розбіжність протоколу помітна
- тести можуть порівнювати згенеровані методи з експортами Gateway
- SDK застосунку залишається незалежним від внутрішніх компонентів SDK Plugin
- SDK застосунку залишається незалежним від внутрішніх деталей Plugin SDK
- низькорівневі споживачі все ще мають повний доступ до протоколу
- високорівневі споживачі отримують невеликий продуктовий API
## Пов’язані документи
## Пов’язана документація
- [Дизайн SDK OpenClaw](/uk/concepts/openclaw-sdk)
- [SDK застосунку OpenClaw](/uk/concepts/openclaw-sdk)
- [Довідник RPC Gateway](/uk/reference/rpc)
- [Цикл агента](/uk/concepts/agent-loop)
- [Середовища виконання агентів](/uk/concepts/agent-runtimes)
- [Фонові завдання](/uk/automation/tasks)
- [Агенти ACP](/uk/tools/acp-agents)
- [Огляд SDK Plugin](/uk/plugins/sdk-overview)
- [Огляд Plugin SDK](/uk/plugins/sdk-overview)