Plugins
ترحيل Plugin SDK
انتقل OpenClaw من طبقة توافق رجعي واسعة إلى بنية Plugin حديثة ذات استيرادات مركزة وموثقة. إذا كان Plugin الخاص بك قد بُني قبل البنية الجديدة، فسيساعدك هذا الدليل على الترحيل.
ما الذي يتغير
كان نظام Plugin القديم يوفّر سطحين مفتوحين على نطاق واسع يسمحان لـ Plugins باستيراد أي شيء تحتاج إليه من نقطة إدخال واحدة:
openclaw/plugin-sdk/compat- استيراد واحد كان يعيد تصدير عشرات المساعدات. قُدّم لإبقاء Plugins القديمة المعتمدة على الخطافات عاملة أثناء بناء بنية Plugin الجديدة.openclaw/plugin-sdk/infra-runtime- حزمة مساعدات تشغيل واسعة كانت تخلط أحداث النظام، وحالة Heartbeat، وطوابير التسليم، ومساعدات fetch/proxy، ومساعدات الملفات، وأنواع الموافقات، وأدوات غير مرتبطة.openclaw/plugin-sdk/config-runtime- حزمة توافق إعدادات واسعة لا تزال تحمل مساعدات التحميل/الكتابة المباشرة المهملة أثناء نافذة الترحيل.openclaw/extension-api- جسر كان يمنح Plugins وصولًا مباشرًا إلى مساعدات جانب المضيف مثل مشغّل الوكيل المضمّن.api.registerEmbeddedExtensionFactory(...)- خطاف Plugin مجمّع مخصص لـ Pi فقط تمت إزالته وكان يستطيع مراقبة أحداث المشغّل المضمّن مثلtool_result.
أصبحت أسطح الاستيراد الواسعة الآن مهملة. لا تزال تعمل وقت التشغيل، لكن يجب ألا تستخدمها Plugins الجديدة، وينبغي أن ترحّل Plugins القائمة قبل أن يزيلها الإصدار الرئيسي التالي. أزيلت API تسجيل مصنع Plugin المضمّن المخصص لـ Pi فقط؛ استخدم وسيط نتائج الأدوات بدلًا من ذلك.
لا يزيل OpenClaw سلوك Plugin موثقًا أو يعيد تفسيره في التغيير نفسه الذي يقدّم بديلًا. يجب أن تمر تغييرات العقد الكاسرة أولًا عبر محوّل توافق، وتشخيصات، ووثائق، ونافذة إهمال. ينطبق ذلك على استيرادات SDK، وحقول البيان، وواجهات API للإعداد، والخطافات، وسلوك التسجيل وقت التشغيل.
لماذا تغير هذا
تسبب النهج القديم في مشكلات:
- بطء بدء التشغيل - كان استيراد مساعد واحد يحمّل عشرات الوحدات غير المرتبطة
- تبعيات دورية - سهّلت إعادة التصدير الواسعة إنشاء دورات استيراد
- سطح 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 هذا كاسر بنظافة عن قصد:
- أبقِ بدائيات المتحكم/وقت التشغيل المشتركة في
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 العام المستهدف هو:
// 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 });
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 المدعومة صغيرة عن قصد:
| الوضع | النقل | العقل | المالك | ملاحظات |
|---|---|---|---|---|
realtime |
gateway-relay |
agent-consult |
Gateway | صوت مزوّد ثنائي الاتجاه بالكامل مجسور عبر Gateway؛ تُوجّه استدعاءات الأدوات عبر أداة agent-consult. |
transcription |
gateway-relay |
none |
Gateway | STT متدفق فقط؛ يرسل المستدعون صوت الإدخال ويتلقون أحداث النص المنسوخ. |
stt-tts |
managed-room |
agent-consult |
غرفة أصلية/عميل | غرف بنمط الضغط للتحدث واللاسلكي حيث يمتلك العميل الالتقاط/التشغيل ويمتلك Gateway حالة الدور. |
stt-tts |
managed-room |
direct-tools |
غرفة أصلية/عميل | وضع غرفة للمسؤولين فقط للأسطح الموثوقة من الطرف الأول التي تنفّذ إجراءات أدوات Gateway مباشرة. |
خريطة الطرق المُزالة:
| القديم | الجديد |
|---|---|
talk.realtime.session |
talk.client.create |
talk.realtime.toolCall |
talk.client.toolCall |
talk.realtime.relayAudio |
talk.session.appendAudio |
talk.realtime.relayCancel |
talk.session.cancelOutput أو talk.session.cancelTurn |
talk.realtime.relayToolResult |
talk.session.submitToolResult |
talk.realtime.relayStop |
talk.session.close |
talk.transcription.session |
talk.session.create({ mode: "transcription" }) |
talk.transcription.relayAudio |
talk.session.appendAudio |
talk.transcription.relayCancel |
talk.session.cancelTurn |
talk.transcription.relayStop |
talk.session.close |
talk.handoff.create |
talk.session.create({ transport: "managed-room" }) |
talk.handoff.join |
talk.session.join |
talk.handoff.revoke |
talk.session.close |
مفردات التحكم الموحّدة ضيقة عمدًا أيضًا:
| الطريقة | ينطبق على | العقد |
|---|---|---|
talk.session.appendAudio |
realtime/gateway-relay, transcription/gateway-relay |
ألحق قطعة صوت PCM بترميز base64 بجلسة المزوّد المملوكة لاتصال Gateway نفسه. |
talk.session.startTurn |
stt-tts/managed-room |
ابدأ دور مستخدم في غرفة مُدارة. |
talk.session.endTurn |
stt-tts/managed-room |
أنهِ الدور النشط بعد التحقق من الدور القديم. |
talk.session.cancelTurn |
كل الجلسات المملوكة لـ Gateway | ألغِ عمل الالتقاط/المزوّد/الوكيل/TTS النشط لدور ما. |
talk.session.cancelOutput |
realtime/gateway-relay |
أوقف خرج صوت المساعد دون إنهاء دور المستخدم بالضرورة. |
talk.session.submitToolResult |
realtime/gateway-relay |
أكمل استدعاء أداة مزوّد أصدره المرحّل. |
talk.session.close |
كل الجلسات الموحّدة | أوقف جلسات الترحيل أو ألغِ حالة الغرفة المُدارة، ثم انسَ معرّف الجلسة الموحّد. |
لا تُدخل حالات خاصة للمزوّد أو المنصة في النواة لجعل هذا يعمل. تمتلك النواة دلالات جلسة Talk. تمتلك Plugins المزوّدين إعداد جلسات المورّدين. تمتلك المكالمات الصوتية وGoogle Meet محوّلات الاتصالات الهاتفية/الاجتماعات. تمتلك تطبيقات المتصفح والأصلية تجربة مستخدم الالتقاط/التشغيل على الجهاز.
سياسة التوافق
بالنسبة إلى Plugins الخارجية، يتبع عمل التوافق هذا الترتيب:
- أضف العقد الجديد
- أبقِ السلوك القديم موصولًا عبر محوّل توافق
- أصدر تشخيصًا أو تحذيرًا يذكر المسار القديم والبديل
- غطِّ كلا المسارين في الاختبارات
- وثّق الإهمال ومسار الترحيل
- أزل فقط بعد نافذة الترحيل المعلنة، وعادةً في إصدار رئيسي
يمكن للمحافظين تدقيق قائمة انتظار الترحيل الحالية باستخدام
pnpm plugins:boundary-report. استخدم pnpm plugins:boundary-report:summary للحصول على
أعداد موجزة، و--owner <id> لـ Plugin واحد أو مالك توافق واحد، و
pnpm plugins:boundary-report:ci عندما يجب أن تفشل بوابة CI بسبب
سجلات توافق مستحقة، أو استيرادات SDK محجوزة عابرة للمالكين، أو مسارات SDK
فرعية محجوزة غير مستخدمة. يجمع التقرير سجلات التوافق المهملة حسب تاريخ
الإزالة، ويعد مراجع الكود/الوثائق المحلية، ويكشف استيرادات SDK المحجوزة
العابرة للمالكين، ويلخص جسر SDK الخاص بمضيف الذاكرة حتى يبقى تنظيف التوافق
صريحا بدلا من الاعتماد على عمليات بحث مرتجلة. يجب أن تكون للمسارات الفرعية
المحجوزة في SDK استخدامات مالك متتبعة؛ ويجب إزالة صادرات المساعدات المحجوزة
غير المستخدمة من SDK العام.
إذا كان حقل manifest لا يزال مقبولا، فيمكن لمؤلفي Plugin الاستمرار في استخدامه حتى تقول الوثائق والتشخيصات خلاف ذلك. يجب أن يفضل الكود الجديد البديل الموثق، لكن يجب ألا تتعطل Plugins الموجودة أثناء الإصدارات الثانوية العادية.
كيفية الترحيل
Migrate runtime config load/write helpers
يجب أن تتوقف Plugins المضمنة عن استدعاء
api.runtime.config.loadConfig() و
api.runtime.config.writeConfigFile(...) مباشرة. فضّل الإعدادات التي تم
تمريرها بالفعل إلى مسار الاستدعاء النشط. يمكن للمعالجات طويلة العمر التي تحتاج
لقطة العملية الحالية استخدام api.runtime.config.current(). يجب أن تستخدم
أدوات الوكيل طويلة العمر ctx.getRuntimeConfig() الخاصة بسياق الأداة داخل
execute حتى ترى الأداة التي أُنشئت قبل كتابة إعدادات ما إعدادات runtime
المحدّثة.
يجب أن تمر كتابات الإعدادات عبر المساعدات المعاملاتية وأن تختار سياسة ما بعد الكتابة:
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 المضمنة وكود
runtime في المستودع عبر حواجز الماسح في
pnpm check:deprecated-internal-config-api و
pnpm check:no-runtime-action-load-config: يفشل استخدام Plugin الإنتاجي الجديد
مباشرة، وتفشل كتابات الإعدادات المباشرة، ويجب أن تستخدم طرائق خادم Gateway
لقطة runtime الخاصة بالطلب، ويجب أن تتلقى مساعدات إرسال/إجراء/عميل قناة
runtime الإعدادات من حدها، ولا يسمح لوحدات runtime طويلة العمر بأي استدعاءات
محيطة لـ loadConfig().
يجب أن يتجنب كود Plugin الجديد أيضا استيراد الحزمة التوافقية العامة
openclaw/plugin-sdk/config-runtime. استخدم المسار الفرعي الضيق في SDK الذي
يطابق المهمة:
| الحاجة | الاستيراد |
|---|---|
أنواع الإعدادات مثل OpenClawConfig |
openclaw/plugin-sdk/config-types |
| تأكيدات الإعدادات المحملة مسبقا وبحث إعدادات مدخل Plugin | openclaw/plugin-sdk/plugin-config-runtime |
| قراءات لقطة runtime الحالية | openclaw/plugin-sdk/runtime-config-snapshot |
| كتابات الإعدادات | openclaw/plugin-sdk/config-mutation |
| مساعدات مخزن الجلسات | openclaw/plugin-sdk/session-store-runtime |
| إعدادات جدول Markdown | openclaw/plugin-sdk/markdown-table-runtime |
| مساعدات runtime لسياسة المجموعة | openclaw/plugin-sdk/runtime-group-policy |
| حل إدخال السر | openclaw/plugin-sdk/secret-input-runtime |
| تجاوزات النموذج/الجلسة | openclaw/plugin-sdk/model-session-runtime |
تتم حماية Plugins المضمنة واختباراتها بالماسح ضد الحزمة العامة، حتى تبقى الاستيرادات والمحاكيات محلية للسلوك الذي تحتاجه. لا تزال الحزمة العامة موجودة للتوافق الخارجي، لكن يجب ألا يعتمد عليها الكود الجديد.
Migrate Pi tool-result extensions to middleware
يجب أن تستبدل Plugins المضمنة معالجات نتائج الأدوات الخاصة بـ Pi فقط
api.registerEmbeddedExtensionFactory(...) ببرمجية وسيطة محايدة تجاه runtime.
// Pi and Codex runtime dynamic tools
api.registerAgentToolResultMiddleware(async (event) => {
return compactToolResult(event);
}, {
runtimes: ["pi", "codex"],
});
حدّث manifest الخاص بـ Plugin في الوقت نفسه:
{
"contracts": {
"agentToolResultMiddleware": ["pi", "codex"]
}
}
لا يمكن لـ Plugins الخارجية تسجيل برمجية وسيطة لنتائج الأدوات لأنها تستطيع إعادة كتابة مخرجات أدوات عالية الثقة قبل أن يراها النموذج.
Migrate approval-native handlers to capability facts
تعرض Plugins القنوات القادرة على الموافقة الآن سلوك الموافقة الأصلي عبر
approvalCapability.nativeRuntime بالإضافة إلى سجل سياق runtime المشترك.
التغييرات الأساسية:
- استبدل
approvalCapability.handler.loadRuntime(...)بـapprovalCapability.nativeRuntime - انقل مصادقة/تسليم الموافقة المحددة من توصيل
plugin.auth/plugin.approvalsالقديم إلىapprovalCapability - تمت إزالة
ChannelPlugin.approvalsمن عقد Plugin القناة العام؛ انقل حقول التسليم/الأصلي/العرض إلىapprovalCapability - يبقى
plugin.authلتدفقات تسجيل الدخول/الخروج للقنوات فقط؛ لم يعد core يقرأ خطافات مصادقة الموافقة هناك - سجّل كائنات runtime المملوكة للقناة مثل العملاء أو الرموز أو تطبيقات Bolt عبر
openclaw/plugin-sdk/channel-runtime-context - لا ترسل إشعارات إعادة توجيه مملوكة لـ Plugin من معالجات الموافقة الأصلية؛ صار core يملك إشعارات التوجيه إلى مكان آخر من نتائج التسليم الفعلية
- عند تمرير
channelRuntimeإلىcreateChannelManager(...)، وفّر سطحcreatePluginRuntime().channelحقيقيا. تُرفض البدائل الجزئية.
راجع /plugins/sdk-channel-plugins للتخطيط الحالي لقدرة الموافقة.
Audit Windows wrapper fallback behavior
إذا كان Plugin الخاص بك يستخدم openclaw/plugin-sdk/windows-spawn، فإن wrappers
غير المحلولة لـ 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,
});
إذا كان المستدعي لديك لا يعتمد عمدا على الرجوع إلى shell، فلا تضبط
allowShellFallback وتعامل مع الخطأ الملقى بدلا من ذلك.
Find deprecated imports
ابحث في 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/
Replace with focused imports
يقابل كل تصدير من السطح القديم مسار استيراد حديثا محددا:
// 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";
بالنسبة لمساعدات جهة المضيف، استخدم runtime المحقون الخاص بـ 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 });
ينطبق النمط نفسه على مساعدات الجسر القديمة الأخرى:
| الاستيراد القديم | المكافئ الحديث |
|---|---|
resolveAgentDir |
api.runtime.agent.resolveAgentDir |
resolveAgentWorkspaceDir |
api.runtime.agent.resolveAgentWorkspaceDir |
resolveAgentIdentity |
api.runtime.agent.resolveAgentIdentity |
resolveThinkingDefault |
api.runtime.agent.resolveThinkingDefault |
resolveAgentTimeoutMs |
api.runtime.agent.resolveAgentTimeoutMs |
ensureAgentWorkspace |
api.runtime.agent.ensureAgentWorkspace |
| مساعدات مخزن الجلسات | api.runtime.agent.session.* |
Replace broad infra-runtime imports
لا يزال 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 |
| أنواع سياسة موزع SSRF | openclaw/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، لذلك لا يمكن لكود المستودع
أن يتراجع إلى الحزمة العامة.
Migrate channel route helpers
يجب أن يستخدم كود توجيه القنوات الجديد openclaw/plugin-sdk/channel-route.
تبقى أسماء مفتاح التوجيه والهدف القابل للمقارنة الأقدم كأسماء مستعارة للتوافق
أثناء نافذة الترحيل، لكن يجب أن تستخدم Plugins الجديدة أسماء التوجيه التي تصف
السلوك مباشرة:
| المساعد القديم | المساعد الحديث |
|---|---|
channelRouteIdentityKey(...) |
channelRouteDedupeKey(...) |
channelRouteKey(...) |
channelRouteCompactKey(...) |
ComparableChannelTarget |
ChannelRouteParsedTarget |
resolveComparableTargetForChannel(...) |
resolveRouteTargetForChannel(...) |
resolveComparableTargetForLoadedChannel(...) |
resolveRouteTargetForLoadedChannel(...) |
comparableChannelTargetsMatch(...) |
channelRouteTargetsMatchExact(...) |
comparableChannelTargetsShareRoute(...) |
channelRouteTargetsShareConversation(...) |
تعمل مساعدات المسارات الحديثة على تطبيع { channel, to, accountId, threadId }
بشكل متسق عبر الموافقات الأصلية، ومنع الردود، وإزالة تكرار الوارد،
وتسليم cron، وتوجيه الجلسات. إذا كان Plugin الخاص بك يمتلك قواعد مخصصة
للأهداف، فاستخدم resolveChannelRouteTargetWithParser(...) لتكييف ذلك
المحلّل مع عقد هدف المسار نفسه.
البناء والاختبار
pnpm build
pnpm test -- my-plugin/
مرجع مسار الاستيراد
Common import path table
| مسار الاستيراد | الغرض | الصادرات الرئيسية |
|---|---|---|
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 |
مساعدو محول الإعداد | createEnvPatchedAccountSetupAdapter |
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-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-types, 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-auth-login |
مساعدات تسجيل الدخول التفاعلي للمزوّد | مساعدات تسجيل الدخول التفاعلي المشتركة |
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 + التشخيصات، ومساعدات توافق xAI مثل resolveXaiModelCompatPatch / applyXaiModelCompat |
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 |
مساعدات النص المشتركة | إزالة النص المرئي للمساعد، ومساعدات عرض/تقطيع/جداول Markdown، ومساعدات التنقيح، ومساعدات وسوم التوجيه، وأدوات النص الآمن، ومساعدات النص/التسجيل ذات الصلة |
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 | مساعدات تطبيع مسار Webhook |
plugin-sdk/web-media |
مساعدات وسائط الويب المشتركة | مساعدات تحميل الوسائط البعيدة/المحلية |
plugin-sdk/zod |
إعادة تصدير Zod | zod معاد تصديره لمستهلكي SDK الخاصة بـ Plugin |
plugin-sdk/memory-core |
مساعدات 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-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-host-markdown |
مساعدات Markdown المُدارة | مساعدات Markdown مُدارة مشتركة لـ Plugins المجاورة للذاكرة |
plugin-sdk/memory-host-search |
واجهة بحث Active Memory | واجهة وقت تشغيل كسولة لمدير بحث Active Memory |
plugin-sdk/memory-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
الكامل. توجد القائمة الكاملة التي تضم أكثر من 200 نقطة دخول في
scripts/lib/plugin-sdk-entrypoints.json.
تم إيقاف واجهات المساعدة المحجوزة الخاصة بالـ Plugin المضمّنة من خريطة
تصدير SDK العامة، باستثناء واجهات التوافق الموثقة صراحة، مثل الواجهة
المهملة plugin-sdk/discord التي أُبقي عليها للحزمة المنشورة
@openclaw/[email protected]. توجد أدوات المساعدة الخاصة بالمالك داخل
حزمة الـ 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
القديم (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";
أدوات مساعدة حجب الإشارة ← resolveInboundMentionDecision
القديم: resolveInboundMentionRequirement({ facts, policy }) و
shouldDropInboundForMention(...) من
openclaw/plugin-sdk/channel-inbound أو
openclaw/plugin-sdk/channel-mention-gating.
الجديد: resolveInboundMentionDecision({ facts, policy }) - يعيد
كائن قرار واحدا بدلا من استدعاءين منفصلين.
تحولت إضافات القنوات اللاحقة (Slack، Discord، Matrix، MS Teams) بالفعل.
واجهة توافق وقت تشغيل القناة وأدوات مساعدة إجراءات القناة
openclaw/plugin-sdk/channel-runtime هي واجهة توافق لإضافات القنوات
الأقدم. لا تستوردها من كود جديد؛ استخدم
openclaw/plugin-sdk/channel-runtime-context لتسجيل كائنات وقت التشغيل.
أدوات المساعدة channelActions* في openclaw/plugin-sdk/channel-actions
مهملة إلى جانب تصديرات القنوات الخام الخاصة بـ "actions". اعرض القدرات
عبر سطح presentation الدلالي بدلا من ذلك - تصرّح إضافات القنوات بما
تعرضه (بطاقات، أزرار، قوائم اختيار) بدلا من أسماء الإجراءات الخام
التي تقبلها.
أداة المساعدة tool() لمزوّد بحث الويب ← createTool() على الـ Plugin
القديم: مصنع tool() من openclaw/plugin-sdk/provider-web-search.
الجديد: نفّذ createTool(...) مباشرة على Plugin المزوّد.
لم يعد OpenClaw بحاجة إلى أداة SDK المساعدة لتسجيل مغلّف الأداة.
أغلفة القنوات ذات النص الصريح ← BodyForAgent
القديم: formatInboundEnvelope(...) (و
ChannelMessageForAgent.channelEnvelope) لبناء غلاف مطالبة نصي مسطح
من رسائل القنوات الواردة.
الجديد: BodyForAgent مع كتل سياق مستخدم منظمة. ترفق إضافات
القنوات بيانات التوجيه الوصفية (المحادثة، الموضوع، الرد على، التفاعلات)
كحقول ذات أنواع بدلا من دمجها في سلسلة مطالبة. لا تزال أداة المساعدة
formatAgentEnvelope(...) مدعومة للأغلفة المُنشأة الموجهة إلى المساعد،
لكن الأغلفة النصية الصريحة الواردة في طريقها إلى الإزالة.
المناطق المتأثرة: inbound_claim وmessage_received وأي Plugin قناة
مخصص كان يعالج نص channelEnvelope بعديا.
أنواع اكتشاف المزوّد ← أنواع كتالوج المزوّد
أصبحت أربعة أسماء مستعارة لأنواع الاكتشاف الآن مغلفات رقيقة فوق أنواع عصر الكتالوج:
| الاسم المستعار القديم | النوع الجديد |
|---|---|
ProviderDiscoveryOrder |
ProviderCatalogOrder |
ProviderDiscoveryContext |
ProviderCatalogContext |
ProviderDiscoveryResult |
ProviderCatalogResult |
ProviderPluginDiscovery |
ProviderPluginCatalog |
بالإضافة إلى الحقيبة الثابتة القديمة ProviderCapabilities - يجب
أن تستخدم إضافات المزوّد خطافات مزوّد صريحة مثل buildReplayPolicy
وnormalizeToolSchemas وwrapStreamFn بدلا من كائن ثابت.
خطافات سياسة التفكير ← resolveThinkingProfile
القديم (ثلاثة خطافات منفصلة على ProviderThinkingPolicy):
isBinaryThinking(ctx) وsupportsXHighThinking(ctx) و
resolveDefaultThinkingLevel(ctx).
الجديد: resolveThinkingProfile(ctx) واحد يعيد
ProviderThinkingProfile يتضمن id القياسي، وlabel اختياريا،
وقائمة مستويات مرتبة. يخفض OpenClaw القيم القديمة المخزنة تلقائيا
حسب رتبة الملف الشخصي.
نفّذ خطافا واحدا بدلا من ثلاثة. تظل الخطافات القديمة تعمل خلال نافذة الإهمال، لكنها لا تُركّب مع نتيجة الملف الشخصي.
رجوع مزوّد OAuth خارجي ← contracts.externalAuthProviders
القديم: تنفيذ resolveExternalOAuthProfiles(...) من دون التصريح
بالمزوّد في بيان الـ Plugin.
الجديد: صرّح بـ contracts.externalAuthProviders في بيان الـ Plugin
ونفّذ resolveExternalAuthProfiles(...). يصدر مسار "auth fallback"
القديم تحذيرا في وقت التشغيل وسيُزال.
{
"contracts": {
"externalAuthProviders": ["anthropic", "openai"]
}
}
بحث متغيرات بيئة المزوّد ← setup.providers[].envVars
حقل البيان القديم: providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }.
الجديد: انسخ بحث متغير البيئة نفسه إلى setup.providers[].envVars
في البيان. يدمج هذا بيانات تعريف بيئة الإعداد/الحالة في مكان واحد
ويتجنب تشغيل وقت تشغيل الـ Plugin لمجرد الإجابة عن عمليات بحث
متغيرات البيئة.
يظل providerAuthEnvVars مدعوما عبر محول توافق حتى تُغلق نافذة الإهمال.
تسجيل Plugin الذاكرة ← registerMemoryCapability
القديم: ثلاثة استدعاءات منفصلة -
api.registerMemoryPromptSection(...)،
api.registerMemoryFlushPlan(...)،
api.registerMemoryRuntime(...).
الجديد: استدعاء واحد على واجهة API لحالة الذاكرة -
registerMemoryCapability(pluginId, { promptBuilder, flushPlanResolver, runtime }).
الفتحات نفسها، واستدعاء تسجيل واحد. لا تتأثر أدوات الذاكرة المساعدة
الإضافية (registerMemoryPromptSupplement وregisterMemoryCorpusSupplement
وregisterMemoryEmbeddingProvider).
إعادة تسمية أنواع رسائل جلسات العامل الفرعي
لا يزال اسما نوعين مستعارين قديمين مُصدّرين من src/plugins/runtime/types.ts:
| القديم | الجديد |
|---|---|
SubagentReadSessionParams |
SubagentGetSessionMessagesParams |
SubagentReadSessionResult |
SubagentGetSessionMessagesResult |
طريقة وقت التشغيل readSession مهملة لصالح getSessionMessages.
التوقيع نفسه؛ تستدعي الطريقة القديمة الطريقة الجديدة.
runtime.tasks.flow ← runtime.tasks.managedFlows
القديم: runtime.tasks.flow (بصيغة المفرد) كان يعيد موصّلا حيا
لتدفق المهام.
الجديد: يحتفظ runtime.tasks.managedFlows بوقت تشغيل تعديل TaskFlow
المُدار للإضافات التي تنشئ أو تحدّث أو تلغي أو تشغّل مهام فرعية من
تدفق. استخدم runtime.tasks.flows عندما يحتاج الـ Plugin فقط إلى
قراءات مبنية على DTO.
// Before
const flow = api.runtime.tasks.flow.fromToolContext(ctx);
// After
const flow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
مصانع الإضافات المضمّنة ← وسيط نتائج أدوات الوكيل
مغطى في "كيفية الهجرة ← ترحيل إضافات نتائج أدوات Pi إلى الوسيط" أعلاه.
أُدرج هنا للاكتمال: تم استبدال مسار Pi-only المحذوف
api.registerEmbeddedExtensionFactory(...) بـ
api.registerAgentToolResultMiddleware(...) مع قائمة وقت تشغيل صريحة
في contracts.agentToolResultMiddleware.
الاسم المستعار OpenClawSchemaType ← OpenClawConfig
أصبح OpenClawSchemaType المعاد تصديره من openclaw/plugin-sdk
اسما مستعارا من سطر واحد لـ OpenClawConfig. فضّل الاسم القياسي.
// Before
import type { OpenClawSchemaType } from "openclaw/plugin-sdk";
// After
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-schema";
الجدول الزمني للإزالة
| متى | ما الذي يحدث |
|---|---|
| الآن | تصدر الأسطح المهملة تحذيرات وقت التشغيل |
| الإصدار الرئيسي التالي | ستُزال الأسطح المهملة؛ وستفشل الإضافات التي لا تزال تستخدمها |
تم ترحيل جميع إضافات النواة بالفعل. يجب على الإضافات الخارجية الهجرة قبل الإصدار الرئيسي التالي.
كتم التحذيرات مؤقتا
عيّن متغيرات البيئة هذه أثناء العمل على الهجرة:
OPENCLAW_SUPPRESS_PLUGIN_SDK_COMPAT_WARNING=1 openclaw gateway run
OPENCLAW_SUPPRESS_EXTENSION_API_WARNING=1 openclaw gateway run
هذا مخرج مؤقت، وليس حلا دائما.
ذات صلة
- البدء - أنشئ أول Plugin لك
- نظرة عامة على SDK - مرجع استيراد المسارات الفرعية الكامل
- إضافات القنوات - بناء إضافات القنوات
- إضافات المزوّدين - بناء إضافات المزوّدين
- داخليات الـ Plugin - تعمق في البنية
- بيان الـ Plugin - مرجع مخطط البيان