api.runtime الذي يُحقن في كل Plugin أثناء التسجيل. استخدم هذه الأدوات المساعدة بدلًا من استيراد الأجزاء الداخلية للمضيف مباشرة.
Channel plugins
دليل خطوة بخطوة يستخدم هذه الأدوات المساعدة في سياق Plugin القنوات.
Provider plugins
دليل خطوة بخطوة يستخدم هذه الأدوات المساعدة في سياق Plugin المزوّدين.
تحميل الإعدادات وكتابتها
فضّل الإعدادات التي مُرّرت بالفعل إلى مسار الاستدعاء النشط، مثلapi.config أثناء التسجيل أو وسيطة cfg في استدعاءات القناة/المزوّد. هذا يُبقي لقطة عملية واحدة متدفقة عبر العمل بدلًا من إعادة تحليل الإعدادات في المسارات الساخنة.
استخدم api.runtime.config.current() فقط عندما يحتاج معالج طويل العمر إلى لقطة العملية الحالية ولم تُمرَّر أي إعدادات إلى تلك الدالة. القيمة المُعادة للقراءة فقط؛ انسخها أو استخدم أداة مساعدة للتعديل قبل التحرير.
تتلقى مصانع الأدوات ctx.runtimeConfig بالإضافة إلى ctx.getRuntimeConfig(). استخدم الجالب داخل رد نداء execute لأداة طويلة العمر عندما يمكن أن تتغير الإعدادات بعد إنشاء تعريف الأداة.
احفظ التغييرات باستخدام api.runtime.config.mutateConfigFile(...) أو api.runtime.config.replaceConfigFile(...). يجب أن تختار كل كتابة سياسة afterWrite صريحة:
- يتيح
afterWrite: { mode: "auto" }لمُعيد تحميل Gateway المخطط اتخاذ القرار. - يفرض
afterWrite: { mode: "restart", reason: "..." }إعادة تشغيل نظيفة عندما يعرف الكاتب أن إعادة التحميل الساخنة غير آمنة. - يمنع
afterWrite: { mode: "none", reason: "..." }إعادة التحميل/إعادة التشغيل التلقائية فقط عندما يملك المستدعي المتابعة.
afterWrite بالإضافة إلى ملخص followUp مُنمذج حتى يتمكن المستدعون من التسجيل أو الاختبار لمعرفة ما إذا كانوا قد طلبوا إعادة تشغيل. يظل Gateway هو المالك لتوقيت حدوث إعادة التشغيل فعليًا.
تم إهمال api.runtime.config.loadConfig() وapi.runtime.config.writeConfigFile(...) كأدوات توافق مساعدة ضمن runtime-config-load-write. تُصدر تحذيرًا مرة واحدة أثناء وقت التشغيل، وتظل متاحة للـ Plugin الخارجية القديمة خلال نافذة الترحيل. يجب ألا تستخدمها Plugin المضمّنة؛ تفشل حواجز حدود الإعدادات إذا استدعاها كود Plugin أو استورد تلك الأدوات المساعدة من مسارات Plugin SDK الفرعية.
للاستيرادات المباشرة من SDK، استخدم مسارات الإعدادات الفرعية المركزة بدلًا من برميل التوافق الواسع
openclaw/plugin-sdk/config-runtime: استخدم config-contracts للأنواع،
وplugin-config-runtime لتأكيدات الإعدادات المحمّلة مسبقًا وبحث إدخالات Plugin،
وruntime-config-snapshot للقطات العملية الحالية، وconfig-mutation للكتابات.
ينبغي لاختبارات Plugin المضمّنة أن تحاكي هذه المسارات الفرعية المركزة مباشرة
بدلًا من محاكاة برميل التوافق الواسع.
يتبع كود وقت تشغيل OpenClaw الداخلي الاتجاه نفسه: حمّل الإعدادات مرة واحدة عند حدود CLI أو Gateway أو العملية، ثم مرّر تلك القيمة عبر المسار. تحدّث كتابات التعديل الناجحة لقطة وقت تشغيل العملية وتقدّم مراجعتها الداخلية؛ ينبغي لذاكرات التخزين المؤقت طويلة العمر أن تستخدم مفتاح التخزين المؤقت المملوك لوقت التشغيل بدلًا من تسلسل الإعدادات محليًا. لدى وحدات وقت التشغيل طويلة العمر ماسح بلا تسامح لاستدعاءات loadConfig() المحيطة؛ استخدم cfg ممررة، أو context.getRuntimeConfig() للطلب، أو getRuntimeConfig() عند حد عملية صريح.
يجب أن تستخدم مسارات تنفيذ المزوّد والقناة لقطة إعدادات وقت التشغيل النشطة، وليس لقطة ملف مُعادة لقراءة الإعدادات أو تحريرها. تحفظ لقطات الملفات قيم المصدر مثل علامات SecretRef للواجهة والكتابات؛ تحتاج استدعاءات المزوّد إلى عرض وقت التشغيل المحلول. عندما يمكن استدعاء أداة مساعدة إما بلقطة المصدر النشطة أو لقطة وقت التشغيل النشطة، مرّر عبر selectApplicableRuntimeConfig() قبل قراءة بيانات الاعتماد.
أدوات وقت التشغيل القابلة لإعادة الاستخدام
استخدم حقائقbotLoopProtection الواردة للرسائل الواردة المنشأة بواسطة البوت. يطبّق النواة حارس النافذة المنزلقة المشترك داخل الذاكرة قبل سجل الجلسة والإرسال، من دون ربط السياسة بقناة واحدة. يتتبع الحارس مفاتيح (scopeId, conversationId, participant pair)، ويحسب كلا اتجاهي الزوج معًا، ويطبّق فترة تهدئة بمجرد تجاوز ميزانية النافذة، ويزيل الإدخالات غير النشطة انتهازيًا.
ينبغي لـ Plugin القنوات التي تعرض هذا السلوك للمشغلين أن تفضّل شكل channels.defaults.botLoopProtection المشترك لميزانيات الأساس، ثم تضع تجاوزات خاصة بالقناة/المزوّد فوقه. تستخدم الإعدادات المشتركة الثواني لأنها موجهة للمستخدم:
enabled:
openclaw/plugin-sdk/pair-loop-guard-runtime مباشرة فقط لحلقات أحداث
مخصصة بين طرفين لا تمر عبر مشغّل الردود الواردة المشترك.
فضاءات أسماء وقت التشغيل
api.runtime.agent
api.runtime.agent
هوية الوكيل، والأدلة، وإدارة الجلسات.فضّل
runEmbeddedAgent(...) هو الأداة المساعدة المحايدة لبدء دور وكيل OpenClaw عادي من كود Plugin. يستخدم المسار نفسه لحل المزوّد/النموذج واختيار حاضنة الوكيل مثل الردود التي تطلقها القنوات.يظل runEmbeddedPiAgent(...) اسمًا مستعارًا مهملًا للتوافق مع Plugin الحالية. ينبغي للكود الجديد استخدام runEmbeddedAgent(...).يُعيد resolveThinkingPolicy(...) مستويات التفكير المدعومة للمزوّد/النموذج والقيمة الافتراضية الاختيارية. تملك Plugin المزوّد ملف التعريف الخاص بالنموذج عبر خطافات التفكير لديها، لذلك ينبغي لـ Plugin الأدوات استدعاء أداة وقت التشغيل المساعدة هذه بدلًا من استيراد قوائم المزوّدين أو تكرارها.يحوّل normalizeThinkingLevel(...) نص المستخدم مثل on أو x-high أو extra high إلى المستوى المخزن المعياري قبل التحقق منه مقابل السياسة المحلولة.أدوات مخزن الجلسات المساعدة تقع ضمن api.runtime.agent.session:getSessionEntry(...) أو listSessionEntries(...) أو patchSessionEntry(...) أو upsertSessionEntry(...) لسير عمل الجلسات. تعالج هذه الأدوات المساعدة الجلسات بحسب هوية الوكيل/الجلسة حتى لا تعتمد Plugin على شكل تخزين sessions.json القديم. استخدم preserveActivity: true للتعديلات الخاصة بالبيانات الوصفية فقط التي لا ينبغي أن تحدّث نشاط الجلسة، وreplaceEntry: true فقط عندما يعيد رد النداء إدخالًا كاملًا ويجب أن تبقى الحقول المحذوفة محذوفة.استخدم runWithWorkAdmission(...) عندما تبدأ Plugin عملًا على جلسة محفوظة. يرفض رد النداء الجلسات المؤرشفة أو المستبدلة بالتزامن، ويحافظ على تنسيق طفرات الأرشفة/إعادة الضبط/الحذف عبر الإكمال، ويتلقى AbortSignal يجب تمريره إلى تشغيل الوكيل.لقراءات النصوص وكتابتها، استورد openclaw/plugin-sdk/session-transcript-runtime واستخدم resolveSessionTranscriptIdentity(...) أو resolveSessionTranscriptTarget(...) أو readSessionTranscriptEvents(...) أو appendSessionTranscriptMessageByIdentity(...) أو publishSessionTranscriptUpdateByIdentity(...) أو withSessionTranscriptWriteLock(...) مع { agentId, sessionKey, sessionId }. تتيح هذه الواجهات لـ Plugin تحديد نص جلسة، وقراءة أحداثه، وإلحاق رسائل، ونشر تحديثات، وتشغيل عمليات ذات صلة تحت قفل كتابة النص نفسه. تم إهمال تمرير sessionFile، أو استخدام resolveSessionTranscriptLegacyFileTarget(...)، أو استيراد appendSessionTranscriptMessage(...) / emitSessionTranscriptUpdate(...) منخفضي المستوى من openclaw/plugin-sdk/agent-harness-runtime؛ توجد تلك المسارات فقط للكود القديم الذي يتلقى بالفعل أثر نص نشطًا.loadSessionStore(...) وsaveSessionStore(...) وupdateSessionStore(...) وresolveSessionFilePath(...) وresolveAndPersistSessionFile(...) هي أدوات توافق مساعدة مهملة لـ Plugin التي لا تزال تعتمد عمدًا على شكل المتجر الكامل القديم أو ملف النص. يجب ألا يستخدم كود Plugin الجديد هذه الأدوات المساعدة، وينبغي للمستدعين الحاليين الترحيل إلى أدوات الإدخال المساعدة وأدوات هوية النص المساعدة.api.runtime.agent.defaults
api.runtime.agent.defaults
ثوابت النموذج والمزوّد الافتراضية:
api.runtime.llm
api.runtime.llm
شغّل إكمال نص مملوكًا للمضيف من دون استيراد الأجزاء الداخلية للمزوّد أو
تكرار إعداد نموذج OpenClaw/المصادقة/عنوان URL الأساسي.تستخدم الأداة المساعدة مسار إعداد الإكمال البسيط نفسه مثل وقت التشغيل
المضمّن في OpenClaw ولقطة إعدادات وقت التشغيل المملوكة للمضيف. تتلقى محركات السياق
إمكانية
llm.complete مرتبطة بالجلسة، لذلك تستخدم استدعاءات النموذج
وكيل الجلسة النشطة ولا تعود بصمت إلى الوكيل الافتراضي. تتضمن
النتيجة إسناد المزوّد/النموذج/الوكيل بالإضافة إلى استخدام الرموز المميزّة
وذاكرة التخزين المؤقت والتكلفة المقدّرة عند توفرها.api.runtime.subagent
api.runtime.subagent
شغّل وأدر عمليات الوكلاء الفرعيين في الخلفية.يمكن لـ
deleteSession(...) حذف الجلسات التي أنشأتها Plugin نفسها عبر api.runtime.subagent.run(...). لا يزال حذف جلسات المستخدم أو المشغّل العشوائية يتطلب طلب Gateway بنطاق إداري.api.runtime.nodes
api.runtime.nodes
اسرد العقد المتصلة واستدعِ أمرًا مستضافًا على عقدة من كود Plugin المحمّل عبر Gateway أو من أوامر CLI الخاصة بـ Plugin. استخدم هذا عندما تمتلك Plugin عملًا محليًا على جهاز مقترن، مثل جسر متصفح أو صوت على جهاز Mac آخر.داخل Gateway يعمل هذا التشغيل ضمن العملية نفسها. وفي أوامر CLI الخاصة بـ Plugin، يستدعي Gateway المضبوط عبر RPC، لذا يمكن لأوامر مثل
openclaw googlemeet recover-tab فحص العقد المقترنة من الطرفية. لا تزال أوامر Node تمر عبر الاقتران العادي لعقد Gateway، وقوائم السماح بالأوامر، وسياسات استدعاء العقد الخاصة بـ Plugin، ومعالجة الأوامر المحلية للعقدة.يجب على Plugins التي تكشف أوامر خطرة مستضافة على العقدة تسجيل سياسة استدعاء عقدة باستخدام api.registerNodeInvokePolicy(...). تعمل السياسة في Gateway بعد فحوصات قائمة السماح بالأوامر وقبل تمرير الأمر إلى العقدة، بحيث تشترك استدعاءات node.invoke المباشرة وأدوات Plugin الأعلى مستوى في مسار الإنفاذ نفسه.api.runtime.tasks.managedFlows
api.runtime.tasks.managedFlows
اربط وقت تشغيل تدفق المهام بمفتاح جلسة OpenClaw موجود أو سياق أداة موثوق، ثم أنشئ تدفقات المهام وأدرها دون تمرير مالك في كل استدعاء.يتتبع تدفق المهام حالة سير عمل متينة متعددة الخطوات. ليس مجدولًا:
استخدم Cron أو استخدم
api.session.workflow.scheduleSessionTurn(...) للتنبيهات المستقبلية،
ثم استخدم managedFlows من الدور المجدول عندما يحتاج ذلك العمل إلى
حالة تدفق أو مهام فرعية أو انتظار أو إلغاء.bindSession({ sessionKey, requesterOrigin }) عندما يكون لديك بالفعل مفتاح جلسة OpenClaw موثوق من طبقة الربط الخاصة بك. لا تربط من إدخال مستخدم خام.api.runtime.tts
api.runtime.tts
تركيب النص إلى كلام.يستخدم إعدادات
messages.tts الأساسية واختيار المزوّد. يعيد مخزن صوت PCM المؤقت + معدل العينة.api.runtime.mediaUnderstanding
api.runtime.mediaUnderstanding
تحليل الصور والصوت والفيديو.يعيد
{ text: undefined } عندما لا يُنتج أي مخرج (مثلًا عند تخطي الإدخال).يبقى
api.runtime.stt.transcribeAudioFile(...) اسمًا مستعارًا للتوافق مع api.runtime.mediaUnderstanding.transcribeAudioFile(...).api.runtime.imageGeneration
api.runtime.imageGeneration
توليد الصور.
api.runtime.webSearch
api.runtime.webSearch
بحث الويب.
api.runtime.media
api.runtime.media
أدوات وسائط منخفضة المستوى.
api.runtime.config
api.runtime.config
لقطة إعدادات وقت التشغيل الحالية وكتابات إعدادات معاملية. فضّل
الإعدادات التي مُررت بالفعل إلى مسار الاستدعاء النشط؛ واستخدم
يعيد
current() فقط عندما يحتاج المعالج إلى لقطة العملية مباشرة.mutateConfigFile(...) و replaceConfigFile(...) قيمة followUp،
على سبيل المثال { mode: "restart", requiresRestart: true, reason }،
والتي تسجل قصد الكاتب دون سحب التحكم في إعادة التشغيل من
Gateway.api.runtime.system
api.runtime.system
أدوات على مستوى النظام.يعيد
runCommandWithTimeout(...) قيم stdout و stderr الملتقطة، وعدّادات
اقتطاع اختيارية، و code، و signal، و killed، و termination، و
noOutputTimedOut. تبلغ نتائج انتهاء المهلة وانتهاء مهلة عدم وجود مخرجات عن code: 124
عندما لا توفر العملية الفرعية رمز خروج غير صفري. يمكن لخروج الإشارة
غير الناتج عن انتهاء المهلة أن يعيد code: null، لذا استخدم termination و
noOutputTimedOut للتمييز بين أسباب انتهاء المهلة.api.runtime.events
api.runtime.events
اشتراكات الأحداث.
api.runtime.logging
api.runtime.logging
التسجيل.
api.runtime.modelAuth
api.runtime.modelAuth
حل مصادقة النموذج والمزوّد.
api.runtime.state
api.runtime.state
حلّ دليل الحالة والتخزين بالمفاتيح المدعوم بـ SQLite.تبقى المخازن ذات المفاتيح بعد إعادة التشغيل، وتُعزل حسب معرّف Plugin المرتبط بوقت التشغيل. استخدم
registerIfAbsent(...) لمطالبات إزالة التكرار الذرّية: فهي تعيد true عندما يكون المفتاح مفقودًا أو منتهي الصلاحية وتم تسجيله، أو false عندما تكون هناك قيمة نشطة موجودة بالفعل من دون استبدال قيمتها أو وقت إنشائها أو مدة TTL الخاصة بها. الحدود: maxEntries لكل مساحة أسماء، و6,000 صف نشط لكل Plugin، وقيم JSON أقل من 64 كيلوبايت، وانتهاء صلاحية TTL اختياري. عندما تؤدي عملية كتابة إلى تجاوز سقف صفوف Plugin، قد يزيل وقت التشغيل أقدم الصفوف النشطة من مساحة الأسماء التي تُكتب إليها؛ ولا تُزال مساحات الأسماء الشقيقة بسبب تلك الكتابة، وتظل الكتابة تفشل إذا لم تتمكن مساحة الأسماء من تحرير عدد كافٍ من الصفوف.api.runtime.tools
api.runtime.tools
مصانع أدوات الذاكرة وCLI.
api.runtime.channel
api.runtime.channel
مساعدات وقت التشغيل الخاصة بالقنوات (متاحة عند تحميل Plugin قناة).استخدم مساعدات الإشارة المتاحة:
api.runtime.channel.media هي الواجهة المفضلة لتنزيل وسائط القناة وتخزينها:saveRemoteMedia(...) عندما يجب أن يصبح عنوان URL بعيد وسائط OpenClaw. استخدم saveResponseMedia(...) عندما يكون Plugin قد جلب بالفعل Response مع معالجة المصادقة أو إعادة التوجيه أو قائمة السماح المملوكة لـ Plugin. استخدم readRemoteMediaBuffer(...) فقط عندما يحتاج Plugin إلى البايتات الخام للفحص أو التحويلات أو فك التشفير أو إعادة الرفع. يظل fetchRemoteMedia(...) اسمًا مستعارًا متوافقًا ومهملًا لـ readRemoteMediaBuffer(...).api.runtime.channel.mentions هي واجهة سياسة الإشارة الواردة المشتركة لـ Plugins القنوات المضمّنة التي تستخدم حقن وقت التشغيل:buildMentionRegexesmatchesMentionPatternsmatchesMentionWithExplicitimplicitMentionKindWhenresolveInboundMentionDecision
api.runtime.channel.mentions عمدًا مساعدات التوافق الأقدم resolveMentionGating*. فضّل مسار { facts, policy } المطبّع.تخزين مراجع وقت التشغيل
استخدمcreatePluginRuntimeStore لتخزين مرجع وقت التشغيل لاستخدامه خارج رد النداء register:
فضّل
pluginId لهوية مخزن وقت التشغيل. صيغة key ذات المستوى الأدنى مخصّصة للحالات غير الشائعة التي يحتاج فيها Plugin واحد عمدًا إلى أكثر من خانة وقت تشغيل واحدة.حقول api علوية أخرى
إلى جانب api.runtime، يوفّر كائن API أيضًا:
معرّف Plugin.
اسم عرض Plugin.
لقطة الإعداد الحالية (لقطة وقت التشغيل النشطة في الذاكرة عند توفرها).
إعداد خاص بـ Plugin من
plugins.entries.<id>.config.مسجّل محدود النطاق (
debug، info، warn، error).وضع التحميل الحالي؛
"setup-runtime" هو نافذة بدء التشغيل/الإعداد الخفيفة قبل الدخول الكامل.حلّ مسار نسبيًا إلى جذر Plugin.
ذات صلة
- داخليات Plugin — نموذج الإمكانات والسجل
- نقاط دخول SDK — خيارات
definePluginEntry - نظرة عامة على SDK — مرجع المسارات الفرعية