क्या बदला
पहले कई अत्यधिक खुले इम्पोर्ट सरफ़ेस Plugin को एक ही एंट्री पॉइंट से लगभग किसी भी चीज़ तक पहुँचने देते थे:openclaw/plugin-sdkऔरopenclaw/plugin-sdk/compat- केंद्रित SDK बनाए जाने के दौरान दर्जनों हेल्पर को पुनः एक्सपोर्ट करते थे। अब दोनों रूट हटा दिए गए हैं; इसके बजाय दस्तावेज़ीकृत सबपाथ इम्पोर्ट करें।openclaw/plugin-sdk/infra-runtime- एक व्यापक बैरल, जिसमें सिस्टम इवेंट, Heartbeat स्थिति, डिलीवरी क्यू, फ़ेच/प्रॉक्सी हेल्पर, फ़ाइल हेल्पर, अनुमोदन प्रकार और असंबंधित उपयोगिताएँ मिश्रित थीं।openclaw/plugin-sdk/config-runtime- एक व्यापक कॉन्फ़िग बैरल, जिसे केवल इसकी बाद की संगतता अवधि के लिए बनाए रखा गया था; सीधे रनटाइम लोड/राइट हेल्पर हटा दिए गए हैं।openclaw/extension-api- हटाया गया एक ब्रिज, जो Plugin को एम्बेडेड एजेंट रनर जैसे होस्ट-साइड हेल्पर तक सीधी पहुँच देता था।api.registerEmbeddedExtensionFactory(...)- हटाया गया केवल-एम्बेडेड-रनर हुक, जोtool_resultजैसे एम्बेडेड-रनर इवेंट देखता था। इसके बजाय एजेंट टूल-रिज़ल्ट मिडलवेयर का उपयोग करें (एम्बेडेड टूल-रिज़ल्ट एक्सटेंशन को मिडलवेयर में माइग्रेट करें देखें)।
infra-runtime और config-runtime केवल अपनी
अलग से दर्ज बाद की अवधियों के लिए शेष हैं; नए Plugin को केंद्रित सबपाथ का उपयोग करना चाहिए।
OpenClaw किसी प्रतिस्थापन को प्रस्तुत करने वाले उसी बदलाव में दस्तावेज़ीकृत
Plugin व्यवहार को हटाता या उसकी पुनर्व्याख्या नहीं करता। अनुबंध तोड़ने वाले बदलाव पहले
एक संगतता अडैप्टर, निदान, दस्तावेज़ और बहिष्करण अवधि से होकर गुजरते हैं। यह
SDK इम्पोर्ट, मैनिफ़ेस्ट फ़ील्ड, सेटअप API, हुक और रनटाइम
पंजीकरण व्यवहार पर लागू होता है।
क्यों
- धीमा स्टार्टअप - एक हेल्पर इम्पोर्ट करने पर दर्जनों असंबंधित मॉड्यूल लोड हो जाते थे।
- चक्रीय निर्भरताएँ - व्यापक पुनः एक्सपोर्ट के कारण इम्पोर्ट चक्र बनाना आसान था।
- अस्पष्ट API सरफ़ेस - स्थिर एक्सपोर्ट को आंतरिक एक्सपोर्ट से अलग पहचानने का कोई तरीका नहीं था।
openclaw/plugin-sdk/<subpath> दस्तावेज़ीकृत अनुबंध वाला एक छोटा,
स्व-निहित मॉड्यूल है।
बंडल किए गए चैनलों के लिए पुराने प्रोवाइडर सुविधा सीम भी हट गए हैं -
चैनल-ब्रांडेड हेल्पर शॉर्टकट निजी मोनो-रेपो सुविधाएँ थे, स्थिर
Plugin अनुबंध नहीं। इसके बजाय संकीर्ण सामान्य SDK सबपाथ का उपयोग करें। बंडल किए गए
Plugin वर्कस्पेस के भीतर, प्रोवाइडर-स्वामित्व वाले हेल्पर को उसी Plugin के
api.ts या runtime-api.ts में रखें:
- Anthropic Claude-विशिष्ट स्ट्रीम हेल्पर को अपने
api.ts/contract-api.tsसीम में रखता है। - OpenAI प्रोवाइडर बिल्डर, डिफ़ॉल्ट-मॉडल हेल्पर और रियलटाइम प्रोवाइडर
बिल्डर को अपने
api.tsमें रखता है। - OpenRouter प्रोवाइडर बिल्डर और ऑनबोर्डिंग/कॉन्फ़िग हेल्पर को अपने
api.tsमें रखता है।
संगतता नीति
बाहरी-Plugin संगतता कार्य इस क्रम का पालन करता है:- नया अनुबंध जोड़ें।
- पुराने व्यवहार को संगतता अडैप्टर के माध्यम से जोड़े रखें।
- पुराने पाथ और उसके प्रतिस्थापन का नाम बताने वाला निदान या चेतावनी जारी करें।
- परीक्षणों में दोनों पाथ को कवर करें।
- बहिष्करण और माइग्रेशन पाथ का दस्तावेज़ीकरण करें।
- घोषित माइग्रेशन अवधि के बाद ही हटाएँ, सामान्यतः किसी प्रमुख रिलीज़ में।
प्रकाशित चैनल सेटअप संगतता
2026.7.1 के माध्यम से प्रकाशित Slack, Discord, Signal और Microsoft Teams पैकेज
openclaw/plugin-sdk/bundled-channel-config-schema से चैनल-विशिष्ट कॉन्फ़िग स्कीमा इम्पोर्ट करते हैं।
प्रकाशित Slack और Discord पैकेज
openclaw/plugin-sdk/setup-runtime से createLegacyCompatChannelDmPolicy और
promptLegacyChannelAllowFromForAccount भी इम्पोर्ट करते हैं।
वे एक्सपोर्ट बहिष्कृत रनटाइम संगतता अडैप्टर के रूप में उपलब्ध रहते हैं।
नए और पुनः प्रकाशित Plugin को channel-config-schema और
setup-runtime के सामान्य प्रिमिटिव का उपयोग करके अपने कॉन्फ़िग स्कीमा और सेटअप नीति का
स्वामित्व स्थानीय रूप से रखना चाहिए। संगतता एक्सपोर्ट केवल तभी हटाए जा सकते हैं, जब
न्यूनतम समर्थित प्रकाशित पैकेज संस्करण उन्हें इम्पोर्ट करना बंद कर दें।
चैनल सेटअप इनपुट फ़ील्ड संगतता
ChannelSetupInput अब केवल क्रॉस-चैनल सेटअप एनवलप को स्थायी रूप से
टाइप किया हुआ रखता है। चैनल-विशिष्ट फ़ील्ड एक बहिष्कृत संगतता
स्तर में टाइप की हुई रहती हैं, ताकि मौजूदा बाहरी Plugin अब भी कम्पाइल हों, जबकि Plugin लेखक उन
फ़ील्ड को Plugin-स्थानीय सेटअप इनपुट प्रकारों में ले जाते हैं।
OpenClaw प्रमुख रिलीज़ जारी नहीं करता। 2026-07-22 को रजिस्ट्री के एक स्वीप ने
426 प्रकाशित आउट-ऑफ़-ट्री चैनल Plugin की जाँच की और बिना किसी रीडर वाली 21 फ़ील्ड हटा दीं।
बनाए रखी गई 22 फ़ील्ड में से प्रत्येक का एक ज्ञात प्रकाशित रीडर है। प्रत्येक अगली फ़ील्ड
जैसे ही किसी प्रकाशित Plugin द्वारा पढ़ी नहीं जाती, हटा दी जाती है; Plugin लेखक जैसे-जैसे
Plugin-स्थानीय सेटअप इनपुट प्रकारों पर माइग्रेट करते हैं, बनाए रखा गया सेट छोटा होता जाता है।
उसी स्वीप ने बिना किसी प्रकाशित आश्रित वाली 23 पुरानी अघोषित-अडैप्टर प्रमोशन कुंजियाँ हटा दीं।
छह सामान्य कुंजियाँ और केवल-सेटअप rooms कुंजी शेष हैं।
प्रकाशित Plugin द्वारा singleAccountKeysToMove घोषित किए जाने के साथ वह सेट भी छोटा होता जाता है।
साझा प्रकार में कोई इंडेक्स सिग्नेचर नहीं है। Plugin-स्वामित्व वाली कुंजियाँ अब भी रनटाइम
इनपुट ऑब्जेक्ट पर मौजूद हो सकती हैं; उन्हें Plugin-स्थानीय इंटरसेक्शन में घोषित करें या
स्वामी Plugin के सेटअप स्कीमा के माध्यम से संकीर्ण करें।
singleAccountKeysToMove घोषित करें, जिसमें तब एक खाली ऐरे भी शामिल हो जब
Plugin को किसी अतिरिक्त प्रमोशन कुंजी की आवश्यकता न हो, ताकि साझा फ़ॉलबैक को एक
समय में एक कुंजी करके हटाया जा सके।
रीडर का सत्यापन
- प्रत्येक
nextCursorके साथhttps://clawhub.ai/api/v1/packages?family=code-plugin&limit=100के पृष्ठों से गुजरें और वे पैकेज रखें जिनकेcategoriesमेंchannelsशामिल है। npm search --json --searchlimit=1000 "openclaw channel plugin"से npm उम्मीदवार जोड़ें।openclaw/plugin-sdk/channel-setup,openclaw/plugin-sdk/setupऔरopenclaw/plugin-sdk/coreके लिए GitHub कोड खोजों से केवल-स्रोत उम्मीदवार जोड़ें।- प्रत्येक उम्मीदवार का नवीनतम प्रकाशित संस्करण निर्धारित करें।
npm pack <package>@<version> --json --pack-destination <temp-dir>चलाएँ, उसे अनपैक करें और प्रत्यक्ष या डिस्ट्रक्चर्ड फ़ील्ड रीड के लिए भेजे गएdistJavaScript और घोषणाओं की जाँच करें। जब किसी पैकेज का कोई npm रिलीज़ न हो, तो ClawHub आर्टिफ़ैक्ट डाउनलोड करें। - पैकेज, संस्करण, फ़ील्ड या प्रमोशन कुंजी और मेल खाने वाली फ़ाइल दर्ज करें। कोई फ़ील्ड या कुंजी केवल तभी हटाई जा सकती है, जब कोई प्रकाशित Plugin आर्टिफ़ैक्ट उसे न पढ़ता हो। बनाए रखी गई फ़ील्ड और कुंजी सूचियों के पास कोड टिप्पणियों में दिए रीडर नामों को स्वीप के साथ सिंक्रनाइज़ रखें।
pnpm plugins:boundary-report के साथ वर्तमान माइग्रेशन क्यू का ऑडिट करें:
pnpm plugins:boundary-report:ci तीनों विफलता फ़्लैग के साथ चलता है। बहिष्कृत
रिकॉर्ड में सामान्यतः अस्पष्ट “अगली प्रमुख रिलीज़” के बजाय एक स्पष्ट removeAfter तिथि होती है।
जिस रिकॉर्ड के स्वामी ने किसी तिथि को अनुमोदित नहीं किया है, उसमें
removeAfter अनुपस्थित रहता है, वह no-date के रूप में दिखाई देता है और कभी भी हटाए जाने योग्य नहीं होता।
रिपोर्ट बहिष्कृत रिकॉर्ड को तिथि के अनुसार समूहित करती है, स्थानीय कोड/दस्तावेज़ संदर्भों की गणना करती है,
क्रॉस-ओनर आरक्षित SDK इम्पोर्ट सामने लाती है और निजी
मेमोरी-होस्ट SDK ब्रिज का सारांश देती है। आरक्षित SDK सबपाथ में ट्रैक किया गया स्वामी उपयोग होना चाहिए;
अप्रयुक्त आरक्षित एक्सपोर्ट को सार्वजनिक SDK से हटा देना चाहिए।
पुराना मीडिया प्रोजेक्शन
media-legacy-projection संगतता रिकॉर्ड पुरानी समानांतर
मीडिया फ़ील्ड, पेलोड बिल्डर, हुक मेटाडेटा उपनाम और मीडिया टेम्पलेट
नामों को कवर करता है। इसकी अनुमोदित removeAfter तिथि 2026-10-01 है (फ़ैक्ट्स-फ़र्स्ट
प्रतिस्थापन भेजे जाने के दो रिलीज़ क्रम बाद)। हटाने के लिए उस समय
प्रकाशित-Plugin आर्टिफ़ैक्ट का स्वच्छ स्वीप भी आवश्यक है; तिथि से पहले माइग्रेट करें।
चैनल इनग्रेस के लिए, एकवचन/बहुवचन MediaPath, MediaUrl,
MediaType, MediaPaths, MediaUrls, MediaTypes,
MediaTranscribedIndexes, MediaWorkspaceDir और MediaStaged को क्रमबद्ध
फ़ैक्ट से बदलें:
inbound_claim और message_received हुक में event.media का उपयोग करें। यदि रिमोट
मीडिया स्थानीय रूप से स्टेज नहीं किया गया है, तो पहचान/निदान के लिए event.originalMedia का उपयोग करें
और event.media की प्रतीक्षा करें; event.mediaStagingPending उस
स्थिति को अलग करता है। event.metadata से बहिष्कृत एकवचन/बहुवचन गुण
न पढ़ें।
CLI मीडिया मॉडल के लिए, {{MediaPath}}, {{MediaUrl}}, {{MediaType}}
और {{MediaDir}} को {{AttachmentPath}}, {{AttachmentUrl}},
{{AttachmentContentType}} और {{AttachmentDir}} से बदलें। जब अटैचमेंट की स्थिति
महत्त्वपूर्ण हो, तो {{AttachmentIndex}} का उपयोग करें।
स्थानीय मीडिया रीड नीति के लिए,
openclaw/plugin-sdk/media-local-roots से getAgentScopedMediaLocalRoots(...) या
getAgentScopedMediaLocalRootsForSources(...) इम्पोर्ट करें।
openclaw/plugin-sdk/agent-media-payload फ़साड और उसका
buildAgentMediaPayload(...) प्रोजेक्शन बहिष्कृत हैं।
माइग्रेट कैसे करें
रनटाइम कॉन्फ़िग लोड/राइट हेल्पर माइग्रेट करें
api.runtime.config.loadConfig() और
api.runtime.config.writeConfigFile(...) कॉल करना बंद कर देना चाहिए। सक्रिय कॉल पाथ में पहले से
पास किए गए कॉन्फ़िग को प्राथमिकता दें। वर्तमान प्रक्रिया स्नैपशॉट की आवश्यकता वाले
दीर्घकालिक हैंडलर api.runtime.config.current() का उपयोग कर सकते हैं। दीर्घकालिक
एजेंट टूल को execute के भीतर ctx.getRuntimeConfig() पढ़ना चाहिए, ताकि कॉन्फ़िग राइट
से पहले बनाया गया टूल भी रीफ़्रेश किया गया कॉन्फ़िग देख सके।कॉन्फ़िग राइट स्पष्ट आफ़्टर-राइट नीति वाले ट्रांज़ैक्शनल हेल्पर से होकर जाते हैं:afterWrite: { mode: "restart", reason: "..." } का उपयोग तब करें जब परिवर्तन के लिए
Gateway को साफ़ तरीके से पुनः आरंभ करना आवश्यक हो, और afterWrite: { mode: "none", reason: "..." }
का उपयोग केवल तब करें जब कॉलर अनुवर्ती कार्रवाई का स्वामी हो और जानबूझकर
रीलोड प्लानर को दबाता हो। म्यूटेशन परिणामों में परीक्षणों और लॉगिंग के लिए
टाइप किया हुआ followUp सारांश शामिल होता है; पुनः आरंभ लागू करने या
शेड्यूल करने की ज़िम्मेदारी Gateway की ही रहती है।loadConfig और writeConfigFile को Plugin
रनटाइम से हटा दिया गया है। बंडल किए गए Plugins और रिपॉज़िटरी रनटाइम कोड को
pnpm check:deprecated-api-usage और
pnpm check:no-runtime-action-load-config द्वारा सुरक्षित किया जाता है: नया उत्पादन Plugin उपयोग
सीधे विफल होता है, प्रत्यक्ष कॉन्फ़िगरेशन लेखन विफल होता है, Gateway सर्वर विधियों को
अनुरोध रनटाइम स्नैपशॉट का उपयोग करना आवश्यक है, रनटाइम चैनल प्रेषण/कार्रवाई/क्लाइंट सहायकों को
अपनी सीमा से कॉन्फ़िगरेशन प्राप्त करना आवश्यक है, और दीर्घजीवी रनटाइम मॉड्यूल
शून्य परिवेशीय loadConfig() कॉल की अनुमति देते हैं।नए Plugin कोड को व्यापक openclaw/plugin-sdk/config-runtime
बैरल से बचना चाहिए। कार्य के लिए संकीर्ण उपपथ का उपयोग करें:एम्बेडेड टूल-परिणाम एक्सटेंशन को मिडलवेयर में माइग्रेट करें
api.registerEmbeddedExtensionFactory(...) टूल-परिणाम हैंडलर को
रनटाइम-निरपेक्ष मिडलवेयर से बदलना आवश्यक है:contracts.agentToolResultMiddleware में घोषित हो। अघोषित इंस्टॉल किए गए मिडलवेयर
पंजीकरण अस्वीकार कर दिए जाते हैं।अनुमोदन-नेटिव हैंडलर को क्षमता तथ्यों में माइग्रेट करें
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सतह प्रदान करें—आंशिक स्टब अस्वीकार कर दिए जाते हैं।
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 का उपयोग करता है। पुराने
रूट-कुंजी नाम संगतता उपनाम के रूप में बने हुए हैं:{ channel, to, accountId, threadId } को
सुसंगत रूप से सामान्यीकृत करते हैं।plugin-sdk/channel-route से ChannelMessagingAdapter.parseExplicitTarget या
resolveChannelRouteTargetWithParser(...) के नए उपयोग न जोड़ें—ये अप्रचलित हैं और केवल पुराने
Plugins के लिए बने हुए हैं। नए चैनल Plugins को लक्ष्य-ID सामान्यीकरण
और डायरेक्टरी-मिस फ़ॉलबैक के लिए
messaging.targetResolver.resolveTarget(...), जब कोर को आरंभिक पीयर प्रकार चाहिए तब
messaging.inferTargetChatType(...), और प्रदाता-नेटिव
सत्र तथा थ्रेड पहचान के लिए messaging.resolveOutboundSessionRoute(...) का उपयोग करना चाहिए।बिल्ड और परीक्षण करें
आयात पथ संदर्भ
सार्वजनिक पैकेज निर्यात मैप आयात योग्य SDK उपपथों के लिए सत्य का स्रोत है। SDK अवलोकन से लिंक की गई विषयगत SDK मार्गदर्शिकाओं का उपयोग करें और सबसे संकीर्ण दस्तावेज़ीकृत सार्वजनिक उपपथ को प्राथमिकता दें।scripts/lib/plugin-sdk-entrypoints.json की
कंपाइलर सूची में बंडल किए गए Plugins बनाने के लिए उपयोग की जाने वाली निजी-स्थानीय प्रविष्टियाँ भी हैं;
वहाँ उनकी उपस्थिति उन्हें सार्वजनिक पैकेज निर्यात नहीं बनाती।
यह तालिका सामान्य माइग्रेशन उपसमुच्चय है, संपूर्ण SDK सतह नहीं। कंपाइलर
प्रवेश-बिंदु सूची scripts/lib/plugin-sdk-entrypoints.json में है;
पैकेज निर्यात सार्वजनिक उपसमुच्चय से जनरेट किए जाते हैं।
आरक्षित बंडल-Plugin सहायक सीमों को सार्वजनिक SDK
निर्यात मैप से हटा दिया गया है, सिवाय स्पष्ट रूप से दस्तावेज़ीकृत संगतता फ़साड के, जैसे कि
अप्रचलित plugin-sdk/discord शिम, जिसे उन बाहरी Plugins के लिए बनाए रखा गया है जो अब भी
प्रकाशित @openclaw/discord पैकेज को सीधे आयात करते हैं। स्वामी-विशिष्ट
सहायक स्वामी Plugin पैकेज के भीतर रहते हैं; साझा होस्ट व्यवहार
plugin-sdk/gateway-runtime, plugin-sdk/security-runtime और इंजेक्ट किए गए Plugin API जैसे
जेनेरिक SDK अनुबंधों के माध्यम से जाता है।
कार्य से मेल खाने वाले सबसे संकीर्ण आयात का उपयोग करें। यदि आपको कोई निर्यात नहीं मिलता,
तो src/plugin-sdk/ पर स्रोत जाँचें या अनुरक्षकों से पूछें कि उसका स्वामी कौन-सा जेनेरिक
अनुबंध होना चाहिए।
हटाई गई संगतता सतहें
जुलाई 2026 की छँटाई में रूट SDK और संगतता बैरल, एक्सटेंशन API ब्रिज, समाप्त SDK उपपथ उपनाम, अप्रयुक्त SDK उपपथ और केवल बंडल के लिए बने SDK मॉड्यूल के सार्वजनिक निर्यात हटा दिए गए। केवल बंडल वाले मॉड्यूल निजी-स्थानीय बिल्ड मैपिंग के माध्यम से उनके रिपॉज़िटरी स्वामियों के लिए उपलब्ध रहते हैं; उन्हें प्रकाशित पैकेज से आयात नहीं किया जा सकता।प्रक्रिया-वैश्विक API-प्रदाता प्रकाशन
registerApiProvider(...) और unregisterApiProviders(...) को
openclaw/plugin-sdk/llm से हटा दिया गया। वे API ट्रांसपोर्ट को प्रक्रिया-वैश्विक
स्थिति में प्रकाशित करते थे, जिसे जीवनचक्र-स्वामित्व वाले मॉडल रनटाइम को फिर प्रत्येक तैयार
रजिस्ट्री में कॉपी करना पड़ता था।
प्रदाता Plugins को टेक्स्ट-इन्फ़रेंस प्रदाताओं को
api.registerProvider(...) के माध्यम से पंजीकृत करना चाहिए। ApiRegistry बनाने वाले होस्ट-स्वामित्व वाले
कोड और परीक्षणों को सीधे उस रजिस्ट्री पर पंजीकरण करना चाहिए, ताकि प्रदाता स्वामित्व
और टियरडाउन तैयार रनटाइम तक सीमित रहें।
निजी परीक्षण बैरल
openclaw/plugin-sdk/testing रिपॉज़िटरी-स्थानीय था और वितरित पैकेज
आर्टिफ़ैक्ट से बाहर रखा गया था, इसलिए इसे इसकी 2026-07-28 removeAfter तिथि से पहले हटा दिया गया। रिपॉज़िटरी
परीक्षण plugin-sdk/plugin-test-runtime, plugin-sdk/channel-test-helpers, plugin-sdk/channel-target-testing,
plugin-sdk/test-env और plugin-sdk/test-fixtures जैसे केंद्रित उपपथों का उपयोग करते हैं।
माइग्रेशन संदर्भ
ये मैपिंग जुलाई 2026 में हटाई गई सतहों और बाद की समयावधि में सक्रिय बहिष्करणों, दोनों को कवर करती हैं। कोई मैपिंग माइग्रेशन मार्गदर्शन है, इसका प्रमाण नहीं कि पुरानी सतह अब भी उपलब्ध है; वर्तमान स्थिति के लिए संगतता रजिस्ट्री और हटाने की समयरेखा देखें।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
resolveMentionGating(params) और
resolveMentionGatingWithBypass(params), जो
openclaw/plugin-sdk/channel-inbound या
openclaw/plugin-sdk/channel-mention-gating से मिलते थे।नया: resolveInboundMentionDecision({ facts, policy })—दो अलग-अलग कॉल
आकृतियों के बजाय एक निर्णय ऑब्जेक्ट।इसे Discord, iMessage, Matrix, MS Teams, QQBot, Signal,
Telegram, WhatsApp और Zalo में अपनाया गया है। Slack का अपना app_mention इवेंट मॉडल
इस सहायक का उपयोग नहीं करता।चैनल रनटाइम शिम और चैनल कार्रवाई सहायक
चैनल रनटाइम शिम और चैनल कार्रवाई सहायक
openclaw/plugin-sdk/channel-runtime हटा दिया गया है। रनटाइम
ऑब्जेक्ट पंजीकृत करने के लिए openclaw/plugin-sdk/channel-runtime-context का उपयोग करें।openclaw/plugin-sdk/channel-actions में मौजूद मूल संदेश स्कीमा सहायक
कच्चे “actions” चैनल एक्सपोर्ट के साथ हटा दिए गए थे। इसके बजाय क्षमताओं को
सिमैंटिक presentation सतह के माध्यम से उजागर करें—चैनल plugins यह घोषित
करते हैं कि वे क्या रेंडर करते हैं (कार्ड, बटन, चयन), न कि यह कि वे किन कच्चे
कार्रवाई नामों को स्वीकार करते हैं।वेब खोज प्रदाता का tool() सहायक -> Plugin पर createTool()
वेब खोज प्रदाता का tool() सहायक -> Plugin पर createTool()
openclaw/plugin-sdk/provider-web-search से tool() फैक्टरी।नया: प्रदाता Plugin पर सीधे createTool(...) लागू करें।
टूल रैपर पंजीकृत करने के लिए OpenClaw को अब SDK सहायक की आवश्यकता नहीं है।प्लेनटेक्स्ट चैनल एनवेलप -> BodyForAgent
प्लेनटेक्स्ट चैनल एनवेलप -> BodyForAgent
api.runtime.channel.reply.formatInboundEnvelope(...) (और इनबाउंड संदेश ऑब्जेक्ट पर
channelEnvelope फ़ील्ड)।नया: BodyForAgent और संरचित उपयोगकर्ता-संदर्भ ब्लॉक। चैनल
plugins रूटिंग मेटाडेटा (थ्रेड, विषय, प्रत्युत्तर-लक्ष्य, प्रतिक्रियाएँ) को
प्रॉम्प्ट स्ट्रिंग में जोड़ने के बजाय टाइप किए गए फ़ील्ड के रूप में संलग्न करते हैं।
formatAgentEnvelope(...) सहायक संश्लेषित
असिस्टेंट-सामना करने वाले एनवेलप के लिए अब भी समर्थित है, लेकिन इनबाउंड प्लेनटेक्स्ट एनवेलप हटाए
जा रहे हैं।प्रभावित क्षेत्र: inbound_claim, message_received, और ऐसा कोई भी कस्टम
चैनल Plugin जिसने पुराने एनवेलप टेक्स्ट को बाद में संसाधित किया था।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(...) केवल
बहिष्कृत संगतता सतहों के रूप में बने रहेंगे और 2026-08-30 के बाद हटा दिए
जाएँगे।प्रदाता खोज प्रकार -> प्रदाता कैटलॉग प्रकार
प्रदाता खोज प्रकार -> प्रदाता कैटलॉग प्रकार
ProviderCapabilities स्थिर संग्रह हटा दिए गए हैं।
प्रदाता plugins को स्थिर ऑब्जेक्ट के बजाय buildReplayPolicy,
normalizeToolSchemas, और wrapStreamFn जैसे स्पष्ट प्रदाता हुक
का उपयोग करना चाहिए।चिंतन नीति हुक -> resolveThinkingProfile
चिंतन नीति हुक -> resolveThinkingProfile
ProviderThinkingPolicy पर तीन अलग-अलग हुक):
isBinaryThinking(ctx), supportsXHighThinking(ctx), और
resolveDefaultThinkingLevel(ctx)।नया: एकल resolveThinkingProfile(ctx), जो कैनोनिकल id, वैकल्पिक label, और
रैंक की गई स्तर सूची वाला
ProviderThinkingProfile लौटाता है। OpenClaw पुराने संग्रहीत मानों को प्रोफ़ाइल रैंक के अनुसार
स्वचालित रूप से डाउनग्रेड करता है।संदर्भ में provider, modelId, वैकल्पिक मर्ज किया गया reasoning,
और वैकल्पिक मर्ज किए गए मॉडल के compat तथ्य शामिल होते हैं। प्रदाता plugins उन
कैटलॉग तथ्यों का उपयोग करके मॉडल-विशिष्ट प्रोफ़ाइल केवल तभी उजागर कर सकते हैं, जब कॉन्फ़िगर किया गया
अनुरोध अनुबंध उसका समर्थन करता हो।तीन के बजाय एक हुक लागू करें। विरासती हुक हटा दिए गए हैं।बाहरी प्रमाणीकरण प्रदाता -> contracts.externalAuthProviders
बाहरी प्रमाणीकरण प्रदाता -> contracts.externalAuthProviders
contracts.externalAuthProviders घोषित करें
और resolveExternalAuthProfiles(...) लागू करें।प्रदाता env-var लुकअप -> setup.providers[].envVars
प्रदाता env-var लुकअप -> setup.providers[].envVars
providerAuthEnvVars: { anthropic: ["ANTHROPIC_API_KEY"] }।नया: उसी env-var लुकअप को मेनिफ़ेस्ट पर setup.providers[].envVars
में भी प्रतिबिंबित करें। इससे सेटअप/स्थिति env मेटाडेटा एक स्थान पर समेकित होता है
और केवल env-var लुकअप का उत्तर देने के लिए 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 निरीक्षण गैर-बंडल उपयोग को संगतता
ऋण के रूप में रिपोर्ट करता है।कच्चे चैनल प्रेषण परिणाम -> OutboundDeliveryResult
कच्चे चैनल प्रेषण परिणाम -> OutboundDeliveryResult
ChannelSendRawResult के माध्यम से { ok, messageId, error } लौटाएँ
और उसे createRawChannelSendResultAdapter(...) से सामान्यीकृत करें।नया: OutboundDeliveryResult फ़ील्ड लौटाएँ और चैनल को
createAttachedChannelResultAdapter(...) से संलग्न करें। विफल प्रेषण को त्रुटि स्ट्रिंग
लौटाने के बजाय अपवाद फेंकना चाहिए। कच्चा परिणाम प्रकार अगले
Plugin-SDK प्रमुख रिलीज़ तक उपलब्ध रहेगा।सबएजेंट सत्र संदेश प्रकारों के नाम बदले गए
सबएजेंट सत्र संदेश प्रकारों के नाम बदले गए
src/plugins/runtime/types.ts से अब भी एक्सपोर्ट किए जाने वाले दो विरासती प्रकार उपनाम:readSession को
getSessionMessages के पक्ष में बहिष्कृत किया गया है। समान सिग्नेचर; पुरानी विधि
नई विधि को कॉल करती है।हटाए गए सत्र और ट्रांसक्रिप्ट फ़ाइल API
हटाए गए सत्र और ट्रांसक्रिप्ट फ़ाइल API
sessions.json स्टोर, JSONL ट्रांसक्रिप्ट पथ, या सत्र
फ़ाइलों की सूचियाँ उजागर करते थे। रनटाइम plugins को सक्रिय फ़ाइलें हल या परिवर्तित करने के बजाय
सत्र पहचान और SDK रनटाइम सहायकों का उपयोग करना चाहिए।v2026.7.1-beta.5 के साथ जारी आधिकारिक plugins ने ऊपर दिए गए चार
बहिष्कृत सहायक इंपोर्ट किए थे। openclaw/plugin-sdk/session-store-runtime
उस सटीक ब्रिज को 2026-10-12 तक बनाए रखता है; नए plugins को प्रतिस्थापनों का उपयोग करना होगा।
resolveStorePath(...) समर्थित SDK सहायक बना रहेगा और
इस बहिष्करण का भाग नहीं है।openclaw plugins inspect --all --runtime उन गैर-बंडल plugins की रिपोर्ट करता है जिनकी
लोड त्रुटियाँ या निदान अब भी इन हटाए गए फ़ाइल API का संदर्भ देते हैं। रिलीज़ से पहले
बाहरी पैकेज स्कैन द्वारा संपूर्ण-स्टोर सत्र सहायक,
सत्र फ़ाइल-पथ सहायक, विरासती ट्रांसक्रिप्ट फ़ाइल लक्ष्य, और निम्न-स्तरीय
ट्रांसक्रिप्ट सहायक भी चिह्नित किए जाएँ, इसके लिए @openclaw/plugin-inspector सलाहकारी स्वीप को संस्करण 0.3.17 या
उससे नया उपयोग करना होगा।runtime.tasks.flow -> runtime.tasks.managedFlows
runtime.tasks.flow -> runtime.tasks.managedFlows
runtime.tasks.flow (एकवचन) एक लाइव टास्क-फ़्लो
एक्सेसर लौटाता था।नया: runtime.tasks.managedFlows उन plugins के लिए प्रबंधित TaskFlow परिवर्तन
रनटाइम बनाए रखता है, जो किसी फ़्लो से चाइल्ड टास्क बनाते, अपडेट करते, रद्द करते या चलाते हैं।
जब Plugin को केवल DTO-आधारित रीड की आवश्यकता हो, तब runtime.tasks.flows का उपयोग करें।अंतर्निहित एक्सटेंशन फ़ैक्ट्रियाँ -> एजेंट टूल-परिणाम मिडलवेयर
अंतर्निहित एक्सटेंशन फ़ैक्ट्रियाँ -> एजेंट टूल-परिणाम मिडलवेयर
api.registerEmbeddedExtensionFactory(...) पथ को स्पष्ट रनटाइम सूची वाले
api.registerAgentToolResultMiddleware(...) से
contracts.agentToolResultMiddleware में प्रतिस्थापित किया गया है।OpenClawSchemaType उपनाम -> OpenClawConfig
OpenClawSchemaType उपनाम -> OpenClawConfig
OpenClawSchemaType रूट-SDK उपनाम हटा दिया गया था। प्रामाणिक
OpenClawConfig नाम का उपयोग करें।extensions/) को उनके अपने api.ts और runtime-api.ts
बैरल में ट्रैक किया जाता है। वे तृतीय-पक्ष Plugin अनुबंधों को प्रभावित नहीं करते
और यहाँ सूचीबद्ध नहीं हैं। यदि आप किसी बंडल किए गए Plugin के स्थानीय बैरल का
सीधे उपयोग करते हैं, तो अपग्रेड करने से पहले उस बैरल की अप्रचलन टिप्पणियाँ पढ़ें।Talk और रियलटाइम वॉइस माइग्रेशन
रियलटाइम वॉइस, टेलीफ़ोनी, मीटिंग और ब्राउज़र Talk कोड,openclaw/plugin-sdk/realtime-voice द्वारा
निर्यात किए गए एक Talk सेशन कंट्रोलर को साझा करते हैं। कंट्रोलर सामान्य Talk
इवेंट एनवेलप, सक्रिय टर्न स्थिति, कैप्चर स्थिति, आउटपुट-ऑडियो स्थिति, हालिया
इवेंट इतिहास और पुराने टर्न की अस्वीकृति का स्वामी है। प्रोवाइडर Plugins
वेंडर-विशिष्ट रियलटाइम सेशन के स्वामी हैं। ब्राउज़र-मीटिंग Plugins सेशन,
ब्राउज़र, ऑडियो, Node-होस्ट, एजेंट-परामर्श और वॉइस-कॉल तंत्र के लिए
openclaw/plugin-sdk/meeting-runtime का उपयोग करते हैं, फिर URL नियमों, DOM स्क्रिप्ट,
मैन्युअल-कार्रवाई मैपिंग, कैप्शन, निर्माण और डायल-इन योजनाओं के लिए
MeetingPlatformAdapter लागू करते हैं। प्लेटफ़ॉर्म REST API, OAuth, आर्टिफ़ैक्ट,
सेलेक्टर और वायर नाम Plugin में रहते हैं। ब्राउज़र अनुमति योजनाओं को अनुरोधित
मीटिंग URL मिलता है, ताकि प्रत्येक प्लेटफ़ॉर्म केवल अपने सटीक समर्थित ओरिजिन
की अनुमति दे सके। ब्राउज़र से प्रस्थान की पुष्टि होने के बाद सेशन रनटाइम को
प्लेटफ़ॉर्म-विशिष्ट लाइव स्वास्थ्य भी सामान्यीकृत करना होगा; ऐतिहासिक
ट्रांसक्रिप्ट फ़ील्ड बने रह सकते हैं, लेकिन निकलने के बाद कैप्शन और ऑडियो की
तत्परता सक्रिय नहीं रहनी चाहिए।
सभी बंडल किए गए सरफ़ेस साझा कंट्रोलर पर चलते हैं: ब्राउज़र रिले,
प्रबंधित-रूम हैंडऑफ़, वॉइस-कॉल रियलटाइम, वॉइस-कॉल स्ट्रीमिंग STT, Google
Meet रियलटाइम और नेटिव पुश-टू-टॉक। Gateway, hello-ok.features.events में एक लाइव
Talk इवेंट चैनल घोषित करता है: talk.event।
नए कोड को createTalkEventSequencer(...) को सीधे कॉल नहीं करना चाहिए, जब तक कि
निम्न-स्तरीय अडैप्टर या टेस्ट फ़िक्स्चर लागू न किया जा रहा हो। साझा कंट्रोलर
का उपयोग करें, ताकि टर्न आईडी के बिना टर्न-स्कोप्ड इवेंट उत्सर्जित न किए जा
सकें, पुराने turnEnd / turnCancel कॉल किसी नए सक्रिय टर्न
को साफ़ न कर सकें, और आउटपुट-ऑडियो जीवनचक्र इवेंट टेलीफ़ोनी, मीटिंग,
ब्राउज़र रिले, प्रबंधित-रूम हैंडऑफ़ और नेटिव Talk क्लाइंट में सुसंगत रहें।
सार्वजनिक API का स्वरूप:
talk.client.create का उपयोग करते हैं, क्योंकि ब्राउज़र प्रोवाइडर नेगोशिएशन और
मीडिया ट्रांसपोर्ट का स्वामी है, जबकि Gateway क्रेडेंशियल, निर्देश और टूल
नीति का स्वामी है। talk.session.* Gateway द्वारा प्रबंधित सामान्य सरफ़ेस
है, जिसका उपयोग Gateway-रिले रियलटाइम, Gateway-रिले ट्रांसक्रिप्शन और
प्रबंधित-रूम नेटिव STT/TTS सेशन के लिए होता है।
talk.provider / talk.providers के पास रियलटाइम सेलेक्टर रखने वाले
पुराने कॉन्फ़िग को openclaw doctor --fix से सुधारा जाना चाहिए; रनटाइम Talk,
स्पीच/TTS प्रोवाइडर कॉन्फ़िग को रियलटाइम प्रोवाइडर कॉन्फ़िग के रूप में फिर से
व्याख्यायित नहीं करता।
समर्थित talk.session.create संयोजन जानबूझकर सीमित हैं:
talk.realtime.* / talk.transcription.* / talk.handoff.* परिवारों
(सभी हटाए गए) से माइग्रेट करने वाले पाठकों के लिए मेथड मैप:
हटाने की समयरेखा
pnpm plugins:boundary-report चलाएँ।
चेतावनियों को अस्थायी रूप से दबाना
संबंधित
- शुरुआत करें - अपना पहला plugin बनाएँ
- SDK अवलोकन - संपूर्ण उपपथ इंपोर्ट संदर्भ
- चैनल Plugins - चैनल plugins बनाना
- प्रदाता Plugins - प्रदाता plugins बनाना
- Plugin की आंतरिक संरचना - आर्किटेक्चर का गहन विश्लेषण
- Plugin मैनिफ़ेस्ट - मैनिफ़ेस्ट स्कीमा संदर्भ