RPC and API
SDK برنامه OpenClaw
OpenClaw App SDK، API عمومی کلاینت برای برنامههایی خارج از فرایند OpenClaw است. زمانی از @openclaw/sdk استفاده کنید که یک اسکریپت، داشبورد، کار CI، افزونه IDE یا برنامه خارجی دیگر بخواهد به Gateway وصل شود، اجرای عاملها را شروع کند، رویدادها را استریم کند، منتظر نتایج بماند، کار را لغو کند یا منابع Gateway را بررسی کند.
آنچه امروز عرضه میشود
@openclaw/sdk شامل موارد زیر است:
| سطح | وضعیت | کاری که انجام میدهد |
|---|---|---|
OpenClaw |
آماده | نقطه ورود اصلی کلاینت. مالک ترنسپورت، اتصال، درخواستها و رویدادهاست. |
GatewayClientTransport |
آماده | ترنسپورت WebSocket مبتنی بر کلاینت Gateway. |
oc.agents |
آماده | دستههای عامل را فهرست میکند، میسازد، بهروزرسانی میکند، حذف میکند و میگیرد. |
Agent.run() |
آماده | یک اجرای Gateway از نوع agent را شروع میکند و یک Run برمیگرداند. |
oc.runs |
آماده | اجراها را میسازد، میگیرد، منتظرشان میماند، لغو میکند و استریم میکند. |
Run.events() |
آماده | رویدادهای نرمالشده هر اجرا را با بازپخش برای اجراهای سریع استریم میکند. |
Run.wait() |
آماده | agent.wait را صدا میزند و یک RunResult پایدار برمیگرداند. |
Run.cancel() |
آماده | sessions.abort را با شناسه اجرا و در صورت وجود با کلید نشست صدا میزند. |
oc.sessions |
آماده | دستههای نشست را میسازد، resolve میکند، به آنها میفرستد، patch میکند، compact میکند و میگیرد. |
Session.send() |
آماده | sessions.send را صدا میزند و یک Run برمیگرداند. |
oc.models |
آماده | models.list و RPC وضعیت فعلی models.authStatus را صدا میزند. |
oc.tools |
آماده | ابزارهای Gateway را از طریق پایپلاین سیاست فهرست، scope و invoke میکند. |
oc.artifacts |
آماده | آرتیفکتهای transcript Gateway را فهرست میکند، میگیرد و دانلود میکند. |
oc.approvals |
آماده | تأییدیههای exec را از طریق RPCهای تأیید Gateway فهرست و resolve میکند. |
oc.environments |
جزئی | گزینههای محیط محلی Gateway و node را فهرست میکند؛ ساخت/حذف وصل نشدهاند. |
oc.rawEvents() |
آماده | رویدادهای خام Gateway را برای مصرفکنندگان پیشرفته در دسترس میگذارد. |
normalizeGatewayEvent() |
آماده | رویدادهای خام Gateway را به شکل پایدار رویداد SDK تبدیل میکند. |
SDK همچنین نوعهای اصلی استفادهشده توسط این سطحها را export میکند:
AgentRunParams, RunResult, RunStatus, OpenClawEvent,
OpenClawEventType, GatewayEvent, OpenClawTransport,
GatewayRequestOptions, SessionCreateParams, SessionSendParams,
ArtifactSummary, ArtifactQuery, ArtifactsListResult,
ArtifactsGetResult, ArtifactsDownloadResult, RuntimeSelection,
EnvironmentSelection, WorkspaceSelection, ApprovalMode و نوعهای نتیجه مرتبط.
اتصال به Gateway
یک کلاینت با URL صریح Gateway بسازید، یا برای تستها و runtimeهای برنامه embedded یک ترنسپورت سفارشی inject کنید.
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 نیست؛ زمانی که برنامه از قبل نمیداند چگونه Gateway را کشف کند، url را پاس بدهید.
برای تستها، شیئی را پاس بدهید که OpenClawTransport را پیادهسازی میکند:
const oc = new OpenClaw({
transport: {
async request(method, params) {
return { method, params };
},
async *events() {},
},
});
اجرای یک عامل
وقتی برنامه یک دسته عامل میخواهد، از oc.agents.get(id) استفاده کنید، سپس
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، به overrideهای provider و model در Gateway تقسیم میشوند. timeoutMs در SDK بر حسب میلیثانیه باقی میماند و برای RPC نوع agent به ثانیه timeout در Gateway تبدیل میشود.
run.wait() از RPC agent.wait در Gateway استفاده میکند. اگر مهلت انتظار در حالی تمام شود که اجرا هنوز فعال است، بهجای وانمود کردن به اینکه خود اجرا timeout شده، status: "accepted" برمیگرداند. timeoutهای runtime، اجراهای abortشده و اجراهای لغوشده به timed_out یا cancelled نرمال میشوند.
ساخت و استفاده دوباره از نشستها
وقتی برنامه وضعیت transcript پایدار میخواهد، از نشستها استفاده کنید.
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 برمیگرداند. دستههای نشست همچنین پشتیبانی میکنند از:
await session.abort(run.id);
await session.patch({ label: "renamed-session" });
await session.compact({ maxLines: 200 });
استریم رویدادها
SDK رویدادهای خام Gateway را به یک envelope پایدار 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 |
پایان چرخه عمر abort/لغوشده |
run.timed_out |
پایان چرخه عمر timeout |
assistant.delta |
دلتای استریم دستیار |
assistant.message |
پیام دستیار |
thinking.delta |
استریم تفکر یا برنامه |
tool.call.started |
شروع ابزار/آیتم/فرمان |
tool.call.delta |
بهروزرسانی ابزار/آیتم/فرمان |
tool.call.completed |
تکمیل ابزار/آیتم/فرمان |
tool.call.failed |
شکست ابزار/آیتم/فرمان یا وضعیت مسدودشده |
approval.requested |
درخواست تأیید exec یا Plugin |
approval.resolved |
resolve شدن تأیید exec یا Plugin |
session.created |
ساخت sessions.changed |
session.updated |
بهروزرسانی sessions.changed |
session.compacted |
compaction در sessions.changed |
task.updated |
رویدادهای بهروزرسانی task |
artifact.updated |
رویدادهای استریم patch |
raw |
هر رویدادی که هنوز نگاشت پایدار SDK ندارد |
Run.events() رویدادها را به یک شناسه اجرا فیلتر میکند و رویدادهای دیدهشده قبلی را برای اجراهای سریع بازپخش میکند. یعنی جریان مستندشده امن است:
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() استفاده کنید.
مدلها، ابزارها، آرتیفکتها و تأییدیهها
helperهای مدل به متدهای فعلی Gateway نگاشت میشوند:
await oc.models.list();
await oc.models.status({ probe: false }); // calls models.authStatus
helperهای ابزار کاتالوگ Gateway، نمای مؤثر ابزار و invoke مستقیم ابزار Gateway را در دسترس میگذارند. oc.tools.invoke() بهجای throw کردن برای رد شدن توسط سیاست یا تأیید، یک envelope typed برمیگرداند.
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",
});
helperهای آرتیفکت projection آرتیفکت Gateway را برای context نشست، اجرا یا task در دسترس میگذارند. هر فراخوانی به یک scope صریح از 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);
}
helperهای تأیید از RPCهای تأیید exec استفاده میکنند:
const approvals = await oc.approvals.list();
await oc.approvals.respond("approval-id", { decision: "approve" });
helperهای محیط، کشف فقطخواندنی محلی Gateway و node را در دسترس میگذارند:
const { environments } = await oc.environments.list();
await oc.environments.status(environments[0].id);
مواردی که امروز صراحتاً پشتیبانی نمیشوند
SDK نامهایی را برای مدل محصولی که میخواهیم شامل میشود، اما در سکوت وانمود نمیکند RPCهای Gateway وجود دارند. این فراخوانیها در حال حاضر خطاهای صریح unsupported throw میکنند:
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 در سطح هر اجرا بهعنوان شکل آینده typed شدهاند، اما Gateway فعلی از این overrideها روی RPC نوع agent پشتیبانی نمیکند. اگر فراخوانها آنها را پاس بدهند، SDK پیش از ارسال اجرا throw میکند تا کار بهطور تصادفی با رفتار پیشفرض workspace، runtime، environment یا approval اجرا نشود.
App SDK در برابر Plugin SDK
وقتی کد بیرون از OpenClaw زندگی میکند، از App SDK استفاده کنید:
- اسکریپتهای Node که اجرای عاملها را شروع یا مشاهده میکنند
- کارهای CI که Gateway را صدا میزنند
- داشبوردها و پنلهای مدیریت
- افزونههای IDE
- bridgeهای خارجی که لازم نیست به Plugin کانال تبدیل شوند
- تستهای یکپارچهسازی با ترنسپورتهای Gateway جعلی یا واقعی
وقتی کد داخل OpenClaw اجرا میشود، از Plugin SDK استفاده کنید:
- Pluginهای ارائهدهنده
- Pluginهای کانال
- هوکهای ابزار یا چرخه عمر
- Pluginهای harness عامل
- helperهای runtime مورد اعتماد
کد App SDK باید از @openclaw/sdk import کند. کد Plugin باید از زیردسترسیهای مستندشده openclaw/plugin-sdk/* import کند. این دو قرارداد را با هم مخلوط نکنید.