Plugin reference

Plugin निर्भरता समाधान

OpenClaw Plugin निर्भरताओं को केवल इंस्टॉल/अपडेट के समय संभालता है। रनटाइम लोडिंग कभी भी पैकेज मैनेजर नहीं चलाती, निर्भरता ट्री की मरम्मत नहीं करती, या OpenClaw पैकेज डायरेक्टरी में बदलाव नहीं करती।

उत्तरदायित्व विभाजन

Plugin पैकेज अपने निर्भरता ग्राफ़ के स्वामी होते हैं:

  • रनटाइम निर्भरताएँ Plugin पैकेज के dependencies या optionalDependencies में रहती हैं।
  • SDK/कोर इम्पोर्ट, पीयर या उपलब्ध कराए गए OpenClaw इम्पोर्ट होते हैं।
  • स्थानीय डेवलपमेंट Plugin अपनी पहले से इंस्टॉल की गई निर्भरताएँ स्वयं लाते हैं।
  • npm और git Plugin, OpenClaw के स्वामित्व वाले पैकेज रूट में इंस्टॉल होते हैं।

OpenClaw केवल Plugin जीवनचक्र का स्वामी है:

  • Plugin स्रोत खोजें।
  • स्पष्ट रूप से अनुरोध किए जाने पर पैकेज इंस्टॉल या अपडेट करें।
  • इंस्टॉल मेटाडेटा दर्ज करें।
  • Plugin एंट्रीपॉइंट लोड करें।
  • निर्भरताएँ अनुपलब्ध होने पर कार्रवाई योग्य त्रुटि के साथ विफल हों।

इंस्टॉल रूट

OpenClaw प्रत्येक स्रोत के लिए स्थिर रूट का उपयोग करता है:

  • npm पैकेज, प्रत्येक Plugin के लिए अलग प्रोजेक्ट में ~/.openclaw/npm/projects/<encoded-package> के अंतर्गत इंस्टॉल होते हैं।
  • git पैकेज ~/.openclaw/git के अंतर्गत क्लोन होते हैं।
  • स्थानीय/पाथ/आर्काइव इंस्टॉल को निर्भरता मरम्मत के बिना कॉपी या संदर्भित किया जाता है।

npm इंस्टॉल उस प्रत्येक-Plugin प्रोजेक्ट रूट में इसके साथ चलते हैं:

bash
cd ~/.openclaw/npm/projects/<encoded-package>npm install --omit=dev --omit=peer --legacy-peer-deps --ignore-scripts --no-audit --no-fund

openclaw plugins install npm-pack:<path.tgz> स्थानीय npm-pack टारबॉल के लिए उसी प्रत्येक-Plugin npm प्रोजेक्ट रूट का उपयोग करता है: OpenClaw टारबॉल का npm मेटाडेटा पढ़ता है, उसे प्रबंधित प्रोजेक्ट में कॉपी की गई file: निर्भरता के रूप में जोड़ता है, ऊपर दिया गया सामान्य npm इंस्टॉल चलाता है, फिर Plugin पर भरोसा करने से पहले इंस्टॉल किए गए लॉकफ़ाइल मेटाडेटा का सत्यापन करता है। यह पाथ पैकेज-स्वीकृति और रिलीज़-कैंडिडेट प्रमाण के लिए मौजूद है, जहाँ स्थानीय पैक आर्टिफ़ैक्ट को उस रजिस्ट्री आर्टिफ़ैक्ट जैसा व्यवहार करना चाहिए जिसका वह अनुकरण करता है।

प्रकाशित करने से पहले आधिकारिक या बाहरी Plugin पैकेजों का परीक्षण करते समय npm-pack: का उपयोग करें। कच्चा आर्काइव या पाथ इंस्टॉल स्थानीय डीबगिंग के लिए उपयोगी है, लेकिन यह इंस्टॉल किए गए npm या ClawHub पैकेज के समान निर्भरता पाथ को प्रमाणित नहीं करता। npm-pack: प्रबंधित पैकेज इंस्टॉल संरचना को प्रमाणित करता है; यह अपने आप में इस बात का प्रमाण नहीं है कि Plugin कैटलॉग से जुड़ी आधिकारिक सामग्री है।

जब व्यवहार बंडल किए गए Plugin या विश्वसनीय आधिकारिक Plugin की स्थिति पर निर्भर हो, तो स्थानीय पैकेज प्रमाण को कैटलॉग-समर्थित आधिकारिक इंस्टॉल या प्रकाशित पैकेज पाथ के साथ जोड़ें जो आधिकारिक विश्वास दर्ज करता हो। विशेषाधिकार प्राप्त सहायक पहुँच और विश्वसनीय-आधिकारिक स्कोप प्रबंधन को उसी विश्वसनीय इंस्टॉल पाथ पर सत्यापित किया जाना चाहिए, न कि स्थानीय टारबॉल इंस्टॉल से अनुमानित किया जाना चाहिए।

यदि कोई Plugin अनुपलब्ध इम्पोर्ट के कारण रनटाइम पर विफल होता है, तो प्रबंधित प्रोजेक्ट की हाथ से मरम्मत करने के बजाय पैकेज मैनिफ़ेस्ट ठीक करें। रनटाइम इम्पोर्ट Plugin पैकेज के dependencies या optionalDependencies में होने चाहिए; devDependencies प्रबंधित रनटाइम प्रोजेक्टों के लिए इंस्टॉल नहीं किए जाते। ~/.openclaw/npm/projects/<encoded-package> के भीतर स्थानीय npm install अस्थायी निदान में सहायता कर सकता है, लेकिन यह पैकेज-स्वीकृति प्रमाण नहीं है क्योंकि अगला इंस्टॉल या अपडेट पैकेज मेटाडेटा से प्रोजेक्ट को फिर से बनाता है।

npm सकर्मक निर्भरताओं को Plugin पैकेज के पास, प्रत्येक-Plugin प्रोजेक्ट के node_modules में होइस्ट कर सकता है। OpenClaw इंस्टॉल पर भरोसा करने से पहले प्रबंधित प्रोजेक्ट रूट को स्कैन करता है और अनइंस्टॉल करते समय उस प्रोजेक्ट को हटा देता है, इसलिए होइस्ट की गई रनटाइम निर्भरताएँ उस Plugin की सफ़ाई सीमा के भीतर रहती हैं।

प्रकाशित npm Plugin पैकेज npm-shrinkwrap.json भेज सकते हैं; npm इंस्टॉल के दौरान उस प्रकाशन योग्य लॉकफ़ाइल का उपयोग करता है, और OpenClaw का प्रबंधित npm प्रोजेक्ट रूट सामान्य इंस्टॉल पाथ के माध्यम से इसका समर्थन करता है। OpenClaw के स्वामित्व वाले प्रकाशन योग्य Plugin पैकेजों में उस पैकेज के प्रकाशित निर्भरता ग्राफ़ से जनरेट किया गया पैकेज-स्थानीय श्रिंकरैप शामिल होना चाहिए:

bash
pnpm deps:shrinkwrap:generatepnpm deps:shrinkwrap:check

जनरेटर Plugin devDependencies हटाता है, वर्कस्पेस ओवरराइड नीति लागू करता है, और openclaw.release.publishToNpm: true वाले प्रत्येक Plugin के लिए extensions/<id>/npm-shrinkwrap.json लिखता है। तृतीय-पक्ष Plugin पैकेज भी श्रिंकरैप भेज सकते हैं; OpenClaw सामुदायिक पैकेजों के लिए इसे आवश्यक नहीं बनाता, लेकिन मौजूद होने पर npm इसका पालन करता है।

किसी स्थानीय पैकेज को रिलीज़-कैंडिडेट प्रमाण मानने से पहले, इंस्टॉल किए जाने वाले टारबॉल की जाँच करें:

bash
npm pack --pack-destination /tmptar -xOf /tmp/<plugin-package>.tgz package/package.jsontar -tf /tmp/<plugin-package>.tgz | grep '^package/dist/'

निर्भरता परिवर्तनों के लिए यह भी सत्यापित करें कि प्रोडक्शन इंस्टॉल, dev निर्भरताओं के बिना रनटाइम पैकेजों को रिज़ॉल्व कर सकता है:

bash
tmpdir=$(mktemp -d)(  cd "$tmpdir"  npm init -y >/dev/null  npm install --package-lock-only --omit=dev --omit=peer --legacy-peer-deps --ignore-scripts /tmp/<plugin-package>.tgz)rm -rf "$tmpdir"

OpenClaw के स्वामित्व वाले npm Plugin पैकेज स्पष्ट bundledDependencies के साथ भी प्रकाशित हो सकते हैं। npm प्रकाशन पाथ रनटाइम निर्भरता नाम सूची को ओवरले करता है, प्रकाशित मैनिफ़ेस्ट से केवल-dev वर्कस्पेस मेटाडेटा हटाता है, पैकेज-स्थानीय रनटाइम निर्भरताओं के लिए स्क्रिप्ट-रहित npm इंस्टॉल चलाता है, फिर उन निर्भरता फ़ाइलों को शामिल करके Plugin टारबॉल पैक या प्रकाशित करता है। मूल-भारी पैकेज (Codex, ACPX, Copilot, llama.cpp, memory-lancedb, Tlon) openclaw.release.bundleRuntimeDependencies: false के साथ इससे बाहर रहते हैं; वे फिर भी श्रिंकरैप भेजते हैं, लेकिन Plugin टारबॉल में प्रत्येक प्लेटफ़ॉर्म बाइनरी एम्बेड करने के बजाय npm इंस्टॉल के दौरान रनटाइम निर्भरताएँ रिज़ॉल्व करता है। रूट openclaw पैकेज अपने पूरे निर्भरता ट्री को बंडल नहीं करता।

openclaw/plugin-sdk/* इम्पोर्ट करने वाले Plugin, openclaw को पीयर निर्भरता के रूप में घोषित करते हैं। OpenClaw npm को होस्ट पैकेज की अलग रजिस्ट्री कॉपी प्रबंधित प्रोजेक्ट में इंस्टॉल नहीं करने देता, क्योंकि पुराना होस्ट पैकेज उस Plugin के भीतर npm के पीयर रिज़ॉल्यूशन को प्रभावित कर सकता है। प्रबंधित npm इंस्टॉल, npm पीयर रिज़ॉल्यूशन/मैटेरियलाइज़ेशन छोड़ देते हैं, और इंस्टॉल या अपडेट के बाद OpenClaw होस्ट पीयर घोषित करने वाले इंस्टॉल किए गए पैकेजों के लिए Plugin-स्थानीय node_modules/openclaw लिंक दोबारा सुनिश्चित करता है।

git इंस्टॉल रिपॉज़िटरी को क्लोन या रीफ़्रेश करते हैं, फिर चलाते हैं:

bash
npm install --omit=dev --ignore-scripts --no-audit --no-fund

इसके बाद इंस्टॉल किया गया Plugin उस पैकेज डायरेक्टरी से लोड होता है, इसलिए पैकेज-स्थानीय और पैरेंट node_modules रिज़ॉल्यूशन उसी तरह काम करते हैं जैसे सामान्य Node पैकेज के लिए करते हैं।

स्थानीय Plugin

स्थानीय Plugin डेवलपर-नियंत्रित डायरेक्टरी हैं। OpenClaw उनके लिए कभी भी npm install, pnpm install, या निर्भरता मरम्मत नहीं चलाता; यदि किसी स्थानीय Plugin की निर्भरताएँ हैं, तो उसे लोड करने से पहले उन्हें उसी Plugin में इंस्टॉल करें।

तृतीय-पक्ष TypeScript स्थानीय Plugin आपातकालीन पाथ के रूप में Jiti के माध्यम से लोड होते हैं। पैकेज किए गए JavaScript Plugin और बंडल किए गए आंतरिक Plugin इसके बजाय नेटिव import/require के माध्यम से लोड होते हैं।

स्टार्टअप और रीलोड

Gateway स्टार्टअप और कॉन्फ़िग रीलोड कभी भी Plugin निर्भरताएँ इंस्टॉल नहीं करते। वे Plugin इंस्टॉल रिकॉर्ड पढ़ते हैं, एंट्रीपॉइंट की गणना करते हैं और उसे लोड करते हैं।

रनटाइम पर अनुपलब्ध निर्भरता, Plugin लोड को ऐसी त्रुटि के साथ विफल करती है जो ऑपरेटर को स्पष्ट समाधान बताती है:

bash
openclaw plugins update <id>openclaw plugins install <source>openclaw doctor --fix

doctor --fix OpenClaw द्वारा जनरेट की गई पुरानी निर्भरता स्थिति साफ़ करता है और स्थानीय इंस्टॉल रिकॉर्ड में अनुपलब्ध डाउनलोड योग्य Plugin पुनर्प्राप्त कर सकता है, जब कॉन्फ़िग अभी भी उनका संदर्भ देता हो। Doctor पहले से इंस्टॉल स्थानीय Plugin की निर्भरताओं की मरम्मत नहीं करता।

बंडल किए गए Plugin

हल्के और कोर-महत्वपूर्ण बंडल किए गए Plugin, OpenClaw के हिस्से के रूप में भेजे जाते हैं। उनमें या तो कोई भारी रनटाइम निर्भरता ट्री नहीं होना चाहिए, या उन्हें ClawHub/npm पर डाउनलोड योग्य पैकेज में स्थानांतरित कर देना चाहिए।

कोर पैकेज में भेजे जाने वाले, बाहरी रूप से इंस्टॉल होने वाले, या केवल स्रोत में रहने वाले Plugin की वर्तमान जनरेट की गई सूची के लिए Plugin सूची देखें।

बंडल किए गए Plugin मैनिफ़ेस्ट को निर्भरता स्टेजिंग का अनुरोध नहीं करना चाहिए। बड़ी या वैकल्पिक Plugin कार्यक्षमता को सामान्य Plugin के रूप में पैकेज किया जाना चाहिए और तृतीय-पक्ष Plugin के समान npm/git/ClawHub पाथ के माध्यम से इंस्टॉल किया जाना चाहिए।

स्रोत चेकआउट में OpenClaw रिपॉज़िटरी को pnpm मोनोरेपो मानता है। pnpm install के बाद, बंडल किए गए Plugin extensions/<id> से लोड होते हैं ताकि पैकेज-स्थानीय वर्कस्पेस निर्भरताएँ उपलब्ध हों और संपादन सीधे लागू हों। स्रोत चेकआउट डेवलपमेंट केवल pnpm के लिए है; रिपॉज़िटरी रूट पर साधारण npm install बंडल किए गए Plugin की निर्भरताएँ तैयार नहीं करता।

इंस्टॉल संरचना बंडल किए गए Plugin का स्थान निर्भरता स्वामी
npm install -g openclaw पैकेज के भीतर निर्मित रनटाइम ट्री OpenClaw पैकेज और स्पष्ट Plugin इंस्टॉल/अपडेट/Doctor प्रवाह
Git चेकआउट और pnpm install extensions/<id> वर्कस्पेस पैकेज pnpm वर्कस्पेस, जिसमें प्रत्येक Plugin पैकेज की अपनी निर्भरताएँ शामिल हैं
openclaw plugins install ... प्रबंधित npm प्रोजेक्ट/git/ClawHub रूट Plugin इंस्टॉल/अपडेट प्रवाह

पुरानी स्थिति की सफ़ाई

OpenClaw के पुराने संस्करण स्टार्टअप पर या Doctor मरम्मत के दौरान बंडल किए गए Plugin के निर्भरता रूट जनरेट करते थे। वर्तमान Doctor सफ़ाई, --fix के साथ उन पुराने डायरेक्टरी और सिमलिंक को हटाती है, जिनमें पुराने plugin-runtime-deps रूट, हटाए गए plugin-runtime-deps लक्ष्यों की ओर इंगित करने वाले वैश्विक Node-प्रीफ़िक्स पैकेज सिमलिंक, .openclaw-runtime-deps* मैनिफ़ेस्ट, जनरेट किए गए Plugin node_modules, इंस्टॉल स्टेज डायरेक्टरी और पैकेज-स्थानीय pnpm स्टोर शामिल हैं। पैकेज किया गया postinstall भी पुराने लक्ष्य रूट हटाने से पहले उन वैश्विक सिमलिंक को हटाता है, ताकि अपग्रेड लटकते हुए ESM पैकेज इम्पोर्ट न छोड़ें।

पुराने npm इंस्टॉल साझा ~/.openclaw/npm/node_modules रूट का भी उपयोग करते थे। वर्तमान इंस्टॉल, अपडेट, अनइंस्टॉल और Doctor प्रवाह उस पुराने फ़्लैट रूट को केवल पुनर्प्राप्ति और सफ़ाई के लिए पहचानते हैं। नए npm इंस्टॉल इसके बजाय प्रत्येक-Plugin प्रोजेक्ट रूट बनाते हैं।

Was this useful?
On this page

On this page