الانتقال إلى المحتوى الرئيسي

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

انتقل 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(...) - خطاف إضافة مضمّنة خاص بـ Pi وقد أُزيل، وكان يستطيع مراقبة أحداث المشغّل المضمّن مثل tool_result.
أصبحت أسطح الاستيراد الواسعة الآن مهملة. لا تزال تعمل وقت التشغيل، لكن يجب ألا تستخدمها Plugins الجديدة، وينبغي أن ترحّل Plugins الموجودة قبل أن يزيلها الإصدار الرئيسي التالي. أُزيلت واجهة API الخاصة بتسجيل مصنع الإضافات المضمّنة الخاص بـ Pi؛ استخدم وسيط نتائج الأدوات بدلا منها. لا يزيل OpenClaw سلوك Plugin الموثق أو يعيد تفسيره في التغيير نفسه الذي يقدم بديلا. يجب أن تمر تغييرات العقد الكاسرة أولا عبر محوّل توافق، وتشخيصات، ووثائق، ونافذة إهمال. ينطبق ذلك على عمليات استيراد SDK، وحقول البيان، وواجهات API الخاصة بالإعداد، والخطافات، وسلوك التسجيل وقت التشغيل.
ستُزال طبقة التوافق العكسي في إصدار رئيسي مستقبلي. ستتعطل Plugins التي لا تزال تستورد من هذه الأسطح عندما يحدث ذلك. لم تعد تسجيلات مصانع الإضافات المضمّنة الخاصة بـ Pi تُحمّل بالفعل.

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

تسبب النهج القديم في مشكلات:
  • بدء تشغيل بطيء - كان استيراد مساعد واحد يحمّل عشرات الوحدات غير المرتبطة
  • اعتماديات دائرية - جعلت عمليات إعادة التصدير الواسعة إنشاء دورات استيراد أمرا سهلا
  • سطح 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 حية واحدة في hello-ok.features.events الخاصة بـ Gateway: 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 });
تستخدم جلسات WebRTC/مقبس ويب المزوّد المملوكة للمتصفح 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 or 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.closeكل الجلسات الموحدةأوقف جلسات الترحيل أو ألغِ حالة الغرفة المُدارة، ثم انسَ معرّف الجلسة الموحدة.
لا تضف حالات خاصة للمزوّد أو المنصة في النواة لجعل هذا يعمل. النواة تملك دلالات جلسة Talk. وتملك Plugins الخاصة بالمزوّدين إعداد جلسات المورّدين. وتملك مكالمات الصوت وGoogle Meet محولات الاتصال الهاتفي/الاجتماعات. وتملك المتصفحات والتطبيقات الأصلية تجربة مستخدم التقاط الجهاز/التشغيل.

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

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

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

1

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

يجب أن تتوقف Plugins المضمّنة عن استدعاء 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 مساعدات توافق مهملة لـ Plugins الخارجية أثناء نافذة الترحيل وتحذر مرة واحدة باستخدام رمز التوافق runtime-config-load-write. وتتم حماية Plugins المضمّنة وكود وقت التشغيل في المستودع بواسطة حواجز فحص في pnpm check:deprecated-api-usage و pnpm check:no-runtime-action-load-config: يفشل الاستخدام الإنتاجي الجديد في Plugin مباشرةً، وتفشل كتابات الإعدادات المباشرة، ويجب أن تستخدم طرائق خادم Gateway لقطة وقت التشغيل الخاصة بالطلب، ويجب أن تتلقى مساعدات إرسال/إجراء/عميل قنوات وقت التشغيل الإعدادات من حدّها، ولا يُسمح لوحدات وقت التشغيل طويلة العمر بأي استدعاءات محيطة لـ loadConfig().يجب أن يتجنب كود Plugin الجديد أيضًا استيراد البرميل الواسع للتوافق openclaw/plugin-sdk/config-runtime. استخدم المسار الفرعي الضيق من SDK الذي يطابق المهمة:
الحاجةالاستيراد
أنواع الإعدادات مثل OpenClawConfigopenclaw/plugin-sdk/config-contracts
تأكيدات الإعدادات المحمّلة مسبقًا والبحث عن إعدادات مدخل Pluginopenclaw/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
تخضع Plugins المضمّنة واختباراتها لحماية فاحص ضد البرميل الواسع بحيث تبقى الاستيرادات والمحاكيات محلية للسلوك الذي تحتاجه. لا يزال البرميل الواسع موجودًا للتوافق الخارجي، لكن يجب ألا يعتمد عليه الكود الجديد.
2

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

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

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

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

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

إذا كان Plugin الخاص بك يستخدم 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

اعثر على الاستيرادات المهملة

ابحث في Plugin الخاص بك عن استيرادات من أي من السطحين المهملين:
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";
بالنسبة إلى مساعدات جانب المضيف، استخدم وقت تشغيل Plugin المحقون بدلًا من الاستيراد مباشرةً:
// Before (deprecated extension-api bridge)
import { runEmbeddedPiAgent } from "openclaw/extension-api";
const result = await runEmbeddedPiAgent({ sessionId, prompt });

// After (injected runtime)
const result = await api.runtime.agent.runEmbeddedPiAgent({ 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
جلب مدرك للموزّعopenclaw/plugin-sdk/runtime-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
resolveComparableTargetForChannel(...)resolveRouteTargetForChannel(...)
resolveComparableTargetForLoadedChannel(...)resolveRouteTargetForLoadedChannel(...)
comparableChannelTargetsMatch(...)channelRouteTargetsMatchExact(...)
comparableChannelTargetsShareRoute(...)channelRouteTargetsShareConversation(...)
تعمل مساعدات المسار الحديثة على تطبيع { channel, to, accountId, threadId } باتساق عبر الموافقات الأصلية، ومنع الردود، وإزالة تكرار الوارد، وتسليم Cron، وتوجيه الجلسات. إذا كان Plugin الخاص بك يملك قواعد هدف مخصصة، فاستخدم resolveChannelRouteTargetWithParser(...) لتكييف ذلك المحلّل مع عقد هدف المسار نفسه.
9

Build and test

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مساعدات وقت الإعداد للتنفيذمحولات تصحيحات إعداد آمنة للاستيراد، ومساعدات ملاحظات البحث، 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بدائيات إقران الرسائل المباشرةcreateChannelPairingController
plugin-sdk/channel-reply-pipelineبادئة الرد، والكتابة، وتوصيل التسليم من المصدرcreateChannelReplyPipeline, resolveChannelSourceReplyDeliveryMode
plugin-sdk/channel-config-helpersمصانع محولات الإعدادات ومساعدات الوصول إلى الرسائل المباشرةcreateHybridChannelConfigAdapter, 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حل سياسة المجموعة/الرسائل المباشرةresolveChannelGroupRequireMention
plugin-sdk/channel-lifecycleمساعدات حالة الحساب ودورة حياة تدفق المسوداتcreateAccountStatusSink, ومساعدات إنهاء معاينة المسودات
plugin-sdk/inbound-envelopeمساعدات غلاف الواردمساعدات المسار المشترك + باني الغلاف
plugin-sdk/inbound-reply-dispatchمساعدات الرد الواردمساعدات التسجيل والإرسال المشتركة
plugin-sdk/messaging-targetsتحليل أهداف المراسلةمساعدات تحليل/مطابقة الأهداف
plugin-sdk/outbound-mediaمساعدات الوسائط الصادرةتحميل الوسائط الصادرة المشترك
plugin-sdk/outbound-send-depsمساعدات تبعيات الإرسال الصادربحث resolveOutboundSendDep خفيف دون استيراد تنفيذ الصادر الكامل
plugin-sdk/outbound-runtimeمساعدات تنفيذ الصادرمساعدات التسليم الصادر، وتفويض الهوية/الإرسال، والجلسة، والتنسيق، وتخطيط الحمولة
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مساعدات العملياتمساعدات تنفيذ الأوامر المشتركة
plugin-sdk/cli-runtimeمساعدات تنفيذ CLIتنسيق الأوامر، والانتظار، ومساعدات الإصدارات
plugin-sdk/gateway-runtimeمساعدات Gatewayعميل Gateway، ومساعد بدء جاهزية حلقة الأحداث، ومساعدات تصحيح حالة القناة
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مساعدات مطالبة الموافقةحمولة موافقة التنفيذ/Plugin، ومساعدات قدرة/ملف تعريف الموافقة، ومساعدات توجيه/تنفيذ الموافقة الأصلية، وتنسيق مسار عرض الموافقة المنظم
plugin-sdk/approval-auth-runtimeمساعدات تفويض الموافقةحل المعتمِد، وتفويض إجراءات المحادثة نفسها
plugin-sdk/approval-client-runtimeمساعدات عميل الموافقةمساعدات ملف تعريف/مرشح موافقة التنفيذ الأصلية
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مساعدات رد الموافقةمساعدات حمولة رد موافقة التنفيذ/Plugin
plugin-sdk/channel-runtime-contextمساعدات سياق تنفيذ القنواتمساعدات تسجيل/جلب/مراقبة سياق تنفيذ القنوات العامة
plugin-sdk/security-runtimeمساعدات الأمانمساعدات الثقة المشتركة، وبوابة الرسائل المباشرة، والملفات/المسارات المحدودة بالجذر، والمحتوى الخارجي، وجمع الأسرار
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/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
plugin-sdk/allowlist-resolutionربط مدخلات قائمة السماح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مساعدات سجل الردودbuildHistoryContext, 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مساعدات تطبيع السلاسلمساعدات تطبيع slug/السلاسل
plugin-sdk/request-urlمساعدات عنوان URL للطلباستخراج عناوين URL النصية من مدخلات شبيهة بالطلبات
plugin-sdk/run-commandمساعدات الأوامر الموقوتةمشغّل أوامر موقوت مع stdout/stderr مطبّعين
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 وتنظيف مخطط Gemini مع التشخيصات
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مساعدات الكلامأنواع مزوّد الكلام إضافة إلى مساعدات التوجيه والسجل والتحقق الموجّهة للمزوّد، وباني TTS المتوافق مع 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/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-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واجهة بحث الذاكرة النشطةواجهة وقت تشغيل كسولة لمدير بحث الذاكرة النشطة
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 }) - يعيد كائن قرار واحدًا بدلًا من نداءين منفصلين.انتقلت إضافات Plugin الخاصة بالقنوات اللاحقة (Slack، وDiscord، وMatrix، وMS Teams) بالفعل.
openclaw/plugin-sdk/channel-runtime هي طبقة توافق لإضافات Plugin الخاصة بالقنوات القديمة. لا تستوردها من الشيفرة الجديدة؛ استخدم openclaw/plugin-sdk/channel-runtime-context لتسجيل كائنات وقت التشغيل.مساعدات channelActions* في openclaw/plugin-sdk/channel-actions مهملة إلى جانب تصديرات “الإجراءات” الأولية للقنوات. اكشف القدرات عبر واجهة presentation الدلالية بدلًا من ذلك - تصرّح إضافات Plugin الخاصة بالقنوات بما تعرضه (بطاقات، أزرار، قوائم اختيار) بدلًا من أسماء الإجراءات الأولية التي تقبلها.
القديم: مصنع tool() من openclaw/plugin-sdk/provider-web-search.الجديد: نفّذ createTool(...) مباشرة على Plugin المزوّد. لم يعد OpenClaw يحتاج إلى مساعد SDK لتسجيل مغلّف الأداة.
القديم: formatInboundEnvelope(...)ChannelMessageForAgent.channelEnvelope) لبناء مغلف مطالبة نصي صريح ومسطح من رسائل القنوات الواردة.الجديد: BodyForAgent مع كتل سياق مستخدم منظّمة. ترفق إضافات Plugin الخاصة بالقنوات بيانات تعريف التوجيه (سلسلة الرسائل، الموضوع، الرد على، التفاعلات) كحقول ذات أنواع بدلًا من دمجها في سلسلة مطالبة. لا يزال مساعد formatAgentEnvelope(...) مدعومًا للمغلفات المركّبة الموجهة إلى المساعد، لكن مغلفات النص الصريح الواردة في طريقها إلى الإزالة.المناطق المتأثرة: inbound_claim، وmessage_received، وأي Plugin قناة مخصص أعاد معالجة نص channelEnvelope.
أصبحت أربعة أسماء مستعارة لأنواع الاكتشاف الآن أغلفة رقيقة فوق أنواع مرحلة الكتالوج:
الاسم المستعار القديمالنوع الجديد
ProviderDiscoveryOrderProviderCatalogOrder
ProviderDiscoveryContextProviderCatalogContext
ProviderDiscoveryResultProviderCatalogResult
ProviderPluginDiscoveryProviderPluginCatalog
إضافةً إلى حاوية ProviderCapabilities الثابتة القديمة - ينبغي أن تستخدم إضافات Plugin الخاصة بالمزوّدين خطافات مزوّد صريحة مثل buildReplayPolicy، وnormalizeToolSchemas، وwrapStreamFn بدلًا من كائن ثابت.
القديم (ثلاثة خطافات منفصلة على ProviderThinkingPolicy): isBinaryThinking(ctx)، وsupportsXHighThinking(ctx)، و resolveDefaultThinkingLevel(ctx).الجديد: resolveThinkingProfile(ctx) واحد يعيد ProviderThinkingProfile مع id المعتمد، وlabel اختياري، وقائمة مستويات مرتبة. يخفض OpenClaw القيم المخزنة القديمة حسب رتبة ملف التعريف تلقائيًا.نفّذ خطافًا واحدًا بدلًا من ثلاثة. تستمر الخطافات القديمة في العمل خلال فترة الإهمال، لكنها لا تُدمج مع نتيجة ملف التعريف.
القديم: تنفيذ resolveExternalOAuthProfiles(...) دون التصريح بالمزوّد في بيان 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، وregisterMemoryEmbeddingProvider).
لا يزال اسمان مستعاران قديمان للأنواع يُصدّران من src/plugins/runtime/types.ts:
القديمالجديد
SubagentReadSessionParamsSubagentGetSessionMessagesParams
SubagentReadSessionResultSubagentGetSessionMessagesResult
طريقة وقت التشغيل readSession مهملة لصالح getSessionMessages. نفس التوقيع؛ تمرر الطريقة القديمة النداء إلى الجديدة.
القديم: runtime.tasks.flow (بالمفرد) أعاد موصل TaskFlow حيًا.الجديد: يحافظ runtime.tasks.managedFlows على وقت تشغيل تعديل TaskFlow المدار لإضافات Plugin التي تنشئ مهامًا فرعية أو تحدّثها أو تلغيها أو تشغّلها من تدفق. استخدم runtime.tasks.flows عندما لا يحتاج Plugin إلا إلى قراءات مبنية على DTO.
// Before
const flow = api.runtime.tasks.flow.fromToolContext(ctx);
// After
const flow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
مغطى في “كيفية الترحيل → ترحيل امتدادات نتائج أدوات Pi إلى الوسيط” أعلاه. أُدرج هنا للاكتمال: استُبدل مسار api.registerEmbeddedExtensionFactory(...) المحذوف والخاص بPi فقط بـ 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";
تُتتبع الإهمالات على مستوى الامتداد (داخل إضافات Plugin المضمّنة الخاصة بالقنوات/المزوّدين ضمن extensions/) داخل ملفات التجميع api.ts و runtime-api.ts الخاصة بها. لا تؤثر هذه في عقود Plugin التابعة لجهات خارجية وليست مدرجة هنا. إذا كنت تستهلك ملف التجميع المحلي لPlugin مضمّنة مباشرة، فاقرأ تعليقات الإهمال في ذلك الملف قبل الترقية.

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

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

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

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

ذات صلة