RPC and API
SDK для застосунків OpenClaw
OpenClaw App SDK — це публічний клієнтський API для застосунків поза процесом
OpenClaw. Використовуйте @openclaw/sdk, коли скрипт, панель керування, завдання CI, розширення IDE
або інший зовнішній застосунок хоче підключитися до Gateway, запускати виконання агентів,
транслювати події, чекати результатів, скасовувати роботу або переглядати ресурси Gateway.
Що постачається сьогодні
@openclaw/sdk постачається з:
| Поверхня | Стан | Що вона робить |
|---|---|---|
OpenClaw |
Готово | Основна точка входу клієнта. Керує транспортом, підключенням, запитами та подіями. |
GatewayClientTransport |
Готово | WebSocket-транспорт на базі клієнта Gateway. |
oc.agents |
Готово | Перелічує, створює, оновлює, видаляє й отримує handles агентів. |
Agent.run() |
Готово | Запускає виконання Gateway agent і повертає Run. |
oc.runs |
Готово | Створює, отримує, очікує, скасовує й транслює виконання. |
Run.events() |
Готово | Транслює нормалізовані події окремого виконання з повтором для швидких виконань. |
Run.wait() |
Готово | Викликає agent.wait і повертає стабільний RunResult. |
Run.cancel() |
Готово | Викликає sessions.abort за id виконання, із ключем сесії, коли він доступний. |
oc.sessions |
Готово | Створює, розв’язує, надсилає до, виправляє, ущільнює й отримує handles сесій. |
Session.send() |
Готово | Викликає sessions.send і повертає Run. |
oc.models |
Готово | Викликає models.list і поточний статусний RPC models.authStatus. |
oc.tools |
Готово | Перелічує, визначає області й викликає інструменти Gateway через policy pipeline. |
oc.artifacts |
Готово | Перелічує, отримує й завантажує артефакти транскриптів Gateway. |
oc.approvals |
Готово | Перелічує й розв’язує exec-схвалення через RPC схвалень Gateway. |
oc.environments |
Частково | Перелічує локальні для Gateway і Node-кандидати середовищ; create/delete не підключені. |
oc.rawEvents() |
Готово | Надає сирі події Gateway для просунутих споживачів. |
normalizeGatewayEvent() |
Готово | Перетворює сирі події Gateway на стабільну форму події SDK. |
SDK також експортує основні типи, які використовують ці поверхні:
AgentRunParams, RunResult, RunStatus, OpenClawEvent,
OpenClawEventType, GatewayEvent, OpenClawTransport,
GatewayRequestOptions, SessionCreateParams, SessionSendParams,
ArtifactSummary, ArtifactQuery, ArtifactsListResult,
ArtifactsGetResult, ArtifactsDownloadResult, RuntimeSelection,
EnvironmentSelection, WorkspaceSelection, ApprovalMode і пов’язані
типи результатів.
Підключення до Gateway
Створіть клієнт із явною URL-адресою Gateway або впровадьте власний транспорт для тестів і вбудованих середовищ виконання застосунку.
const oc = new OpenClaw({
url: "ws://127.0.0.1:18789",
token: process.env.OPENCLAW_GATEWAY_TOKEN,
requestTimeoutMs: 30_000,
});
await oc.connect();
new OpenClaw({ gateway: "ws://..." }) еквівалентний url. Опцію
gateway: "auto" конструктор приймає, але автоматичне виявлення Gateway
ще не є окремою можливістю SDK; передавайте url, коли застосунок ще не
знає, як виявити Gateway.
Для тестів передайте об’єкт, який реалізує OpenClawTransport:
const oc = new OpenClaw({
transport: {
async request(method, params) {
return { method, params };
},
async *events() {},
},
});
Запуск агента
Використовуйте oc.agents.get(id), коли застосунку потрібен handle агента, а потім викликайте
agent.run().
const agent = await oc.agents.get("main");
const run = await agent.run({
input: "Review this pull request and suggest the smallest safe fix.",
model: "openai/gpt-5.5",
sessionKey: "main",
timeoutMs: 30_000,
});
for await (const event of run.events()) {
const data = event.data as { delta?: unknown };
if (event.type === "assistant.delta" && typeof data.delta === "string") {
process.stdout.write(data.delta);
}
}
const result = await run.wait({ timeoutMs: 120_000 });
console.log(result.status);
Посилання на моделі з указанням провайдера, як-от openai/gpt-5.5, розділяються на перевизначення Gateway
provider і model. timeoutMs залишається мілісекундами в SDK і
перетворюється на секунди тайм-ауту Gateway для RPC agent.
run.wait() використовує RPC Gateway agent.wait. Дедлайн очікування, який спливає,
поки виконання ще активне, повертає status: "accepted" замість удаваного
тайм-ауту самого виконання. Тайм-аути середовища виконання, перервані виконання та скасовані виконання
нормалізуються в timed_out або cancelled.
Створення та повторне використання сесій
Використовуйте сесії, коли застосунку потрібен довговічний стан транскрипту.
const session = await oc.sessions.create({
agentId: "main",
label: "release-review",
});
const run = await session.send("Prepare release notes from the current diff.");
await run.wait();
Session.send() викликає sessions.send і повертає Run. Handles сесій також
підтримують:
await session.abort(run.id);
await session.patch({ label: "renamed-session" });
await session.compact({ maxLines: 200 });
Трансляція подій
SDK нормалізує сирі події Gateway у стабільний конверт OpenClawEvent:
type OpenClawEvent = {
version: 1;
id: string;
ts: number;
type: OpenClawEventType;
runId?: string;
sessionId?: string;
sessionKey?: string;
taskId?: string;
agentId?: string;
data: unknown;
raw?: GatewayEvent;
};
Поширені типи подій:
| Тип події | Вихідна подія Gateway |
|---|---|
run.started |
Початок життєвого циклу agent |
run.completed |
Завершення життєвого циклу agent |
run.failed |
Помилка життєвого циклу agent |
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 |
Запит схвалення exec або Plugin |
approval.resolved |
Розв’язання схвалення exec або Plugin |
session.created |
Створення sessions.changed |
session.updated |
Оновлення sessions.changed |
session.compacted |
Compaction sessions.changed |
task.updated |
Події оновлення завдання |
artifact.updated |
Події потоку patch |
raw |
Будь-яка подія без стабільного зіставлення SDK наразі |
Run.events() фільтрує події за одним id виконання та повторює вже побачені події для
швидких виконань. Це означає, що задокументований потік безпечний:
const run = await agent.run("Summarize the latest session.");
for await (const event of run.events()) {
if (event.type === "run.completed") {
break;
}
}
Для потоків у межах усього застосунку використовуйте oc.events(). Для сирих кадрів Gateway використовуйте
oc.rawEvents().
Моделі, інструменти, артефакти та схвалення
Допоміжні засоби моделей зіставляються з поточними методами Gateway:
await oc.models.list();
await oc.models.status({ probe: false }); // calls models.authStatus
Допоміжні засоби інструментів надають каталог Gateway, ефективний перегляд інструментів і прямий
виклик інструмента Gateway. oc.tools.invoke() повертає типізований конверт замість
викидання помилки для відмов policy або схвалення.
await oc.tools.list();
await oc.tools.effective({ sessionKey: "main" });
await oc.tools.invoke("tool-name", {
args: { input: "value" },
sessionKey: "main",
confirm: false,
idempotencyKey: "tool-call-1",
});
Допоміжні засоби артефактів надають проєкцію артефактів Gateway для контексту сесії, виконання або
завдання. Кожен виклик потребує однієї явної області sessionKey, runId або
taskId:
const { artifacts } = await oc.artifacts.list({ sessionKey: "main" });
const first = artifacts[0];
if (first) {
const { artifact } = await oc.artifacts.get(first.id, { sessionKey: "main" });
const download = await oc.artifacts.download(artifact.id, { sessionKey: "main" });
console.log(download.encoding, download.url);
}
Допоміжні засоби схвалень використовують RPC exec-схвалень:
const approvals = await oc.approvals.list();
await oc.approvals.respond("approval-id", { decision: "approve" });
Допоміжні засоби середовищ надають виявлення лише для читання локальних для Gateway і Node середовищ:
const { environments } = await oc.environments.list();
await oc.environments.status(environments[0].id);
Явно не підтримується сьогодні
SDK містить назви для моделі продукту, яку ми хочемо, але не вдає мовчки, ніби RPC Gateway існують. Наразі ці виклики викидають явні помилки непідтримуваності:
await oc.tasks.list();
await oc.tasks.get("task-id");
await oc.tasks.cancel("task-id");
await oc.environments.create({});
await oc.environments.delete("environment-id");
Поля окремого виконання workspace, runtime, environment і approvals типізовані
як майбутня форма, але поточний Gateway не підтримує ці перевизначення в
RPC agent. Якщо викликачі передають їх, SDK викидає помилку перед надсиланням виконання,
щоб робота випадково не виконалася з типовими workspace, runtime,
environment або поведінкою схвалень.
App SDK проти Plugin SDK
Використовуйте App SDK, коли код існує поза OpenClaw:
- Node-скрипти, які запускають або спостерігають за виконаннями агентів
- завдання CI, які викликають Gateway
- панелі керування та адміністративні панелі
- розширення IDE
- зовнішні мости, яким не потрібно ставати channel plugins
- інтеграційні тести з підробленими або реальними транспортами Gateway
Використовуйте Plugin SDK, коли код працює всередині OpenClaw:
- provider plugins
- channel plugins
- hooks інструментів або життєвого циклу
- plugins обв’язки агентів
- довірені допоміжні засоби середовища виконання
Код App SDK має імпортувати з @openclaw/sdk. Код Plugin має імпортувати з
задокументованих підшляхів openclaw/plugin-sdk/*. Не змішуйте ці два контракти.