Plugins
حل وابستگیهای Plugin
OpenClaw کار مربوط به وابستگیهای Plugin را در زمان نصب/بهروزرسانی نگه میدارد. بارگذاری زمان اجرا مدیرهای بسته را اجرا نمیکند، درختهای وابستگی را ترمیم نمیکند، یا دایرکتوری بستهٔ OpenClaw را تغییر نمیدهد.
تفکیک مسئولیتها
بستههای Plugin مالک گراف وابستگی خود هستند:
- وابستگیهای زمان اجرا در
dependenciesیاoptionalDependenciesبستهٔ Plugin قرار میگیرند - واردسازیهای SDK/هسته بهصورت peer هستند یا توسط OpenClaw تأمین میشوند
- Pluginهای توسعهٔ محلی وابستگیهای از پیش نصبشدهٔ خودشان را میآورند
- Pluginهای npm و git در ریشههای بستهٔ تحت مالکیت OpenClaw نصب میشوند
OpenClaw فقط مالک چرخهٔ عمر Plugin است:
- کشف منبع Plugin
- نصب یا بهروزرسانی بسته وقتی صراحتاً درخواست شود
- ثبت فرادادهٔ نصب
- بارگذاری نقطهٔ ورود Plugin
- شکست با خطایی قابل اقدام وقتی وابستگیها وجود ندارند
ریشههای نصب
OpenClaw از ریشههای پایدار برای هر منبع استفاده میکند:
- بستههای npm زیر
~/.openclaw/npmنصب میشوند - بستههای git زیر
~/.openclaw/gitclone میشوند - نصبهای محلی/مسیر/آرشیو بدون ترمیم وابستگی کپی یا ارجاع داده میشوند
نصبهای npm در ریشهٔ npm با این دستور اجرا میشوند:
npm install --prefix ~/.openclaw/npm <spec> --omit=dev --omit=peer --legacy-peer-deps --ignore-scripts --no-audit --no-fund
openclaw plugins install npm-pack:<path.tgz> از همان ریشهٔ npm مدیریتشده
برای یک tarball محلی npm-pack استفاده میکند. OpenClaw فرادادهٔ npm داخل tarball را میخواند، آن را
بهعنوان یک وابستگی کپیشدهٔ file: به ریشهٔ مدیریتشده اضافه میکند، نصب معمول npm را اجرا میکند،
و سپس پیش از اعتماد به Plugin، فرادادهٔ lockfile نصبشده را تأیید میکند.
این برای پذیرش بسته و اثبات نسخهٔ نامزد انتشار در نظر گرفته شده است، جایی که یک
مصنوعهٔ pack محلی باید مانند مصنوعهٔ registry که شبیهسازی میکند رفتار کند.
npm ممکن است وابستگیهای گذرای را کنار
بستهٔ Plugin به ~/.openclaw/npm/node_modules hoist کند. OpenClaw پیش از اعتماد به
نصب، ریشهٔ npm مدیریتشده را پویش میکند و هنگام حذف نصب از npm برای حذف بستههای مدیریتشده با npm استفاده میکند، بنابراین وابستگیهای
زمان اجرا که hoist شدهاند داخل مرز پاکسازی مدیریتشده باقی میمانند.
Pluginهایی که openclaw/plugin-sdk/* را import میکنند، openclaw را بهعنوان وابستگی peer
اعلام میکنند. OpenClaw اجازه نمیدهد npm یک کپی registry جداگانه از
بستهٔ میزبان را در ریشهٔ مدیریتشده نصب کند، چون بستههای میزبان قدیمی میتوانند در نصبهای بعدی Plugin
بر حلوفصل peer در npm اثر بگذارند. نصبهای npm مدیریتشده از حلوفصل/مادیسازی peer توسط npm
برای ریشهٔ مشترک صرفنظر میکنند و OpenClaw پس از نصب، بهروزرسانی، یا حذف نصب،
پیوندهای Plugin-محلی node_modules/openclaw را برای بستههای نصبشدهای که
peer میزبان را اعلام میکنند دوباره برقرار میکند.
نصبهای git مخزن را clone یا refresh میکنند، سپس اجرا میکنند:
npm install --omit=dev --ignore-scripts --no-audit --no-fund
سپس Plugin نصبشده از همان دایرکتوری بسته بارگذاری میشود، بنابراین حلوفصل node_modules
محلیِ بسته و والد همانطور کار میکند که برای یک بستهٔ عادی
Node کار میکند.
Pluginهای محلی
Pluginهای محلی بهعنوان دایرکتوریهای تحت کنترل توسعهدهنده در نظر گرفته میشوند. OpenClaw برای آنها
npm install، pnpm install، یا ترمیم وابستگی اجرا نمیکند. اگر یک
Plugin محلی وابستگی دارد، پیش از بارگذاری، آنها را در همان Plugin نصب کنید.
Pluginهای محلی TypeScript شخص ثالث میتوانند از مسیر اضطراری Jiti استفاده کنند. Pluginهای JavaScript بستهبندیشده و Pluginهای داخلی همراه، بهجای Jiti از طریق import/require بومی بارگذاری میشوند.
راهاندازی و بارگذاری مجدد
راهاندازی Gateway و بارگذاری مجدد پیکربندی هرگز وابستگیهای Plugin را نصب نمیکنند. آنها رکوردهای نصب Plugin را میخوانند، نقطهٔ ورود را محاسبه میکنند، و آن را بارگذاری میکنند.
اگر یک وابستگی در زمان اجرا وجود نداشته باشد، Plugin بارگذاری نمیشود و خطا باید اپراتور را به یک اصلاح صریح هدایت کند:
openclaw plugins update <id>
openclaw plugins install <source>
openclaw doctor --fix
doctor --fix میتواند وضعیت وابستگی قدیمی تولیدشده توسط OpenClaw را پاک کند و
Pluginهای قابل دانلودی را که هنگام ارجاع پیکربندی به آنها از رکوردهای نصب محلی
جا افتادهاند بازیابی کند. Doctor وابستگیهای یک Plugin محلیِ از پیش نصبشده را ترمیم نمیکند.
Pluginهای همراه
Pluginهای همراه سبکوزن و حیاتی برای هسته بهعنوان بخشی از OpenClaw ارسال میشوند. آنها یا نباید درخت وابستگی زمان اجرای سنگینی داشته باشند، یا باید به یک بستهٔ قابل دانلود در ClawHub/npm منتقل شوند.
برای فهرست تولیدشدهٔ فعلی Pluginهایی که در بستهٔ هسته ارسال میشوند، بهصورت خارجی نصب میشوند، یا فقط در سورس باقی میمانند، موجودی Plugin را ببینید.
manifestهای Plugin همراه نباید درخواست مرحلهبندی وابستگی کنند. قابلیتهای بزرگ یا اختیاری Plugin باید بهعنوان یک Plugin عادی بستهبندی شوند و از همان مسیر npm/git/ClawHub مانند Pluginهای شخص ثالث نصب شوند.
در checkoutهای سورس، OpenClaw مخزن را بهعنوان یک monorepo مبتنی بر pnpm در نظر میگیرد. پس از
pnpm install، Pluginهای همراه از extensions/<id> بارگذاری میشوند تا وابستگیهای workspace
محلیِ بسته در دسترس باشند و ویرایشها مستقیماً اعمال شوند. توسعه با checkout سورس فقط با pnpm پشتیبانی میشود؛ npm install ساده در ریشهٔ مخزن
روش پشتیبانیشدهای برای آمادهسازی وابستگیهای Plugin همراه نیست.
| شکل نصب | محل Plugin همراه | مالک وابستگی |
|---|---|---|
npm install -g openclaw |
درخت زمان اجرای ساختهشده داخل بسته | بستهٔ OpenClaw و جریانهای صریح نصب/بهروزرسانی/doctor برای Plugin |
checkout از Git بههمراه pnpm install |
بستههای workspace در extensions/<id> |
workspace مربوط به pnpm، شامل وابستگیهای خود هر بستهٔ Plugin |
openclaw plugins install ... |
ریشهٔ Plugin مدیریتشدهٔ npm/git/ClawHub | جریان نصب/بهروزرسانی Plugin |
پاکسازی قدیمی
نسخههای قدیمیتر OpenClaw ریشههای وابستگی Plugin همراه را هنگام راهاندازی یا
در طول ترمیم doctor تولید میکردند. پاکسازی فعلی doctor هنگام استفاده از --fix
آن دایرکتوریها و symlinkهای قدیمی را حذف میکند، از جمله ریشههای قدیمی plugin-runtime-deps، symlinkهای بستهٔ
سراسری با prefix مربوط به Node که به مقصدهای هرسشدهٔ plugin-runtime-deps اشاره میکنند،
manifestهای .openclaw-runtime-deps*، node_modules تولیدشدهٔ Plugin، دایرکتوریهای مرحلهٔ نصب،
و storeهای pnpm محلیِ بسته. postinstall بستهبندیشده نیز
پیش از هرس ریشههای مقصد قدیمی، آن symlinkهای سراسری را حذف میکند تا ارتقاها
importهای بستهٔ ESM آویزان باقی نگذارند.
این مسیرها فقط بقایای قدیمی هستند. نصبهای جدید نباید آنها را ایجاد کنند.