OpenClaw plugins में नए हैं? पैकेज संरचना और मैनिफ़ेस्ट सेटअप के लिए पहले
शुरुआत करना पढ़ें।
चरण-दर-चरण विवरण
1
पैकेज और मैनिफ़ेस्ट
चरण 1: पैकेज और मैनिफ़ेस्ट
setup.providers[].envVars आपके Plugin रनटाइम को लोड किए बिना OpenClaw को
क्रेडेंशियल्स का पता लगाने देता है। जब किसी प्रदाता वेरिएंट को किसी अन्य प्रदाता आईडी
के प्रमाणीकरण का पुनः उपयोग करना हो, तो providerAuthAliases जोड़ें। modelSupport
वैकल्पिक है और रनटाइम हुक उपलब्ध होने से पहले OpenClaw को
acme-large जैसे संक्षिप्त मॉडल आईडी से आपके प्रदाता Plugin को स्वतः लोड करने देता है।
package.json में openclaw.compat और openclaw.build ClawHub
पर प्रकाशित करने के लिए आवश्यक हैं (openclaw.compat.pluginApi और openclaw.build.openclawVersion
दो आवश्यक फ़ील्ड हैं; छोड़े जाने पर minGatewayVersion के लिए
openclaw.install.minHostVersion का उपयोग किया जाता है)।2
प्रदाता पंजीकृत करें
न्यूनतम टेक्स्ट प्रदाता को जब प्रदाता API अधिक समृद्ध मेटाडेटा लौटाता है और Plugin को पंक्तियों को स्वयं OpenClaw मॉडल
परिभाषाओं में प्रक्षेपित करना होता है, तब
id, label, auth और catalog की आवश्यकता होती है।
catalog प्रदाता के स्वामित्व वाला रनटाइम/कॉन्फ़िगरेशन हुक है; यह लाइव
विक्रेता API को कॉल कर सकता है और models.providers प्रविष्टियाँ लौटाता है।index.ts
registerModelCatalogProvider सूची/सहायता/चयनकर्ता UI के लिए नया कंट्रोल-प्लेन कैटलॉग
सरफ़ेस है, जो text, voice, image_generation,
video_generation और music_generation पंक्तियों को कवर करता है। विक्रेता एंडपॉइंट
कॉल और प्रतिक्रिया मैपिंग को Plugin में रखें; साझा पंक्ति
आकार, स्रोत लेबल और सहायता रेंडरिंग का स्वामित्व OpenClaw के पास है।यह एक कार्यशील प्रदाता है। उपयोगकर्ता अब
openclaw onboard --acme-ai-api-key <key> चला सकते हैं और अपने मॉडल के रूप में
acme-ai/acme-large चुन सकते हैं।लाइव मॉडल खोज
यदि आपका प्रदाता OpenAI-संगत/models API उपलब्ध कराता है, तो
एकल-प्रदाता सहायक को साझा खोज के लिए सक्षम करें:liveModelDiscovery: true निम्न व्यवहारों वाला एक सार्वजनिक Plugin SDK अनुबंध है:गैर-Bearer या गैर-मानक सूची एंडपॉइंट के लिए
true के बजाय विकल्प पास करें:endpointUrl का बिना शर्त वैकल्पिक होस्ट के रूप में उपयोग न करें। इसकी
requireBaseUrl जाँच उन प्रदाताओं के लिए क्रेडेंशियल-पृथक्करण सीमा है
जिनका मॉडल-सूची होस्ट उनके इन्फ़रेंस होस्ट से अलग होता है।यदि प्रदाता को सावधानीपूर्ण OpenAI-संगत प्रोजेक्शन के बजाय कस्टम मॉडल
अर्थ-विज्ञान की आवश्यकता है, तो उस प्रोजेक्शन को Plugin में रखें और साझा फ़ेच
जीवनचक्र के लिए openclaw/plugin-sdk/provider-catalog-live-runtime का उपयोग करें। सहायक आपको प्रदाता नीति को
OpenClaw कोर में रखे बिना सुरक्षित HTTP फ़ेच, प्रदाता-प्रमाणीकरण हेडर,
संरचित HTTP त्रुटियाँ, TTL कैशिंग और स्थिर फ़ॉलबैक व्यवहार देता है।जब लाइव API केवल यह बताता हो कि प्रदाता के स्वामित्व वाली स्थिर कैटलॉग
पंक्तियों में से कौन-सी वर्तमान में उपलब्ध हैं, तब buildLiveModelProviderConfig का उपयोग करें:index.ts
getCachedLiveProviderModelRows का उपयोग करें:index.ts
run को प्रमाणीकरण द्वारा नियंत्रित रहना चाहिए और कोई उपयोग योग्य क्रेडेंशियल
उपलब्ध न होने पर null लौटाना चाहिए। एक ऑफ़लाइन staticRun या स्थिर फ़ॉलबैक रखें, ताकि सेटअप, दस्तावेज़,
परीक्षण और चयनकर्ता सतहें लाइव नेटवर्क पहुँच पर निर्भर न हों। मॉडल-सूची की ताज़गी के लिए
उपयुक्त TTL का उपयोग करें, अनुरोध के समय फ़ाइल-सिस्टम पोलिंग से बचें,
और प्रदाता-विशिष्ट readRows / readModelId केवल तभी पास करें, जब
अपस्ट्रीम प्रतिक्रिया OpenAI-संगत { data: [{ id, object }] }
आकार में न हो।यदि अपस्ट्रीम प्रदाता OpenClaw से भिन्न नियंत्रण टोकन का उपयोग करता है, तो स्ट्रीम पथ को
बदलने के बजाय एक छोटा द्विदिश पाठ रूपांतरण जोड़ें:input परिवहन से पहले अंतिम सिस्टम प्रॉम्प्ट और पाठ संदेश की सामग्री को
पुनर्लिखता है। output OpenClaw द्वारा अपने नियंत्रण मार्कर पार्स करने या
चैनल पर भेजने से पहले सहायक के पाठ डेल्टा और अंतिम पाठ को पुनर्लिखता है।ऐसे बंडल किए गए प्रदाताओं के लिए, जो API-कुंजी प्रमाणीकरण के साथ केवल एक पाठ प्रदाता
और एकल कैटलॉग-समर्थित रनटाइम पंजीकृत करते हैं, अधिक सीमित
defineSingleProviderPluginEntry(...) हेल्पर को प्राथमिकता दें:buildProvider वह लाइव कैटलॉग पथ है जिसका उपयोग तब किया जाता है, जब OpenClaw वास्तविक
प्रदाता प्रमाणीकरण को हल कर सकता है। यह प्रदाता-विशिष्ट खोज कर सकता है। प्रमाणीकरण
कॉन्फ़िगर होने से पहले सुरक्षित रूप से दिखाई जा सकने वाली ऑफ़लाइन पंक्तियों के लिए ही
buildStaticProvider का उपयोग करें; इसे क्रेडेंशियल की आवश्यकता नहीं होनी चाहिए और न ही
नेटवर्क अनुरोध करने चाहिए। OpenClaw का models list --all प्रदर्शन वर्तमान में स्थिर कैटलॉग
केवल बंडल किए गए प्रदाता Plugin के लिए निष्पादित करता है, जिसमें कॉन्फ़िग और एन्वायरनमेंट
रिक्त होते हैं तथा कोई एजेंट/वर्कस्पेस पथ नहीं होता।यदि आपके प्रमाणीकरण प्रवाह को ऑनबोर्डिंग के दौरान models.providers.*, उपनाम और
एजेंट का डिफ़ॉल्ट मॉडल भी पैच करना है, तो
openclaw/plugin-sdk/provider-onboard के प्रीसेट हेल्पर का उपयोग करें। सबसे सीमित हेल्पर
createDefaultModelPresetAppliers(...),
createDefaultModelsPresetAppliers(...), और
createModelCatalogPresetAppliers(...) हैं।जब किसी प्रदाता का नेटिव एंडपॉइंट सामान्य openai-completions परिवहन पर स्ट्रीम किए गए
उपयोग ब्लॉक का समर्थन करता है, तो प्रदाता-id जाँच को हार्डकोड करने के बजाय
openclaw/plugin-sdk/provider-catalog-shared में साझा कैटलॉग हेल्पर को प्राथमिकता दें।
supportsNativeStreamingUsageCompat(...) और
applyProviderNativeStreamingUsageCompat(...) एंडपॉइंट क्षमता मानचित्र से समर्थन का पता लगाते हैं, इसलिए नेटिव
Moonshot/DashScope-शैली के एंडपॉइंट तब भी विकल्प चुनते हैं, जब कोई Plugin कस्टम प्रदाता id
का उपयोग कर रहा हो।ऊपर दिए गए लाइव खोज उदाहरण /models-शैली के प्रदाता API को समेटते हैं। उस खोज को
catalog.run के भीतर रखें, उपयोग योग्य प्रमाणीकरण द्वारा नियंत्रित करें, और ऑफ़लाइन
कैटलॉग निर्माण के लिए staticRun को नेटवर्क-मुक्त रखें।3
डायनेमिक मॉडल समाधान जोड़ें
यदि आपका प्रदाता मनमाने मॉडल ID स्वीकार करता है (जैसे प्रॉक्सी या राउटर),
तो यदि समाधान के लिए नेटवर्क कॉल आवश्यक है, तो असिंक्रोनस वार्म-अप हेतु
resolveDynamicModel जोड़ें:prepareDynamicModel का उपयोग करें—इसके पूर्ण होने के बाद resolveDynamicModel
फिर से चलता है।4
रनटाइम हुक जोड़ें (आवश्यकतानुसार)
अधिकांश प्रदाताओं को केवल वर्तमान में उपलब्ध रीप्ले परिवार:
catalog + resolveDynamicModel की आवश्यकता होती है।
आपके प्रदाता को आवश्यकता होने पर क्रमिक रूप से हुक जोड़ें।साझा हेल्पर बिल्डर अब सबसे सामान्य रीप्ले/टूल-संगतता
परिवारों को समेटते हैं, इसलिए Plugin को सामान्यतः प्रत्येक हुक को एक-एक करके स्वयं जोड़ने
की आवश्यकता नहीं होती:वर्तमान में उपलब्ध स्ट्रीम परिवार:
फ़ैमिली बिल्डर को शक्ति देने वाले SDK सीम
फ़ैमिली बिल्डर को शक्ति देने वाले SDK सीम
प्रत्येक फ़ैमिली बिल्डर उसी पैकेज से निर्यात किए गए निम्न-स्तरीय सार्वजनिक हेल्पर से बना है, जिनका उपयोग तब किया जा सकता है जब किसी प्रदाता को सामान्य पैटर्न से अलग जाना हो:
openclaw/plugin-sdk/provider-model-shared-ProviderReplayFamily,buildProviderReplayFamilyHooks(...), और रॉ रीप्ले बिल्डर (buildOpenAICompatibleReplayPolicy,buildAnthropicReplayPolicyForModel,buildGoogleGeminiReplayPolicy,buildHybridAnthropicOrOpenAIReplayPolicy)। Gemini रीप्ले हेल्पर (sanitizeGoogleGeminiReplayHistory,resolveTaggedReasoningOutputMode) और एंडपॉइंट/मॉडल हेल्पर (resolveProviderEndpoint,normalizeProviderId,normalizeGooglePreviewModelId) भी निर्यात करता है।openclaw/plugin-sdk/provider-stream-ProviderStreamFamily,buildProviderStreamFamilyHooks(...),composeProviderStreamWrappers(...), साथ ही साझा OpenAI/Codex रैपर (createOpenAIAttributionHeadersWrapper,createOpenAIFastModeWrapper,createOpenAIServiceTierWrapper,createOpenAIResponsesContextManagementWrapper,createCodexNativeWebSearchWrapper), DeepSeek V4 OpenAI-संगत रैपर (createDeepSeekV4OpenAICompatibleThinkingWrapper), Anthropic Messages थिंकिंग प्रीफ़िल क्लीनअप (createAnthropicThinkingPrefillPayloadWrapper), प्लेन-टेक्स्ट टूल-कॉल संगतता (createPlainTextToolCallCompatWrapper), और साझा प्रॉक्सी/प्रदाता रैपर (createOpenRouterWrapper,createToolStreamWrapper,createMinimaxFastModeWrapper)।openclaw/plugin-sdk/provider-stream-shared- हॉट प्रदाता पथों के लिए हल्के पेलोड और इवेंट रैपर, जिनमेंcreateOpenAICompatibleCompletionsThinkingOffWrapper,createPayloadPatchStreamWrapper,createPlainTextToolCallCompatWrapper,normalizeOpenAICompatibleReasoningPayload(...), औरsetQwenChatTemplateThinking(...)शामिल हैं।openclaw/plugin-sdk/provider-tools-ProviderToolCompatFamily,buildProviderToolCompatFamilyHooks("deepseek" | "gemini" | "openai"), और अंतर्निहित प्रदाता स्कीमा हेल्पर।
native
रीजनिंग आउटपुट का उपयोग करना चाहिए, ताकि OpenClaw
<think> / <final> प्रॉम्प्ट निर्देश जोड़े बिना नेटिव थॉट पार्ट का उपयोग कर सके। केवल-टेक्स्ट वाले Gemini CLI-शैली
बैकएंड, जो अंतिम JSON/टेक्स्ट प्रतिक्रिया को पार्स करते हैं, साझा
google-gemini टैग किए गए अनुबंध को बनाए रख सकते हैं।कुछ स्ट्रीम हेल्पर जानबूझकर प्रदाता-स्थानीय रहते हैं। @openclaw/anthropic-provider अपने सार्वजनिक api.ts / contract-api.ts सीम में wrapAnthropicProviderStream, resolveAnthropicBetas, resolveAnthropicFastMode, resolveAnthropicServiceTier, और निम्न-स्तरीय Anthropic रैपर बिल्डर रखता है, क्योंकि वे Claude OAuth बीटा हैंडलिंग और context1m गेटिंग को एन्कोड करते हैं। इसी तरह xAI Plugin नेटिव xAI Responses संरचना को अपने wrapStreamFn (/fast उपनाम, डिफ़ॉल्ट tool_stream, असमर्थित स्ट्रिक्ट-टूल क्लीनअप, xAI-विशिष्ट रीजनिंग-पेलोड निष्कासन) में रखता है।यही पैकेज-रूट पैटर्न @openclaw/openai-provider (प्रदाता बिल्डर, डिफ़ॉल्ट-मॉडल हेल्पर, रीयलटाइम प्रदाता बिल्डर) और @openclaw/openrouter-provider (प्रदाता बिल्डर तथा ऑनबोर्डिंग/कॉन्फ़िगरेशन हेल्पर) को भी आधार देता है।- टोकन एक्सचेंज
- कस्टम हेडर
- नेटिव ट्रांसपोर्ट पहचान
- उपयोग और बिलिंग
उन प्रदाताओं के लिए जिन्हें प्रत्येक इन्फ़रेंस कॉल से पहले टोकन एक्सचेंज की आवश्यकता होती है:
सामान्य प्रदाता हुक
सामान्य प्रदाता हुक
OpenClaw मॉडल/प्रदाता Plugins के लिए हुक को लगभग इसी क्रम में कॉल करता है।
अधिकांश प्रदाता केवल 2-3 का उपयोग करते हैं। यह संपूर्ण
ProviderPlugin
अनुबंध नहीं है—पूर्ण और वर्तमान में सटीक हुक सूची तथा फ़ॉलबैक टिप्पणियों के लिए आंतरिक संरचना: प्रदाता रनटाइम
हुक देखें।
केवल-संगतता वाले प्रदाता फ़ील्ड, जिन्हें OpenClaw अब कॉल नहीं करता, जैसे
ProviderPlugin.capabilities और suppressBuiltInModel, यहाँ
सूचीबद्ध नहीं हैं।रनटाइम फ़ॉलबैक टिप्पणियाँ:
normalizeConfigप्रत्येक provider id के लिए एक स्वामी plugin को निर्धारित करता है (पहले बंडल किए गए providers, फिर मेल खाने वाला runtime plugin) और केवल उसी hook को कॉल करता है—अन्य providers में कोई स्कैन नहीं होता। Google का अपनाnormalizeConfighook हीgoogle/google-vertex/google-antigravityconfig प्रविष्टियों को सामान्यीकृत करता है; यह कोई अलग core fallback नहीं है।resolveConfigApiKeyउपलब्ध होने पर provider hook का उपयोग करता है। Amazon Bedrock अपने provider plugin में AWS env-marker समाधान रखता है;auth: "aws-sdk"के साथ कॉन्फ़िगर किए जाने पर runtime auth अब भी AWS SDK की डिफ़ॉल्ट श्रृंखला का उपयोग करता है।resolveThinkingProfile(ctx)चयनितprovider,modelId, वैकल्पिक रूप से मर्ज किया गयाreasoningकैटलॉग संकेत और वैकल्पिक रूप से मर्ज किए गए मॉडल केcompatतथ्य प्राप्त करता है।compatका उपयोग केवल provider की thinking UI/profile चुनने के लिए करें।resolveSystemPromptContributionकिसी provider को एक मॉडल परिवार के लिए कैश-जागरूक system-prompt मार्गदर्शन इंजेक्ट करने देता है। जब व्यवहार किसी एक provider/model परिवार से संबंधित हो और स्थिर/गतिशील कैश विभाजन को बनाए रखना चाहिए, तब पुराने plugin-व्यापीbefore_prompt_buildhook के बजाय इसे प्राथमिकता दें।
5
अतिरिक्त क्षमताएँ जोड़ें (वैकल्पिक)
चरण 5: अतिरिक्त क्षमताएँ जोड़ें
एक provider plugin टेक्स्ट inference के साथ embeddings, speech, realtime transcription, realtime voice, media understanding, image generation, video generation, web fetch और web search पंजीकृत कर सकता है। OpenClaw इसे hybrid-capability plugin के रूप में वर्गीकृत करता है—कंपनी plugins के लिए अनुशंसित पैटर्न (प्रति vendor एक plugin)। देखें आंतरिक संरचना: क्षमता स्वामित्व।अपनी मौजूदाapi.registerProvider(...) कॉल के साथ register(api) के भीतर
प्रत्येक क्षमता पंजीकृत करें। केवल आवश्यक टैब चुनें:- स्पीच (TTS)
- रीयलटाइम ट्रांसक्रिप्शन
- रीयलटाइम वॉइस
- मीडिया समझ
- एम्बेडिंग्स
- इमेज और वीडियो जनरेशन
- वेब फ़ेच और खोज
assertOkOrThrowProviderError(...) का उपयोग करें, ताकि
plugins सीमित error-body रीड, JSON त्रुटि पार्सिंग और
request-id प्रत्यय साझा करें।6
परीक्षण
चरण 6: परीक्षण
src/provider.test.ts
ClawHub पर प्रकाशित करें
प्रदाता Plugins भी किसी अन्य बाहरी कोड Plugin की तरह ही प्रकाशित होते हैं:clawhub skill publish <path> किसी skill फ़ोल्डर को प्रकाशित करने के लिए एक अलग कमांड है,
Plugin पैकेज के लिए नहीं—यहाँ इसका उपयोग न करें।
फ़ाइल संरचना
कैटलॉग क्रम संदर्भ
catalog.order यह नियंत्रित करता है कि आपका कैटलॉग अंतर्निहित
प्रदाताओं के सापेक्ष कब मर्ज होता है:
अगले चरण
- चैनल Plugins - यदि आपका Plugin एक चैनल भी प्रदान करता है
- SDK रनटाइम -
api.runtimeसहायक (TTS, खोज, सबएजेंट) - SDK अवलोकन - संपूर्ण सबपाथ इम्पोर्ट संदर्भ
- Plugin आंतरिक संरचना - हुक विवरण और बंडल किए गए उदाहरण