RPC and API
حزمة تطوير تطبيق 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 |
جاهز | ينشئ مقابض الجلسات ويحلها ويرسل إليها ويرقعها ويضغطها ويحصل عليها. |
Session.send() |
جاهز | يستدعي sessions.send ويعيد Run. |
oc.models |
جاهز | يستدعي models.list وحالة RPC الحالية models.authStatus. |
oc.tools |
جاهز | يعرض أدوات Gateway ويحدد نطاقها ويستدعيها عبر مسار السياسة. |
oc.artifacts |
جاهز | يعرض آثار سجل Gateway ويحصل عليها وينزلها. |
oc.approvals |
جاهز | يعرض موافقات التنفيذ ويحلها عبر استدعاءات RPC للموافقات في Gateway. |
oc.environments |
جزئي | يعرض مرشحي البيئات المحلية لـ Gateway وnode؛ الإنشاء والحذف غير موصولين. |
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) عندما يريد التطبيق مقبض وكيل، ثم استدعِ
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. كما تدعم مقابض الجلسات:
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 |
طلب موافقة تنفيذ أو Plugin |
approval.resolved |
حل موافقة تنفيذ أو Plugin |
session.created |
إنشاء sessions.changed |
session.updated |
تحديث sessions.changed |
session.compacted |
ضغط sessions.changed |
task.updated |
أحداث تحديث المهمة |
artifact.updated |
أحداث بث الرقع |
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().
النماذج والأدوات والآثار والموافقات
تتطابق مساعدات النماذج مع طرق Gateway الحالية:
await oc.models.list();
await oc.models.status({ probe: false }); // calls models.authStatus
تكشف مساعدات الأدوات فهرس Gateway، وعرض الأدوات الفعلي، والاستدعاء المباشر
لأدوات Gateway. يعيد oc.tools.invoke() غلافًا ذا نوع بدلًا من الرمي عند رفض
السياسة أو الموافقة.
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 الخاصة بموافقات التنفيذ:
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 قبل إرسال التشغيل كي لا يُنفذ العمل
عرضًا بسلوك مساحة العمل أو بيئة التشغيل أو البيئة أو الموافقة الافتراضي.
App SDK مقابل Plugin SDK
استخدم App SDK عندما تكون الشفرة خارج OpenClaw:
- سكربتات Node التي تبدأ تشغيلات الوكيل أو تراقبها
- مهام CI التي تستدعي Gateway
- لوحات المعلومات ولوحات الإدارة
- إضافات IDE
- الجسور الخارجية التي لا تحتاج إلى أن تصبح plugins قنوات
- اختبارات التكامل مع نواقل Gateway مزيفة أو حقيقية
استخدم Plugin SDK عندما تعمل الشفرة داخل OpenClaw:
- plugins المزودين
- plugins القنوات
- خطافات الأدوات أو دورة الحياة
- plugins أحزمة الوكيل
- مساعدات بيئة التشغيل الموثوقة
يجب أن تستورد شفرة App SDK من @openclaw/sdk. ويجب أن تستورد شفرة Plugin من
المسارات الفرعية الموثقة openclaw/plugin-sdk/*. لا تخلط بين العقدين.