Skip to main content
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 प्रोजेक्ट रूट में इसके साथ चलते हैं:
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 पैकेजों में उस पैकेज के प्रकाशित निर्भरता ग्राफ़ से जनरेट किया गया पैकेज-स्थानीय श्रिंकरैप शामिल होना चाहिए:
जनरेटर Plugin devDependencies को हटाता है, वर्कस्पेस ओवरराइड नीति लागू करता है और openclaw.release.publishToNpm: true वाले प्रत्येक Plugin के लिए extensions/<id>/npm-shrinkwrap.json लिखता है। तृतीय-पक्ष Plugin पैकेज भी श्रिंकरैप के साथ भेजे जा सकते हैं; OpenClaw को समुदाय पैकेजों के लिए इसकी आवश्यकता नहीं है, लेकिन मौजूद होने पर npm इसका पालन करता है। किसी स्थानीय पैकेज को रिलीज़-कैंडिडेट प्रमाण मानने से पहले, उस टारबॉल का निरीक्षण करें जिसे इंस्टॉल किया जाएगा:
निर्भरता परिवर्तनों के लिए यह भी सत्यापित करें कि कोई प्रोडक्शन इंस्टॉल डेवलपमेंट निर्भरताओं के बिना रनटाइम पैकेजों को रिज़ॉल्व कर सकता है:
OpenClaw-स्वामित्व वाले npm Plugin पैकेज स्पष्ट 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 इंस्टॉल रिपॉज़िटरी को क्लोन या रीफ़्रेश करते हैं, फिर यह चलाते हैं:
इसके बाद इंस्टॉल किया गया 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 लोड ऐसी त्रुटि के साथ विफल होता है जो ऑपरेटर को स्पष्ट समाधान बताती है:
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 प्रोजेक्ट रूट बनाते हैं।