Plugin SDK reference
Plugin मैनिफ़ेस्ट
यह पृष्ठ मूल OpenClaw Plugin मैनिफ़ेस्ट, openclaw.plugin.json, को कवर करता है। संगत बंडल लेआउट (Codex, Claude, Cursor) के लिए, Plugin बंडल देखें।
संगत बंडल प्रारूप इसके बजाय अपनी स्वयं की मैनिफ़ेस्ट फ़ाइलों का उपयोग करते हैं:
- Codex बंडल:
.codex-plugin/plugin.json - Claude बंडल:
.claude-plugin/plugin.json, या बिना मैनिफ़ेस्ट वाला डिफ़ॉल्ट Claude कंपोनेंट लेआउट - Cursor बंडल:
.cursor-plugin/plugin.json
OpenClaw उन लेआउट का स्वतः पता लगाता है, लेकिन नीचे दिए गए openclaw.plugin.json स्कीमा के अनुसार उन्हें सत्यापित नहीं करता। संगत बंडल के लिए, लेआउट के OpenClaw की रनटाइम अपेक्षाओं से मेल खाने पर OpenClaw बंडल मेटाडेटा, घोषित स्किल रूट, Claude कमांड रूट, Claude settings.json डिफ़ॉल्ट, Claude LSP डिफ़ॉल्ट और समर्थित हुक पैक पढ़ता है।
प्रत्येक मूल OpenClaw Plugin के Plugin रूट में openclaw.plugin.json होना अनिवार्य है। OpenClaw इसका उपयोग Plugin कोड निष्पादित किए बिना कॉन्फ़िगरेशन सत्यापित करने के लिए करता है। अनुपलब्ध या अमान्य मैनिफ़ेस्ट कॉन्फ़िगरेशन सत्यापन को रोक देता है और इसे Plugin त्रुटि माना जाता है।
संपूर्ण Plugin सिस्टम मार्गदर्शिका के लिए Plugin और मूल क्षमता मॉडल तथा मौजूदा बाहरी-संगतता मार्गदर्शन के लिए क्षमता मॉडल देखें।
यह फ़ाइल क्या करती है
openclaw.plugin.json वह मेटाडेटा है जिसे OpenClaw आपका Plugin कोड लोड करने से पहले पढ़ता है। इसमें मौजूद प्रत्येक चीज़ इतनी किफ़ायती होनी चाहिए कि Plugin रनटाइम बूट किए बिना उसका निरीक्षण किया जा सके।
इसका उपयोग इनके लिए करें:
- Plugin पहचान, कॉन्फ़िगरेशन सत्यापन और कॉन्फ़िगरेशन UI संकेत
- प्रमाणीकरण, ऑनबोर्डिंग और सेटअप मेटाडेटा (उपनाम, स्वतः-सक्षम करना, प्रदाता एनवायरनमेंट वेरिएबल, प्रमाणीकरण विकल्प)
- कंट्रोल-प्लेन सतहों के लिए सक्रियण संकेत
- संक्षिप्त मॉडल-फ़ैमिली स्वामित्व
- स्थिर क्षमता-स्वामित्व स्नैपशॉट (
contracts) - डैशबोर्ड विजेट डेटा बाइंडिंग और क्रिया शब्द
- स्थिर MCP सर्वर, जो Plugin सक्षम रहने के दौरान मौजूद होने चाहिए
- QA रनर मेटाडेटा, जिसका साझा
openclaw qaहोस्ट निरीक्षण कर सकता है - चैनल-विशिष्ट कॉन्फ़िगरेशन मेटाडेटा, जिसे कैटलॉग और सत्यापन सतहों में मर्ज किया जाता है
इसका उपयोग इनके लिए न करें: मूल रनटाइम हुक पंजीकृत करना, Plugin कोड एंट्रीपॉइंट घोषित करना या npm इंस्टॉल मेटाडेटा। ये आपके Plugin कोड और package.json में होने चाहिए।
न्यूनतम उदाहरण
{ "id": "voice-call", "configSchema": { "type": "object", "additionalProperties": false, "properties": {} }}विस्तृत उदाहरण
{ "id": "openrouter", "name": "OpenRouter", "description": "OpenRouter प्रदाता Plugin", "version": "1.0.0", "providers": ["openrouter"], "modelSupport": { "modelPrefixes": ["router-"] }, "modelIdNormalization": { "providers": { "openrouter": { "prefixWhenBare": "openrouter" } } }, "providerEndpoints": [ { "endpointClass": "openrouter", "hostSuffixes": ["openrouter.ai"] } ], "providerRequest": { "providers": { "openrouter": { "family": "openrouter" } } }, "cliBackends": ["openrouter-cli"], "syntheticAuthRefs": ["openrouter-cli"], "setup": { "providers": [ { "id": "openrouter", "envVars": ["OPENROUTER_API_KEY"] } ] }, "providerAuthAliases": { "openrouter-coding": "openrouter" }, "providerAuthChoices": [ { "provider": "openrouter", "method": "api-key", "choiceId": "openrouter-api-key", "choiceLabel": "OpenRouter API कुंजी", "groupId": "openrouter", "groupLabel": "OpenRouter", "optionKey": "openrouterApiKey", "cliFlag": "--openrouter-api-key", "cliOption": "--openrouter-api-key <key>", "cliDescription": "OpenRouter API कुंजी", "onboardingScopes": ["text-inference"] } ], "uiHints": { "apiKey": { "label": "API कुंजी", "placeholder": "sk-or-v1-...", "sensitive": true } }, "configSchema": { "type": "object", "additionalProperties": false, "properties": { "apiKey": { "type": "string" } } }}शीर्ष-स्तरीय फ़ील्ड संदर्भ
| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
id |
हाँ | string |
प्रामाणिक Plugin आईडी। यही आईडी plugins.entries.<id> में उपयोग की जाती है। |
configSchema |
हाँ | object |
इस Plugin के कॉन्फ़िगरेशन के लिए इनलाइन JSON Schema। |
requiresPlugins |
नहीं | string[] |
वे Plugin आईडी जिन्हें इस Plugin के प्रभावी होने के लिए भी इंस्टॉल करना आवश्यक है। खोज प्रक्रिया Plugin को लोड करने योग्य रखती है, लेकिन कोई आवश्यक Plugin अनुपस्थित होने पर चेतावनी देती है। |
enabledByDefault |
नहीं | true |
बंडल किए गए Plugin को डिफ़ॉल्ट रूप से सक्षम के रूप में चिह्नित करता है। Plugin को डिफ़ॉल्ट रूप से अक्षम रखने के लिए इसे छोड़ दें या कोई भी गैर-true मान सेट करें। |
enabledByDefaultOnPlatforms |
नहीं | string[] |
बंडल किए गए Plugin को केवल सूचीबद्ध Node.js प्लेटफ़ॉर्म पर डिफ़ॉल्ट रूप से सक्षम के रूप में चिह्नित करता है, उदाहरण के लिए ["darwin"]। स्पष्ट कॉन्फ़िगरेशन फिर भी प्राथमिकता पाता है। |
legacyPluginIds |
नहीं | string[] |
पुराने आईडी जो इस प्रामाणिक Plugin आईडी में सामान्यीकृत होते हैं। |
autoEnableWhenConfiguredProviders |
नहीं | string[] |
वे प्रदाता आईडी जिनका उल्लेख प्रमाणीकरण, कॉन्फ़िगरेशन या मॉडल संदर्भों में होने पर यह Plugin स्वतः सक्षम होना चाहिए। |
kind |
नहीं | PluginKind | PluginKind[] |
plugins.slots.* द्वारा उपयोग किए जाने वाले एक या अधिक अनन्य Plugin प्रकार ("memory", "context-engine") घोषित करता है। दोनों स्लॉट का स्वामी Plugin दोनों प्रकारों को एक ही ऐरे में घोषित करता है। |
channels |
नहीं | string[] |
इस Plugin के स्वामित्व वाली चैनल आईडी। खोज और कॉन्फ़िगरेशन सत्यापन के लिए उपयोग की जाती हैं। |
providers |
नहीं | string[] |
इस Plugin के स्वामित्व वाली प्रदाता आईडी। |
providerCatalogEntry |
नहीं | string |
Plugin रूट के सापेक्ष हल्के प्रदाता-कैटलॉग मॉड्यूल का पथ, मैनिफ़ेस्ट-स्कोप वाले प्रदाता कैटलॉग मेटाडेटा के लिए, जिसे पूर्ण Plugin रनटाइम सक्रिय किए बिना लोड किया जा सकता है। |
modelSupport |
नहीं | object |
रनटाइम से पहले Plugin को स्वतः लोड करने के लिए उपयोग किया जाने वाला मैनिफ़ेस्ट-स्वामित्व वाला संक्षिप्त मॉडल-परिवार मेटाडेटा। |
modelCatalog |
नहीं | object |
इस Plugin के स्वामित्व वाले प्रदाताओं के लिए घोषणात्मक मॉडल कैटलॉग मेटाडेटा। यह Plugin रनटाइम लोड किए बिना भविष्य की केवल-पठन सूची, ऑनबोर्डिंग, मॉडल चयनकर्ताओं, उपनामों और दमन के लिए नियंत्रण-प्लेन अनुबंध है। |
modelPricing |
नहीं | object |
प्रदाता-स्वामित्व वाली बाहरी मूल्य-खोज नीति। इसका उपयोग स्थानीय/स्व-होस्टेड प्रदाताओं को दूरस्थ मूल्य कैटलॉग से बाहर रखने या कोर में प्रदाता आईडी हार्डकोड किए बिना प्रदाता संदर्भों को OpenRouter/LiteLLM कैटलॉग आईडी से मैप करने के लिए करें। |
modelIdNormalization |
नहीं | object |
प्रदाता-स्वामित्व वाली मॉडल-आईडी उपनाम/उपसर्ग सफ़ाई, जिसे प्रदाता रनटाइम लोड होने से पहले चलना आवश्यक है। |
providerEndpoints |
नहीं | object[] |
प्रदाता रूट के लिए मैनिफ़ेस्ट-स्वामित्व वाला एंडपॉइंट होस्ट/baseUrl मेटाडेटा, जिसे कोर को प्रदाता रनटाइम लोड होने से पहले वर्गीकृत करना आवश्यक है। |
providerRequest |
नहीं | object |
प्रदाता रनटाइम लोड होने से पहले सामान्य अनुरोध नीति द्वारा उपयोग किया जाने वाला हल्का प्रदाता-परिवार और अनुरोध-संगतता मेटाडेटा। |
secretProviderIntegrations |
नहीं | Record<string, object> |
घोषणात्मक SecretRef exec प्रदाता प्रीसेट, जिन्हें सेटअप या इंस्टॉल सतहें कोर में प्रदाता-विशिष्ट एकीकरण हार्डकोड किए बिना प्रस्तुत कर सकती हैं। |
cliBackends |
नहीं | string[] |
इस Plugin के स्वामित्व वाली CLI अनुमान बैकएंड आईडी। स्पष्ट कॉन्फ़िगरेशन संदर्भों से स्टार्टअप पर स्वचालित सक्रियण के लिए उपयोग की जाती हैं। |
syntheticAuthRefs |
नहीं | string[] |
वे प्रदाता या CLI बैकएंड संदर्भ जिनके Plugin-स्वामित्व वाले कृत्रिम प्रमाणीकरण हुक की जाँच रनटाइम लोड होने से पहले कोल्ड मॉडल खोज के दौरान की जानी चाहिए। |
nonSecretAuthMarkers |
नहीं | string[] |
बंडल किए गए Plugin के स्वामित्व वाले प्लेसहोल्डर API कुंजी मान, जो गैर-गोपनीय स्थानीय, OAuth या परिवेशी क्रेडेंशियल स्थिति दर्शाते हैं। |
commandAliases |
नहीं | object[] |
इस Plugin के स्वामित्व वाले कमांड नाम, जिन्हें रनटाइम लोड होने से पहले Plugin-जागरूक कॉन्फ़िगरेशन और CLI निदान उत्पन्न करना चाहिए। |
providerUsageAuthEnvVars |
नहीं | Record<string, string[]> |
केवल उपयोग/बिलिंग के लिए प्रदाता क्रेडेंशियल। OpenClaw इन नामों का उपयोग उपयोग खोज और गोपनीय जानकारी हटाने के लिए करता है, लेकिन अनुमान प्रमाणीकरण के लिए कभी नहीं। |
providerAuthAliases |
नहीं | Record<string, string> |
वे प्रदाता आईडी जिन्हें प्रमाणीकरण खोज के लिए किसी अन्य प्रदाता आईडी का पुनः उपयोग करना चाहिए, उदाहरण के लिए ऐसा कोडिंग प्रदाता जो आधार प्रदाता की API कुंजी और प्रमाणीकरण प्रोफ़ाइल साझा करता है। |
providerAuthChoices |
नहीं | object[] |
ऑनबोर्डिंग चयनकर्ताओं, पसंदीदा-प्रदाता समाधान और सरल CLI फ़्लैग वायरिंग के लिए हल्का प्रमाणीकरण-विकल्प मेटाडेटा। |
activation |
नहीं | object |
स्टार्टअप, प्रदाता, कमांड, चैनल, रूट और क्षमता से ट्रिगर होने वाली लोडिंग के लिए हल्का सक्रियण योजनाकार मेटाडेटा। केवल मेटाडेटा; वास्तविक व्यवहार का स्वामी फिर भी Plugin रनटाइम है। |
setup |
नहीं | object |
हल्के सेटअप/ऑनबोर्डिंग वर्णनकर्ता, जिनका निरीक्षण खोज और सेटअप सतहें Plugin रनटाइम लोड किए बिना कर सकती हैं। |
qaRunners |
नहीं | object[] |
साझा openclaw qa होस्ट द्वारा Plugin रनटाइम लोड होने से पहले उपयोग किए जाने वाले हल्के QA रनर वर्णनकर्ता। |
dashboard |
नहीं | object |
डैशबोर्ड विजेट डेटा बाइंडिंग और क्रिया क्रियापद। प्रत्येक प्रविष्टि को इस Plugin द्वारा आवश्यक पठन या लेखन स्कोप के साथ पंजीकृत Gateway विधि के विरुद्ध सत्यापित किया जाता है। डैशबोर्ड संदर्भ देखें। |
mcpServers |
नहीं | Record<string, object> |
इस Plugin के सक्षम रहने के दौरान प्रदान की गई स्थिर MCP सर्वर परिभाषाएँ। सापेक्ष कमांड आर्ग्युमेंट और कार्यशील डायरेक्टरी Plugin रूट से रिज़ॉल्व होती हैं। ऑपरेटर की mcp.servers प्रविष्टियाँ समान नाम वाली परिभाषाओं को ओवरराइड या अक्षम करती हैं। MCP सर्वर संदर्भ देखें। |
contracts |
नहीं | object |
बाहरी प्रमाणीकरण हुक, एम्बेडिंग, वाक्, रीयलटाइम ट्रांसक्रिप्शन, रीयलटाइम वॉइस, मीडिया-समझ, छवि/वीडियो/संगीत जनरेशन, वेब फ़ेच, वेब खोज, वर्कर प्रदाताओं, दस्तावेज़/वेब-सामग्री निष्कर्षण और टूल स्वामित्व के लिए स्थिर क्षमता-स्वामित्व स्नैपशॉट। |
configContracts |
नहीं | object |
जेनेरिक कोर सहायकों द्वारा उपयोग किया जाने वाला मैनिफ़ेस्ट-स्वामित्व वाला कॉन्फ़िग व्यवहार: खतरनाक फ़्लैग की पहचान, SecretRef माइग्रेशन लक्ष्य और लीगेसी कॉन्फ़िग-पथ का संकुचन। configContracts संदर्भ देखें। |
mediaUnderstandingProviderMetadata |
नहीं | Record<string, object> |
contracts.mediaUnderstandingProviders में घोषित प्रदाता आईडी के लिए कम लागत वाले मीडिया-समझ डिफ़ॉल्ट। |
imageGenerationProviderMetadata |
नहीं | Record<string, object> |
contracts.imageGenerationProviders में घोषित प्रदाता आईडी के लिए कम लागत वाला छवि-जनरेशन प्रमाणीकरण मेटाडेटा, जिसमें प्रदाता-स्वामित्व वाले प्रमाणीकरण उपनाम और बेस-URL गार्ड शामिल हैं। |
videoGenerationProviderMetadata |
नहीं | Record<string, object> |
contracts.videoGenerationProviders में घोषित प्रदाता आईडी के लिए कम लागत वाला वीडियो-जनरेशन प्रमाणीकरण मेटाडेटा, जिसमें प्रदाता-स्वामित्व वाले प्रमाणीकरण उपनाम और बेस-URL गार्ड शामिल हैं। |
musicGenerationProviderMetadata |
नहीं | Record<string, object> |
contracts.musicGenerationProviders में घोषित प्रदाता आईडी के लिए कम लागत वाला संगीत-जनरेशन प्रमाणीकरण मेटाडेटा, जिसमें प्रदाता-स्वामित्व वाले प्रमाणीकरण उपनाम और बेस-URL गार्ड शामिल हैं। |
toolMetadata |
नहीं | Record<string, object> |
contracts.tools में घोषित Plugin-स्वामित्व वाले टूल के लिए कम लागत वाला उपलब्धता मेटाडेटा। इसका उपयोग तब करें, जब कॉन्फ़िग, परिवेश या प्रमाणीकरण का प्रमाण मौजूद न होने पर किसी टूल को रनटाइम लोड नहीं करना चाहिए। |
channelConfigs |
नहीं | Record<string, object> |
रनटाइम लोड होने से पहले खोज और सत्यापन सतहों में मर्ज किया गया मैनिफ़ेस्ट-स्वामित्व वाला चैनल कॉन्फ़िग मेटाडेटा। |
skills |
नहीं | string[] |
लोड की जाने वाली Skill डायरेक्टरी, जो Plugin रूट के सापेक्ष हैं। |
name |
नहीं | string |
मानव-पठनीय Plugin नाम। |
description |
नहीं | string |
Plugin सतहों पर दिखाया जाने वाला संक्षिप्त सारांश। |
catalog |
नहीं | object |
Plugin कैटलॉग सतहों के लिए वैकल्पिक प्रस्तुति संकेत। यह मेटाडेटा किसी Plugin को इंस्टॉल या सक्षम नहीं करता और न ही उसे विश्वसनीयता प्रदान करता है। |
icon |
नहीं | string |
मार्केटप्लेस/कैटलॉग कार्ड के लिए HTTPS छवि URL। ClawHub किसी भी मान्य https:// URL को स्वीकार करता है और इसे छोड़े जाने या अमान्य होने पर डिफ़ॉल्ट Plugin आइकन का उपयोग करता है। |
version |
नहीं | string |
जानकारी हेतु Plugin संस्करण। |
uiHints |
नहीं | Record<string, object> |
कॉन्फ़िग फ़ील्ड के लिए UI लेबल, प्लेसहोल्डर और संवेदनशीलता संकेत। |
MCP सर्वर संदर्भ
mcpServers किसी नेटिव Plugin को MCP App सहित MCP सर्वर प्रदान करने देता है, जिसके लिए ऑपरेटरों को openclaw.json में उसकी स्थिर प्रक्रिया परिभाषा दोहराने की आवश्यकता नहीं होती:
{ "mcpServers": { "example": { "transport": "stdio", "command": "node", "args": ["./mcp-server.js"] } }}OpenClaw इन सर्वरों को केवल तभी शामिल करता है, जब स्वामी Plugin सक्षम हो। सापेक्ष command, args, cwd, और workingDirectory पथ Plugin रूट से रिज़ॉल्व होते हैं। उपयोगकर्ता कॉन्फ़िगरेशन प्रामाणिक रहता है: mcp.servers.<name> किसी Plugin डिफ़ॉल्ट को बदल सकता है या उसे छोड़ने के लिए enabled: false सेट कर सकता है। MCP App रेंडरिंग और सर्वर-टूल कॉल के लिए अब भी सामान्य MCP Apps सेटिंग और प्रभावी टूल नीति आवश्यक हैं; सर्वर घोषित करने से इनमें से कोई भी सीमा बायपास नहीं होती।
डैशबोर्ड संदर्भ
dashboard किसी सक्षम Plugin को कोर में Plugin नीति जोड़े बिना, अनुमति-प्राप्त डैशबोर्ड विजेट के लिए मौजूदा Gateway RPC उपलब्ध कराने देता है। डेटा बाइंडिंग में उसी Plugin द्वारा operator.read के साथ पंजीकृत विधि का नाम होना चाहिए; एक्शन वर्ब में उसके द्वारा operator.write के साथ पंजीकृत विधि का नाम होना चाहिए। असंगति होने पर पंजीकरण के दौरान Plugin अस्वीकार कर दिया जाता है।
{ "dashboard": { "dataBindings": [ { "id": "items.list", "method": "example.items.list", "description": "उदाहरण आइटम सूचीबद्ध करें।" } ], "actionVerbs": [ { "id": "refresh", "method": "example.items.refresh", "description": "उदाहरण आइटम रीफ़्रेश करें।", "paramShape": { "type": "object", "additionalProperties": false, "properties": { "force": { "type": "boolean" } } } } ] }}मैनिफ़ेस्ट आईडी Plugin-स्थानीय होते हैं। विजेट अनुमतियाँ <plugin-id>.<id> का उपयोग करती हैं, जैसे example.items.list और example.refresh। स्थायी अनुमति नेमस्पेस को असंदिग्ध रखने के लिए, OpenClaw Plugin-आईडी खंड में % और . को %25 और %2E के रूप में एस्केप करता है; सामान्य Plugin आईडी अपना स्वाभाविक रूप बनाए रखते हैं। paramShape एक वैकल्पिक JSON Schema है, जिसे OpenClaw द्वारा Plugin RPC लागू करने से पहले एक्शन पैरामीटर ऑब्जेक्ट पर लागू किया जाता है।
कैटलॉग संदर्भ
catalog Plugin ब्राउज़र के लिए वैकल्पिक प्रदर्शन संकेत प्रदान करता है। होस्ट इन संकेतों को अनदेखा कर सकते हैं। ये कभी भी Plugin को इंस्टॉल या सक्षम नहीं करते, और न ही उसके रनटाइम व्यवहार या विश्वास स्तर को बदलते हैं।
{ "catalog": { "featured": true, "order": 10 }}| फ़ील्ड | प्रकार | इसका अर्थ |
|---|---|---|
featured |
boolean |
क्या कैटलॉग सतहों को इस Plugin को प्रमुखता देनी चाहिए। |
order |
number |
क्यूरेट किए गए Plugin के बीच आरोही प्रदर्शन संकेत; कम मान पहले दिखाई देते हैं। |
जनरेशन प्रदाता मेटाडेटा संदर्भ
जनरेशन प्रदाता मेटाडेटा फ़ील्ड संबद्ध contracts.*GenerationProviders सूची में घोषित प्रदाताओं के लिए स्थिर प्रमाणीकरण संकेतों का वर्णन करते हैं। OpenClaw इन फ़ील्ड को प्रदाता रनटाइम लोड होने से पहले पढ़ता है, ताकि कोर टूल प्रत्येक प्रदाता Plugin को आयात किए बिना यह तय कर सकें कि कोई जनरेशन प्रदाता उपलब्ध है या नहीं।
इन फ़ील्ड का उपयोग केवल कम लागत वाले, घोषणात्मक तथ्यों के लिए करें। ट्रांसपोर्ट, अनुरोध रूपांतरण, टोकन रीफ़्रेश, क्रेडेंशियल सत्यापन और वास्तविक जनरेशन व्यवहार Plugin रनटाइम में रहते हैं।
{ "contracts": { "imageGenerationProviders": ["example-image"] }, "imageGenerationProviderMetadata": { "example-image": { "aliases": ["example-image-oauth"], "authProviders": ["example-image"], "configSignals": [ { "rootPath": "plugins.entries.example-image.config", "overlayPath": "image", "mode": { "path": "mode", "default": "local", "allowed": ["local"] }, "requiredAny": ["workflow", "workflowPath"], "required": ["promptNodeId"] } ], "authSignals": [ { "provider": "example-image" }, { "provider": "example-image-oauth", "providerBaseUrl": { "provider": "example-image", "defaultBaseUrl": "https://api.example.com/v1", "allowedBaseUrls": ["https://api.example.com/v1"] } } ] } }}प्रत्येक मेटाडेटा प्रविष्टि में ये समर्थित हैं:
| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
aliases |
नहीं | string[] |
अतिरिक्त प्रदाता आईडी, जिन्हें जनरेशन प्रदाता के लिए स्थिर प्रमाणीकरण उपनामों के रूप में गिना जाना चाहिए। |
authProviders |
नहीं | string[] |
वे प्रदाता आईडी, जिनकी कॉन्फ़िगर की गई प्रमाणीकरण प्रोफ़ाइल को इस जनरेशन प्रदाता के लिए प्रमाणीकरण माना जाना चाहिए। |
configSignals |
नहीं | object[] |
स्थानीय या स्व-होस्टेड प्रदाताओं के लिए कम लागत वाले, केवल-कॉन्फ़िगरेशन उपलब्धता संकेत, जिन्हें प्रमाणीकरण प्रोफ़ाइल या एनवायरनमेंट वेरिएबल के बिना कॉन्फ़िगर किया जा सकता है। |
authSignals |
नहीं | object[] |
स्पष्ट प्रमाणीकरण संकेत। मौजूद होने पर ये प्रदाता आईडी, aliases, और authProviders से प्राप्त डिफ़ॉल्ट संकेत सेट को बदल देते हैं। |
referenceAudioInputs |
नहीं | boolean |
केवल वीडियो जनरेशन। जब प्रदाता संदर्भ ऑडियो एसेट स्वीकार करता हो, तो इसे true पर सेट करें; अन्यथा video_generate ऑडियो संदर्भ पैरामीटर छिपा देता है। |
प्रत्येक configSignals प्रविष्टि में ये समर्थित हैं:
| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
rootPath |
हाँ | string |
जाँचने के लिए Plugin-स्वामित्व वाले कॉन्फ़िगरेशन ऑब्जेक्ट का डॉट पथ, उदाहरण के लिए plugins.entries.example.config। |
overlayPath |
नहीं | string |
रूट कॉन्फ़िगरेशन के अंदर वह डॉट पथ, जिसका ऑब्जेक्ट संकेत का मूल्यांकन करने से पहले रूट ऑब्जेक्ट पर ओवरले होना चाहिए। इसका उपयोग क्षमता-विशिष्ट कॉन्फ़िगरेशन के लिए करें, जैसे image, video, या music। |
overlayMapPath |
नहीं | string |
रूट कॉन्फ़िगरेशन के अंदर वह डॉट पथ, जिसके प्रत्येक ऑब्जेक्ट मान को रूट ऑब्जेक्ट पर ओवरले होना चाहिए। इसका उपयोग accounts जैसे नामित अकाउंट मैप के लिए करें, जहाँ कोई भी कॉन्फ़िगर किया गया अकाउंट योग्य होना चाहिए। |
required |
नहीं | string[] |
प्रभावी कॉन्फ़िगरेशन के अंदर वे डॉट पथ, जिनमें कॉन्फ़िगर किए गए मान होना आवश्यक है। स्ट्रिंग खाली नहीं होनी चाहिए; ऑब्जेक्ट और ऐरे खाली नहीं होने चाहिए। |
requiredAny |
नहीं | string[] |
प्रभावी कॉन्फ़िगरेशन के अंदर वे डॉट पथ, जिनमें से कम-से-कम एक में कॉन्फ़िगर किया गया मान होना आवश्यक है। |
mode |
नहीं | object |
प्रभावी कॉन्फ़िगरेशन के अंदर वैकल्पिक स्ट्रिंग मोड गार्ड। इसका उपयोग तब करें, जब केवल-कॉन्फ़िगरेशन उपलब्धता केवल एक मोड पर लागू होती हो। |
प्रत्येक mode गार्ड में ये समर्थित हैं:
| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
path |
नहीं | string |
प्रभावी कॉन्फ़िगरेशन के अंदर डॉट पथ। डिफ़ॉल्ट रूप से mode। |
default |
नहीं | string |
कॉन्फ़िगरेशन में पथ न होने पर उपयोग किया जाने वाला मोड मान। |
allowed |
नहीं | string[] |
मौजूद होने पर संकेत केवल तभी सफल होता है, जब प्रभावी मोड इनमें से किसी एक मान के बराबर हो। |
disallowed |
नहीं | string[] |
मौजूद होने पर संकेत तब विफल होता है, जब प्रभावी मोड इनमें से किसी एक मान के बराबर हो। |
प्रत्येक authSignals प्रविष्टि में ये समर्थित हैं:
| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
provider |
हाँ | string |
कॉन्फ़िगर की गई प्रमाणीकरण प्रोफ़ाइल में जाँचने के लिए प्रदाता आईडी। |
providerBaseUrl |
नहीं | object |
वैकल्पिक गार्ड, जो संकेत को केवल तभी गिनता है, जब संदर्भित कॉन्फ़िगर किया गया प्रदाता किसी अनुमत बेस URL का उपयोग करता हो। इसका उपयोग तब करें, जब कोई प्रमाणीकरण उपनाम केवल कुछ API के लिए मान्य हो। |
प्रत्येक providerBaseUrl गार्ड में ये समर्थित हैं:
| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
provider |
हाँ | string |
वह प्रदाता कॉन्फ़िगरेशन आईडी, जिसके baseUrl की जाँच की जानी चाहिए। |
defaultBaseUrl |
नहीं | string |
प्रदाता कॉन्फ़िगरेशन में baseUrl न होने पर माने जाने वाला बेस URL। |
allowedBaseUrls |
हाँ | string[] |
इस प्रमाणीकरण संकेत के लिए अनुमत बेस URL। कॉन्फ़िगर किया गया या डिफ़ॉल्ट बेस URL इन सामान्यीकृत मानों में से किसी से मेल न खाने पर संकेत अनदेखा कर दिया जाता है। |
टूल मेटाडेटा संदर्भ
toolMetadata टूल नाम के अनुसार कुंजीबद्ध, जनरेशन प्रदाता मेटाडेटा के समान configSignals और authSignals आकारों का उपयोग करता है। contracts.tools स्वामित्व घोषित करता है। toolMetadata कम लागत वाला उपलब्धता प्रमाण घोषित करता है, ताकि केवल उसकी टूल फ़ैक्ट्री से null लौटवाने के लिए OpenClaw को Plugin रनटाइम आयात न करना पड़े।
{ "setup": { "providers": [ { "id": "example", "envVars": ["EXAMPLE_API_KEY"] } ] }, "contracts": { "tools": ["example_search"] }, "toolMetadata": { "example_search": { "authSignals": [ { "provider": "example" } ], "configSignals": [ { "rootPath": "plugins.entries.example.config", "overlayPath": "search", "required": ["apiKey"] } ] } }}toolMetadata प्रविष्टियाँ साझा किए गए उपरोक्त configSignals/authSignals फ़ील्ड के अतिरिक्त optional (टूल को Plugin सक्रियण के लिए अनिवार्य नहीं चिह्नित करता है) और replaySafe (अपूर्ण मॉडल टर्न के बाद टूल निष्पादन को दोहराने के लिए सुरक्षित चिह्नित करता है) भी स्वीकार करती हैं।
यदि किसी टूल में toolMetadata नहीं है, तो OpenClaw मौजूदा व्यवहार बनाए रखता है और टूल अनुबंध के नीति से मेल खाने पर स्वामी Plugin को लोड करता है। उन हॉट-पाथ टूल के लिए जिनकी फ़ैक्टरी प्रमाणीकरण/कॉन्फ़िगरेशन पर निर्भर है, Plugin लेखकों को पूछने के लिए कोर से रनटाइम आयात कराने के बजाय toolMetadata घोषित करना चाहिए।
providerAuthChoices संदर्भ
प्रत्येक providerAuthChoices प्रविष्टि एक ऑनबोर्डिंग या प्रमाणीकरण विकल्प का वर्णन करती है। OpenClaw इसे प्रदाता रनटाइम लोड होने से पहले पढ़ता है। प्रदाता सेटअप सूचियाँ प्रदाता रनटाइम लोड किए बिना इन मैनिफ़ेस्ट विकल्पों, डिस्क्रिप्टर से प्राप्त सेटअप विकल्पों और इंस्टॉल-कैटलॉग मेटाडेटा का उपयोग करती हैं।
| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
provider |
हाँ | string |
वह प्रदाता आईडी जिससे यह विकल्प संबंधित है। |
method |
हाँ | string |
वह प्रमाणीकरण विधि आईडी जिस पर डिस्पैच करना है। |
choiceId |
हाँ | string |
ऑनबोर्डिंग और CLI प्रवाहों द्वारा उपयोग की जाने वाली स्थिर प्रमाणीकरण-विकल्प आईडी। |
choiceLabel |
नहीं | string |
उपयोगकर्ता को दिखाई देने वाला लेबल। इसे छोड़ने पर OpenClaw choiceId का उपयोग करता है। |
choiceHint |
नहीं | string |
चयनकर्ता के लिए संक्षिप्त सहायक पाठ। |
icon |
नहीं | HTTPS URL | समर्थित ऑनबोर्डिंग क्लाइंट में इस विकल्प के बगल में दिखाई जाने वाली कलाकृति। |
website |
नहीं | HTTPS URL | समर्थित ऑनबोर्डिंग क्लाइंट द्वारा दिखाई जाने वाली उत्पाद, साइन-इन या इंस्टॉलेशन पृष्ठ। |
assistantPriority |
नहीं | number |
सहायक-संचालित इंटरैक्टिव चयनकर्ताओं में कम मान पहले क्रमबद्ध होते हैं। |
assistantVisibility |
नहीं | "visible" | "manual-only" |
मैन्युअल CLI चयन की अनुमति बनाए रखते हुए विकल्प को सहायक चयनकर्ताओं से छिपाएँ। |
deprecatedChoiceIds |
नहीं | string[] |
पुराने विकल्प आईडी जिन्हें उपयोगकर्ताओं को इस प्रतिस्थापन विकल्प पर पुनर्निर्देशित करना चाहिए। |
groupId |
नहीं | string |
संबंधित विकल्पों को समूहित करने के लिए वैकल्पिक समूह आईडी। |
groupLabel |
नहीं | string |
उस समूह के लिए उपयोगकर्ता को दिखाई देने वाला लेबल। |
groupHint |
नहीं | string |
समूह के लिए संक्षिप्त सहायक पाठ। |
onboardingFeatured |
नहीं | boolean |
इंटरैक्टिव ऑनबोर्डिंग चयनकर्ता में "More..." प्रविष्टि से पहले इस समूह को फ़ीचर्ड स्तर में दिखाएँ। |
optionKey |
नहीं | string |
सरल एक-फ़्लैग प्रमाणीकरण प्रवाहों के लिए आंतरिक विकल्प कुंजी। |
cliFlag |
नहीं | string |
CLI फ़्लैग नाम, जैसे --openrouter-api-key। |
cliOption |
नहीं | string |
पूर्ण CLI विकल्प स्वरूप, जैसे --openrouter-api-key <key>। |
cliDescription |
नहीं | string |
CLI सहायता में उपयोग किया जाने वाला विवरण। |
appGuidedSecret |
नहीं | boolean |
ऐप-निर्देशित सेटअप के लिए चिपकाया गया एक सीक्रेट और प्रदाता डिफ़ॉल्ट पर्याप्त हैं। |
appGuidedDiscovery |
नहीं | boolean |
मेल खाने वाली रनटाइम प्रमाणीकरण विधि appGuidedSetup के माध्यम से केवल-पढ़ने योग्य स्थानीय खोज की स्वामी है। |
appGuidedAuth |
नहीं | "oauth" | "device-code" |
प्रदाता-स्वामित्व वाला इंटरैक्टिव लॉगिन जिसे नेटिव सेटअप क्लाइंट सामान्य रूप से रेंडर कर सकते हैं। |
onboardingScopes |
नहीं | Array<"text-inference" | "image-generation" | "music-generation"> |
यह विकल्प किन ऑनबोर्डिंग सतहों में दिखाई देना चाहिए। इसे छोड़ने पर यह ["text-inference"] पर डिफ़ॉल्ट होता है। |
जब appGuidedDiscovery सत्य हो, तो मेल खाने वाली प्रदाता प्रमाणीकरण विधि को
appGuidedSetup.detect और appGuidedSetup.prepare उपलब्ध कराने होंगे। पहचान
केवल-पढ़ने योग्य होनी चाहिए: कोई लॉगिन, मॉडल पुल, डाउनलोड या कॉन्फ़िगरेशन लेखन नहीं। तैयारी
चुने गए सटीक मॉडल की दोबारा जाँच करती है और एक कॉन्फ़िगरेशन प्रस्ताव लौटाती है; OpenClaw उस
प्रस्ताव का अलगाव में लाइव परीक्षण करता है और सफलता के बाद ही उसे कमिट करता है।
commandAliases संदर्भ
जब कोई Plugin ऐसे रनटाइम कमांड नाम का स्वामी हो जिसे उपयोगकर्ता गलती से plugins.allow में रख सकते हैं या रूट CLI कमांड के रूप में चलाने का प्रयास कर सकते हैं, तब commandAliases का उपयोग करें। OpenClaw निदान के लिए Plugin रनटाइम कोड आयात किए बिना इस मेटाडेटा का उपयोग करता है।
{ "commandAliases": [ { "name": "dreaming", "kind": "runtime-slash", "cliCommand": "memory" } ]}| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
name |
हाँ | string |
वह कमांड नाम जो इस Plugin से संबंधित है। |
kind |
नहीं | "runtime-slash" |
उपनाम को रूट CLI कमांड के बजाय चैट स्लैश कमांड के रूप में चिह्नित करता है। |
cliCommand |
नहीं | string |
CLI संचालनों के लिए सुझाया जाने वाला संबंधित रूट CLI कमांड, यदि कोई हो। |
activation संदर्भ
जब Plugin कम लागत में यह घोषित कर सकता हो कि किन नियंत्रण-प्लेन इवेंट में उसे सक्रियण/लोड योजना में शामिल करना चाहिए, तब activation का उपयोग करें।
यह ब्लॉक प्लानर मेटाडेटा है, लाइफ़साइकल API नहीं। यह रनटाइम व्यवहार पंजीकृत नहीं करता, register(...) को प्रतिस्थापित नहीं करता और यह वादा नहीं करता कि Plugin कोड पहले ही निष्पादित हो चुका है। सक्रियण प्लानर मौजूदा मैनिफ़ेस्ट स्वामित्व मेटाडेटा, जैसे providers, channels, commandAliases, setup.providers, contracts.tools और हुक पर वापस जाने से पहले उम्मीदवार Plugin को सीमित करने के लिए इन फ़ील्ड का उपयोग करता है।
उस सबसे संकीर्ण मेटाडेटा को प्राथमिकता दें जो पहले से स्वामित्व का वर्णन करता है। जब providers, channels, commandAliases, सेटअप डिस्क्रिप्टर या contracts संबंध को व्यक्त करते हों, तब उनका उपयोग करें। उन अतिरिक्त प्लानर संकेतों के लिए activation का उपयोग करें जिन्हें उन स्वामित्व फ़ील्ड द्वारा दर्शाया नहीं जा सकता। claude-cli, my-cli या google-gemini-cli जैसे CLI रनटाइम उपनामों के लिए शीर्ष-स्तरीय cliBackends का उपयोग करें; activation.onAgentHarnesses केवल उन एम्बेडेड एजेंट हार्नेस आईडी के लिए है जिनके पास पहले से कोई स्वामित्व फ़ील्ड नहीं है।
प्रत्येक Plugin को activation.onStartup जानबूझकर सेट करना चाहिए। इसे केवल तभी true पर सेट करें जब Plugin को Gateway स्टार्टअप के दौरान चलना अनिवार्य हो। जब Plugin स्टार्टअप पर निष्क्रिय हो और केवल अधिक संकीर्ण ट्रिगर से लोड होना चाहिए, तब इसे false पर सेट करें। onStartup को छोड़ने पर अब Plugin स्टार्टअप पर निहित रूप से लोड नहीं होता; स्टार्टअप, चैनल, कॉन्फ़िगरेशन, एजेंट हार्नेस, मेमोरी या अन्य अधिक संकीर्ण सक्रियण ट्रिगर के लिए स्पष्ट सक्रियण मेटाडेटा का उपयोग करें।
{ "activation": { "onStartup": false, "onProviders": ["openai"], "onCommands": ["models"], "onChannels": ["web"], "onRoutes": ["gateway-webhook"], "onConfigPaths": ["browser"], "onCapabilities": ["provider", "tool"] }}| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
onStartup |
नहीं | boolean |
स्पष्ट Gateway स्टार्टअप सक्रियण। प्रत्येक Plugin को इसे सेट करना चाहिए। true स्टार्टअप के दौरान Plugin को इंपोर्ट करता है; false इसे स्टार्टअप पर लेज़ी रखता है, जब तक कि किसी अन्य मेल खाने वाले ट्रिगर के कारण इसे लोड करना आवश्यक न हो। |
onProviders |
नहीं | string[] |
वे प्रोवाइडर आईडी, जिन्हें सक्रियण/लोड योजनाओं में इस Plugin को शामिल करना चाहिए। |
onAgentHarnesses |
नहीं | string[] |
एम्बेडेड एजेंट हार्नेस रनटाइम आईडी, जिन्हें सक्रियण/लोड योजनाओं में इस Plugin को शामिल करना चाहिए। CLI बैकएंड उपनामों के लिए शीर्ष-स्तरीय cliBackends का उपयोग करें। |
onCommands |
नहीं | string[] |
वे कमांड आईडी, जिन्हें सक्रियण/लोड योजनाओं में इस Plugin को शामिल करना चाहिए। |
onChannels |
नहीं | string[] |
वे चैनल आईडी, जिन्हें सक्रियण/लोड योजनाओं में इस Plugin को शामिल करना चाहिए। |
onRoutes |
नहीं | string[] |
वे रूट प्रकार, जिन्हें सक्रियण/लोड योजनाओं में इस Plugin को शामिल करना चाहिए। |
onConfigPaths |
नहीं | string[] |
रूट-सापेक्ष कॉन्फ़िगरेशन पथ, जिन्हें पथ मौजूद होने और स्पष्ट रूप से अक्षम न किए जाने पर स्टार्टअप/लोड योजनाओं में इस Plugin को शामिल करना चाहिए। |
onCapabilities |
नहीं | Array<"provider" | "channel" | "tool" | "hook"> |
कंट्रोल-प्लेन सक्रियण योजना में उपयोग किए जाने वाले व्यापक क्षमता संकेत। संभव होने पर अधिक विशिष्ट फ़ील्ड को प्राथमिकता दें। |
वर्तमान सक्रिय उपभोक्ता:
- Gateway स्टार्टअप योजना स्पष्ट स्टार्टअप इंपोर्ट के लिए
activation.onStartupका उपयोग करती है। - कमांड-ट्रिगर की गई CLI योजना पुराने
commandAliases[].cliCommandयाcommandAliases[].nameपर फ़ॉलबैक करती है। - एजेंट-रनटाइम स्टार्टअप योजना एम्बेडेड हार्नेस के लिए
activation.onAgentHarnessesऔर CLI रनटाइम उपनामों के लिए शीर्ष-स्तरीयcliBackends[]का उपयोग करती है। - स्पष्ट चैनल सक्रियण मेटाडेटा अनुपलब्ध होने पर चैनल-ट्रिगर की गई सेटअप/चैनल योजना पुराने
channels[]स्वामित्व पर फ़ॉलबैक करती है। - स्टार्टअप Plugin योजना बंडल किए गए ब्राउज़र Plugin के
browserब्लॉक जैसे गैर-चैनल रूट कॉन्फ़िगरेशन सतहों के लिएactivation.onConfigPathsका उपयोग करती है। - स्पष्ट प्रोवाइडर सक्रियण मेटाडेटा अनुपलब्ध होने पर प्रोवाइडर-ट्रिगर की गई सेटअप/रनटाइम योजना पुराने
providers[]और शीर्ष-स्तरीयcliBackends[]स्वामित्व पर फ़ॉलबैक करती है।
प्लानर डायग्नोस्टिक्स स्पष्ट सक्रियण संकेतों को मैनिफ़ेस्ट स्वामित्व फ़ॉलबैक से अलग कर सकते हैं। उदाहरण के लिए, activation-command-hint का अर्थ है कि activation.onCommands मेल खाता है, जबकि manifest-command-alias का अर्थ है कि प्लानर ने इसके बजाय commandAliases स्वामित्व का उपयोग किया। ये कारण लेबल होस्ट डायग्नोस्टिक्स और परीक्षणों के लिए हैं; Plugin लेखकों को उस मेटाडेटा की घोषणा जारी रखनी चाहिए जो स्वामित्व का सर्वोत्तम वर्णन करता है।
qaRunners संदर्भ
जब कोई Plugin साझा openclaw qa रूट के अंतर्गत एक या अधिक ट्रांसपोर्ट रनर प्रदान करता है, तब qaRunners का उपयोग करें। इस मेटाडेटा को सस्ता और स्थिर रखें; Plugin
रनटाइम अब भी एक हल्की
runtime-api.ts सतह के माध्यम से वास्तविक CLI पंजीकरण का स्वामी होता है, जो मेल खाने वाले qaRunnerCliRegistrations निर्यात करती है। एक
वैकल्पिक adapterFactory पंजीकृत कमांड के रनर को बदले बिना
ट्रांसपोर्ट को साझा QA परिदृश्यों के लिए उपलब्ध कराता है।
{ "qaRunners": [ { "commandName": "matrix", "description": "डिस्पोज़ेबल होमसर्वर के विरुद्ध Docker-समर्थित Matrix लाइव QA लेन चलाएँ" } ]}| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
commandName |
हाँ | string |
openclaw qa के अंतर्गत माउंट किया गया सबकमांड, उदाहरण के लिए matrix। |
description |
नहीं | string |
साझा होस्ट को स्टब कमांड की आवश्यकता होने पर उपयोग किया जाने वाला फ़ॉलबैक सहायता टेक्स्ट। |
adapterFactory आईडी का commandName से मेल खाना आवश्यक है। मैनिफ़ेस्ट में अनुपस्थित
कमांड के लिए पंजीकरण निर्यात न करें।
setup संदर्भ
जब सेटअप और ऑनबोर्डिंग सतहों को रनटाइम लोड होने से पहले सस्ते Plugin-स्वामित्व वाले मेटाडेटा की आवश्यकता हो, तब setup का उपयोग करें।
{ "setup": { "providers": [ { "id": "openai", "authMethods": ["api-key"], "envVars": ["OPENAI_API_KEY"], "authEvidence": [ { "type": "local-file-with-env", "fileEnvVar": "OPENAI_CREDENTIALS_FILE", "requiresAllEnv": ["OPENAI_PROJECT"], "credentialMarker": "openai-local-credentials", "source": "openai स्थानीय क्रेडेंशियल" } ] } ], "cliBackends": ["openai-cli"], "configMigrations": ["legacy-openai-auth"], "requiresRuntime": false }}शीर्ष-स्तरीय cliBackends वैध रहता है और CLI अनुमान बैकएंड का वर्णन करना जारी रखता है। setup.cliBackends कंट्रोल-प्लेन/सेटअप प्रवाहों के लिए सेटअप-विशिष्ट डिस्क्रिप्टर सतह है, जिसे केवल-मेटाडेटा रहना चाहिए।
मौजूद होने पर, setup.providers और setup.cliBackends सेटअप खोज के लिए पसंदीदा डिस्क्रिप्टर-प्रथम लुकअप सतह हैं। यदि डिस्क्रिप्टर केवल उम्मीदवार Plugin को सीमित करता है और सेटअप को अब भी अधिक समृद्ध सेटअप-समय रनटाइम हुक की आवश्यकता है, तो requiresRuntime: true सेट करें और फ़ॉलबैक निष्पादन पथ के रूप में setup-api को बनाए रखें।
OpenClaw सामान्य प्रोवाइडर प्रमाणीकरण और एन्वायरनमेंट-वेरिएबल लुकअप में setup.providers[].envVars को शामिल करता है। सेटअप और स्थिति का एन्वायरनमेंट मेटाडेटा वहाँ रखें।
जब किसी बिलिंग या संगठन-स्तरीय क्रेडेंशियल को अनुमान क्रेडेंशियल बने बिना resolveUsageAuth सक्रिय करना हो, तब providerUsageAuthEnvVars का उपयोग करें। ये नाम वर्कस्पेस dotenv ब्लॉकिंग, ACP चाइल्ड-प्रोसेस स्ट्रिपिंग, सैंडबॉक्स सीक्रेट फ़िल्टरिंग और व्यापक सीक्रेट स्क्रबिंग में जुड़ते हैं। प्रोवाइडर रनटाइम अब भी resolveUsageAuth के भीतर मान को पढ़ता और वर्गीकृत करता है।
जब कोई सेटअप प्रविष्टि उपलब्ध न हो, या जब setup.requiresRuntime: false यह घोषित करे कि सेटअप रनटाइम अनावश्यक है, तब OpenClaw setup.providers[].authMethods से सरल सेटअप विकल्प भी प्राप्त कर सकता है। कस्टम लेबल, CLI फ़्लैग, ऑनबोर्डिंग दायरे और असिस्टेंट मेटाडेटा के लिए स्पष्ट providerAuthChoices प्रविष्टियों को प्राथमिकता मिलती है।
requiresRuntime: false केवल तभी सेट करें, जब वे डिस्क्रिप्टर सेटअप सतह के लिए पर्याप्त हों। OpenClaw स्पष्ट false को केवल-डिस्क्रिप्टर अनुबंध मानता है और सेटअप लुकअप के लिए setup-api या openclaw.setupEntry निष्पादित नहीं करेगा। यदि कोई केवल-डिस्क्रिप्टर Plugin फिर भी उन सेटअप रनटाइम प्रविष्टियों में से किसी एक को शिप करता है, तो OpenClaw एक योगात्मक डायग्नोस्टिक रिपोर्ट करता है और उसे अनदेखा करना जारी रखता है। requiresRuntime को छोड़ देने पर पुराना फ़ॉलबैक व्यवहार बना रहता है, ताकि फ़्लैग के बिना डिस्क्रिप्टर जोड़ने वाले मौजूदा Plugin न टूटें।
चूँकि सेटअप लुकअप Plugin-स्वामित्व वाला setup-api कोड निष्पादित कर सकता है, सामान्यीकृत setup.providers[].id और setup.cliBackends[] मानों को खोजे गए सभी Plugin में अद्वितीय रहना आवश्यक है। अस्पष्ट स्वामित्व खोज क्रम से विजेता चुनने के बजाय बंद होकर विफल होता है।
जब सेटअप रनटाइम निष्पादित होता है, तब सेटअप रजिस्ट्री डायग्नोस्टिक्स डिस्क्रिप्टर विचलन की रिपोर्ट करते हैं, यदि setup-api ऐसे प्रोवाइडर या CLI बैकएंड को पंजीकृत करता है जिसे मैनिफ़ेस्ट डिस्क्रिप्टर घोषित नहीं करते, या यदि किसी डिस्क्रिप्टर के लिए कोई मेल खाता रनटाइम पंजीकरण नहीं है। ये डायग्नोस्टिक्स योगात्मक हैं और पुराने Plugin को अस्वीकार नहीं करते।
setup.providers संदर्भ
| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
id |
हाँ | string |
सेटअप या ऑनबोर्डिंग के दौरान प्रदर्शित प्रोवाइडर आईडी। सामान्यीकृत आईडी को वैश्विक रूप से अद्वितीय रखें। |
authMethods |
नहीं | string[] |
वे सेटअप/प्रमाणीकरण विधि आईडी, जिनका यह प्रोवाइडर पूर्ण रनटाइम लोड किए बिना समर्थन करता है। |
envVars |
नहीं | string[] |
वे एन्वायरनमेंट वेरिएबल, जिन्हें सामान्य सेटअप/स्थिति सतहें Plugin रनटाइम लोड होने से पहले जाँच सकती हैं। |
authEvidence |
नहीं | object[] |
उन प्रोवाइडर के लिए सस्ती स्थानीय प्रमाणीकरण प्रमाण जाँच, जो गैर-सीक्रेट मार्कर के माध्यम से प्रमाणित कर सकते हैं। |
authEvidence प्रोवाइडर-स्वामित्व वाले स्थानीय क्रेडेंशियल मार्कर के लिए है, जिन्हें रनटाइम कोड लोड किए बिना सत्यापित किया जा सकता है। इन जाँचों को सस्ता और स्थानीय रहना आवश्यक है: कोई नेटवर्क कॉल नहीं, कोई कीचेन या सीक्रेट-मैनेजर रीड नहीं, कोई शेल कमांड नहीं और कोई प्रोवाइडर API प्रोब नहीं।
समर्थित प्रमाण प्रविष्टियाँ:
| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
type |
हाँ | string |
वर्तमान में local-file-with-env। |
fileEnvVar |
नहीं | string |
स्पष्ट क्रेडेंशियल फ़ाइल पथ वाला एन्वायरनमेंट वेरिएबल। |
fallbackPaths |
नहीं | string[] |
fileEnvVar के अनुपस्थित या रिक्त होने पर जाँचे जाने वाले स्थानीय क्रेडेंशियल फ़ाइल पथ। ${HOME} और ${APPDATA} का समर्थन करता है। |
requiresAnyEnv |
नहीं | string[] |
प्रमाण के वैध होने से पहले सूचीबद्ध एन्वायरनमेंट वेरिएबल में से कम-से-कम एक गैर-रिक्त होना आवश्यक है। |
requiresAllEnv |
नहीं | string[] |
प्रमाण के वैध होने से पहले प्रत्येक सूचीबद्ध एन्वायरनमेंट वेरिएबल का गैर-रिक्त होना आवश्यक है। |
credentialMarker |
हाँ | string |
प्रमाण मौजूद होने पर लौटाया गया गैर-सीक्रेट मार्कर। |
source |
नहीं | string |
प्रमाणीकरण/स्थिति आउटपुट के लिए उपयोगकर्ता-दृश्य स्रोत लेबल। |
setup फ़ील्ड
| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
providers |
नहीं | object[] |
सेटअप और ऑनबोर्डिंग के दौरान उपलब्ध कराए गए प्रदाता सेटअप विवरणक। |
cliBackends |
नहीं | string[] |
विवरणक-प्रथम सेटअप लुकअप के लिए उपयोग की जाने वाली सेटअप-समय बैकएंड आईडी। सामान्यीकृत आईडी को वैश्विक रूप से अद्वितीय रखें। |
configMigrations |
नहीं | string[] |
इस Plugin की सेटअप सतह के स्वामित्व वाली कॉन्फ़िग माइग्रेशन आईडी। |
requiresRuntime |
नहीं | boolean |
क्या विवरणक लुकअप के बाद भी सेटअप को setup-api निष्पादन की आवश्यकता है। |
uiHints संदर्भ
uiHints कॉन्फ़िग फ़ील्ड नामों से छोटे रेंडरिंग संकेतों तक का एक मैप है। नेस्टेड कॉन्फ़िग फ़ील्ड के लिए कुंजियों में डॉट का उपयोग किया जा सकता है, लेकिन कोई भी पथ खंड __proto__, constructor, या prototype नहीं हो सकता; सेटअप इन नामों को अस्वीकार करता है।
{ "uiHints": { "apiKey": { "label": "API कुंजी", "help": "OpenRouter अनुरोधों के लिए उपयोग किया जाता है", "placeholder": "sk-or-v1-...", "sensitive": true } }}प्रत्येक फ़ील्ड संकेत में ये शामिल हो सकते हैं:
| फ़ील्ड | प्रकार | इसका अर्थ |
|---|---|---|
label |
string |
उपयोगकर्ता को दिखाई देने वाला फ़ील्ड लेबल। |
help |
string |
संक्षिप्त सहायक टेक्स्ट। |
tags |
string[] |
वैकल्पिक UI टैग। |
advanced |
boolean |
फ़ील्ड को उन्नत के रूप में चिह्नित करता है। |
sensitive |
boolean |
फ़ील्ड को गुप्त या संवेदनशील के रूप में चिह्नित करता है। |
placeholder |
string |
फ़ॉर्म इनपुट के लिए प्लेसहोल्डर टेक्स्ट। |
presentation |
"phone-number" |
पार्स किए जा सकने वाले अंतरराष्ट्रीय (+...) मानों के लिए केवल-प्रदर्शन स्थानीयकृत फ़ोन प्रारूपण; मूल मान अपरिवर्तित रहते हैं। |
contracts संदर्भ
contracts का उपयोग केवल स्थिर क्षमता-स्वामित्व मेटाडेटा के लिए करें, जिसे OpenClaw Plugin रनटाइम आयात किए बिना पढ़ सके।
{ "contracts": { "agentToolResultMiddleware": ["openclaw", "codex"], "trustedToolPolicies": ["workflow-budget"], "externalAuthProviders": ["acme-ai"], "embeddingProviders": ["openai-compatible"], "speechProviders": ["openai"], "realtimeTranscriptionProviders": ["openai"], "realtimeVoiceProviders": ["openai"], "memoryEmbeddingProviders": ["local"], "mediaUnderstandingProviders": ["openai"], "imageGenerationProviders": ["openai"], "videoGenerationProviders": ["qwen"], "musicGenerationProviders": ["stability-audio"], "documentExtractors": ["example-docs"], "webContentExtractors": ["firecrawl"], "webFetchProviders": ["firecrawl"], "webSearchProviders": ["gemini"], "workerProviders": ["example-worker"], "usageProviders": ["acme-ai"], "migrationProviders": ["hermes"], "gatewayMethodDispatch": ["authenticated-request"], "tools": ["firecrawl_search", "firecrawl_scrape"] }}प्रत्येक सूची वैकल्पिक है:
| फ़ील्ड | प्रकार | इसका अर्थ |
|---|---|---|
embeddedExtensionFactories |
string[] |
Codex ऐप-सर्वर एक्सटेंशन फ़ैक्टरी आईडी, वर्तमान में codex-app-server। |
agentToolResultMiddleware |
string[] |
वे रनटाइम आईडी जिनके लिए यह Plugin टूल-परिणाम मिडलवेयर पंजीकृत कर सकता है। |
trustedToolPolicies |
string[] |
Plugin-स्थानीय विश्वसनीय प्री-टूल नीति आईडी, जिन्हें कोई इंस्टॉल किया गया Plugin पंजीकृत कर सकता है। बंडल किए गए Plugin इस फ़ील्ड के बिना नीतियाँ पंजीकृत कर सकते हैं। |
externalAuthProviders |
string[] |
वे प्रदाता आईडी जिनके बाहरी प्रमाणीकरण प्रोफ़ाइल हुक का स्वामित्व इस Plugin के पास है। |
embeddingProviders |
string[] |
पुनः उपयोग योग्य वेक्टर एम्बेडिंग उपयोग, जिसमें मेमोरी भी शामिल है, के लिए इस Plugin के स्वामित्व वाली सामान्य एम्बेडिंग प्रदाता आईडी। |
speechProviders |
string[] |
इस Plugin के स्वामित्व वाली वाक् प्रदाता आईडी। |
realtimeTranscriptionProviders |
string[] |
इस Plugin के स्वामित्व वाली रीयलटाइम-ट्रांसक्रिप्शन प्रदाता आईडी। |
realtimeVoiceProviders |
string[] |
इस Plugin के स्वामित्व वाली रीयलटाइम-वॉइस प्रदाता आईडी। |
memoryEmbeddingProviders |
string[] |
इस Plugin के स्वामित्व वाली अप्रचलित मेमोरी-विशिष्ट एम्बेडिंग प्रदाता आईडी। |
mediaUnderstandingProviders |
string[] |
इस Plugin के स्वामित्व वाली मीडिया-समझ प्रदाता आईडी। |
transcriptSourceProviders |
string[] |
इस Plugin के स्वामित्व वाली ट्रांसक्रिप्ट स्रोत प्रदाता आईडी। |
documentExtractors |
string[] |
इस Plugin के स्वामित्व वाली दस्तावेज़ (उदाहरण के लिए PDF) निष्कर्षक प्रदाता आईडी। |
imageGenerationProviders |
string[] |
इस Plugin के स्वामित्व वाली छवि-जनरेशन प्रदाता आईडी। |
videoGenerationProviders |
string[] |
इस Plugin के स्वामित्व वाली वीडियो-जनरेशन प्रदाता आईडी। |
musicGenerationProviders |
string[] |
इस Plugin के स्वामित्व वाली संगीत-जनरेशन प्रदाता आईडी। |
webContentExtractors |
string[] |
इस Plugin के स्वामित्व वाली वेब-पेज सामग्री-निष्कर्षण प्रदाता आईडी। |
webFetchProviders |
string[] |
इस Plugin के स्वामित्व वाली वेब-फ़ेच प्रदाता आईडी। |
webSearchProviders |
string[] |
इस Plugin के स्वामित्व वाली वेब-सर्च प्रदाता आईडी। |
workerProviders |
string[] |
प्रावधान और प्रोफ़ाइल-समर्थित लीज़ जीवनचक्र के लिए इस Plugin के स्वामित्व वाली क्लाउड-वर्कर प्रदाता आईडी। |
usageProviders |
string[] |
वे प्रदाता आईडी जिनके उपयोग-प्रमाणीकरण और उपयोग-स्नैपशॉट हुक का स्वामित्व इस Plugin के पास है। |
migrationProviders |
string[] |
openclaw migrate के लिए इस Plugin के स्वामित्व वाली आयात प्रदाता आईडी। |
gatewayMethodDispatch |
string[] |
प्रमाणीकृत Plugin HTTP रूट के लिए आरक्षित अधिकार, जो प्रक्रिया के भीतर Gateway विधियाँ डिस्पैच करते हैं। |
tools |
string[] |
इस Plugin के स्वामित्व वाले एजेंट टूल नाम। |
contracts.embeddedExtensionFactories को केवल बंडल किए गए Codex ऐप-सर्वर एक्सटेंशन फ़ैक्टरी के लिए रखा गया है। इसके बजाय बंडल किए गए टूल-परिणाम रूपांतरणों को contracts.agentToolResultMiddleware घोषित करना और api.registerAgentToolResultMiddleware(...) के साथ पंजीकृत करना चाहिए। इंस्टॉल किए गए Plugin केवल स्पष्ट रूप से सक्षम होने पर और केवल उन रनटाइम के लिए समान मिडलवेयर सीम का उपयोग कर सकते हैं, जिन्हें वे contracts.agentToolResultMiddleware में घोषित करते हैं।
जिन इंस्टॉल किए गए Plugin को होस्ट-विश्वसनीय प्री-टूल नीति स्तर की आवश्यकता है, उन्हें प्रत्येक पंजीकृत स्थानीय आईडी को contracts.trustedToolPolicies में घोषित करना और स्पष्ट रूप से सक्षम होना चाहिए। बंडल किए गए Plugin मौजूदा विश्वसनीय-नीति पथ बनाए रखते हैं, लेकिन अघोषित नीति आईडी वाले इंस्टॉल किए गए Plugin पंजीकरण से पहले अस्वीकार कर दिए जाते हैं। नीति आईडी पंजीकरण करने वाले Plugin के दायरे में होती हैं, इसलिए दो Plugin दोनों workflow-budget को घोषित और पंजीकृत कर सकते हैं; कोई एकल Plugin समान स्थानीय आईडी को दो बार पंजीकृत नहीं कर सकता।
रनटाइम api.registerTool(...) पंजीकरणों का contracts.tools से मेल खाना आवश्यक है। टूल खोज इस सूची का उपयोग केवल उन Plugin रनटाइम को लोड करने के लिए करती है, जो अनुरोधित टूल के स्वामी हो सकते हैं।
resolveExternalAuthProfiles लागू करने वाले प्रदाता Plugin को contracts.externalAuthProviders घोषित करना चाहिए; अघोषित बाहरी-प्रमाणीकरण हुक अनदेखे किए जाते हैं।
resolveUsageAuth और fetchUsageSnapshot दोनों लागू करने वाले प्रदाता Plugin को प्रत्येक स्वतः खोजी गई प्रदाता आईडी को contracts.usageProviders में घोषित करना चाहिए। उपयोग खोज रनटाइम कोड लोड करने से पहले इस अनुबंध को पढ़ती है, फिर केवल घोषित स्वामियों को लोड करने के बाद दोनों हुक सत्यापित करती है।
सामान्य एम्बेडिंग प्रदाताओं को api.registerEmbeddingProvider(...) के साथ पंजीकृत प्रत्येक अडैप्टर के लिए contracts.embeddingProviders घोषित करना चाहिए। मेमोरी खोज द्वारा उपयोग किए जाने वाले प्रदाताओं सहित पुनः उपयोग योग्य वेक्टर जनरेशन के लिए सामान्य अनुबंध का उपयोग करें। contracts.memoryEmbeddingProviders अप्रचलित मेमोरी-विशिष्ट संगतता है और केवल तब तक रहता है, जब तक मौजूदा प्रदाता सामान्य एम्बेडिंग प्रदाता सीम पर माइग्रेट नहीं हो जाते।
वर्कर प्रदाताओं को प्रत्येक api.registerWorkerProvider(...) आईडी को contracts.workerProviders में घोषित करना होगा। कोर provision को कॉल करने से पहले स्थायी आशय सहेजता है; प्रदाता बाहरी आवंटन से पहले अपनी सेटिंग सत्यापित करते हैं, और समान ऑपरेशन आईडी वाले दोहराए गए कॉल को समान लीज़ अपनानी होगी। कोर उस सत्यापित सेटिंग स्नैपशॉट को भी सहेजता है और नामित प्रोफ़ाइल बदले या हटाए जाने के बाद भी उसे leaseId के साथ inspect({ leaseId, profile }) और destroy({ leaseId, profile }) को भेजता है। विनाश आइडेम्पोटेंट है, निरीक्षण बंद active / destroyed / unknown स्थिति यूनियन लौटाता है, और SSH निजी-कुंजी सामग्री को केवल SecretRef के माध्यम से संदर्भित किया जाता है। प्रावधान किए गए SSH एंडपॉइंट में विश्वसनीय प्रावधान आउटपुट से एक सार्वजनिक hostKey भी ठीक algorithm base64 के रूप में शामिल होना चाहिए, बिना होस्टनाम या टिप्पणी के, ताकि कोर कनेक्ट होने से पहले होस्ट को पिन कर सके। गतिशील पहचान संदर्भ जारी करने वाले प्रदाता प्रामाणिक resolveSshIdentity({ leaseId, profile, keyRef }) लागू कर सकते हैं; इसके बिना प्रदाता कोर के सामान्य सीक्रेट रिज़ॉल्वर का उपयोग करते हैं। एक प्रामाणिक unknown सक्रिय स्थानीय रिकॉर्ड को अनाथ कर देता है; स्थायी विनाश अनुरोध के बाद यह विघटन की पुष्टि करता है।
contracts.gatewayMethodDispatch वर्तमान में "authenticated-request" स्वीकार करता है। यह उन नेटिव Plugin HTTP रूटों के लिए एक API स्वच्छता गेट है जो जानबूझकर Gateway कंट्रोल-प्लेन विधियों को इन-प्रोसेस डिस्पैच करते हैं, दुर्भावनापूर्ण नेटिव Plugins के विरुद्ध सैंडबॉक्स नहीं। इसका उपयोग केवल कड़ी समीक्षा वाले बंडल किए गए/ऑपरेटर सरफ़ेसों के लिए करें, जिन्हें पहले से Gateway HTTP प्रमाणीकरण की आवश्यकता होती है। Gateway रूट-वर्क प्रवेश बंद होने पर भी कोई अधिकार-प्राप्त रूट केवल तभी पहुँच योग्य रहता है, जब वह auth: "gateway" और रूट-विशिष्ट gatewayRuntimeScopeSurface: "trusted-operator" भी घोषित करता है; उसी Plugin के सामान्य सहोदर रूट प्रवेश सीमा के पीछे बने रहते हैं। इससे पूरे Plugin को प्रवेश बायपास दिए बिना निलंबन स्थिति और पुनः आरंभ तक पहुँच बनी रहती है। पार्सिंग और प्रतिक्रिया संरचना को डिस्पैच के बाहर सीमित रखें; महत्वपूर्ण या परिवर्तनकारी कार्य Gateway विधि डिस्पैच से होकर जाना चाहिए, जो प्रवेश और स्कोप प्रवर्तन का स्वामी है।
configContracts संदर्भ
मैनिफ़ेस्ट-स्वामित्व वाले उस कॉन्फ़िग व्यवहार के लिए configContracts का उपयोग करें, जिसकी सामान्य कोर सहायकों को Plugin रनटाइम आयात किए बिना आवश्यकता होती है: खतरनाक फ़्लैग की पहचान, SecretRef माइग्रेशन लक्ष्य और पुराने कॉन्फ़िग-पथ का संकुचन।
{ "configContracts": { "compatibilityMigrationPaths": ["legacyProvider"], "compatibilityRuntimePaths": ["legacyProvider.webhook"], "dangerousFlags": [ { "path": "accounts.*.allowUnverifiedSenders", "equals": true } ], "secretInputs": { "bundledDefaultEnabled": false, "paths": [ { "path": "routes.*.secret", "expected": "string", "ownerKind": "route" } ] } }}| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
compatibilityMigrationPaths |
नहीं | string[] |
रूट-सापेक्ष कॉन्फ़िग पथ, जो संकेत देते हैं कि इस Plugin के सेटअप-समय संगतता माइग्रेशन लागू हो सकते हैं। जब कॉन्फ़िग में Plugin का कोई संदर्भ न हो, तो सामान्य रनटाइम कॉन्फ़िग रीड को प्रत्येक Plugin सेटअप सरफ़ेस छोड़ने देता है। |
compatibilityRuntimePaths |
नहीं | string[] |
रूट-सापेक्ष संगतता पथ, जिन्हें यह Plugin, Plugin कोड पूरी तरह सक्रिय होने से पहले रनटाइम के दौरान संभाल सकता है। इसका उपयोग उन पुराने सरफ़ेसों के लिए करें, जिन्हें प्रत्येक संगत Plugin रनटाइम आयात किए बिना बंडल किए गए प्रत्याशी समूहों को सीमित करना चाहिए। |
dangerousFlags |
नहीं | object[] |
वे कॉन्फ़िग लिटरल, जिन्हें सक्षम होने पर openclaw doctor को असुरक्षित या खतरनाक के रूप में चिह्नित करना चाहिए। नीचे देखें। |
secretInputs |
नहीं | object |
SecretRef माइग्रेशन, ऑडिट, स्टार्टअप मैटेरियलाइज़ेशन और वैकल्पिक रनटाइम स्वामी पृथक्करण के लिए plugins.entries.<id>.config के अंतर्गत कॉन्फ़िग पथ। नीचे देखें। |
प्रत्येक dangerousFlags प्रविष्टि इसका समर्थन करती है:
| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
path |
हाँ | string |
plugins.entries.<id>.config के सापेक्ष डॉट से अलग किया गया कॉन्फ़िग पथ। मैप/ऐरे खंडों के लिए * वाइल्डकार्ड का समर्थन करता है। |
equals |
हाँ | string | number | boolean | null |
सटीक लिटरल, जो इस कॉन्फ़िग मान को खतरनाक के रूप में चिह्नित करता है। |
secretInputs इसका समर्थन करता है:
| फ़ील्ड | आवश्यक | प्रकार | इसका अर्थ |
|---|---|---|---|
bundledDefaultEnabled |
नहीं | boolean |
यह तय करते समय कि यह SecretRef सरफ़ेस सक्रिय है या नहीं, बंडल किए गए Plugin की डिफ़ॉल्ट सक्षमता को ओवरराइड करें। इसका उपयोग तब करें, जब Plugin बंडल किया गया हो, लेकिन कॉन्फ़िग में स्पष्ट रूप से सक्षम किए जाने तक सरफ़ेस निष्क्रिय रहना चाहिए। |
paths |
हाँ | object[] |
सीक्रेट-रूपी कॉन्फ़िग पथ, प्रत्येक में path (डॉट से अलग किया गया, plugins.entries.<id>.config के सापेक्ष, * वाइल्डकार्ड समर्थित), वैकल्पिक expected (वर्तमान में केवल "string") और वैकल्पिक ownerKind (वर्तमान में केवल "route")। रिज़ॉल्यूशन विफल होने पर घोषित स्वामी केवल उसी सटीक मेल खाने वाले पथ को पृथक करता है; उसका स्वामी आईडी पूर्ण कॉन्फ़िग पथ होता है। |
mediaUnderstandingProviderMetadata संदर्भ
जब किसी मीडिया-समझ प्रदाता के पास डिफ़ॉल्ट मॉडल, स्वचालित प्रमाणीकरण फ़ॉलबैक प्राथमिकता या नेटिव दस्तावेज़ समर्थन हो, जिसकी सामान्य कोर सहायकों को रनटाइम लोड होने से पहले आवश्यकता होती है, तब mediaUnderstandingProviderMetadata का उपयोग करें। कुंजियाँ contracts.mediaUnderstandingProviders में भी घोषित होनी चाहिए।
{ "contracts": { "mediaUnderstandingProviders": ["example"] }, "mediaUnderstandingProviderMetadata": { "example": { "capabilities": ["image", "audio"], "defaultModels": { "image": "example-vision-latest", "audio": "example-transcribe-latest" }, "autoPriority": { "image": 40 }, "nativeDocumentInputs": ["pdf"], "documentModels": { "pdf": { "textExtraction": "example-doc-text-latest", "image": "example-doc-vision-latest" } } } }}प्रत्येक प्रदाता प्रविष्टि में ये शामिल हो सकते हैं:
| फ़ील्ड | प्रकार | इसका अर्थ |
|---|---|---|
capabilities |
("image" | "audio" | "video")[] |
इस प्रदाता द्वारा उपलब्ध कराई गई मीडिया क्षमताएँ। |
defaultModels |
Record<string, string> |
जब कॉन्फ़िग कोई मॉडल निर्दिष्ट नहीं करता, तब उपयोग किए जाने वाले क्षमता-से-मॉडल डिफ़ॉल्ट। |
autoPriority |
Record<string, number> |
स्वचालित क्रेडेंशियल-आधारित प्रदाता फ़ॉलबैक के लिए छोटी संख्याएँ पहले क्रमबद्ध होती हैं। |
nativeDocumentInputs |
"pdf"[] |
प्रदाता द्वारा समर्थित नेटिव दस्तावेज़ इनपुट। |
documentModels |
{ pdf?: { textExtraction?: string; image?: string | false } } |
प्रति-दस्तावेज़-प्रकार मॉडल ओवरराइड। उस दस्तावेज़ प्रकार के लिए छवि-आधारित निष्कर्षण अक्षम करने हेतु image: false सेट करें। |
channelConfigs संदर्भ
जब किसी चैनल Plugin को रनटाइम लोड होने से पहले कम लागत वाले कॉन्फ़िग मेटाडेटा की आवश्यकता हो, तब channelConfigs का उपयोग करें। जब कोई सेटअप प्रविष्टि उपलब्ध न हो, या जब setup.requiresRuntime: false सेटअप रनटाइम को अनावश्यक घोषित करे, तब केवल-पढ़ने योग्य चैनल सेटअप/स्थिति खोज कॉन्फ़िगर किए गए बाहरी चैनलों के लिए सीधे इस मेटाडेटा का उपयोग कर सकती है।
channelConfigs Plugin मैनिफ़ेस्ट मेटाडेटा है, कोई नया शीर्ष-स्तरीय उपयोगकर्ता कॉन्फ़िग अनुभाग नहीं। उपयोगकर्ता अब भी चैनल इंस्टेंस को channels.<channel-id> के अंतर्गत कॉन्फ़िगर करते हैं। Plugin रनटाइम कोड निष्पादित होने से पहले, OpenClaw यह तय करने के लिए मैनिफ़ेस्ट मेटाडेटा पढ़ता है कि उस कॉन्फ़िगर किए गए चैनल का स्वामी कौन-सा Plugin है।
किसी चैनल Plugin के लिए, configSchema और channelConfigs अलग-अलग पथों का वर्णन करते हैं:
configSchema,plugins.entries.<plugin-id>.configको सत्यापित करता हैchannelConfigs.<channel-id>.schema,channels.<channel-id>को सत्यापित करता है
channels[] घोषित करने वाले गैर-बंडल Plugins को मेल खाती channelConfigs प्रविष्टियाँ भी घोषित करनी चाहिए। इनके बिना OpenClaw अब भी Plugin लोड कर सकता है, लेकिन Plugin रनटाइम निष्पादित होने तक कोल्ड-पाथ कॉन्फ़िग स्कीमा, सेटअप और Control UI सरफ़ेस चैनल-स्वामित्व वाले विकल्प का आकार या केवल-प्रदर्शन UI संकेत नहीं जान सकते।
channelConfigs.<channel-id>.commands.nativeCommandsAutoEnabled और nativeSkillsAutoEnabled कमांड कॉन्फ़िग जाँचों के लिए स्थिर auto डिफ़ॉल्ट घोषित कर सकते हैं, जो चैनल रनटाइम लोड होने से पहले चलती हैं। बंडल किए गए चैनल अपने अन्य पैकेज-स्वामित्व वाले चैनल कैटलॉग मेटाडेटा के साथ package.json#openclaw.channel.commands के माध्यम से भी वही डिफ़ॉल्ट प्रकाशित कर सकते हैं।
{ "channelConfigs": { "matrix": { "schema": { "type": "object", "additionalProperties": false, "properties": { "homeserverUrl": { "type": "string" } } }, "uiHints": { "homeserverUrl": { "label": "Homeserver URL", "placeholder": "https://matrix.example.com" } }, "label": "Matrix", "description": "Matrix homeserver connection", "commands": { "nativeCommandsAutoEnabled": true, "nativeSkillsAutoEnabled": true }, "preferOver": ["matrix-legacy"] } }}प्रत्येक चैनल प्रविष्टि में ये शामिल हो सकते हैं:
| फ़ील्ड | प्रकार | इसका अर्थ |
|---|---|---|
schema |
object |
channels.<id> के लिए JSON Schema। प्रत्येक घोषित चैनल कॉन्फ़िग प्रविष्टि के लिए आवश्यक। |
uiHints |
Record<string, object> |
उस चैनल कॉन्फ़िग अनुभाग के लिए वैकल्पिक लेबल, प्लेसहोल्डर, संवेदनशीलता और केवल-प्रदर्शन प्रस्तुति संकेत। |
label |
string |
रनटाइम मेटाडेटा तैयार न होने पर पिकर और निरीक्षण सरफ़ेसों में मर्ज किया गया चैनल लेबल। |
description |
string |
निरीक्षण और कैटलॉग सरफ़ेसों के लिए संक्षिप्त चैनल विवरण। |
commands |
object |
रनटाइम-पूर्व कॉन्फ़िग जाँचों के लिए स्थिर नेटिव कमांड और नेटिव Skills स्वचालित डिफ़ॉल्ट। |
preferOver |
string[] |
पुराने या कम प्राथमिकता वाले Plugin आईडी, जिनसे इस चैनल को चयन सरफ़ेसों में ऊपर स्थान मिलना चाहिए। |
किसी अन्य चैनल Plugin को प्रतिस्थापित करना
जब आपका Plugin ऐसे चैनल आईडी का पसंदीदा स्वामी हो, जिसे कोई अन्य Plugin भी प्रदान कर सकता है, तब preferOver का उपयोग करें। सामान्य मामलों में बदला हुआ Plugin आईडी, बंडल किए गए Plugin का स्थान लेने वाला स्टैंडअलोन Plugin, या कॉन्फ़िग संगतता के लिए वही चैनल आईडी बनाए रखने वाला अनुरक्षित फ़ोर्क शामिल हैं।
{ "id": "acme-chat", "channels": ["chat"], "channelConfigs": { "chat": { "schema": { "type": "object", "additionalProperties": false, "properties": { "webhookUrl": { "type": "string" } } }, "preferOver": ["chat"] } }}जब channels.chat कॉन्फ़िगर किया जाता है, तो OpenClaw चैनल आईडी और पसंदीदा Plugin आईडी, दोनों पर विचार करता है। यदि कम-प्राथमिकता वाला Plugin केवल इसलिए चुना गया था क्योंकि वह बंडल में शामिल है या डिफ़ॉल्ट रूप से सक्षम है, तो OpenClaw प्रभावी रनटाइम कॉन्फ़िगरेशन में उसे अक्षम कर देता है, ताकि एक Plugin चैनल और उसके टूल का स्वामी हो। स्पष्ट उपयोगकर्ता चयन फिर भी प्रभावी रहता है: यदि उपयोगकर्ता दोनों Plugin को स्पष्ट रूप से सक्षम करता है (plugins.allow या किसी वास्तविक plugins.entries कॉन्फ़िगरेशन के माध्यम से), तो OpenClaw उस चयन को बनाए रखता है और अनुरोधित Plugin समूह को चुपचाप बदलने के बजाय डुप्लिकेट चैनल/टूल निदान रिपोर्ट करता है।
preferOver को केवल उन Plugin आईडी तक सीमित रखें जो वास्तव में वही चैनल प्रदान कर सकती हैं। यह कोई सामान्य प्राथमिकता फ़ील्ड नहीं है और यह उपयोगकर्ता कॉन्फ़िगरेशन कुंजियों का नाम नहीं बदलता।
modelSupport संदर्भ
जब Plugin रनटाइम लोड होने से पहले OpenClaw को gpt-5.6-sol या claude-sonnet-4.6 जैसी संक्षिप्त मॉडल आईडी से आपके प्रदाता Plugin का अनुमान लगाना चाहिए, तब modelSupport का उपयोग करें।
{ "modelSupport": { "modelPrefixes": ["gpt-", "o1", "o3", "o4"], "modelPatterns": ["^computer-use-preview"] }}OpenClaw यह वरीयता क्रम लागू करता है:
- स्पष्ट
provider/modelसंदर्भ स्वामीprovidersकी मैनिफ़ेस्ट मेटाडेटा का उपयोग करते हैं modelPatterns,modelPrefixesसे अधिक प्राथमिकता रखते हैं- यदि एक गैर-बंडल Plugin और एक बंडल Plugin, दोनों मेल खाते हैं, तो गैर-बंडल Plugin को प्राथमिकता मिलती है
- शेष अस्पष्टता को तब तक अनदेखा किया जाता है, जब तक उपयोगकर्ता या कॉन्फ़िगरेशन किसी प्रदाता को निर्दिष्ट नहीं करता
फ़ील्ड:
| फ़ील्ड | प्रकार | इसका अर्थ |
|---|---|---|
modelPrefixes |
string[] |
संक्षिप्त मॉडल आईडी के विरुद्ध startsWith से मिलाए गए उपसर्ग। |
modelPatterns |
string[] |
प्रोफ़ाइल प्रत्यय हटाने के बाद संक्षिप्त मॉडल आईडी से मिलाए गए रेगेक्स स्रोत। |
modelPatterns प्रविष्टियों को compileSafeRegex के माध्यम से संकलित किया जाता है, जो नेस्टेड पुनरावृत्ति वाले पैटर्न (उदाहरण के लिए (a+)+$) को अस्वीकार करता है। सुरक्षा जाँच में विफल होने वाले पैटर्न को वाक्य-विन्यास की दृष्टि से अमान्य रेगेक्स की तरह चुपचाप छोड़ दिया जाता है। पैटर्न सरल रखें और नेस्टेड क्वांटिफ़ायर से बचें।
modelCatalog संदर्भ
जब Plugin रनटाइम लोड करने से पहले OpenClaw को प्रदाता मॉडल मेटाडेटा की जानकारी होनी चाहिए, तब modelCatalog का उपयोग करें। यह स्थिर कैटलॉग पंक्तियों, प्रदाता उपनामों, दमन नियमों और खोज मोड के लिए मैनिफ़ेस्ट-स्वामित्व वाला स्रोत है। रनटाइम रीफ़्रेश अब भी प्रदाता रनटाइम कोड के अंतर्गत आता है, लेकिन मैनिफ़ेस्ट कोर को बताता है कि रनटाइम कब आवश्यक है।
{ "providers": ["openai"], "modelCatalog": { "providers": { "openai": { "baseUrl": "https://api.openai.com/v1", "api": "openai-responses", "models": [ { "id": "gpt-5.4", "name": "GPT-5.4", "input": ["text", "image"], "reasoning": true, "contextWindow": 256000, "maxTokens": 128000, "cost": { "input": 1.25, "output": 10, "cacheRead": 0.125 }, "status": "available", "tags": ["default"] } ] } }, "aliases": { "azure-openai-responses": { "provider": "openai", "api": "azure-openai-responses" } }, "suppressions": [ { "provider": "azure-openai-responses", "model": "gpt-5.3-codex-spark", "reason": "not available on Azure OpenAI Responses" } ], "discovery": { "openai": "static" } }}शीर्ष-स्तरीय फ़ील्ड:
| फ़ील्ड | प्रकार | इसका अर्थ |
|---|---|---|
providers |
Record<string, object> |
इस Plugin के स्वामित्व वाली प्रदाता आईडी के लिए कैटलॉग पंक्तियाँ। कुंजियाँ शीर्ष-स्तरीय providers में भी दिखाई देनी चाहिए। |
aliases |
Record<string, object> |
प्रदाता उपनाम, जिन्हें कैटलॉग या दमन योजना के लिए किसी स्वामित्व वाले प्रदाता में रिज़ॉल्व होना चाहिए। |
suppressions |
object[] |
किसी अन्य स्रोत की मॉडल पंक्तियाँ, जिन्हें यह Plugin प्रदाता-विशिष्ट कारण से दबाता है। |
discovery |
Record<string, "static" | "refreshable" | "runtime"> |
क्या प्रदाता कैटलॉग को मैनिफ़ेस्ट मेटाडेटा से पढ़ा जा सकता है, कैश में रीफ़्रेश किया जा सकता है, या उसे रनटाइम की आवश्यकता है। |
runtimeAugment |
boolean |
केवल तभी true पर सेट करें, जब प्रदाता रनटाइम को मैनिफ़ेस्ट/कॉन्फ़िगरेशन योजना के बाद कैटलॉग पंक्तियाँ जोड़नी हों। |
aliases मॉडल-कैटलॉग योजना के लिए प्रदाता स्वामित्व खोज में भाग लेता है। उपनाम लक्ष्य उसी Plugin के स्वामित्व वाले शीर्ष-स्तरीय प्रदाता होने चाहिए। जब प्रदाता-फ़िल्टर की गई सूची किसी उपनाम का उपयोग करती है, तो OpenClaw प्रदाता रनटाइम लोड किए बिना स्वामी मैनिफ़ेस्ट को पढ़ सकता है और उपनाम के API/आधार URL ओवरराइड लागू कर सकता है। उपनाम बिना फ़िल्टर वाली कैटलॉग सूचियों का विस्तार नहीं करते; व्यापक सूचियाँ केवल स्वामी की कैनोनिकल प्रदाता पंक्तियाँ उत्सर्जित करती हैं।
suppressions पुराने प्रदाता रनटाइम suppressBuiltInModel हुक का स्थान लेता है। दमन प्रविष्टियों का पालन केवल तभी किया जाता है, जब प्रदाता Plugin के स्वामित्व में हो या उसे ऐसी modelCatalog.aliases कुंजी के रूप में घोषित किया गया हो जो किसी स्वामित्व वाले प्रदाता को लक्षित करती है। मॉडल रिज़ॉल्यूशन के दौरान अब रनटाइम दमन हुक नहीं बुलाए जाते।
प्रदाता फ़ील्ड:
| फ़ील्ड | प्रकार | इसका अर्थ |
|---|---|---|
baseUrl |
string |
इस प्रदाता कैटलॉग के मॉडलों के लिए वैकल्पिक डिफ़ॉल्ट आधार URL। |
api |
ModelApi |
इस प्रदाता कैटलॉग के मॉडलों के लिए वैकल्पिक डिफ़ॉल्ट API अडैप्टर। |
headers |
Record<string, string> |
इस प्रदाता कैटलॉग पर लागू होने वाले वैकल्पिक स्थिर हेडर। |
defaultUtilityModel |
string |
छोटे आंतरिक उपयोगिता कार्यों (शीर्षक, प्रगति विवरण) के लिए वैकल्पिक प्रदाता-अनुशंसित लघु मॉडल आईडी। इसका उपयोग तब किया जाता है, जब agents.defaults.utilityModel सेट न हो और यह प्रदाता एजेंट के प्राथमिक मॉडल को सेवा देता हो। |
models |
object[] |
आवश्यक मॉडल पंक्तियाँ। id के बिना पंक्तियों को अनदेखा किया जाता है। |
मॉडल फ़ील्ड:
| फ़ील्ड | प्रकार | इसका अर्थ |
|---|---|---|
id |
string |
provider/ उपसर्ग के बिना प्रदाता-स्थानीय मॉडल आईडी। |
name |
string |
वैकल्पिक प्रदर्शन नाम। |
api |
ModelApi |
वैकल्पिक प्रति-मॉडल API ओवरराइड। |
baseUrl |
string |
वैकल्पिक प्रति-मॉडल आधार URL ओवरराइड। |
headers |
Record<string, string> |
वैकल्पिक प्रति-मॉडल स्थिर हेडर। |
input |
Array<"text" | "image" | "document"> |
मॉडल द्वारा स्वीकार की जाने वाली मोडैलिटी। अन्य मान चुपचाप हटा दिए जाते हैं। |
reasoning |
boolean |
क्या मॉडल तर्क-क्षमता व्यवहार प्रदान करता है। |
contextWindow |
number |
प्रदाता का मूल कॉन्टेक्स्ट विंडो। |
contextTokens |
number |
contextWindow से भिन्न होने पर वैकल्पिक प्रभावी रनटाइम कॉन्टेक्स्ट सीमा। |
maxTokens |
number |
ज्ञात होने पर अधिकतम आउटपुट टोकन। |
thinkingLevelMap |
Record<string, string | null> |
वैकल्पिक प्रति-विचार-स्तर मॉडल-आईडी या पैरामीटर ओवरराइड। |
cost |
object |
वैकल्पिक tieredPricing सहित, प्रति दस लाख टोकन वैकल्पिक USD मूल्य निर्धारण। |
compat |
object |
OpenClaw मॉडल कॉन्फ़िगरेशन संगतता से मेल खाने वाले वैकल्पिक संगतता फ़्लैग। |
mediaInput |
object |
वैकल्पिक प्रति-मोडैलिटी इनपुट कॉन्फ़िगरेशन, वर्तमान में केवल चित्र। |
status |
"available" | "preview" | "deprecated" | "disabled" |
सूचीकरण स्थिति। केवल तभी दबाएँ, जब पंक्ति बिल्कुल दिखाई नहीं देनी चाहिए। |
statusReason |
string |
अनुपलब्ध स्थिति के साथ दिखाया जाने वाला वैकल्पिक कारण। |
replaces |
string[] |
पुराने प्रदाता-स्थानीय मॉडल आईडी, जिनका स्थान यह मॉडल लेता है। |
replacedBy |
string |
अप्रचलित पंक्तियों के लिए प्रतिस्थापन प्रदाता-स्थानीय मॉडल आईडी। |
tags |
string[] |
चयनकर्ताओं और फ़िल्टर द्वारा उपयोग किए जाने वाले स्थिर टैग। |
दमन फ़ील्ड:
| फ़ील्ड | प्रकार | इसका अर्थ |
|---|---|---|
provider |
string |
दबाने के लिए अपस्ट्रीम पंक्ति की प्रोवाइडर आईडी। इसका स्वामित्व इस Plugin के पास होना चाहिए या इसे स्वामित्व वाले उपनाम के रूप में घोषित किया जाना चाहिए। |
model |
string |
दबाने के लिए प्रोवाइडर-स्थानीय मॉडल आईडी। |
reason |
string |
दबाई गई पंक्ति का सीधे अनुरोध किए जाने पर दिखाया जाने वाला वैकल्पिक संदेश। |
when.baseUrlHosts |
string[] |
दबाव लागू होने से पहले आवश्यक प्रभावी प्रोवाइडर बेस URL होस्ट की वैकल्पिक सूची। |
when.providerConfigApiIn |
string[] |
दबाव लागू होने से पहले आवश्यक सटीक प्रोवाइडर-कॉन्फ़िग api मानों की वैकल्पिक सूची। |
केवल रनटाइम के डेटा को modelCatalog में न रखें। static का उपयोग केवल तब करें, जब मैनिफ़ेस्ट पंक्तियाँ इतनी पूर्ण हों कि प्रोवाइडर-फ़िल्टर की गई सूची और पिकर सतहें रजिस्ट्री/रनटाइम खोज को छोड़ सकें। refreshable का उपयोग तब करें, जब मैनिफ़ेस्ट पंक्तियाँ सूचीबद्ध किए जा सकने वाले उपयोगी प्रारंभिक डेटा या पूरक हों, लेकिन रीफ़्रेश/कैश बाद में और पंक्तियाँ जोड़ सके; रीफ़्रेश की जा सकने वाली पंक्तियाँ अपने आप में प्रामाणिक नहीं होतीं। runtime का उपयोग तब करें, जब सूची जानने के लिए OpenClaw को प्रोवाइडर रनटाइम लोड करना आवश्यक हो।
modelIdNormalization संदर्भ
कम लागत वाली, प्रोवाइडर-स्वामित्व वाली मॉडल-आईडी सफ़ाई के लिए modelIdNormalization का उपयोग करें, जिसे प्रोवाइडर रनटाइम लोड होने से पहले होना आवश्यक है। इससे छोटे मॉडल नामों, प्रोवाइडर-स्थानीय लेगेसी आईडी और प्रॉक्सी प्रीफ़िक्स नियमों जैसे उपनाम कोर मॉडल-चयन तालिकाओं के बजाय स्वामी Plugin मैनिफ़ेस्ट में रहते हैं।
{ "providers": ["anthropic", "openrouter"], "modelIdNormalization": { "providers": { "anthropic": { "aliases": { "sonnet-4.6": "claude-sonnet-4-6" } }, "openrouter": { "prefixWhenBare": "openrouter" } } }}प्रोवाइडर फ़ील्ड:
| फ़ील्ड | प्रकार | इसका अर्थ |
|---|---|---|
aliases |
Record<string,string> |
केस-असंवेदी सटीक मॉडल-आईडी उपनाम। मान लिखे गए रूप में ही लौटाए जाते हैं। |
stripPrefixes |
string[] |
उपनाम खोज से पहले हटाए जाने वाले प्रीफ़िक्स, जो लेगेसी प्रोवाइडर/मॉडल दोहराव के लिए उपयोगी हैं। |
prefixWhenBare |
string |
जब सामान्यीकृत मॉडल आईडी में पहले से / न हो, तब जोड़ा जाने वाला प्रीफ़िक्स। |
prefixWhenBareAfterAliasStartsWith |
object[] |
उपनाम खोज के बाद सशर्त बेयर-आईडी प्रीफ़िक्स नियम, जिन्हें modelPrefix और prefix द्वारा कुंजीबद्ध किया जाता है। |
providerEndpoints संदर्भ
एंडपॉइंट वर्गीकरण के लिए providerEndpoints का उपयोग करें, जिसे सामान्य अनुरोध नीति को प्रोवाइडर रनटाइम लोड होने से पहले जानना आवश्यक है। प्रत्येक endpointClass का अर्थ अब भी कोर के स्वामित्व में है; होस्ट और बेस URL मेटाडेटा Plugin मैनिफ़ेस्ट के स्वामित्व में है।
आधिकारिक रूप से बाहरी किए गए प्रोवाइडर Plugin कोर डिस्ट्रीब्यूशन से बाहर रखे जाते हैं, इसलिए
इंस्टॉल होने तक उनके मैनिफ़ेस्ट दिखाई नहीं देते। उनके providerEndpoints को
scripts/lib/official-external-provider-catalog.json में भी प्रतिबिंबित किया जाना चाहिए, ताकि
Plugin के बिना भी एंडपॉइंट वर्गीकरण कार्य करता रहे; एक अनुबंध परीक्षण
इस प्रतिबिंब को लागू करता है।
एंडपॉइंट फ़ील्ड:
| फ़ील्ड | प्रकार | इसका अर्थ |
|---|---|---|
endpointClass |
string |
ज्ञात कोर एंडपॉइंट वर्ग, जैसे openrouter, moonshot-native या google-vertex। |
hosts |
string[] |
एंडपॉइंट वर्ग से मैप होने वाले सटीक होस्टनाम। |
hostSuffixes |
string[] |
एंडपॉइंट वर्ग से मैप होने वाले होस्ट प्रत्यय। केवल डोमेन-प्रत्यय मिलान के लिए . से शुरू करें। |
baseUrls |
string[] |
एंडपॉइंट वर्ग से मैप होने वाले सटीक सामान्यीकृत HTTP(S) बेस URL। |
googleVertexRegion |
string |
सटीक वैश्विक होस्ट के लिए स्थिर Google Vertex क्षेत्र। |
googleVertexRegionHostSuffix |
string |
Google Vertex क्षेत्र प्रीफ़िक्स दिखाने के लिए मेल खाने वाले होस्ट से हटाया जाने वाला प्रत्यय। |
providerRequest संदर्भ
कम लागत वाले अनुरोध-संगतता मेटाडेटा के लिए providerRequest का उपयोग करें, जिसकी सामान्य अनुरोध नीति को प्रोवाइडर रनटाइम लोड किए बिना आवश्यकता होती है। व्यवहार-विशिष्ट पेलोड पुनर्लेखन को प्रोवाइडर रनटाइम हुक या साझा प्रोवाइडर-परिवार हेल्पर में रखें।
{ "providerRequest": { "providers": { "vllm": { "family": "vllm", "openAICompletions": { "supportsStreamingUsage": true } } } }}प्रोवाइडर फ़ील्ड:
| फ़ील्ड | प्रकार | इसका अर्थ |
|---|---|---|
family |
string |
सामान्य अनुरोध संगतता निर्णयों और निदान द्वारा उपयोग किया जाने वाला प्रोवाइडर परिवार लेबल। |
compatibilityFamily |
"moonshot" |
साझा अनुरोध हेल्पर के लिए वैकल्पिक प्रोवाइडर-परिवार संगतता बकेट। |
openAICompletions |
object |
OpenAI-संगत कम्प्लीशन अनुरोध फ़्लैग, वर्तमान में supportsStreamingUsage। |
secretProviderIntegrations संदर्भ
जब कोई Plugin पुनः उपयोग योग्य SecretRef exec प्रोवाइडर प्रीसेट प्रकाशित कर सकता हो, तब secretProviderIntegrations का उपयोग करें। OpenClaw, Plugin रनटाइम लोड होने से पहले यह मेटाडेटा पढ़ता है, Plugin स्वामित्व को secrets.providers.<alias>.pluginIntegration में संग्रहीत करता है और वास्तविक सीक्रेट समाधान को SecretRef रनटाइम पर छोड़ देता है। प्रीसेट केवल बंडल किए गए Plugin और प्रबंधित Plugin इंस्टॉल रूट से खोजे गए इंस्टॉल किए हुए Plugin, जैसे git और ClawHub इंस्टॉल, के लिए उपलब्ध कराए जाते हैं।
{ "secretProviderIntegrations": { "secret-store": { "providerAlias": "team-secrets", "displayName": "Team secrets", "source": "exec", "command": "${node}", "args": ["./bin/resolve-secrets.mjs"] } }}मैप कुंजी इंटीग्रेशन आईडी है। यदि providerAlias छोड़ दिया गया है, तो OpenClaw इंटीग्रेशन आईडी को SecretRef प्रोवाइडर उपनाम के रूप में उपयोग करता है। प्रोवाइडर उपनाम को सामान्य SecretRef प्रोवाइडर उपनाम पैटर्न से मेल खाना चाहिए, उदाहरण के लिए team-secrets या onepassword-work।
जब कोई ऑपरेटर प्रीसेट चुनता है, तो OpenClaw इस तरह का प्रोवाइडर संदर्भ लिखता है:
{ "secrets": { "providers": { "team-secrets": { "source": "exec", "pluginIntegration": { "pluginId": "acme-secrets", "integrationId": "secret-store" } } } }}स्टार्टअप/रीलोड पर, OpenClaw वर्तमान Plugin मैनिफ़ेस्ट मेटाडेटा लोड करके, यह जाँचकर कि स्वामी Plugin इंस्टॉल और सक्रिय है, और मैनिफ़ेस्ट से exec कमांड को साकार करके उस प्रोवाइडर को हल करता है। Plugin को अक्षम करने या हटाने से सक्रिय SecretRefs के लिए प्रोवाइडर निरस्त हो जाता है। जो ऑपरेटर स्वतंत्र exec कॉन्फ़िगरेशन चाहते हैं, वे अब भी मैन्युअल command/args प्रोवाइडर सीधे लिख सकते हैं।
वर्तमान में केवल source: "exec" प्रीसेट समर्थित हैं। command, ${node} होना चाहिए और args[0], ./ Plugin-रूट-सापेक्ष रिज़ॉल्वर स्क्रिप्ट होनी चाहिए। OpenClaw स्टार्टअप/रीलोड पर इसे वर्तमान Node एक्ज़ीक्यूटेबल और Plugin के भीतर पूर्ण स्क्रिप्ट पथ में साकार करता है। --require, --import, --loader, --env-file, --eval और --print जैसे Node विकल्प मैनिफ़ेस्ट प्रीसेट अनुबंध का भाग नहीं हैं। जिन ऑपरेटरों को गैर-Node कमांड की आवश्यकता है, वे स्वतंत्र मैन्युअल exec प्रोवाइडर सीधे कॉन्फ़िगर कर सकते हैं।
OpenClaw मैनिफ़ेस्ट प्रीसेट के लिए trustedDirs को Plugin रूट से और ${node} प्रीसेट के लिए वर्तमान Node एक्ज़ीक्यूटेबल डायरेक्टरी से प्राप्त करता है। मैनिफ़ेस्ट में लिखे गए trustedDirs को अनदेखा किया जाता है। timeoutMs, noOutputTimeoutMs, maxOutputBytes, jsonOnly, env, passEnv और allowInsecurePath जैसे अन्य exec प्रोवाइडर विकल्प सामान्य SecretRef exec प्रोवाइडर कॉन्फ़िगरेशन को यथावत भेजे जाते हैं।
modelPricing संदर्भ
जब किसी प्रोवाइडर को रनटाइम लोड होने से पहले कंट्रोल-प्लेन मूल्य-निर्धारण व्यवहार की आवश्यकता हो, तब modelPricing का उपयोग करें। Gateway मूल्य-निर्धारण कैश प्रोवाइडर रनटाइम कोड आयात किए बिना यह मेटाडेटा पढ़ता है।
{ "providers": ["ollama", "openrouter"], "modelPricing": { "providers": { "ollama": { "external": false }, "openrouter": { "openRouter": { "passthroughProviderModel": true }, "liteLLM": false } } }}प्रोवाइडर फ़ील्ड:
| फ़ील्ड | प्रकार | इसका अर्थ |
|---|---|---|
external |
boolean |
स्थानीय/स्वयं-होस्ट किए गए प्रोवाइडर के लिए false सेट करें, जिन्हें कभी भी OpenRouter या LiteLLM मूल्य-निर्धारण प्राप्त नहीं करना चाहिए। |
openRouter |
false | object |
OpenRouter मूल्य-निर्धारण खोज मैपिंग। false इस प्रोवाइडर के लिए OpenRouter खोज अक्षम करता है। |
liteLLM |
false | object |
LiteLLM मूल्य-निर्धारण खोज मैपिंग। false इस प्रोवाइडर के लिए LiteLLM खोज अक्षम करता है। |
स्रोत फ़ील्ड:
| फ़ील्ड | प्रकार | इसका अर्थ |
|---|---|---|
provider |
string |
जब बाहरी कैटलॉग प्रोवाइडर आईडी OpenClaw प्रोवाइडर आईडी से अलग हो, उदाहरण के लिए किसी zai प्रोवाइडर के लिए z-ai। |
passthroughProviderModel |
boolean |
स्लैश वाले मॉडल आईडी को नेस्टेड प्रोवाइडर/मॉडल संदर्भ मानें, जो OpenRouter जैसे प्रॉक्सी प्रोवाइडर के लिए उपयोगी है। |
modelIdTransforms |
"version-dots"[] |
अतिरिक्त बाहरी कैटलॉग मॉडल-आईडी प्रकार। version-dots, claude-opus-4.6 जैसे डॉट वाले संस्करण आईडी आज़माता है। |
OpenClaw प्रोवाइडर इंडेक्स
OpenClaw प्रोवाइडर इंडेक्स उन प्रोवाइडर के लिए OpenClaw-स्वामित्व वाला पूर्वावलोकन मेटाडेटा है, जिनके Plugin संभवतः अभी इंस्टॉल नहीं हुए हैं। यह किसी Plugin मैनिफ़ेस्ट का भाग नहीं है। Plugin मैनिफ़ेस्ट इंस्टॉल किए गए Plugin के लिए प्रामाणिक स्रोत बने रहते हैं। प्रोवाइडर इंडेक्स वह आंतरिक फ़ॉलबैक अनुबंध है, जिसका उपयोग भविष्य की इंस्टॉल-योग्य प्रोवाइडर और इंस्टॉल-पूर्व मॉडल पिकर सतहें तब करेंगी, जब कोई प्रोवाइडर Plugin इंस्टॉल नहीं है।
कैटलॉग प्रामाणिकता क्रम:
- उपयोगकर्ता कॉन्फ़िगरेशन।
- इंस्टॉल किया गया Plugin मैनिफ़ेस्ट
modelCatalog। - स्पष्ट रीफ़्रेश से मॉडल कैटलॉग कैश।
- OpenClaw प्रोवाइडर इंडेक्स पूर्वावलोकन पंक्तियाँ।
Provider Index में secrets, enabled state, runtime hooks, या live account-specific model data नहीं होना चाहिए। इसके preview catalogs plugin manifests के समान modelCatalog provider row shape का उपयोग करते हैं, लेकिन इन्हें स्थिर display metadata तक सीमित रहना चाहिए, जब तक कि api, baseUrl, pricing, या compatibility flags जैसे runtime adapter fields को जानबूझकर installed plugin manifest के साथ संरेखित न रखा गया हो। live /models discovery वाले providers को सामान्य listing या onboarding से provider APIs कॉल कराने के बजाय explicit model catalog cache path के माध्यम से refreshed rows लिखनी चाहिए।
Provider Index entries उन providers के लिए installable-plugin metadata भी रख सकती हैं, जिनका plugin core से बाहर स्थानांतरित हो गया है या किसी अन्य कारण से अभी installed नहीं है। यह metadata channel catalog pattern को प्रतिबिंबित करता है: package name, npm install spec, expected integrity, और सरल auth-choice labels किसी installable setup option को दिखाने के लिए पर्याप्त हैं। plugin install हो जाने के बाद, उसका manifest प्रभावी होता है और उस provider के लिए Provider Index entry की उपेक्षा की जाती है।
openclaw doctor --fix, legacy top-level manifest capability keys के एक छोटे, बंद समूह को contracts.* में migrate करता है: speechProviders, mediaUnderstandingProviders, imageGenerationProviders, और tools। इनमें से किसी को भी (या किसी अन्य capability list को) अब top-level manifest fields के रूप में नहीं पढ़ा जाता; सामान्य manifest loading इन्हें केवल contracts के अंतर्गत पहचानती है।
Manifest बनाम package.json
दोनों files अलग-अलग कार्य करती हैं:
| फ़ाइल | इसका उपयोग |
|---|---|
openclaw.plugin.json |
Discovery, config validation, auth-choice metadata, और ऐसे UI hints जिनका plugin code चलने से पहले उपलब्ध होना आवश्यक है |
package.json |
npm metadata, dependency installation, और entrypoints, install gating, setup, या catalog metadata के लिए उपयोग होने वाला openclaw block |
यदि यह स्पष्ट न हो कि metadata का कोई भाग कहाँ होना चाहिए, तो इस नियम का उपयोग करें:
- यदि OpenClaw को plugin code load करने से पहले इसकी जानकारी होना आवश्यक है, तो इसे
openclaw.plugin.jsonमें रखें - यदि यह packaging, entry files, या npm install behavior से संबंधित है, तो इसे
package.jsonमें रखें
discovery को प्रभावित करने वाले package.json fields
कुछ pre-runtime plugin metadata जानबूझकर openclaw.plugin.json के बजाय package.json में openclaw block के अंतर्गत रहता है। openclaw.bundle और openclaw.bundle.json, OpenClaw plugin contracts नहीं हैं; native plugins को openclaw.plugin.json तथा नीचे दिए गए supported package.json#openclaw fields का उपयोग करना चाहिए।
महत्वपूर्ण उदाहरण:
| फ़ील्ड | इसका अर्थ |
|---|---|
openclaw.extensions |
native plugin entrypoints घोषित करता है। इन्हें plugin package directory के भीतर ही रहना चाहिए। |
openclaw.runtimeExtensions |
installed packages के लिए built JavaScript runtime entrypoints घोषित करता है। इन्हें plugin package directory के भीतर ही रहना चाहिए। |
openclaw.setupEntry |
onboarding, deferred channel startup, और read-only channel status/SecretRef discovery के दौरान उपयोग होने वाला lightweight setup-only entrypoint। इसे plugin package directory के भीतर ही रहना चाहिए। |
openclaw.runtimeSetupEntry |
installed packages के लिए built JavaScript setup entrypoint घोषित करता है। इसके लिए setupEntry आवश्यक है, इसका मौजूद होना आवश्यक है, और इसे plugin package directory के भीतर ही रहना चाहिए। |
openclaw.channel |
labels, docs paths, aliases, और selection copy जैसा सरल channel catalog metadata। |
openclaw.channel.approvalFlags |
runtime load से पहले उपलब्ध बंद approval behavior flags। native का अर्थ है कि channel, native approval UI और same-turn resolution का स्वामी है। |
openclaw.channel.commands |
config, audit, और command-list surfaces द्वारा channel runtime load होने से पहले उपयोग किया जाने वाला static native command तथा native skill auto-default metadata। |
openclaw.channel.cliAddOptions |
Plugin के स्वामित्व वाले openclaw channels add options। प्रत्येक entry, flags, description, वैकल्पिक defaultValue, और generic input coercion के लिए वैकल्पिक valueType (int या list) घोषित करती है। |
openclaw.channel.configuredState |
lightweight configured-state checker metadata, जो पूरा channel runtime load किए बिना यह उत्तर दे सकता है कि "क्या env-only setup पहले से मौजूद है?" |
openclaw.channel.persistedAuthState |
lightweight persisted-auth checker metadata, जो पूरा channel runtime load किए बिना यह उत्तर दे सकता है कि "क्या किसी भी चीज़ में पहले से sign in किया गया है?" |
openclaw.install.clawhubSpec / openclaw.install.npmSpec / openclaw.install.localPath |
bundled और externally published plugins के लिए install/update hints। |
openclaw.install.defaultChoice |
अनेक install sources उपलब्ध होने पर पसंदीदा install path। |
openclaw.install.minHostVersion |
न्यूनतम supported OpenClaw host version, जिसमें >=2026.3.22 या >=2026.5.1-beta.1 जैसी semver floor का उपयोग होता है। |
openclaw.compat.pluginApi |
इस package के लिए आवश्यक न्यूनतम OpenClaw plugin API range, जिसमें >=2026.5.27 जैसी semver floor का उपयोग होता है। |
openclaw.install.expectedIntegrity |
sha512-... जैसी expected npm dist integrity string; install और update प्रवाह fetched artifact को इसके विरुद्ध verify करते हैं। |
openclaw.install.allowInvalidConfigRecovery |
config के invalid होने पर सीमित bundled-plugin reinstall recovery path की अनुमति देता है। |
openclaw.install.requiredPlatformPackages |
वे npm package aliases जिन्हें उनके lockfile platform constraints के current host से match होने पर materialize होना आवश्यक है। |
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen |
setup-runtime channel surfaces को listen से पहले load होने देता है, फिर पूर्ण configured channel plugin को post-listen activation तक defer करता है। |
Manifest metadata निर्धारित करता है कि runtime load होने से पहले onboarding में कौन-से provider/channel/setup choices दिखाई देंगे। जब उपयोगकर्ता उन choices में से किसी एक को चुनता है, तो package.json#openclaw.install onboarding को बताता है कि उस plugin को कैसे fetch या enable करना है। install hints को openclaw.plugin.json में न ले जाएँ।
openclaw.channel.cliAddOptions के लिए Commander's long-option syntax का उपयोग करें, जैसे --initial-sync-limit <n>। non-negative integer parse करने के लिए valueType: "int" सेट करें, या plugin setup adapter को input मिलने से पहले comma-, semicolon-, या newline-delimited input को strings में विभाजित करने के लिए valueType: "list" सेट करें। parsed Commander value को अपरिवर्तित रूप से आगे भेजने के लिए valueType को छोड़ दें।
non-bundled plugin sources के लिए install और manifest registry loading के दौरान openclaw.install.minHostVersion लागू किया जाता है। invalid values अस्वीकार कर दी जाती हैं; newer-but-valid values पुराने hosts पर external plugins को छोड़ देती हैं। bundled source plugins को host checkout के साथ co-versioned माना जाता है।
openclaw.install.requiredPlatformPackages उन npm packages के लिए है जो optional, platform-specific aliases के माध्यम से आवश्यक native binaries उपलब्ध कराते हैं। प्रत्येक supported platform alias के लिए bare npm package name सूचीबद्ध करें। npm install के दौरान, OpenClaw केवल उस declared alias को verify करता है जिसके lockfile constraints current host से match करते हैं। यदि npm success report करता है लेकिन उस alias को छोड़ देता है, तो OpenClaw fresh cache के साथ एक बार retry करता है और alias के अब भी missing होने पर install को roll back कर देता है।
non-bundled plugin sources के लिए package install के दौरान openclaw.compat.pluginApi लागू किया जाता है। इसका उपयोग उस OpenClaw plugin SDK/runtime API floor के लिए करें जिसके विरुद्ध package बनाया गया था। यदि किसी plugin package को नए API की आवश्यकता है, लेकिन वह अन्य प्रवाहों के लिए कम install hint बनाए रखता है, तो यह minHostVersion से अधिक strict हो सकता है। Official OpenClaw release sync मौजूदा official plugin API floors को default रूप से OpenClaw release version तक बढ़ाता है, लेकिन plugin-only releases कम floor बनाए रख सकते हैं, जब package जानबूझकर पुराने hosts को support करता हो। केवल package version को compatibility contract के रूप में उपयोग न करें। peerDependencies.openclaw, npm package metadata ही रहता है; OpenClaw install compatibility decisions के लिए openclaw.compat.pluginApi contract का उपयोग करता है।
जब plugin ClawHub पर published हो, तो official install-on-demand metadata को clawhubSpec का उपयोग करना चाहिए; onboarding इसे पसंदीदा remote source मानता है और install के बाद ClawHub artifact facts record करता है। उन packages के लिए जो अभी ClawHub पर स्थानांतरित नहीं हुए हैं, npmSpec compatibility fallback बना रहता है।
Exact npm version pinning पहले से npmSpec में रहता है, उदाहरण के लिए "npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3"। Official external catalog entries को exact specs के साथ expectedIntegrity जोड़ना चाहिए, ताकि fetched npm artifact के pinned release से अब match न करने पर update प्रवाह fail closed हों। compatibility के लिए interactive onboarding अभी भी trusted registry npm specs प्रदान करता है, जिनमें bare package names और dist-tags शामिल हैं। Catalog diagnostics exact, floating, integrity-pinned, missing-integrity, package-name mismatch, और invalid default-choice sources के बीच अंतर कर सकते हैं। जब expectedIntegrity मौजूद हो लेकिन ऐसा कोई valid npm source न हो जिसे वह pin कर सके, तो वे चेतावनी भी देते हैं। जब expectedIntegrity मौजूद हो, तो install/update प्रवाह इसे लागू करते हैं; जब इसे छोड़ दिया जाता है, तो registry resolution को integrity pin के बिना record किया जाता है।
जब status, channel list, या SecretRef scans को पूरा runtime load किए बिना configured accounts की पहचान करनी हो, तो channel plugins को openclaw.setupEntry प्रदान करना चाहिए। setup entry को channel metadata के साथ setup-safe config, status, और secrets adapters उपलब्ध कराने चाहिए; network clients, gateway listeners, और transport runtimes को main extension entrypoint में रखें।
रनटाइम एंट्रीपॉइंट फ़ील्ड, स्रोत एंट्रीपॉइंट फ़ील्ड के लिए पैकेज-सीमा जाँचों को ओवरराइड नहीं करते। उदाहरण के लिए, openclaw.runtimeExtensions किसी सीमा से बाहर जाते openclaw.extensions पथ को लोड करने योग्य नहीं बना सकता।
openclaw.install.allowInvalidConfigRecovery जानबूझकर सीमित है। यह मनमाने ढंग से खराब कॉन्फ़िग को इंस्टॉल करने योग्य नहीं बनाता। वर्तमान में यह केवल इंस्टॉल प्रवाहों को विशिष्ट पुराने बंडल किए गए Plugin अपग्रेड विफलताओं से उबरने देता है, जैसे बंडल किए गए Plugin का पथ अनुपलब्ध होना या उसी बंडल किए गए Plugin के लिए पुरानी channels.<id> प्रविष्टि। असंबंधित कॉन्फ़िग त्रुटियाँ अब भी इंस्टॉल को अवरुद्ध करती हैं और ऑपरेटरों को openclaw doctor --fix पर भेजती हैं।
openclaw.channel.persistedAuthState एक छोटे जाँचकर्ता मॉड्यूल के लिए पैकेज मेटाडेटा है:
{ "openclaw": { "channel": { "id": "whatsapp", "persistedAuthState": { "specifier": "./auth-presence", "exportName": "hasAnyWhatsAppAuth" } } }}इसका उपयोग तब करें जब सेटअप, डॉक्टर, स्थिति या केवल-पठन उपस्थिति प्रवाहों को पूरा चैनल Plugin लोड होने से पहले एक सस्ती हाँ/नहीं प्रमाणीकरण जाँच की आवश्यकता हो। स्थायी प्रमाणीकरण स्थिति, कॉन्फ़िगर की गई चैनल स्थिति नहीं है: Plugin को स्वतः सक्षम करने, रनटाइम निर्भरताओं की मरम्मत करने या यह तय करने के लिए कि किसी चैनल रनटाइम को लोड होना चाहिए या नहीं, इस मेटाडेटा का उपयोग न करें। लक्ष्य एक्सपोर्ट एक छोटा फ़ंक्शन होना चाहिए जो केवल स्थायी स्थिति पढ़े; इसे पूरे चैनल रनटाइम बैरल के माध्यम से रूट न करें।
openclaw.channel.configuredState कम लागत वाली कॉन्फ़िगरेशन जाँचों का समर्थन करता है। जब पर्यावरण चर पर्याप्त हों, तो घोषणात्मक पर्यावरण मेटाडेटा को प्राथमिकता दें:
{ "openclaw": { "channel": { "id": "telegram", "configuredState": { "env": { "allOf": ["TELEGRAM_BOT_TOKEN"] } } } }}जब प्रत्येक सूचीबद्ध चर आवश्यक हो, तब env.allOf का उपयोग करें और जब कोई भी एक गैर-रिक्त चर पर्याप्त हो, तब env.anyOf का उपयोग करें। यदि किसी छोटे गैर-रनटाइम जाँच को पर्यावरण मेटाडेटा से अधिक की आवश्यकता हो, तो persistedAuthState के लिए दिखाए अनुसार specifier के साथ exportName का उपयोग करें; जब env मौजूद होता है, तो OpenClaw उस मॉड्यूल को लोड किए बिना इसका उपयोग करता है। यदि जाँच को पूर्ण कॉन्फ़िग समाधान या वास्तविक चैनल रनटाइम की आवश्यकता हो, तो उस लॉजिक को इसके बजाय Plugin के config.hasConfiguredState हुक में रखें।
खोज प्राथमिकता (डुप्लिकेट Plugin आईडी)
OpenClaw तीन रूट से Plugin खोजता है, जिनकी जाँच इस क्रम में होती है: OpenClaw के साथ भेजे गए बंडल किए गए Plugin, वैश्विक इंस्टॉल रूट (~/.openclaw/extensions), और वर्तमान कार्यस्थान रूट (<workspace>/.openclaw/extensions), साथ ही कोई भी स्पष्ट plugins.load.paths प्रविष्टियाँ।
यदि दो खोजों में समान id हो, तो केवल सर्वोच्च-प्राथमिकता वाला मैनिफ़ेस्ट रखा जाता है; निम्न-प्राथमिकता वाले डुप्लिकेट को साथ में लोड करने के बजाय हटा दिया जाता है। प्राथमिकता, सर्वोच्च से निम्नतम:
- कॉन्फ़िग द्वारा चयनित —
plugins.entries.<id>में स्पष्ट रूप से पिन किया गया पथ - ट्रैक किए गए इंस्टॉल रिकॉर्ड से मेल खाने वाला वैश्विक इंस्टॉल —
openclaw plugin install/openclaw plugin updateके माध्यम से इंस्टॉल किया गया ऐसा Plugin, जिसे OpenClaw की इंस्टॉल ट्रैकिंग उसी आईडी के लिए पहचानती है, भले ही वह आईडी किसी बंडल किए गए Plugin की भी हो - बंडल किया गया — OpenClaw के साथ भेजे गए Plugin
- कार्यस्थान — वर्तमान कार्यस्थान के सापेक्ष खोजे गए Plugin
- कोई अन्य खोजा गया उम्मीदवार
निहितार्थ:
- कार्यस्थान या वैश्विक रूट में बिना ट्रैकिंग के मौजूद किसी बंडल किए गए Plugin की फ़ोर्क की गई या पुरानी प्रति, बंडल किए गए बिल्ड को प्रतिस्थापित नहीं करेगी।
- किसी बंडल किए गए Plugin को ओवरराइड करने के लिए, या तो उस आईडी के लिए
openclaw plugin installचलाएँ ताकि ट्रैक किया गया वैश्विक इंस्टॉल बंडल की गई प्रति से उच्च प्राथमिकता पाए, याplugins.entries.<id>के माध्यम से किसी विशिष्ट पथ को पिन करें ताकि वह कॉन्फ़िग द्वारा चयनित प्राथमिकता से विजयी हो। - डुप्लिकेट हटाए जाने को लॉग किया जाता है, ताकि डॉक्टर और स्टार्टअप निदान छोड़ी गई प्रति की ओर संकेत कर सकें।
- कॉन्फ़िग द्वारा चयनित डुप्लिकेट ओवरराइड को निदान में स्पष्ट ओवरराइड के रूप में लिखा जाता है, लेकिन फिर भी चेतावनी दी जाती है ताकि पुराने फ़ोर्क और आकस्मिक प्रतिस्थापन दिखाई देते रहें।
JSON Schema आवश्यकताएँ
- प्रत्येक Plugin को JSON Schema प्रदान करना आवश्यक है, भले ही वह कोई कॉन्फ़िग स्वीकार न करता हो।
- रिक्त स्कीमा स्वीकार्य है (उदाहरण के लिए,
{ "type": "object", "additionalProperties": false })। - स्कीमा का सत्यापन कॉन्फ़िग पढ़ने/लिखने के समय होता है, रनटाइम पर नहीं।
- किसी बंडल किए गए Plugin को नई कॉन्फ़िग कुंजियों के साथ विस्तारित या फ़ोर्क करते समय, उसी समय उस Plugin के
openclaw.plugin.jsonconfigSchemaको भी अपडेट करें। बंडल किए गए Plugin के स्कीमा सख्त होते हैं, इसलिएmyNewKeyकोconfigSchema.propertiesमें जोड़े बिना उपयोगकर्ता कॉन्फ़िग मेंplugins.entries.<id>.config.myNewKeyजोड़ने पर Plugin रनटाइम लोड होने से पहले ही उसे अस्वीकार कर दिया जाएगा।
स्कीमा विस्तार का उदाहरण:
{ "configSchema": { "type": "object", "additionalProperties": false, "properties": { "myNewKey": { "type": "string" } } }}सत्यापन व्यवहार
- अज्ञात
channels.*कुंजियाँ त्रुटियाँ हैं, जब तक चैनल आईडी किसी Plugin मैनिफ़ेस्ट द्वारा घोषित न हो। यदि वही आईडीplugins.allow,plugins.entries, याplugins.installs(ऐसा Plugin जिसका संदर्भ दिया गया है, लेकिन जो वर्तमान में खोजने योग्य नहीं है) में भी दिखाई देती है, तो OpenClaw इसके बजाय इसे घटाकर चेतावनी कर देता है। - अज्ञात Plugin आईडी का संदर्भ देने वाले
plugins.entries.<id>,plugins.allow, औरplugins.denyचेतावनियाँ ("पुरानी कॉन्फ़िग प्रविष्टि अनदेखी की गई") हैं, त्रुटियाँ नहीं, ताकि अपग्रेड और हटाए गए/पुनःनामित Plugin Gateway स्टार्टअप को अवरुद्ध न करें। - अज्ञात Plugin आईडी का संदर्भ देने वाला
plugins.slots.memoryएक त्रुटि है, ज्ञातmemory-lancedbआधिकारिक बाहरी Plugin को छोड़कर, जिसके लिए इसके बजाय चेतावनी दी जाती है। - यदि कोई Plugin इंस्टॉल है, लेकिन उसका मैनिफ़ेस्ट या स्कीमा खराब अथवा अनुपलब्ध है, तो सत्यापन विफल हो जाता है और डॉक्टर Plugin त्रुटि की रिपोर्ट करता है।
- यदि Plugin कॉन्फ़िग मौजूद है, लेकिन Plugin अक्षम है, तो कॉन्फ़िग रखा जाता है और डॉक्टर + लॉग में एक चेतावनी दिखाई जाती है।
पूर्ण plugins.* स्कीमा के लिए कॉन्फ़िगरेशन संदर्भ देखें।
टिप्पणियाँ
- स्थानीय फ़ाइल सिस्टम लोड सहित, मूल OpenClaw Plugin के लिए मैनिफ़ेस्ट आवश्यक है। रनटाइम अब भी Plugin मॉड्यूल को अलग से लोड करता है; मैनिफ़ेस्ट केवल खोज + सत्यापन के लिए है।
- मूल मैनिफ़ेस्ट को JSON5 के साथ पार्स किया जाता है, इसलिए टिप्पणियाँ, अंतिम अल्पविराम और उद्धरण-रहित कुंजियाँ स्वीकार की जाती हैं, बशर्ते अंतिम मान अब भी एक ऑब्जेक्ट हो।
- मैनिफ़ेस्ट लोडर केवल दस्तावेजीकृत मैनिफ़ेस्ट फ़ील्ड पढ़ता है। कस्टम शीर्ष-स्तरीय कुंजियों से बचें।
- जब किसी Plugin को उनकी आवश्यकता न हो, तो
channels,providers,cliBackends, औरskillsसभी को छोड़ा जा सकता है। providerCatalogEntryहल्का रहना चाहिए और व्यापक रनटाइम कोड आयात नहीं करना चाहिए; इसका उपयोग स्थिर प्रदाता कैटलॉग मेटाडेटा या सीमित खोज विवरणकों के लिए करें, अनुरोध-समय निष्पादन के लिए नहीं।- विशिष्ट Plugin प्रकारों का चयन
plugins.slots.*के माध्यम से होता है:plugins.slots.memoryके माध्यम सेkind: "memory"(डिफ़ॉल्टmemory-core),plugins.slots.contextEngineके माध्यम सेkind: "context-engine"(डिफ़ॉल्टlegacy)। - इस मैनिफ़ेस्ट में विशिष्ट Plugin प्रकार घोषित करें। रनटाइम-प्रविष्टि
OpenClawPluginDefinition.kindअप्रचलित है और केवल पुराने Plugin के लिए संगतता फ़ॉलबैक के रूप में बनी हुई है। setup.providers[].envVarsमें पर्यावरण-चर मेटाडेटा केवल घोषणात्मक है। स्थिति, ऑडिट, Cron डिलीवरी सत्यापन और अन्य केवल-पठन सतहें किसी पर्यावरण चर को कॉन्फ़िगर किया हुआ मानने से पहले अब भी Plugin विश्वास और प्रभावी सक्रियण नीति लागू करती हैं।- प्रदाता कोड की आवश्यकता वाले रनटाइम विज़ार्ड मेटाडेटा के लिए, प्रदाता रनटाइम हुक देखें।
- यदि आपका Plugin मूल मॉड्यूल पर निर्भर है, तो बिल्ड चरणों और पैकेज-मैनेजर अनुमति-सूची की किसी भी आवश्यकता का दस्तावेज़ीकरण करें (उदाहरण के लिए, pnpm
allow-build-scripts+pnpm rebuild <package>)।