الانتقال إلى المحتوى الرئيسي
انتقل OpenClaw من طبقة واسعة للتوافق مع الإصدارات السابقة إلى بنية Plugin حديثة تعتمد على استيرادات مركزة وموثقة. إذا كان Plugin الخاص بك قد بُني قبل البنية الجديدة، فسيساعدك هذا الدليل على الترحيل.

ما الذي يتغير

كان نظام Plugin القديم يوفر سطحين واسعين ومفتوحين يتيحان لـ Plugins استيراد أي شيء تحتاج إليه من نقطة دخول واحدة:
  • openclaw/plugin-sdk/compat - استيراد واحد يعيد تصدير عشرات المساعدات. قُدّم لإبقاء Plugins الأقدم المعتمدة على الخطافات تعمل بينما كانت بنية Plugin الجديدة قيد البناء.
  • openclaw/plugin-sdk/infra-runtime - حزمة مساعدات تشغيلية واسعة تمزج أحداث النظام، وحالة Heartbeat، وطوابير التسليم، ومساعدات الجلب/الوكيل، ومساعدات الملفات، وأنواع الموافقة، وأدوات غير ذات صلة.
  • openclaw/plugin-sdk/config-runtime - حزمة توافق إعدادات واسعة ما تزال تحمل مساعدات التحميل/الكتابة المباشرة المهملة خلال نافذة الترحيل.
  • openclaw/extension-api - جسر منح Plugins وصولاً مباشراً إلى مساعدات جانب المضيف مثل مشغّل الوكيل المضمّن.
  • api.registerEmbeddedExtensionFactory(...) - خطاف Plugin مضمّن خاص بالمشغّل المضمّن فقط تمت إزالته، وكان يستطيع مراقبة أحداث المشغّل المضمّن مثل tool_result.
أصبحت أسطح الاستيراد الواسعة الآن مهملة. ما تزال تعمل في وقت التشغيل، لكن يجب ألا تستخدمها Plugins الجديدة، وينبغي لـ Plugins الحالية الترحيل قبل أن يزيلها الإصدار الرئيسي التالي. أزيلت واجهة برمجة تطبيقات تسجيل مصنع Plugin الخاصة بالمشغّل المضمّن فقط؛ استخدم وسيط نتائج الأدوات بدلاً من ذلك. لا يزيل OpenClaw سلوك Plugin الموثق أو يعيد تفسيره في التغيير نفسه الذي يقدم بديلاً. يجب أن تمر تغييرات العقود الكاسرة أولاً عبر محول توافق، وتشخيصات، ومستندات، ونافذة إهمال. ينطبق ذلك على استيرادات SDK، وحقول البيان، وواجهات إعداد API، والخطافات، وسلوك التسجيل في وقت التشغيل.
ستزال طبقة التوافق مع الإصدارات السابقة في إصدار رئيسي مستقبلي. ستتعطل Plugins التي ما تزال تستورد من هذه الأسطح عند حدوث ذلك. لم تعد تسجيلات مصنع Plugin المضمّن القديمة تُحمّل بالفعل.

لماذا تغير هذا

تسبب النهج القديم في مشكلات:
  • بدء تشغيل بطيء - كان استيراد مساعد واحد يحمّل عشرات الوحدات غير ذات الصلة
  • اعتماديات دائرية - جعلت إعادة التصدير الواسعة إنشاء دورات استيراد أمراً سهلاً
  • سطح API غير واضح - لم تكن هناك طريقة لمعرفة أي الصادرات مستقرة وأيها داخلية
يصلح SDK Plugin الحديث هذا: فكل مسار استيراد (openclaw/plugin-sdk/\<subpath\>) هو وحدة صغيرة ومكتفية ذاتياً لها غرض واضح وعقد موثق. اختفت أيضاً طبقات التسهيل القديمة للمزودين الخاصة بالقنوات المضمّنة. كانت طبقات المساعدة ذات العلامة القنوية اختصارات خاصة بمستودع أحادي، وليست عقود Plugin مستقرة. استخدم بدلاً منها مسارات SDK فرعية عامة وضيقة. داخل مساحة عمل Plugin المضمّنة، أبقِ المساعدات المملوكة للمزود داخل api.ts أو runtime-api.ts الخاصة بذلك Plugin. أمثلة المزودين المضمّنين الحالية:
  • يحتفظ Anthropic بمساعدات البث الخاصة بـ Claude في طبقة api.ts / contract-api.ts الخاصة به
  • يحتفظ OpenAI ببناة المزودين، ومساعدات النموذج الافتراضي، وبناة مزود الوقت الحقيقي في api.ts الخاصة به
  • يحتفظ OpenRouter بباني المزود ومساعدات الإعداد/التكوين في api.ts الخاصة به

خطة ترحيل Talk والصوت في الوقت الحقيقي

تنتقل شيفرة Talk الخاصة بالصوت في الوقت الحقيقي، والاتصالات الهاتفية، والاجتماعات، والمتصفح من مسك دفاتر الدور المحلي لكل سطح إلى متحكم جلسة Talk مشترك يصدّره openclaw/plugin-sdk/realtime-voice. يمتلك المتحكم الجديد مظروف أحداث Talk المشترك، وحالة الدور النشط، وحالة الالتقاط، وحالة الصوت الخارج، وسجل الأحداث الحديثة، ورفض الأدوار القديمة. ينبغي أن تظل Plugins المزودين مالكة لجلسات الوقت الحقيقي الخاصة بالمورّد؛ وينبغي أن تظل Plugins الأسطح مالكة لخصوصيات الالتقاط، والتشغيل، والاتصالات الهاتفية، والاجتماعات. ترحيل Talk هذا كاسر ونظيف عمداً:
  1. أبقِ متحكم/بدائيات وقت التشغيل المشتركة في plugin-sdk/realtime-voice.
  2. انقل الأسطح المضمّنة إلى المتحكم المشترك: مرحّل المتصفح، وتسليم الغرفة المُدارة، ووقت الاتصال الصوتي الحقيقي، وSTT المتدفق للاتصال الصوتي، ووقت Google Meet الحقيقي، والضغط الأصلي للتحدث.
  3. استبدل عائلات RPC القديمة الخاصة بـ Talk بواجهة API النهائية talk.session.* و talk.client.*.
  4. أعلن عن قناة أحداث Talk حية واحدة في Gateway hello-ok.features.events: talk.event.
  5. احذف نقطة نهاية HTTP القديمة للوقت الحقيقي وأي مسار لتجاوز التعليمات وقت الطلب.
ينبغي ألا تستدعي الشيفرة الجديدة createTalkEventSequencer(...) مباشرة إلا إذا كانت تنفذ محولاً منخفض المستوى أو أداة اختبار. فضّل المتحكم المشترك حتى لا يمكن إصدار أحداث نطاق الدور من دون معرف دور، ولا يمكن لاستدعاءات turnEnd / turnCancel القديمة مسح دور نشط أحدث، وتبقى أحداث دورة حياة الصوت الخارج متسقة عبر الاتصالات الهاتفية، والاجتماعات، ومرحل المتصفح، وتسليم الغرفة المُدارة، وعملاء Talk الأصليين. شكل API العام المستهدف هو:
// Gateway-owned Talk session API.
await gateway.request("talk.session.create", {
  mode: "realtime",
  transport: "gateway-relay",
  brain: "agent-consult",
  sessionKey: "main",
});
await gateway.request("talk.session.appendAudio", { sessionId, audioBase64 });
await gateway.request("talk.session.cancelOutput", { sessionId, reason: "barge-in" });
await gateway.request("talk.session.submitToolResult", {
  sessionId,
  callId,
  result: { status: "working" },
  options: { willContinue: true },
});
await gateway.request("talk.session.submitToolResult", {
  sessionId,
  callId,
  result: { status: "already_delivered" },
  options: { suppressResponse: true },
});
await gateway.request("talk.session.submitToolResult", { sessionId, callId, result });
await gateway.request("talk.session.close", { sessionId });

// Client-owned provider session API.
await gateway.request("talk.client.create", {
  mode: "realtime",
  transport: "webrtc",
  brain: "agent-consult",
  sessionKey: "main",
});
await gateway.request("talk.client.toolCall", { sessionKey, callId, name, args });
await gateway.request("talk.client.steer", { sessionKey, text, mode: "steer" });
تستخدم جلسات WebRTC/provider-websocket المملوكة للمتصفح talk.client.create، لأن المتصفح يمتلك تفاوض المزود ونقل الوسائط، بينما يمتلك Gateway بيانات الاعتماد والتعليمات وسياسة الأدوات. talk.session.* هو السطح المشترك المُدار بواسطة Gateway للوقت الحقيقي عبر gateway-relay، والنسخ عبر gateway-relay، وجلسات STT/TTS الأصلية في الغرفة المُدارة. ينبغي إصلاح الإعدادات القديمة التي وضعت محددات الوقت الحقيقي بجانب talk.provider / talk.providers باستخدام openclaw doctor --fix؛ لا يعيد Talk في وقت التشغيل تفسير إعداد مزود الكلام/TTS باعتباره إعداد مزود وقت حقيقي. توليفات talk.session.create المدعومة صغيرة عمداً:
النمطالنقلالعقلالمالكملاحظات
realtimegateway-relayagent-consultGatewayصوت مزود ثنائي الاتجاه الكامل يتم تجسيره عبر Gateway؛ تُوجّه استدعاءات الأدوات عبر أداة agent-consult.
transcriptiongateway-relaynoneGatewaySTT متدفق فقط؛ يرسل المستدعون صوت الإدخال ويتلقون أحداث النص.
stt-ttsmanaged-roomagent-consultغرفة أصلية/عميلغرف بأسلوب الضغط للتحدث واللاسلكي حيث يمتلك العميل الالتقاط/التشغيل ويمتلك Gateway حالة الدور.
stt-ttsmanaged-roomdirect-toolsغرفة أصلية/عميلنمط غرفة للمسؤولين فقط للأسطح الموثوقة من الطرف الأول التي تنفذ إجراءات أدوات Gateway مباشرة.
خريطة الطرق المُزالة:
القديمالجديد
talk.realtime.sessiontalk.client.create
talk.realtime.toolCalltalk.client.toolCall
talk.realtime.relayAudiotalk.session.appendAudio
talk.realtime.relayCanceltalk.session.cancelOutput أو talk.session.cancelTurn
talk.realtime.relayToolResulttalk.session.submitToolResult
talk.realtime.relayStoptalk.session.close
talk.transcription.sessiontalk.session.create({ mode: "transcription" })
talk.transcription.relayAudiotalk.session.appendAudio
talk.transcription.relayCanceltalk.session.cancelTurn
talk.transcription.relayStoptalk.session.close
talk.handoff.createtalk.session.create({ transport: "managed-room" })
talk.handoff.jointalk.session.join
talk.handoff.revoketalk.session.close
كما أن مفردات التحكم الموحدة ضيقة عمداً:
الطريقةتنطبق علىالعقد
talk.session.appendAudiorealtime/gateway-relay, transcription/gateway-relayإلحاق جزء صوت PCM بترميز base64 بجلسة المزوّد التي يملكها اتصال Gateway نفسه.
talk.session.startTurnstt-tts/managed-roomبدء دور مستخدم في غرفة مُدارة.
talk.session.endTurnstt-tts/managed-roomإنهاء الدور النشط بعد التحقق من الدور المتقادم.
talk.session.cancelTurnجميع الجلسات التي يملكها Gatewayإلغاء عمل الالتقاط/المزوّد/الوكيل/TTS النشط لدور ما.
talk.session.cancelOutputrealtime/gateway-relayإيقاف إخراج صوت المساعد دون إنهاء دور المستخدم بالضرورة.
talk.session.submitToolResultrealtime/gateway-relayإكمال استدعاء أداة المزوّد الذي أصدره المرحّل؛ مرّر options.willContinue للمخرجات المؤقتة أو options.suppressResponse لتلبية الاستدعاء دون رد مساعد آخر.
talk.session.steerجلسات Talk المدعومة بوكيلإرسال تحكم منطوق من نوع status أو steer أو cancel أو followup إلى التشغيل المضمّن النشط الذي تم حله من جلسة Talk.
talk.session.closeجميع الجلسات الموحّدةإيقاف جلسات المرحّل أو إبطال حالة الغرفة المُدارة، ثم نسيان معرّف الجلسة الموحّدة.
لا تُدخل حالات خاصة بالمزوّد أو المنصة في النواة لجعل هذا يعمل. تملك النواة دلالات جلسة Talk. وتملك إضافات المزوّد إعداد جلسة البائع. وتملك المكالمات الصوتية وGoogle Meet محوّلات الهاتفية/الاجتماعات. وتملك تطبيقات المتصفح والتطبيقات الأصلية تجربة مستخدم التقاط/تشغيل الجهاز.

سياسة التوافق

بالنسبة إلى الإضافات الخارجية، يتبع عمل التوافق هذا الترتيب:
  1. أضف العقد الجديد
  2. أبقِ السلوك القديم موصولًا عبر محوّل توافق
  3. أصدِر تشخيصًا أو تحذيرًا يذكر المسار القديم والبديل
  4. غطِّ كلا المسارين في الاختبارات
  5. وثّق الإيقاف التدريجي ومسار الترحيل
  6. أزِل فقط بعد نافذة الترحيل المُعلنة، عادةً في إصدار رئيسي
يمكن للمشرفين تدقيق قائمة انتظار الترحيل الحالية باستخدام pnpm plugins:boundary-report. استخدم pnpm plugins:boundary-report:summary للحصول على أعداد موجزة، و--owner <id> لإضافة واحدة أو مالك توافق واحد، و pnpm plugins:boundary-report:ci عندما ينبغي لبوابة CI أن تفشل عند وجود سجلات توافق مستحقة، أو استيرادات SDK محجوزة عابرة للمالكين، أو مسارات SDK فرعية محجوزة غير مستخدمة. يجمع التقرير سجلات التوافق الموقوفة تدريجيًا حسب تاريخ الإزالة، ويعدّ مراجع الكود/المستندات المحلية، ويُظهر استيرادات SDK المحجوزة العابرة للمالكين، ويلخّص جسر SDK الخاص بمضيف الذاكرة بحيث يبقى تنظيف التوافق صريحًا بدلًا من الاعتماد على عمليات بحث مخصصة. يجب أن يكون للمسارات الفرعية المحجوزة في SDK استخدام مالك متتبّع؛ وينبغي إزالة صادرات المساعدين المحجوزة غير المستخدمة من SDK العام. إذا كان حقل manifest لا يزال مقبولًا، فيمكن لمؤلفي الإضافات الاستمرار في استخدامه حتى تقول المستندات والتشخيصات خلاف ذلك. ينبغي للكود الجديد تفضيل البديل الموثّق، لكن لا ينبغي أن تتعطل الإضافات الموجودة أثناء الإصدارات الثانوية العادية.

كيفية الترحيل

1

ترحيل مساعدات تحميل/كتابة إعدادات وقت التشغيل

ينبغي للإضافات المضمّنة التوقف عن استدعاء api.runtime.config.loadConfig() و api.runtime.config.writeConfigFile(...) مباشرةً. فضّل الإعدادات التي تم تمريرها بالفعل إلى مسار الاستدعاء النشط. يمكن للمعالجات طويلة العمر التي تحتاج إلى لقطة العملية الحالية استخدام api.runtime.config.current(). وينبغي لأدوات الوكيل طويلة العمر استخدام ctx.getRuntimeConfig() الخاص بسياق الأداة داخل execute بحيث تظل الأداة التي أُنشئت قبل كتابة إعدادات قادرة على رؤية إعدادات وقت التشغيل المحدّثة.يجب أن تمر كتابات الإعدادات عبر المساعدات المعاملاتية وأن تختار سياسة ما بعد الكتابة:
await api.runtime.config.mutateConfigFile({
  afterWrite: { mode: "auto" },
  mutate(draft) {
    draft.plugins ??= {};
  },
});
استخدم afterWrite: { mode: "restart", reason: "..." } عندما يعرف المستدعي أن التغيير يتطلب إعادة تشغيل نظيفة لـ Gateway، و afterWrite: { mode: "none", reason: "..." } فقط عندما يملك المستدعي المتابعة ويريد عمدًا كبت مخطط إعادة التحميل. تتضمن نتائج الطفرة ملخص followUp ذا نوع محددًا للاختبارات والتسجيل؛ يظل Gateway مسؤولًا عن تطبيق إعادة التشغيل أو جدولتها. يظل loadConfig وwriteConfigFile مساعدَي توافق موقوفين تدريجيًا للإضافات الخارجية أثناء نافذة الترحيل ويحذّران مرة واحدة باستخدام رمز التوافق runtime-config-load-write. تتم حماية الإضافات المضمّنة وكود وقت تشغيل المستودع بواسطة حواجز الماسح في pnpm check:deprecated-api-usage و pnpm check:no-runtime-action-load-config: يفشل استخدام إضافات الإنتاج الجديد مباشرةً، وتفشل كتابات الإعدادات المباشرة، ويجب أن تستخدم طرق خادم Gateway لقطة وقت تشغيل الطلب، ويجب أن تتلقى مساعدات إرسال/إجراء/عميل قناة وقت التشغيل الإعدادات من حدودها، ولا يُسمح لوحدات وقت التشغيل طويلة العمر بأي استدعاءات loadConfig() محيطة.ينبغي لكود الإضافة الجديد أيضًا تجنب استيراد برميل التوافق الواسع openclaw/plugin-sdk/config-runtime. استخدم مسار SDK الفرعي الضيق الذي يطابق المهمة:
الحاجةالاستيراد
أنواع الإعدادات مثل OpenClawConfigopenclaw/plugin-sdk/config-contracts
تأكيدات الإعدادات المحمّلة مسبقًا وبحث إعدادات مدخل الإضافةopenclaw/plugin-sdk/plugin-config-runtime
قراءات لقطة وقت التشغيل الحاليةopenclaw/plugin-sdk/runtime-config-snapshot
كتابات الإعداداتopenclaw/plugin-sdk/config-mutation
مساعدات مخزن الجلساتopenclaw/plugin-sdk/session-store-runtime
إعدادات جدول Markdownopenclaw/plugin-sdk/markdown-table-runtime
مساعدات وقت تشغيل سياسة المجموعاتopenclaw/plugin-sdk/runtime-group-policy
حل إدخال السرopenclaw/plugin-sdk/secret-input-runtime
تجاوزات النموذج/الجلسةopenclaw/plugin-sdk/model-session-runtime
تتم حماية الإضافات المضمّنة واختباراتها بالماسح ضد البرميل الواسع بحيث تبقى الاستيرادات والمحاكيات محلية للسلوك الذي تحتاجه. لا يزال البرميل الواسع موجودًا للتوافق الخارجي، لكن لا ينبغي للكود الجديد الاعتماد عليه.
2

ترحيل امتدادات نتائج الأدوات المضمّنة إلى وسيط

يجب على الإضافات المضمّنة استبدال معالجات نتائج الأدوات الخاصة بالمشغّل المضمّن فقط api.registerEmbeddedExtensionFactory(...) بوسيط محايد لوقت التشغيل.
// OpenClaw and Codex runtime dynamic tools
api.registerAgentToolResultMiddleware(async (event) => {
  return compactToolResult(event);
}, {
  runtimes: ["openclaw", "codex"],
});
حدّث manifest الإضافة في الوقت نفسه:
{
  "contracts": {
    "agentToolResultMiddleware": ["openclaw", "codex"]
  }
}
يمكن للإضافات المثبّتة أيضًا تسجيل وسيط نتائج الأدوات عندما تكون مفعّلة صراحةً وتعلن كل وقت تشغيل مستهدف في contracts.agentToolResultMiddleware. تُرفض تسجيلات الوسيط المثبّتة غير المعلنة.
3

ترحيل معالجات الموافقة الأصلية إلى حقائق الإمكانات

تعرض إضافات القنوات القادرة على الموافقة الآن سلوك الموافقة الأصلي عبر approvalCapability.nativeRuntime بالإضافة إلى سجل سياق وقت التشغيل المشترك.التغييرات الرئيسية:
  • استبدل approvalCapability.handler.loadRuntime(...) بـ approvalCapability.nativeRuntime
  • انقل المصادقة/التسليم الخاصين بالموافقة من توصيلات plugin.auth / plugin.approvals القديمة إلى approvalCapability
  • تمت إزالة ChannelPlugin.approvals من عقد إضافة القناة العام؛ انقل حقول التسليم/الأصلي/العرض إلى approvalCapability
  • يبقى plugin.auth لتدفقات تسجيل الدخول/الخروج للقناة فقط؛ لم تعد النواة تقرأ خطافات مصادقة الموافقة هناك
  • سجّل كائنات وقت التشغيل المملوكة للقناة مثل العملاء أو الرموز أو تطبيقات Bolt عبر openclaw/plugin-sdk/channel-runtime-context
  • لا ترسل إشعارات إعادة التوجيه المملوكة للإضافة من معالجات الموافقة الأصلية؛ تملك النواة الآن إشعارات التوجيه إلى مكان آخر من نتائج التسليم الفعلية
  • عند تمرير channelRuntime إلى createChannelManager(...)، قدّم سطح createPluginRuntime().channel حقيقيًا. تُرفض الجذوع الجزئية.
راجع /plugins/sdk-channel-plugins للتخطيط الحالي لإمكانات الموافقة.
4

تدقيق سلوك الرجوع الاحتياطي لمغلّف Windows

إذا كانت إضافتك تستخدم openclaw/plugin-sdk/windows-spawn، فإن مغلّفات Windows .cmd/.bat غير المحلولة تفشل الآن بشكل مغلق ما لم تمرر صراحةً allowShellFallback: true.
// Before
const program = applyWindowsSpawnProgramPolicy({ candidate });

// After
const program = applyWindowsSpawnProgramPolicy({
  candidate,
  // Only set this for trusted compatibility callers that intentionally
  // accept shell-mediated fallback.
  allowShellFallback: true,
});
إذا لم يكن المستدعي لديك يعتمد عمدًا على الرجوع الاحتياطي عبر الصدفة، فلا تضبط allowShellFallback وتعامل مع الخطأ المرمى بدلًا من ذلك.
5

العثور على الاستيرادات الموقوفة تدريجيًا

ابحث في إضافتك عن الاستيرادات من أي من السطحين الموقوفين تدريجيًا:
grep -r "plugin-sdk/compat" my-plugin/
grep -r "plugin-sdk/infra-runtime" my-plugin/
grep -r "plugin-sdk/config-runtime" my-plugin/
grep -r "openclaw/extension-api" my-plugin/
6

استبدالها باستيرادات مركّزة

يطابق كل تصدير من السطح القديم مسار استيراد حديثًا محددًا:
// Before (deprecated backwards-compatibility layer)
import {
  createChannelReplyPipeline,
  createPluginRuntimeStore,
  resolveControlCommandGate,
} from "openclaw/plugin-sdk/compat";

// After (modern focused imports)
import { createChannelReplyPipeline } from "openclaw/plugin-sdk/channel-reply-pipeline";
import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
import { resolveControlCommandGate } from "openclaw/plugin-sdk/command-auth";
بالنسبة إلى مساعدات جانب المضيف، استخدم وقت تشغيل الإضافة المحقون بدلًا من الاستيراد مباشرةً:
// Before (deprecated extension-api bridge)
import { runEmbeddedAgent } from "openclaw/extension-api";
const result = await runEmbeddedAgent({ sessionId, prompt });

// After (injected runtime)
const result = await api.runtime.agent.runEmbeddedAgent({ sessionId, prompt });
ينطبق النمط نفسه على مساعدات الجسر القديمة الأخرى:
الاستيراد القديمالمكافئ الحديث
resolveAgentDirapi.runtime.agent.resolveAgentDir
resolveAgentWorkspaceDirapi.runtime.agent.resolveAgentWorkspaceDir
resolveAgentIdentityapi.runtime.agent.resolveAgentIdentity
resolveThinkingDefaultapi.runtime.agent.resolveThinkingDefault
resolveAgentTimeoutMsapi.runtime.agent.resolveAgentTimeoutMs
ensureAgentWorkspaceapi.runtime.agent.ensureAgentWorkspace
مساعدات مخزن الجلساتapi.runtime.agent.session.*
7

استبدل استيرادات infra-runtime الواسعة

لا يزال openclaw/plugin-sdk/infra-runtime موجودًا للتوافق الخارجي، لكن ينبغي للكود الجديد أن يستورد سطح المساعدات المركّز الذي يحتاجه فعليًا:
الحاجةالاستيراد
مساعدات قائمة انتظار أحداث النظامopenclaw/plugin-sdk/system-event-runtime
مساعدات تنبيه Heartbeat والحدث والرؤيةopenclaw/plugin-sdk/heartbeat-runtime
تفريغ قائمة انتظار التسليم المعلّقopenclaw/plugin-sdk/delivery-queue-runtime
قياسات نشاط القناةopenclaw/plugin-sdk/channel-activity-runtime
ذاكرات التخزين المؤقت لإزالة التكرار، المدعومة بالذاكرة والمستمرةopenclaw/plugin-sdk/dedupe-runtime
مساعدات آمنة لمسارات الملفات المحلية/الوسائطopenclaw/plugin-sdk/file-access-runtime
fetch واعٍ بالمرسِلopenclaw/plugin-sdk/runtime-fetch
مساعدات الوكيل وfetch المحروسopenclaw/plugin-sdk/fetch-runtime
أنواع سياسة مرسِل SSRFopenclaw/plugin-sdk/ssrf-dispatcher
أنواع طلب/حل الموافقةopenclaw/plugin-sdk/approval-runtime
مساعدات حمولة رد الموافقة والأوامرopenclaw/plugin-sdk/approval-reply-runtime
مساعدات تنسيق الأخطاءopenclaw/plugin-sdk/error-runtime
انتظار جاهزية النقلopenclaw/plugin-sdk/transport-ready-runtime
مساعدات الرموز الآمنةopenclaw/plugin-sdk/secure-random-runtime
تزامن محدود للمهام غير المتزامنةopenclaw/plugin-sdk/concurrency-runtime
التحويل القسري الرقميopenclaw/plugin-sdk/number-runtime
قفل غير متزامن محلي للعمليةopenclaw/plugin-sdk/async-lock-runtime
أقفال الملفاتopenclaw/plugin-sdk/file-lock
تخضع Plugins المضمّنة لحراسة الماسح ضد infra-runtime، لذلك لا يمكن لكود المستودع أن يتراجع إلى البرميل الواسع.
8

رحّل مساعدات مسارات القنوات

ينبغي لكود مسارات القنوات الجديد استخدام openclaw/plugin-sdk/channel-route. تظل أسماء مفتاح المسار والهدف القابل للمقارنة الأقدم موجودة كأسماء مستعارة للتوافق أثناء نافذة الترحيل، لكن ينبغي للـ Plugins الجديدة استخدام أسماء المسارات التي تصف السلوك مباشرةً:
المساعد القديمالمساعد الحديث
channelRouteIdentityKey(...)channelRouteDedupeKey(...)
channelRouteKey(...)channelRouteCompactKey(...)
ComparableChannelTargetChannelRouteParsedTarget
comparableChannelTargetsMatch(...)channelRouteTargetsMatchExact(...)
comparableChannelTargetsShareRoute(...)channelRouteTargetsShareConversation(...)
تقوم مساعدات المسارات الحديثة بتطبيع { channel, to, accountId, threadId } بشكل متسق عبر الموافقات الأصلية، وكبت الردود، وإزالة تكرار الوارد، وتسليم cron، وتوجيه الجلسات.لا تضف استخدامات جديدة لـ ChannelMessagingAdapter.parseExplicitTarget أو مساعدات المسارات المحمّلة المدعومة بالمحلل (parseExplicitTargetForLoadedChannel أو resolveRouteTargetForLoadedChannel) أو resolveChannelRouteTargetWithParser(...) من plugin-sdk/channel-route. هذه الخطافات مهملة وتبقى فقط للـ Plugins الأقدم أثناء نافذة الترحيل. ينبغي للـ Plugins القنوات الجديدة استخدام messaging.targetResolver.resolveTarget(...) لتطبيع معرّف الهدف والرجوع عند فقدان الدليل، وmessaging.inferTargetChatType(...) عندما يحتاج core إلى نوع نظير مبكر، وmessaging.resolveOutboundSessionRoute(...) لهوية الجلسة وسلسلة الرسائل الأصلية للمزوّد.
9

ابنِ واختبر

pnpm build
pnpm test -- my-plugin/

مرجع مسارات الاستيراد

مسار الاستيرادالغرضالصادرات الرئيسية
plugin-sdk/plugin-entryمساعد إدخال Plugin القياسيdefinePluginEntry
plugin-sdk/coreإعادة تصدير شاملة قديمة لتعريفات وبناة إدخالات القنواتdefineChannelPluginEntry, createChatChannelPlugin
plugin-sdk/config-schemaتصدير مخطط تهيئة الجذرOpenClawSchema
plugin-sdk/provider-entryمساعد إدخال لمزوّد واحدdefineSingleProviderPluginEntry
plugin-sdk/channel-coreتعريفات وبناة مركزة لإدخالات القنواتdefineChannelPluginEntry, defineSetupPluginEntry, createChatChannelPlugin, createChannelPluginBase
plugin-sdk/setupمساعدات معالج الإعداد المشتركةمترجم الإعداد، مطالبات قائمة السماح، بناة حالة الإعداد
plugin-sdk/setup-runtimeمساعدات وقت الإعداد الخاصة بوقت التشغيلcreateSetupTranslator، محوّلات تصحيحات إعداد آمنة للاستيراد، مساعدات ملاحظات البحث، promptResolvedAllowFrom، splitSetupEntries، وكلاء إعداد مفوّضون
plugin-sdk/setup-adapter-runtimeاسم مستعار مهمل لمحوّل الإعداداستخدم plugin-sdk/setup-runtime
plugin-sdk/setup-toolsمساعدات أدوات الإعدادformatCliCommand, detectBinary, extractArchive, resolveBrewExecutable, formatDocsLink, CONFIG_DIR
plugin-sdk/account-coreمساعدات الحسابات المتعددةمساعدات قائمة الحسابات/التهيئة/بوابة الإجراءات
plugin-sdk/account-idمساعدات معرّفات الحساباتDEFAULT_ACCOUNT_ID، تطبيع معرّف الحساب
plugin-sdk/account-resolutionمساعدات البحث عن الحساباتمساعدات البحث عن الحسابات والرجوع الافتراضي
plugin-sdk/account-helpersمساعدات حسابات ضيقة النطاقمساعدات قائمة الحسابات/إجراءات الحسابات
plugin-sdk/channel-setupمحوّلات معالج الإعدادcreateOptionalChannelSetupSurface, createOptionalChannelSetupAdapter, createOptionalChannelSetupWizard، إضافة إلى DEFAULT_ACCOUNT_ID, createTopLevelChannelDmPolicy, setSetupChannelEnabled, splitSetupEntries
plugin-sdk/channel-pairingبدائيات إقران DMcreateChannelPairingController
plugin-sdk/channel-reply-pipelineبادئة الرد، والكتابة، وتوصيل التسليم من المصدرcreateChannelReplyPipeline, resolveChannelSourceReplyDeliveryMode
plugin-sdk/channel-config-helpersمصانع محوّلات التهيئة ومساعدات وصول DMcreateHybridChannelConfigAdapter, resolveChannelDmAccess, resolveChannelDmAllowFrom, resolveChannelDmPolicy, normalizeChannelDmPolicy, normalizeLegacyDmAliases
plugin-sdk/channel-config-schemaبناة مخططات التهيئةبدائيات مخطط تهيئة القنوات المشتركة والباني العام فقط
plugin-sdk/bundled-channel-config-schemaمخططات التهيئة المضمّنةPlugins المضمّنة التي يصونها OpenClaw فقط؛ يجب أن تعرّف Plugins الجديدة مخططات محلية للـ Plugin
plugin-sdk/channel-config-schema-legacyمخططات تهيئة مضمّنة مهملةاسم مستعار للتوافق فقط؛ استخدم plugin-sdk/bundled-channel-config-schema للـ Plugins المضمّنة المصانة
plugin-sdk/telegram-command-configمساعدات تهيئة أوامر Telegramتطبيع أسماء الأوامر، تقليم الأوصاف، التحقق من التكرار/التعارض
plugin-sdk/channel-policyحل سياسة المجموعة/DMresolveChannelGroupRequireMention
plugin-sdk/channel-lifecycleواجهة توافق مهملةاستخدم plugin-sdk/channel-outbound
plugin-sdk/inbound-envelopeمساعدات مغلفات الواردمساعدات مشتركة لبناء المسارات والمغلفات
plugin-sdk/channel-inboundمساعدات استقبال الواردبناء السياق، والتنسيق، والجذور، والمشغّلات، وإرسال الردود المحضّرة، ومسندات الإرسال
plugin-sdk/messaging-targetsمسار استيراد مهمل لتحليل الأهدافاستخدم plugin-sdk/channel-targets لمساعدات تحليل الأهداف العامة، وplugin-sdk/channel-route لمقارنة المسارات، وmessaging.targetResolver / messaging.resolveOutboundSessionRoute المملوكين للـ Plugin لحل الأهداف الخاصة بالمزوّد
plugin-sdk/outbound-mediaمساعدات الوسائط الصادرةتحميل الوسائط الصادرة المشتركة
plugin-sdk/outbound-send-depsواجهة توافق مهملةاستخدم plugin-sdk/channel-outbound
plugin-sdk/channel-outboundمساعدات دورة حياة الرسائل الصادرةمحوّلات الرسائل، والإيصالات، ومساعدات الإرسال الدائم، ومساعدات المعاينة المباشرة/البث، وخيارات الرد، ومساعدات دورة الحياة، وهوية الصادر، وتخطيط الحمولة
plugin-sdk/channel-streamingواجهة توافق مهملةاستخدم plugin-sdk/channel-outbound
plugin-sdk/outbound-runtimeواجهة توافق مهملةاستخدم plugin-sdk/channel-outbound
plugin-sdk/thread-bindings-runtimeمساعدات ربط المحادثاتمساعدات دورة حياة ربط المحادثات ومحوّلاته
plugin-sdk/agent-media-payloadمساعدات حمولات الوسائط القديمةباني حمولة وسائط الوكيل لتخطيطات الحقول القديمة
plugin-sdk/channel-runtimeوصلة توافق مهملةأدوات وقت تشغيل القنوات القديمة فقط
plugin-sdk/channel-send-resultأنواع نتائج الإرسالأنواع نتائج الرد
plugin-sdk/runtime-storeتخزين Plugin دائمcreatePluginRuntimeStore
plugin-sdk/runtimeمساعدات وقت تشغيل واسعة النطاقمساعدات وقت التشغيل/التسجيل/النسخ الاحتياطي/تثبيت Plugin
plugin-sdk/runtime-envمساعدات ضيقة النطاق لبيئة وقت التشغيلمساعدات المسجل/بيئة وقت التشغيل، والمهلة، وإعادة المحاولة، والتراجع
plugin-sdk/plugin-runtimeمساعدات مشتركة لوقت تشغيل Pluginمساعدات أوامر/خطافات/http/تفاعلية للـ Plugin
plugin-sdk/hook-runtimeمساعدات مسار الخطافاتمساعدات مشتركة لمسار خطافات Webhook/الخطافات الداخلية
plugin-sdk/lazy-runtimeمساعدات وقت التشغيل الكسولcreateLazyRuntimeModule, createLazyRuntimeMethod, createLazyRuntimeMethodBinder, createLazyRuntimeNamedExport, createLazyRuntimeSurface
plugin-sdk/process-runtimeمساعدات العملياتمساعدات exec المشتركة
plugin-sdk/cli-runtimeمساعدات وقت تشغيل CLIتنسيق الأوامر، والانتظار، ومساعدات الإصدار
plugin-sdk/gateway-runtimeمساعدات Gatewayعميل Gateway، ومساعد بدء جاهز لحلقة الأحداث، وحل مضيف LAN المعلن، ومساعدات تصحيح حالة القناة
plugin-sdk/config-runtimeوصلة توافق تهيئة مهملةفضّل config-contracts, plugin-config-runtime, runtime-config-snapshot, وconfig-mutation
plugin-sdk/telegram-command-configمساعدات أوامر Telegramمساعدات تحقق من أوامر Telegram مستقرة مع الرجوع الاحتياطي عندما يكون سطح عقد Telegram المضمّن غير متاح
plugin-sdk/approval-runtimeمساعدات مطالبة الموافقةحمولة موافقة exec/Plugin، ومساعدات قدرة/ملف تعريف الموافقة، ومساعدات توجيه/وقت تشغيل الموافقة الأصلية، وتنسيق مسار عرض الموافقة المنظم
plugin-sdk/approval-auth-runtimeمساعدات مصادقة الموافقةحل صاحب الموافقة، ومصادقة إجراء الدردشة نفسها
plugin-sdk/approval-client-runtimeمساعدات عميل الموافقةمساعدات ملف تعريف/مرشح موافقة exec الأصلية
plugin-sdk/approval-delivery-runtimeمساعدات تسليم الموافقةمحوّلات قدرة/تسليم الموافقة الأصلية
plugin-sdk/approval-gateway-runtimeمساعدات Gateway للموافقةمساعد مشترك لحل Gateway للموافقة
plugin-sdk/approval-handler-adapter-runtimeمساعدات محوّل الموافقةمساعدات خفيفة لتحميل محوّل الموافقة الأصلية لنقاط دخول القنوات الساخنة
plugin-sdk/approval-handler-runtimeمساعدات معالج الموافقةمساعدات أوسع لوقت تشغيل معالج الموافقة؛ فضّل وصلات المحوّل/Gateway الأضيق عندما تكون كافية
plugin-sdk/approval-native-runtimeمساعدات هدف الموافقةمساعدات ربط هدف/حساب الموافقة الأصلية
plugin-sdk/approval-reply-runtimeمساعدات رد الموافقةمساعدات حمولة رد موافقة exec/Plugin
plugin-sdk/channel-runtime-contextمساعدات سياق وقت تشغيل القناةمساعدات عامة لتسجيل/جلب/مراقبة سياق وقت تشغيل القناة
plugin-sdk/security-runtimeمساعدات الأمانمساعدات الثقة المشتركة، وبوابة DM، ومساعدات الملفات/المسارات المحدودة بالجذر، والمحتوى الخارجي، وجمع الأسرار
plugin-sdk/ssrf-policyمساعدات سياسة SSRFمساعدات قائمة السماح بالمضيفين وسياسة الشبكات الخاصة
plugin-sdk/ssrf-runtimeمساعدات وقت تشغيل SSRFمساعدات المرسل المثبّت، والجلب المحروس، وسياسة SSRF
plugin-sdk/system-event-runtimeمساعدات أحداث النظامenqueueSystemEvent, peekSystemEventEntries
plugin-sdk/heartbeat-runtimeمساعدات Heartbeatمساعدات إيقاظ Heartbeat، والأحداث، والرؤية
plugin-sdk/delivery-queue-runtimeمساعدات طابور التسليمdrainPendingDeliveries
plugin-sdk/channel-activity-runtimeمساعدات نشاط القناةrecordChannelActivity
plugin-sdk/dedupe-runtimeمساعدات إزالة التكرارذاكرات تخزين مؤقت لإزالة التكرار في الذاكرة ومدعومة بتخزين دائم
plugin-sdk/file-access-runtimeمساعدات الوصول إلى الملفاتمساعدات آمنة لمسارات الملفات/الوسائط المحلية
plugin-sdk/transport-ready-runtimeمساعدات جاهزية النقلwaitForTransportReady
plugin-sdk/exec-approvals-runtimeمساعدات سياسة موافقة execloadExecApprovals, resolveExecApprovalsFromFile, ExecApprovalsFile
plugin-sdk/collection-runtimeمساعدات ذاكرة تخزين مؤقت محدودةpruneMapToMaxSize
plugin-sdk/diagnostic-runtimeمساعدات بوابة التشخيصisDiagnosticFlagEnabled, isDiagnosticsEnabled
plugin-sdk/error-runtimeمساعدات تنسيق الأخطاءformatUncaughtError, isApprovalNotFoundError، مساعدات رسم بياني للأخطاء
plugin-sdk/fetch-runtimeمساعدات الجلب/الوكيل المغلّفةresolveFetch، مساعدات الوكيل، مساعدات خيارات EnvHttpProxyAgent
plugin-sdk/host-runtimeمساعدات تطبيع المضيفnormalizeHostname, normalizeScpRemoteHost
plugin-sdk/retry-runtimeمساعدات إعادة المحاولةRetryConfig, retryAsync، مشغّلات السياسة
plugin-sdk/allow-fromتنسيق قائمة السماح وربط الإدخالformatAllowFromLowercase, mapAllowlistResolutionInputs
plugin-sdk/command-authمساعدات بوابة الأوامر وسطح الأوامرresolveControlCommandGate، مساعدات تفويض المرسل، مساعدات سجل الأوامر بما في ذلك تنسيق قائمة الوسائط الديناميكية
plugin-sdk/command-statusعارضات حالة/مساعدة الأوامرbuildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage
plugin-sdk/secret-inputتحليل إدخال الأسرارمساعدات إدخال الأسرار
plugin-sdk/webhook-ingressمساعدات طلب Webhookأدوات أهداف Webhook
plugin-sdk/webhook-request-guardsمساعدات حراسة جسم Webhookمساعدات قراءة/حد جسم الطلب
plugin-sdk/reply-runtimeوقت تشغيل الرد المشتركإرسال الوارد، وHeartbeat، ومخطط الرد، والتقسيم
plugin-sdk/reply-dispatch-runtimeمساعدات ضيقة النطاق لإرسال الردالإنهاء، وإرسال المزوّد، ومساعدات تسمية المحادثة
plugin-sdk/reply-historyمساعدات سجل الردودcreateChannelHistoryWindow؛ صادرات توافق مهملة لمساعدات الخرائط مثل buildPendingHistoryContextFromMap، وrecordPendingHistoryEntry، وclearHistoryEntriesIfEnabled
plugin-sdk/reply-referenceتخطيط مرجع الردcreateReplyReferencePlanner
plugin-sdk/reply-chunkingمساعدات تقسيم الردمساعدات تقسيم النص/markdown
plugin-sdk/session-store-runtimeمساعدات مخزن الجلساتمساعدات مسار المخزن ووقت التحديث
plugin-sdk/state-pathsمساعدات مسارات الحالةمساعدات أدلة الحالة وOAuth
plugin-sdk/routingمساعدات التوجيه/مفتاح الجلسةresolveAgentRoute, buildAgentSessionKey, resolveDefaultAgentBoundAccountId, مساعدات تطبيع مفتاح الجلسة
plugin-sdk/status-helpersمساعدات حالة القناةبناة ملخص حالة القناة/الحساب، افتراضيات حالة وقت التشغيل، ومساعدات بيانات تعريف المشكلات
plugin-sdk/target-resolver-runtimeمساعدات محلل الهدفمساعدات محلل الهدف المشتركة
plugin-sdk/string-normalization-runtimeمساعدات تطبيع السلاسل النصيةمساعدات تطبيع السلاسل النصية/المعرّفات اللطيفة
plugin-sdk/request-urlمساعدات عنوان URL للطلباستخراج عناوين URL النصية من مدخلات شبيهة بالطلبات
plugin-sdk/run-commandمساعدات الأوامر الموقوتةمشغل أوامر موقوت مع مخرجات قياسية وأخطاء قياسية مطبعة
plugin-sdk/param-readersقارئات المعاملاتقارئات معاملات مشتركة للأداة/CLI
plugin-sdk/tool-payloadاستخراج حمولة الأداةاستخراج حمولات مطبعة من كائنات نتيجة الأداة
plugin-sdk/tool-sendاستخراج إرسال الأداةاستخراج حقول هدف الإرسال القياسية من وسائط الأداة
plugin-sdk/temp-pathمساعدات المسار المؤقتمساعدات مسار التنزيل المؤقت المشتركة
plugin-sdk/logging-coreمساعدات التسجيلمساعدات مسجل النظام الفرعي والتنقيح
plugin-sdk/markdown-table-runtimeمساعدات جدول Markdownمساعدات وضع جدول Markdown
plugin-sdk/reply-payloadأنواع رد الرسائلأنواع حمولة الرد
plugin-sdk/provider-setupمساعدات إعداد المزوّد المحلي/ذاتي الاستضافة المنسقةمساعدات اكتشاف/تكوين المزوّد ذاتي الاستضافة
plugin-sdk/self-hosted-provider-setupمساعدات إعداد مركزة للمزوّد ذاتي الاستضافة المتوافق مع OpenAIمساعدات اكتشاف/تكوين المزوّد ذاتي الاستضافة نفسها
plugin-sdk/provider-auth-runtimeمساعدات مصادقة وقت تشغيل المزوّدمساعدات حل مفتاح API في وقت التشغيل
plugin-sdk/provider-auth-api-keyمساعدات إعداد مفتاح API للمزوّدمساعدات التهيئة الأولية/كتابة الملف الشخصي لمفتاح API
plugin-sdk/provider-auth-resultمساعدات نتيجة مصادقة المزوّدباني نتيجة مصادقة OAuth قياسي
plugin-sdk/provider-selection-runtimeمساعدات اختيار المزوّداختيار المزوّد المكوّن أو التلقائي ودمج تكوين المزوّد الخام
plugin-sdk/provider-env-varsمساعدات متغيرات بيئة المزوّدمساعدات البحث عن متغيرات بيئة مصادقة المزوّد
plugin-sdk/provider-model-sharedمساعدات مشتركة لنموذج/إعادة تشغيل المزوّدProviderReplayFamily, buildProviderReplayFamilyHooks, normalizeModelCompat, بناة سياسة إعادة التشغيل المشتركة، مساعدات نقطة نهاية المزوّد، ومساعدات تطبيع معرّف النموذج
plugin-sdk/provider-catalog-sharedمساعدات كتالوج المزوّد المشتركةfindCatalogTemplate, buildSingleProviderApiKeyCatalog, buildManifestModelProviderConfig, supportsNativeStreamingUsageCompat, applyProviderNativeStreamingUsageCompat
plugin-sdk/provider-onboardتصحيحات تهيئة المزوّد الأوليةمساعدات تكوين التهيئة الأولية
plugin-sdk/provider-httpمساعدات HTTP للمزوّدمساعدات عامة لقدرات HTTP/نقاط النهاية للمزوّد، بما في ذلك مساعدات نموذج الأجزاء المتعددة لتفريغ الصوت
plugin-sdk/provider-web-fetchمساعدات جلب الويب للمزوّدمساعدات تسجيل/تخزين مؤقت لمزوّد جلب الويب
plugin-sdk/provider-web-search-config-contractمساعدات تكوين بحث الويب للمزوّدمساعدات ضيقة لتكوين/اعتماد بحث الويب للمزوّدين الذين لا يحتاجون إلى توصيل تفعيل Plugin
plugin-sdk/provider-web-search-contractمساعدات عقد بحث الويب للمزوّدمساعدات ضيقة لعقد تكوين/اعتماد بحث الويب مثل createWebSearchProviderContractFields, enablePluginInConfig, resolveProviderWebSearchPluginConfig, ومحددات/جالبات الاعتمادات محددة النطاق
plugin-sdk/provider-web-searchمساعدات بحث الويب للمزوّدمساعدات تسجيل/تخزين مؤقت/وقت تشغيل لمزوّد بحث الويب
plugin-sdk/provider-toolsمساعدات توافق أداة/مخطط المزوّدProviderToolCompatFamily, buildProviderToolCompatFamilyHooks, وتنظيف مخططات DeepSeek/Gemini/OpenAI + التشخيصات
plugin-sdk/provider-usageمساعدات استخدام المزوّدfetchClaudeUsage, fetchGeminiUsage, fetchGithubCopilotUsage, ومساعدات أخرى لاستخدام المزوّد
plugin-sdk/provider-streamمساعدات مغلف دفق المزوّدProviderStreamFamily, buildProviderStreamFamilyHooks, composeProviderStreamWrappers, أنواع مغلفات الدفق، ومساعدات مغلفات Anthropic/Bedrock/DeepSeek V4/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot المشتركة
plugin-sdk/provider-transport-runtimeمساعدات نقل المزوّدمساعدات نقل المزوّد الأصلية مثل الجلب المحروس، واستخراج نص نتيجة الأداة، وتحويلات رسائل النقل، وتدفقات أحداث النقل القابلة للكتابة
plugin-sdk/keyed-async-queueطابور غير متزامن مرتبKeyedAsyncQueue
plugin-sdk/media-runtimeمساعدات الوسائط المشتركةمساعدات جلب/تحويل/تخزين الوسائط، وفحص أبعاد الفيديو المدعوم بـ ffprobe، وبناة حمولة الوسائط
plugin-sdk/media-generation-runtimeمساعدات توليد الوسائط المشتركةمساعدات تجاوز الفشل المشتركة، واختيار المرشحين، ورسائل النموذج المفقود لتوليد الصور/الفيديو/الموسيقى
plugin-sdk/media-understandingمساعدات فهم الوسائطأنواع مزوّد فهم الوسائط إضافة إلى صادرات مساعدات الصور/الصوت الموجهة للمزوّد
plugin-sdk/text-runtimeتصدير توافق نصي عريض مهملاستخدم string-coerce-runtime, text-chunking, text-utility-runtime, وlogging-core
plugin-sdk/text-chunkingمساعدات تقطيع النصمساعد تقطيع النص الصادر
plugin-sdk/speechمساعدات الكلامأنواع مزوّد الكلام إضافة إلى مساعدات التوجيهات والسجل والتحقق الموجهة للمزوّد، وباني تحويل النص إلى كلام المتوافق مع OpenAI
plugin-sdk/speech-coreنواة الكلام المشتركةأنواع مزوّد الكلام، السجل، التوجيهات، التطبيع
plugin-sdk/realtime-transcriptionمساعدات التفريغ الفوريأنواع المزوّد، مساعدات السجل، ومساعد جلسة WebSocket مشترك
plugin-sdk/realtime-voiceمساعدات الصوت الفوريأنواع المزوّد، مساعدات السجل/الحل، مساعدات جلسة الجسر، طوابير حديث الوكيل الخلفية المشتركة، التحكم الصوتي للتشغيل النشط، صحة النص/الحدث، منع الصدى، مطابقة أسئلة الاستشارة، تنسيق الاستشارة القسرية، تتبع سياق الدور، تتبع نشاط الإخراج، ومساعدات الاستشارة السريعة للسياق
plugin-sdk/image-generationمساعدات توليد الصورأنواع مزوّد توليد الصور إضافة إلى مساعدات أصل الصورة/عنوان URL للبيانات وباني مزوّد الصور المتوافق مع OpenAI
plugin-sdk/image-generation-coreنواة توليد الصور المشتركةأنواع توليد الصور، تجاوز الفشل، المصادقة، ومساعدات السجل
plugin-sdk/music-generationمساعدات توليد الموسيقىأنواع مزوّد/طلب/نتيجة توليد الموسيقى
plugin-sdk/music-generation-coreنواة توليد الموسيقى المشتركةأنواع توليد الموسيقى، مساعدات تجاوز الفشل، البحث عن المزوّد، وتحليل مرجع النموذج
plugin-sdk/video-generationمساعدات توليد الفيديوأنواع مزوّد/طلب/نتيجة توليد الفيديو
plugin-sdk/video-generation-coreنواة توليد الفيديو المشتركةأنواع توليد الفيديو، مساعدات تجاوز الفشل، البحث عن المزوّد، وتحليل مرجع النموذج
plugin-sdk/interactive-runtimeمساعدات الرد التفاعليتطبيع/اختزال حمولة الرد التفاعلي
plugin-sdk/channel-config-primitivesبدائيات تكوين القناةبدائيات ضيقة لمخطط تكوين القناة
plugin-sdk/channel-config-writesمساعدات كتابة تكوين القناةمساعدات تفويض كتابة تكوين القناة
plugin-sdk/channel-plugin-commonتمهيد القناة المشتركصادرات تمهيد Plugin القناة المشتركة
plugin-sdk/channel-statusمساعدات حالة القناةمساعدات لقطة/ملخص حالة القناة المشتركة
plugin-sdk/allowlist-config-editمساعدات تكوين قائمة السماحمساعدات تعديل/قراءة تكوين قائمة السماح
plugin-sdk/group-accessمساعدات وصول المجموعةمساعدات قرار وصول المجموعة المشتركة
plugin-sdk/direct-dm, plugin-sdk/direct-dm-accessواجهات توافق مهملةاستخدم plugin-sdk/channel-inbound
plugin-sdk/direct-dm-guard-policyمساعدات حراسة الرسائل المباشرةمساعدات سياسة حراسة ضيقة قبل التشفير
plugin-sdk/extension-sharedمساعدات الامتداد المشتركةبدائيات مساعدات القناة السلبية/الحالة والوكيل المحيط
plugin-sdk/webhook-targetsمساعدات هدف Webhookسجل أهداف Webhook ومساعدات تثبيت المسارات
plugin-sdk/webhook-pathاسم مستعار مهمل لمسار Webhookاستخدم plugin-sdk/webhook-ingress
plugin-sdk/web-mediaمساعدات وسائط الويب المشتركةمساعدات تحميل الوسائط البعيدة/المحلية
plugin-sdk/zodإعادة تصدير توافق Zod مهملةاستورد zod من zod مباشرة
plugin-sdk/memory-coreمساعدات نواة الذاكرة المضمنةسطح مساعدات مدير الذاكرة/التكوين/الملف/CLI
plugin-sdk/memory-core-engine-runtimeواجهة وقت تشغيل محرك الذاكرةواجهة وقت تشغيل فهرس/بحث الذاكرة
plugin-sdk/memory-core-host-embedding-registryسجل تضمين الذاكرةمساعدات خفيفة لسجل مزوّد تضمين الذاكرة
plugin-sdk/memory-core-host-engine-foundationمحرك أساس مضيف الذاكرةصادرات محرك أساس مضيف الذاكرة
plugin-sdk/memory-core-host-engine-embeddingsمحرك تضمين مضيف الذاكرةعقود تضمين الذاكرة، الوصول إلى السجل، المزوّد المحلي، ومساعدات الدُفعات/البُعد العامة؛ يعيش المزوّدون البعيدون الملموسون في Plugins المالكة لهم
plugin-sdk/memory-core-host-engine-qmdمحرك QMD لمضيف الذاكرةصادرات محرك QMD لمضيف الذاكرة
plugin-sdk/memory-core-host-engine-storageمحرك تخزين مضيف الذاكرةصادرات محرك تخزين مضيف الذاكرة
plugin-sdk/memory-core-host-multimodalمساعدات مضيف الذاكرة متعددة الوسائطمساعدات مضيف الذاكرة متعددة الوسائط
plugin-sdk/memory-core-host-queryمساعدات استعلام مضيف الذاكرةمساعدات استعلام مضيف الذاكرة
plugin-sdk/memory-core-host-secretمساعدات سر مضيف الذاكرةمساعدات سر مضيف الذاكرة
plugin-sdk/memory-core-host-eventsاسم مستعار مهمل لأحداث الذاكرةاستخدم plugin-sdk/memory-host-events
plugin-sdk/memory-core-host-statusمساعدات حالة مضيف الذاكرةمساعدات حالة مضيف الذاكرة
plugin-sdk/memory-core-host-runtime-cliوقت تشغيل CLI لمضيف الذاكرةمساعدات وقت تشغيل CLI لمضيف الذاكرة
plugin-sdk/memory-core-host-runtime-coreوقت تشغيل نواة مضيف الذاكرةمساعدات وقت تشغيل نواة مضيف الذاكرة
plugin-sdk/memory-core-host-runtime-filesمساعدات ملف/وقت تشغيل مضيف الذاكرةمساعدات ملف/وقت تشغيل مضيف الذاكرة
plugin-sdk/memory-host-coreاسم مستعار لوقت تشغيل نواة مضيف الذاكرةاسم مستعار محايد للمورّد لمساعدات وقت تشغيل نواة مضيف الذاكرة
plugin-sdk/memory-host-eventsاسم مستعار ليومية أحداث مضيف الذاكرةاسم مستعار محايد للمورّد لمساعدات يومية أحداث مضيف الذاكرة
plugin-sdk/memory-host-filesاسم مستعار مهمل لملف/وقت تشغيل الذاكرةاستخدم plugin-sdk/memory-core-host-runtime-files
plugin-sdk/memory-host-markdownمساعدات Markdown مُدارةمساعدات Markdown مُدارة مشتركة لـ Plugins المتاخمة للذاكرة
plugin-sdk/memory-host-searchواجهة بحث Active Memoryواجهة وقت تشغيل كسولة لمدير بحث Active Memory
plugin-sdk/memory-host-statusاسم مستعار مهمل لحالة مضيف الذاكرةاستخدم plugin-sdk/memory-core-host-status
plugin-sdk/testingأدوات الاختباربرميل توافق مهمل محلي للمستودع؛ استخدم مسارات اختبار فرعية محلية مركزة للمستودع مثل plugin-sdk/plugin-test-runtime, plugin-sdk/channel-test-helpers, plugin-sdk/channel-target-testing, plugin-sdk/test-env, وplugin-sdk/test-fixtures
هذا الجدول هو عمدا مجموعة الترحيل المشتركة، وليس سطح SDK الكامل. يوجد مخزون نقطة دخول المصرّف في scripts/lib/plugin-sdk-entrypoints.json؛ وتُولَّد صادرات الحزمة من المجموعة الفرعية العامة. أُحيلت وصلات مساعد Plugin المضمّن المحجوزة إلى التقاعد من خريطة تصدير SDK العامة، باستثناء واجهات التوافق الموثقة صراحة مثل طبقة التوافق المهملة plugin-sdk/discord المحتفظ بها لحزمة @openclaw/discord@2026.3.13 المنشورة. توجد المساعدات الخاصة بالمالك داخل حزمة Plugin المالكة؛ وينبغي أن ينتقل سلوك المضيف المشترك عبر عقود SDK العامة مثل plugin-sdk/gateway-runtime وplugin-sdk/security-runtime وplugin-sdk/plugin-config-runtime. استخدم أضيق استيراد يطابق المهمة. إذا لم تتمكن من العثور على تصدير، فافحص المصدر في src/plugin-sdk/ أو اسأل المشرفين أي عقد عام ينبغي أن يملكه.

الإهمالات النشطة

إهمالات أضيق تنطبق عبر SDK الخاص بـ Plugin، وعقد المزوّد، وسطح وقت التشغيل، والبيان. كل واحد منها ما زال يعمل اليوم، لكنه سيُزال في إصدار رئيسي مستقبلي. يربط الإدخال أسفل كل عنصر API القديم ببديله المعياري.
القديم (openclaw/plugin-sdk/command-auth): buildCommandsMessage, buildCommandsMessagePaginated, buildHelpMessage.الجديد (openclaw/plugin-sdk/command-status): التواقيع نفسها، والصادرات نفسها - لكن مع الاستيراد من المسار الفرعي الأضيق. يعيد command-auth تصديرها كبدائل توافقية.
// Before
import { buildHelpMessage } from "openclaw/plugin-sdk/command-auth";

// After
import { buildHelpMessage } from "openclaw/plugin-sdk/command-status";
القديم: resolveInboundMentionRequirement({ facts, policy }) و shouldDropInboundForMention(...) من openclaw/plugin-sdk/channel-inbound أو openclaw/plugin-sdk/channel-mention-gating.الجديد: resolveInboundMentionDecision({ facts, policy }) - يعيد كائن قرار واحدا بدلا من استدعاءين منفصلين.انتقلت Plugins القنوات اللاحقة (Slack وDiscord وMatrix وMS Teams) بالفعل.
openclaw/plugin-sdk/channel-runtime هي طبقة توافق Plugins القنوات الأقدم. لا تستوردها من كود جديد؛ استخدم openclaw/plugin-sdk/channel-runtime-context لتسجيل كائنات وقت التشغيل.مساعدات channelActions* في openclaw/plugin-sdk/channel-actions مهملة إلى جانب صادرات القناة الخام “actions”. اكشف القدرات عبر سطح presentation الدلالي بدلا من ذلك - تصرّح Plugins القنوات بما تعرضه (بطاقات، أزرار، قوائم اختيار) بدلا من أسماء الإجراءات الخام التي تقبلها.
القديم: مصنع tool() من openclaw/plugin-sdk/provider-web-search.الجديد: نفّذ createTool(...) مباشرة على Plugin المزوّد. لم يعد OpenClaw بحاجة إلى مساعد SDK لتسجيل غلاف الأداة.
القديم: formatInboundEnvelope(...)ChannelMessageForAgent.channelEnvelope) لبناء مظروف موجّه نصي مسطح من رسائل القناة الواردة.الجديد: BodyForAgent إضافة إلى كتل سياق مستخدم مهيكلة. ترفق Plugins القنوات بيانات تعريف التوجيه (المحادثة، الموضوع، الرد على، التفاعلات) كحقول ذات أنواع بدلا من دمجها في سلسلة موجّه. ما زال مساعد formatAgentEnvelope(...) مدعوما للمظاريف المصطنعة المواجهة للمساعد، لكن المظاريف النصية الواردة في طريقها إلى الإزالة.المناطق المتأثرة: inbound_claim وmessage_received وأي Plugin قناة مخصص كان يعالج نص channelEnvelope لاحقا.
القديم: api.on("deactivate", handler).الجديد: api.on("gateway_stop", handler). الحدث والسياق هما عقد تنظيف إيقاف التشغيل نفسه؛ يتغير اسم الخطاف فقط.
// Before
api.on("deactivate", async (event, ctx) => {
  await stopPluginService(ctx);
});

// After
api.on("gateway_stop", async (event, ctx) => {
  await stopPluginService(ctx);
});
يبقى deactivate موصولا كاسم بديل توافقـي مهمل إلى ما بعد 2026-08-16.
القديم: api.on("subagent_spawning", handler) يعيد threadBindingReady أو deliveryOrigin.الجديد: دع النواة تجهز روابط الوكيل الفرعي thread: true عبر محوّل ربط جلسة القناة. استخدم api.on("subagent_spawned", handler) فقط للمراقبة بعد الإطلاق.
// Before
api.on("subagent_spawning", async () => ({
  status: "ok",
  threadBindingReady: true,
  deliveryOrigin: { channel: "discord", to: "channel:123", threadId: "456" },
}));

// After
api.on("subagent_spawned", async (event) => {
  await observeSubagentLaunch(event);
});
تبقى subagent_spawning وPluginHookSubagentSpawningEvent وPluginHookSubagentSpawningResult و SubagentLifecycleHookRunner.runSubagentSpawning(...) كأسطح توافقية مهملة فقط أثناء ترحيل Plugins الخارجية.
أصبحت أربعة أسماء مستعارة لأنواع الاكتشاف أغلفة رقيقة فوق أنواع عصر الكتالوج:
الاسم المستعار القديمالنوع الجديد
ProviderDiscoveryOrderProviderCatalogOrder
ProviderDiscoveryContextProviderCatalogContext
ProviderDiscoveryResultProviderCatalogResult
ProviderPluginDiscoveryProviderPluginCatalog
إضافة إلى حاوية ProviderCapabilities الثابتة القديمة - ينبغي أن تستخدم Plugins المزوّد خطافات مزوّد صريحة مثل buildReplayPolicy وnormalizeToolSchemas وwrapStreamFn بدلا من كائن ثابت.
القديم (ثلاثة خطافات منفصلة على ProviderThinkingPolicy): isBinaryThinking(ctx) وsupportsXHighThinking(ctx) و resolveDefaultThinkingLevel(ctx).الجديد: resolveThinkingProfile(ctx) واحد يعيد ProviderThinkingProfile مع id المعياري، وlabel اختياري، وقائمة مستويات مرتبة. يخفض OpenClaw القيم المخزنة القديمة تلقائيا حسب رتبة الملف الشخصي.يتضمن السياق provider وmodelId وreasoning المدمج الاختياري، وحقائق compat للنموذج المدمجة الاختيارية. يمكن أن تستخدم Plugins المزوّد حقائق الكتالوج هذه لكشف ملف شخصي خاص بالنموذج فقط عندما يدعم عقد الطلب المكوّن ذلك.نفّذ خطافا واحدا بدلا من ثلاثة. تستمر الخطافات القديمة في العمل أثناء نافذة الإهمال، لكنها لا تُركّب مع نتيجة الملف الشخصي.
القديم: تنفيذ خطافات مصادقة خارجية من دون التصريح بالمزوّد في بيان Plugin.الجديد: صرّح بـ contracts.externalAuthProviders في بيان Plugin و نفّذ resolveExternalAuthProfiles(...).
{
  "contracts": {
    "externalAuthProviders": ["anthropic", "openai"]
  }
}
حقل البيان القديم: providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.الجديد: اعكس بحث متغير البيئة نفسه في setup.providers[].envVars على البيان. يدمج هذا بيانات تعريف بيئة الإعداد/الحالة في مكان واحد ويتجنب تشغيل وقت تشغيل Plugin لمجرد الإجابة عن عمليات بحث متغيرات البيئة.يبقى providerAuthEnvVars مدعوما عبر محوّل توافق إلى أن تُغلق نافذة الإهمال.
القديم: ثلاثة استدعاءات منفصلة - api.registerMemoryPromptSection(...), api.registerMemoryFlushPlan(...), api.registerMemoryRuntime(...).الجديد: استدعاء واحد على API حالة الذاكرة - registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).الخانات نفسها، واستدعاء تسجيل واحد. لا تتأثر مساعدات الموجّه والمتن الإضافية (registerMemoryPromptSupplement وregisterMemoryCorpusSupplement).
القديم: api.registerMemoryEmbeddingProvider(...) إضافة إلى contracts.memoryEmbeddingProviders.الجديد: api.registerEmbeddingProvider(...) إضافة إلى contracts.embeddingProviders.عقد مزوّد التضمين العام قابل لإعادة الاستخدام خارج الذاكرة، وهو المسار المدعوم للمزوّدين الجدد. تبقى API التسجيل الخاصة بالذاكرة موصولة كتوافق مهمل أثناء ترحيل المزوّدين الحاليين. تبلغ تقارير فحص Plugin عن الاستخدام غير المضمّن باعتباره دينا توافقيا.
اسمان مستعاران قديمان للأنواع ما زالا مصدّرين من src/plugins/runtime/types.ts:
القديمالجديد
SubagentReadSessionParamsSubagentGetSessionMessagesParams
SubagentReadSessionResultSubagentGetSessionMessagesResult
طريقة وقت التشغيل readSession مهملة لصالح getSessionMessages. التوقيع نفسه؛ تستدعي الطريقة القديمة الطريقة الجديدة.
القديم: كان runtime.tasks.flow (بصيغة المفرد) يعيد موصل TaskFlow حيا.الجديد: يحتفظ runtime.tasks.managedFlows بوقت تشغيل طفرات TaskFlow المدارة من أجل Plugins التي تنشئ أو تحدث أو تلغي أو تشغل مهام فرعية من تدفق. استخدم runtime.tasks.flows عندما يحتاج Plugin فقط إلى قراءات مبنية على DTO.
// Before
const flow = api.runtime.tasks.flow.fromToolContext(ctx);
// After
const flow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
مغطى في “كيفية الترحيل → رحّل إضافات نتائج الأدوات المضمّنة إلى وسيط” أعلاه. أُدرج هنا للاكتمال: مسار api.registerEmbeddedExtensionFactory(...) المحذوف والخاص بمشغّل التضمين فقط استُبدل بـ api.registerAgentToolResultMiddleware(...) مع قائمة وقت تشغيل صريحة في contracts.agentToolResultMiddleware.
أصبح OpenClawSchemaType المعاد تصديره من openclaw/plugin-sdk اسما مستعارا من سطر واحد لـ OpenClawConfig. فضّل الاسم المعياري.
// Before
import type { OpenClawSchemaType } from "openclaw/plugin-sdk";
// After
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-schema";
تُتتبع الإهمالات على مستوى الإضافة (داخل Plugins القنوات/المزوّدين المضمّنة تحت extensions/) داخل براميل api.ts وruntime-api.ts الخاصة بها. لا تؤثر في عقود Plugins التابعة لجهات خارجية، ولا تُدرج هنا. إذا كنت تستهلك برميل Plugin مضمّن المحلي مباشرة، فاقرأ تعليقات الإهمال في ذلك البرميل قبل الترقية.

الجدول الزمني للإزالة

متىماذا يحدث
الآنتُصدر الواجهات المتقادمة تحذيرات وقت التشغيل
الإصدار الرئيسي التاليستُزال الواجهات المتقادمة؛ وستفشل plugins التي لا تزال تستخدمها
تم ترحيل كل plugins الأساسية بالفعل. ينبغي أن ترحّل plugins الخارجية قبل الإصدار الرئيسي التالي.

إيقاف التحذيرات مؤقتًا

اضبط متغيرات البيئة هذه أثناء العمل على الترحيل:
OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway run
OPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway run
هذا مسار مؤقت لتجاوز المشكلة، وليس حلًا دائمًا.

ذات صلة