RPC and API
SDK aplikacji OpenClaw
OpenClaw App SDK to publiczne API klienta dla aplikacji poza procesem
OpenClaw. Użyj @openclaw/sdk, gdy skrypt, pulpit, zadanie CI, rozszerzenie IDE
lub inna aplikacja zewnętrzna chce połączyć się z Gateway, uruchamiać przebiegi
agentów, strumieniować zdarzenia, czekać na wyniki, anulować pracę lub sprawdzać
zasoby Gateway.
Co jest dostępne dzisiaj
@openclaw/sdk zawiera:
| Powierzchnia | Status | Co robi |
|---|---|---|
OpenClaw |
Gotowe | Główny punkt wejścia klienta. Obejmuje transport, połączenie, żądania i zdarzenia. |
GatewayClientTransport |
Gotowe | Transport WebSocket oparty na kliencie Gateway. |
oc.agents |
Gotowe | Wyświetla, tworzy, aktualizuje, usuwa i pobiera uchwyty agentów. |
Agent.run() |
Gotowe | Uruchamia przebieg Gateway agent i zwraca Run. |
oc.runs |
Gotowe | Tworzy, pobiera, oczekuje na, anuluje i strumieniuje przebiegi. |
Run.events() |
Gotowe | Strumieniuje znormalizowane zdarzenia dla przebiegu z odtworzeniem dla szybkich przebiegów. |
Run.wait() |
Gotowe | Wywołuje agent.wait i zwraca stabilny RunResult. |
Run.cancel() |
Gotowe | Wywołuje sessions.abort według identyfikatora przebiegu, z kluczem sesji, gdy jest dostępny. |
oc.sessions |
Gotowe | Tworzy, rozwiązuje, wysyła do, łata, kompaktuje i pobiera uchwyty sesji. |
Session.send() |
Gotowe | Wywołuje sessions.send i zwraca Run. |
oc.models |
Gotowe | Wywołuje models.list i bieżący RPC statusu models.authStatus. |
oc.tools |
Gotowe | Wyświetla, zawęża zakres i wywołuje narzędzia Gateway przez potok zasad. |
oc.artifacts |
Gotowe | Wyświetla, pobiera i pobiera do pliku artefakty transkryptów Gateway. |
oc.approvals |
Gotowe | Wyświetla i rozwiązuje zatwierdzenia exec przez RPC zatwierdzeń Gateway. |
oc.environments |
Częściowe | Wyświetla lokalne dla Gateway i węzłowe kandydaty środowisk; tworzenie/usuwanie nie jest podłączone. |
oc.rawEvents() |
Gotowe | Udostępnia surowe zdarzenia Gateway dla zaawansowanych konsumentów. |
normalizeGatewayEvent() |
Gotowe | Konwertuje surowe zdarzenia Gateway do stabilnego kształtu zdarzeń SDK. |
SDK eksportuje też podstawowe typy używane przez te powierzchnie:
AgentRunParams, RunResult, RunStatus, OpenClawEvent,
OpenClawEventType, GatewayEvent, OpenClawTransport,
GatewayRequestOptions, SessionCreateParams, SessionSendParams,
ArtifactSummary, ArtifactQuery, ArtifactsListResult,
ArtifactsGetResult, ArtifactsDownloadResult, RuntimeSelection,
EnvironmentSelection, WorkspaceSelection, ApprovalMode oraz powiązane
typy wyników.
Łączenie z Gateway
Utwórz klienta z jawnym adresem URL Gateway albo wstrzyknij niestandardowy transport dla testów i osadzonych środowisk uruchomieniowych aplikacji.
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://..." }) jest równoważne z url. Opcja
gateway: "auto" jest akceptowana przez konstruktor, ale automatyczne
wykrywanie Gateway nie jest jeszcze osobną funkcją SDK; przekaż url, gdy
aplikacja nie wie już, jak wykryć Gateway.
W testach przekaż obiekt implementujący OpenClawTransport:
const oc = new OpenClaw({
transport: {
async request(method, params) {
return { method, params };
},
async *events() {},
},
});
Uruchamianie agenta
Użyj oc.agents.get(id), gdy aplikacja potrzebuje uchwytu agenta, a następnie
wywołaj 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);
Odwołania do modeli kwalifikowane dostawcą, takie jak openai/gpt-5.5, są
dzielone na nadpisania provider i model Gateway. timeoutMs pozostaje w SDK
w milisekundach i jest konwertowane na sekundy limitu czasu Gateway dla RPC
agent.
run.wait() używa RPC Gateway agent.wait. Termin oczekiwania, który wygasa,
gdy przebieg jest nadal aktywny, zwraca status: "accepted" zamiast udawać, że
sam przebieg przekroczył limit czasu. Limity czasu środowiska uruchomieniowego,
przerwane przebiegi i anulowane przebiegi są normalizowane do timed_out lub
cancelled.
Tworzenie i ponowne używanie sesji
Używaj sesji, gdy aplikacja potrzebuje trwałego stanu transkryptu.
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() wywołuje sessions.send i zwraca Run. Uchwyty sesji obsługują
też:
await session.abort(run.id);
await session.patch({ label: "renamed-session" });
await session.compact({ maxLines: 200 });
Strumieniowanie zdarzeń
SDK normalizuje surowe zdarzenia Gateway do stabilnej koperty 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;
};
Typowe typy zdarzeń obejmują:
| Typ zdarzenia | Zdarzenie źródłowe Gateway |
|---|---|
run.started |
Początek cyklu życia agent |
run.completed |
Koniec cyklu życia agent |
run.failed |
Błąd cyklu życia agent |
run.cancelled |
Koniec przerwanego/anulowanego cyklu życia |
run.timed_out |
Koniec cyklu życia z limitem czasu |
assistant.delta |
Delta strumieniowania asystenta |
assistant.message |
Wiadomość asystenta |
thinking.delta |
Strumień myślenia lub planu |
tool.call.started |
Początek narzędzia/elementu/polecenia |
tool.call.delta |
Aktualizacja narzędzia/elementu/polecenia |
tool.call.completed |
Ukończenie narzędzia/elementu/polecenia |
tool.call.failed |
Niepowodzenie narzędzia/elementu/polecenia lub status zablokowany |
approval.requested |
Żądanie zatwierdzenia exec lub pluginu |
approval.resolved |
Rozstrzygnięcie zatwierdzenia exec lub pluginu |
session.created |
Utworzenie sessions.changed |
session.updated |
Aktualizacja sessions.changed |
session.compacted |
Kompaktowanie sessions.changed |
task.updated |
Zdarzenia aktualizacji zadania |
artifact.updated |
Zdarzenia strumienia łatek |
raw |
Dowolne zdarzenie bez stabilnego mapowania SDK |
Run.events() filtruje zdarzenia do jednego identyfikatora przebiegu i odtwarza
już widziane zdarzenia dla szybkich przebiegów. Oznacza to, że udokumentowany
przepływ jest bezpieczny:
const run = await agent.run("Summarize the latest session.");
for await (const event of run.events()) {
if (event.type === "run.completed") {
break;
}
}
Dla strumieni obejmujących całą aplikację użyj oc.events(). Dla surowych ramek
Gateway użyj oc.rawEvents().
Modele, narzędzia, artefakty i zatwierdzenia
Pomocniki modeli mapują się na bieżące metody Gateway:
await oc.models.list();
await oc.models.status({ probe: false }); // calls models.authStatus
Pomocniki narzędzi udostępniają katalog Gateway, efektywny widok narzędzi i
bezpośrednie wywołanie narzędzia Gateway. oc.tools.invoke() zwraca typowaną
kopertę zamiast zgłaszać wyjątek przy odmowach wynikających z zasad lub
zatwierdzeń.
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",
});
Pomocniki artefaktów udostępniają projekcję artefaktów Gateway dla kontekstu
sesji, przebiegu lub zadania. Każde wywołanie wymaga jednego jawnego zakresu
sessionKey, runId lub 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);
}
Pomocniki zatwierdzeń używają RPC zatwierdzeń exec:
const approvals = await oc.approvals.list();
await oc.approvals.respond("approval-id", { decision: "approve" });
Pomocniki środowisk udostępniają tylko do odczytu lokalne dla Gateway i węzłowe wykrywanie:
const { environments } = await oc.environments.list();
await oc.environments.status(environments[0].id);
Wyraźnie nieobsługiwane dzisiaj
SDK zawiera nazwy dla modelu produktu, którego chcemy, ale nie udaje po cichu, że RPC Gateway istnieją. Te wywołania obecnie zgłaszają jawne błędy braku obsługi:
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");
Pola workspace, runtime, environment i approvals dla przebiegu są
typowane jako przyszły kształt, ale bieżący Gateway nie obsługuje tych nadpisań
w RPC agent. Jeśli wywołujący je przekażą, SDK zgłasza błąd przed przesłaniem
przebiegu, aby praca nie została przypadkowo wykonana z domyślnym obszarem
roboczym, środowiskiem uruchomieniowym, środowiskiem lub zachowaniem
zatwierdzania.
App SDK kontra Plugin SDK
Używaj App SDK, gdy kod działa poza OpenClaw:
- skrypty Node, które uruchamiają lub obserwują przebiegi agentów
- zadania CI wywołujące Gateway
- pulpity i panele administracyjne
- rozszerzenia IDE
- zewnętrzne mosty, które nie muszą stać się pluginami kanałów
- testy integracyjne z fałszywymi lub prawdziwymi transportami Gateway
Używaj Plugin SDK, gdy kod działa wewnątrz OpenClaw:
- pluginy dostawców
- pluginy kanałów
- hooki narzędzi lub cyklu życia
- pluginy uprzęży agentów
- zaufane pomocniki środowiska uruchomieniowego
Kod App SDK powinien importować z @openclaw/sdk. Kod pluginu powinien
importować z udokumentowanych podścieżek openclaw/plugin-sdk/*. Nie mieszaj
tych dwóch kontraktów.