उत्तरदायित्व विभाजन
Plugin पैकेज अपने निर्भरता ग्राफ़ के स्वामी होते हैं:- रनटाइम निर्भरताएँ Plugin पैकेज के
dependenciesयाoptionalDependenciesमें रहती हैं। - SDK/कोर इंपोर्ट, पीयर या उपलब्ध कराए गए OpenClaw इंपोर्ट होते हैं।
- स्थानीय डेवलपमेंट Plugin अपनी पहले से इंस्टॉल की गई निर्भरताएँ स्वयं लाते हैं।
- npm और git Plugin, OpenClaw-स्वामित्व वाले पैकेज रूट में इंस्टॉल होते हैं।
- Plugin स्रोत खोजें।
- स्पष्ट रूप से अनुरोध किए जाने पर पैकेज इंस्टॉल या अपडेट करें।
- इंस्टॉल मेटाडेटा रिकॉर्ड करें।
- Plugin एंट्रीपॉइंट लोड करें।
- निर्भरताएँ न मिलने पर कार्रवाई योग्य त्रुटि के साथ विफल हों।
इंस्टॉल रूट
OpenClaw प्रत्येक स्रोत के लिए स्थिर रूट का उपयोग करता है:- npm पैकेज, प्रत्येक Plugin के प्रोजेक्ट में
~/.openclaw/npm/projects/<encoded-package>के अंतर्गत इंस्टॉल होते हैं। - git पैकेज
~/.openclaw/gitके अंतर्गत क्लोन होते हैं। - स्थानीय/पाथ/आर्काइव इंस्टॉल को निर्भरता की मरम्मत किए बिना कॉपी या संदर्भित किया जाता है।
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 पैकेजों में उस पैकेज के प्रकाशित निर्भरता ग्राफ़ से जनरेट किया गया पैकेज-स्थानीय श्रिंकरैप
शामिल होना चाहिए:
devDependencies को हटाता है, वर्कस्पेस ओवरराइड
नीति लागू करता है और openclaw.release.publishToNpm: true वाले प्रत्येक Plugin के लिए
extensions/<id>/npm-shrinkwrap.json लिखता है। तृतीय-पक्ष Plugin पैकेज भी
श्रिंकरैप के साथ भेजे जा सकते हैं; OpenClaw को समुदाय पैकेजों के लिए इसकी आवश्यकता नहीं है, लेकिन
मौजूद होने पर npm इसका पालन करता है।
किसी स्थानीय पैकेज को रिलीज़-कैंडिडेट प्रमाण मानने से पहले, उस
टारबॉल का निरीक्षण करें जिसे इंस्टॉल किया जाएगा:
bundledDependencies के साथ भी प्रकाशित हो सकते हैं। npm प्रकाशन पाथ रनटाइम निर्भरता
नाम सूची को ओवरले करता है, प्रकाशित मैनिफ़ेस्ट से केवल-डेवलपमेंट वर्कस्पेस मेटाडेटा हटाता है,
पैकेज-स्थानीय रनटाइम निर्भरताओं के लिए स्क्रिप्ट-रहित 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 इंस्टॉल रिपॉज़िटरी को क्लोन या रीफ़्रेश करते हैं, फिर यह चलाते हैं:
node_modules रिज़ॉल्यूशन उसी तरह काम करते हैं जैसे
किसी सामान्य Node पैकेज के लिए करते हैं।
स्थानीय Plugin
स्थानीय Plugin डेवलपर-नियंत्रित डायरेक्टरी होते हैं। OpenClaw उनके लिए कभी भीnpm install, pnpm install, या निर्भरता मरम्मत नहीं चलाता; यदि किसी स्थानीय
Plugin की निर्भरताएँ हैं, तो उसे लोड करने से पहले उन्हें उसी Plugin में इंस्टॉल करें।
तृतीय-पक्ष TypeScript स्थानीय Plugin आपातकालीन पाथ के रूप में Jiti के माध्यम से लोड होते हैं।
पैकेज किए गए JavaScript Plugin और बंडल किए गए आंतरिक Plugin इसके बजाय नेटिव
import/require के माध्यम से लोड होते हैं।
स्टार्टअप और रीलोड
Gateway स्टार्टअप और कॉन्फ़िग रीलोड कभी भी Plugin निर्भरताएँ इंस्टॉल नहीं करते। वे Plugin इंस्टॉल रिकॉर्ड पढ़ते हैं, एंट्रीपॉइंट की गणना करते हैं और उसे लोड करते हैं। रनटाइम पर कोई निर्भरता न मिलने पर Plugin लोड ऐसी त्रुटि के साथ विफल होता है जो ऑपरेटर को स्पष्ट समाधान बताती है:doctor --fix पुराने OpenClaw-जनरेटेड निर्भरता स्टेट को साफ़ करता है और
जब कॉन्फ़िग अभी भी डाउनलोड किए जा सकने वाले Plugin का संदर्भ देता हो, तब स्थानीय इंस्टॉल रिकॉर्ड में
न मिलने वाले उन 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 की निर्भरताएँ तैयार नहीं करता।
पुराने अवशेषों की सफ़ाई
OpenClaw के पुराने संस्करण स्टार्टअप पर या Doctor मरम्मत के दौरान बंडल किए गए Plugin की निर्भरता रूट जनरेट करते थे। वर्तमान Doctor सफ़ाई,--fix के साथ उन पुराने
डायरेक्टरी और सिमलिंक को हटाती है, जिनमें पुराने plugin-runtime-deps
रूट, हटाए गए plugin-runtime-deps लक्ष्यों की ओर संकेत करने वाले ग्लोबल Node-प्रीफ़िक्स पैकेज सिमलिंक,
.openclaw-runtime-deps* मैनिफ़ेस्ट, जनरेट किए गए
Plugin node_modules, इंस्टॉल स्टेज डायरेक्टरी और पैकेज-स्थानीय pnpm
स्टोर शामिल हैं। पैकेज्ड पोस्टइंस्टॉल पुराने लक्ष्य रूट हटाने से पहले उन ग्लोबल सिमलिंक को भी हटाता है,
ताकि अपग्रेड के बाद टूटे हुए ESM पैकेज इंपोर्ट न छूटें।
पुराने npm इंस्टॉल साझा ~/.openclaw/npm/node_modules रूट का भी उपयोग करते थे।
वर्तमान इंस्टॉल, अपडेट, अनइंस्टॉल और Doctor प्रवाह अब भी उस
पुराने फ़्लैट रूट को केवल पुनर्प्राप्ति और सफ़ाई के लिए पहचानते हैं। नए npm इंस्टॉल
इसके बजाय प्रत्येक-Plugin प्रोजेक्ट रूट बनाते हैं।