ما الذي يتغير
كان نظام 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.
لماذا تغير هذا
تسبب النهج القديم في مشكلات:- بدء تشغيل بطيء - كان استيراد مساعد واحد يحمّل عشرات الوحدات غير ذات الصلة
- اعتماديات دائرية - جعلت إعادة التصدير الواسعة إنشاء دورات استيراد أمراً سهلاً
- سطح API غير واضح - لم تكن هناك طريقة لمعرفة أي الصادرات مستقرة وأيها داخلية
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 هذا كاسر ونظيف عمداً:
- أبقِ متحكم/بدائيات وقت التشغيل المشتركة في
plugin-sdk/realtime-voice. - انقل الأسطح المضمّنة إلى المتحكم المشترك: مرحّل المتصفح، وتسليم الغرفة المُدارة، ووقت الاتصال الصوتي الحقيقي، وSTT المتدفق للاتصال الصوتي، ووقت Google Meet الحقيقي، والضغط الأصلي للتحدث.
- استبدل عائلات RPC القديمة الخاصة بـ Talk بواجهة API النهائية
talk.session.*وtalk.client.*. - أعلن عن قناة أحداث Talk حية واحدة في Gateway
hello-ok.features.events:talk.event. - احذف نقطة نهاية HTTP القديمة للوقت الحقيقي وأي مسار لتجاوز التعليمات وقت الطلب.
createTalkEventSequencer(...) مباشرة إلا إذا كانت
تنفذ محولاً منخفض المستوى أو أداة اختبار. فضّل المتحكم المشترك حتى لا يمكن إصدار
أحداث نطاق الدور من دون معرف دور، ولا يمكن لاستدعاءات turnEnd /
turnCancel القديمة مسح دور نشط أحدث، وتبقى أحداث دورة حياة الصوت الخارج
متسقة عبر الاتصالات الهاتفية، والاجتماعات، ومرحل المتصفح، وتسليم الغرفة المُدارة،
وعملاء Talk الأصليين.
شكل API العام المستهدف هو:
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 المدعومة صغيرة عمداً:
سياسة التوافق
بالنسبة إلى الإضافات الخارجية، يتبع عمل التوافق هذا الترتيب:- أضف العقد الجديد
- أبقِ السلوك القديم موصولًا عبر محوّل توافق
- أصدِر تشخيصًا أو تحذيرًا يذكر المسار القديم والبديل
- غطِّ كلا المسارين في الاختبارات
- وثّق الإيقاف التدريجي ومسار الترحيل
- أزِل فقط بعد نافذة الترحيل المُعلنة، عادةً في إصدار رئيسي
pnpm plugins:boundary-report. استخدم pnpm plugins:boundary-report:summary للحصول على
أعداد موجزة، و--owner <id> لإضافة واحدة أو مالك توافق واحد، و
pnpm plugins:boundary-report:ci عندما ينبغي لبوابة CI أن تفشل عند وجود
سجلات توافق مستحقة، أو استيرادات SDK محجوزة عابرة للمالكين، أو مسارات SDK فرعية محجوزة
غير مستخدمة. يجمع التقرير سجلات التوافق
الموقوفة تدريجيًا حسب تاريخ الإزالة، ويعدّ مراجع الكود/المستندات المحلية،
ويُظهر استيرادات SDK المحجوزة العابرة للمالكين، ويلخّص جسر SDK الخاص
بمضيف الذاكرة بحيث يبقى تنظيف التوافق صريحًا بدلًا من
الاعتماد على عمليات بحث مخصصة. يجب أن يكون للمسارات الفرعية المحجوزة في SDK استخدام مالك متتبّع؛
وينبغي إزالة صادرات المساعدين المحجوزة غير المستخدمة من SDK العام.
إذا كان حقل manifest لا يزال مقبولًا، فيمكن لمؤلفي الإضافات الاستمرار في استخدامه حتى
تقول المستندات والتشخيصات خلاف ذلك. ينبغي للكود الجديد تفضيل
البديل الموثّق، لكن لا ينبغي أن تتعطل الإضافات الموجودة أثناء
الإصدارات الثانوية العادية.
كيفية الترحيل
ترحيل مساعدات تحميل/كتابة إعدادات وقت التشغيل
api.runtime.config.loadConfig() و
api.runtime.config.writeConfigFile(...) مباشرةً. فضّل الإعدادات التي
تم تمريرها بالفعل إلى مسار الاستدعاء النشط. يمكن للمعالجات طويلة العمر التي تحتاج إلى
لقطة العملية الحالية استخدام api.runtime.config.current(). وينبغي لأدوات
الوكيل طويلة العمر استخدام ctx.getRuntimeConfig() الخاص بسياق الأداة داخل
execute بحيث تظل الأداة التي أُنشئت قبل كتابة إعدادات قادرة على رؤية
إعدادات وقت التشغيل المحدّثة.يجب أن تمر كتابات الإعدادات عبر المساعدات المعاملاتية وأن تختار
سياسة ما بعد الكتابة: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 الفرعي
الضيق الذي يطابق المهمة:ترحيل امتدادات نتائج الأدوات المضمّنة إلى وسيط
api.registerEmbeddedExtensionFactory(...)
بوسيط محايد لوقت التشغيل.contracts.agentToolResultMiddleware. تُرفض تسجيلات الوسيط المثبّتة
غير المعلنة.ترحيل معالجات الموافقة الأصلية إلى حقائق الإمكانات
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 للتخطيط الحالي لإمكانات الموافقة.تدقيق سلوك الرجوع الاحتياطي لمغلّف Windows
openclaw/plugin-sdk/windows-spawn، فإن مغلّفات Windows
.cmd/.bat غير المحلولة تفشل الآن بشكل مغلق ما لم تمرر صراحةً
allowShellFallback: true.allowShellFallback وتعامل مع الخطأ المرمى بدلًا من ذلك.العثور على الاستيرادات الموقوفة تدريجيًا
استبدالها باستيرادات مركّزة
استبدل استيرادات infra-runtime الواسعة
openclaw/plugin-sdk/infra-runtime موجودًا للتوافق الخارجي، لكن ينبغي للكود الجديد أن يستورد سطح المساعدات المركّز الذي يحتاجه فعليًا:infra-runtime، لذلك لا يمكن لكود المستودع أن يتراجع إلى البرميل الواسع.رحّل مساعدات مسارات القنوات
openclaw/plugin-sdk/channel-route.
تظل أسماء مفتاح المسار والهدف القابل للمقارنة الأقدم موجودة كأسماء مستعارة للتوافق أثناء نافذة الترحيل، لكن ينبغي للـ Plugins الجديدة استخدام أسماء المسارات التي تصف السلوك مباشرةً:{ channel, to, accountId, threadId }
بشكل متسق عبر الموافقات الأصلية، وكبت الردود، وإزالة تكرار الوارد،
وتسليم cron، وتوجيه الجلسات.لا تضف استخدامات جديدة لـ ChannelMessagingAdapter.parseExplicitTarget أو
مساعدات المسارات المحمّلة المدعومة بالمحلل (parseExplicitTargetForLoadedChannel
أو resolveRouteTargetForLoadedChannel) أو
resolveChannelRouteTargetWithParser(...) من plugin-sdk/channel-route.
هذه الخطافات مهملة وتبقى فقط للـ Plugins الأقدم أثناء نافذة الترحيل.
ينبغي للـ Plugins القنوات الجديدة استخدام
messaging.targetResolver.resolveTarget(...) لتطبيع معرّف الهدف
والرجوع عند فقدان الدليل، وmessaging.inferTargetChatType(...) عندما يحتاج core
إلى نوع نظير مبكر، وmessaging.resolveOutboundSessionRoute(...)
لهوية الجلسة وسلسلة الرسائل الأصلية للمزوّد.ابنِ واختبر
مرجع مسارات الاستيراد
Common import path table
Common import path table
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 القديم ببديله المعياري.بناة مساعدة command-auth → command-status
بناة مساعدة command-auth → command-status
openclaw/plugin-sdk/command-auth): buildCommandsMessage,
buildCommandsMessagePaginated, buildHelpMessage.الجديد (openclaw/plugin-sdk/command-status): التواقيع نفسها،
والصادرات نفسها - لكن مع الاستيراد من المسار الفرعي الأضيق. يعيد
command-auth تصديرها كبدائل توافقية.مساعدات بوابة الإشارات → resolveInboundMentionDecision
مساعدات بوابة الإشارات → resolveInboundMentionDecision
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() لمزوّد بحث الويب → createTool() على Plugin
مساعد tool() لمزوّد بحث الويب → createTool() على Plugin
tool() من openclaw/plugin-sdk/provider-web-search.الجديد: نفّذ createTool(...) مباشرة على Plugin المزوّد.
لم يعد OpenClaw بحاجة إلى مساعد SDK لتسجيل غلاف الأداة.مظاريف القناة النصية الصرفة → BodyForAgent
مظاريف القناة النصية الصرفة → BodyForAgent
formatInboundEnvelope(...) (و
ChannelMessageForAgent.channelEnvelope) لبناء مظروف موجّه نصي مسطح
من رسائل القناة الواردة.الجديد: BodyForAgent إضافة إلى كتل سياق مستخدم مهيكلة. ترفق
Plugins القنوات بيانات تعريف التوجيه (المحادثة، الموضوع، الرد على،
التفاعلات) كحقول ذات أنواع بدلا من دمجها في سلسلة موجّه. ما زال مساعد
formatAgentEnvelope(...) مدعوما للمظاريف المصطنعة المواجهة للمساعد،
لكن المظاريف النصية الواردة في طريقها إلى الإزالة.المناطق المتأثرة: inbound_claim وmessage_received وأي Plugin قناة
مخصص كان يعالج نص channelEnvelope لاحقا.خطاف deactivate → gateway_stop
خطاف deactivate → gateway_stop
api.on("deactivate", handler).الجديد: api.on("gateway_stop", handler). الحدث والسياق هما عقد
تنظيف إيقاف التشغيل نفسه؛ يتغير اسم الخطاف فقط.deactivate موصولا كاسم بديل توافقـي مهمل إلى ما بعد
2026-08-16.خطاف subagent_spawning → ربط المحادثة في النواة
خطاف subagent_spawning → ربط المحادثة في النواة
api.on("subagent_spawning", handler) يعيد
threadBindingReady أو deliveryOrigin.الجديد: دع النواة تجهز روابط الوكيل الفرعي thread: true عبر
محوّل ربط جلسة القناة. استخدم api.on("subagent_spawned", handler)
فقط للمراقبة بعد الإطلاق.subagent_spawning وPluginHookSubagentSpawningEvent
وPluginHookSubagentSpawningResult و
SubagentLifecycleHookRunner.runSubagentSpawning(...) كأسطح توافقية
مهملة فقط أثناء ترحيل Plugins الخارجية.أنواع اكتشاف المزوّد → أنواع كتالوج المزوّد
أنواع اكتشاف المزوّد → أنواع كتالوج المزوّد
ProviderCapabilities الثابتة القديمة - ينبغي أن تستخدم
Plugins المزوّد خطافات مزوّد صريحة مثل buildReplayPolicy
وnormalizeToolSchemas وwrapStreamFn بدلا من كائن ثابت.خطافات سياسة التفكير → resolveThinkingProfile
خطافات سياسة التفكير → resolveThinkingProfile
ProviderThinkingPolicy):
isBinaryThinking(ctx) وsupportsXHighThinking(ctx) و
resolveDefaultThinkingLevel(ctx).الجديد: resolveThinkingProfile(ctx) واحد يعيد
ProviderThinkingProfile مع id المعياري، وlabel اختياري،
وقائمة مستويات مرتبة. يخفض OpenClaw القيم المخزنة القديمة تلقائيا
حسب رتبة الملف الشخصي.يتضمن السياق provider وmodelId وreasoning المدمج الاختياري،
وحقائق compat للنموذج المدمجة الاختيارية. يمكن أن تستخدم Plugins
المزوّد حقائق الكتالوج هذه لكشف ملف شخصي خاص بالنموذج فقط عندما يدعم
عقد الطلب المكوّن ذلك.نفّذ خطافا واحدا بدلا من ثلاثة. تستمر الخطافات القديمة في العمل أثناء
نافذة الإهمال، لكنها لا تُركّب مع نتيجة الملف الشخصي.مزوّدو المصادقة الخارجيون → contracts.externalAuthProviders
مزوّدو المصادقة الخارجيون → contracts.externalAuthProviders
contracts.externalAuthProviders في بيان Plugin
و نفّذ resolveExternalAuthProfiles(...).بحث متغيرات بيئة المزوّد → setup.providers[].envVars
بحث متغيرات بيئة المزوّد → setup.providers[].envVars
providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.الجديد: اعكس بحث متغير البيئة نفسه في setup.providers[].envVars
على البيان. يدمج هذا بيانات تعريف بيئة الإعداد/الحالة في مكان واحد
ويتجنب تشغيل وقت تشغيل Plugin لمجرد الإجابة عن عمليات بحث متغيرات البيئة.يبقى providerAuthEnvVars مدعوما عبر محوّل توافق إلى أن تُغلق
نافذة الإهمال.تسجيل Plugin الذاكرة → registerMemoryCapability
تسجيل Plugin الذاكرة → registerMemoryCapability
api.registerMemoryPromptSection(...),
api.registerMemoryFlushPlan(...),
api.registerMemoryRuntime(...).الجديد: استدعاء واحد على API حالة الذاكرة -
registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).الخانات نفسها، واستدعاء تسجيل واحد. لا تتأثر مساعدات الموجّه والمتن
الإضافية (registerMemoryPromptSupplement وregisterMemoryCorpusSupplement).API مزوّد تضمين الذاكرة
API مزوّد تضمين الذاكرة
api.registerMemoryEmbeddingProvider(...) إضافة إلى
contracts.memoryEmbeddingProviders.الجديد: api.registerEmbeddingProvider(...) إضافة إلى
contracts.embeddingProviders.عقد مزوّد التضمين العام قابل لإعادة الاستخدام خارج الذاكرة، وهو المسار
المدعوم للمزوّدين الجدد. تبقى API التسجيل الخاصة بالذاكرة موصولة كتوافق
مهمل أثناء ترحيل المزوّدين الحاليين. تبلغ تقارير فحص Plugin عن الاستخدام
غير المضمّن باعتباره دينا توافقيا.إعادة تسمية أنواع رسائل جلسة الوكيل الفرعي
إعادة تسمية أنواع رسائل جلسة الوكيل الفرعي
src/plugins/runtime/types.ts:readSession مهملة لصالح
getSessionMessages. التوقيع نفسه؛ تستدعي الطريقة القديمة الطريقة
الجديدة.runtime.tasks.flow → runtime.tasks.managedFlows
runtime.tasks.flow → runtime.tasks.managedFlows
runtime.tasks.flow (بصيغة المفرد) يعيد موصل TaskFlow
حيا.الجديد: يحتفظ runtime.tasks.managedFlows بوقت تشغيل طفرات TaskFlow
المدارة من أجل Plugins التي تنشئ أو تحدث أو تلغي أو تشغل مهام فرعية
من تدفق. استخدم runtime.tasks.flows عندما يحتاج Plugin فقط إلى قراءات
مبنية على DTO.مصانع الإضافات المضمّنة → وسيط نتائج أدوات الوكيل
مصانع الإضافات المضمّنة → وسيط نتائج أدوات الوكيل
api.registerEmbeddedExtensionFactory(...) المحذوف والخاص بمشغّل التضمين
فقط استُبدل بـ api.registerAgentToolResultMiddleware(...) مع قائمة
وقت تشغيل صريحة في contracts.agentToolResultMiddleware.الاسم المستعار OpenClawSchemaType → OpenClawConfig
الاسم المستعار OpenClawSchemaType → OpenClawConfig
OpenClawSchemaType المعاد تصديره من openclaw/plugin-sdk
اسما مستعارا من سطر واحد لـ OpenClawConfig. فضّل الاسم المعياري.extensions/) داخل براميل api.ts وruntime-api.ts الخاصة بها.
لا تؤثر في عقود Plugins التابعة لجهات خارجية، ولا تُدرج هنا. إذا كنت تستهلك
برميل Plugin مضمّن المحلي مباشرة، فاقرأ تعليقات الإهمال في ذلك البرميل قبل
الترقية.الجدول الزمني للإزالة
إيقاف التحذيرات مؤقتًا
اضبط متغيرات البيئة هذه أثناء العمل على الترحيل:ذات صلة
- بدء الاستخدام - أنشئ أول plugin لك
- نظرة عامة على SDK - مرجع كامل لاستيراد المسارات الفرعية
- Plugins القنوات - بناء plugins القنوات
- Plugins المزوّدين - بناء plugins المزوّدين
- داخليات Plugin - تعمّق في البنية
- بيان Plugin - مرجع مخطط البيان