Plugins
سازگاری Plugin
OpenClaw قراردادهای قدیمیتر Plugin را پیش از حذف، از طریق آداپترهای سازگاری نامگذاریشده متصل نگه میدارد. این کار از Pluginهای بستهبندیشده و خارجی موجود محافظت میکند، در حالی که قراردادهای SDK، manifest، راهاندازی، پیکربندی، و runtime عامل تکامل مییابند.
رجیستری سازگاری
قراردادهای سازگاری Plugin در رجیستری هسته در
src/plugins/compat/registry.ts ردیابی میشوند.
هر رکورد شامل این موارد است:
- یک کد سازگاری پایدار
- وضعیت:
active،deprecated،removal-pending، یاremoved - مالک: SDK، پیکربندی، راهاندازی، کانال، ارائهدهنده، اجرای Plugin، runtime عامل، یا هسته
- تاریخهای معرفی و منسوخسازی در صورت کاربرد
- راهنمای جایگزینی
- مستندات، عیبیابیها، و تستهایی که رفتار قدیمی و جدید را پوشش میدهند
رجیستری منبع برنامهریزی نگهدارندگان و بررسیهای آیندهی بازرس Plugin است. اگر رفتاری مرتبط با Plugin تغییر کند، رکورد سازگاری را در همان تغییری اضافه یا بهروزرسانی کنید که آداپتر را اضافه میکند.
سازگاری تعمیر و مهاجرت Doctor بهصورت جداگانه در
src/commands/doctor/shared/deprecation-compat.ts ردیابی میشود. آن رکوردها شکلهای قدیمی پیکربندی، چیدمانهای دفتر نصب، و shimهای تعمیر را پوشش میدهند که ممکن است پس از حذف مسیر سازگاری runtime همچنان لازم باشد در دسترس بمانند.
بررسیهای انتشار باید هر دو رجیستری را بررسی کنند. صرفا به این دلیل که رکورد سازگاری runtime یا پیکربندی متناظر منقضی شده است، یک مهاجرت Doctor را حذف نکنید؛ ابتدا بررسی کنید که هیچ مسیر ارتقای پشتیبانیشدهای وجود ندارد که هنوز به آن تعمیر نیاز داشته باشد. همچنین هر یادداشت جایگزینی را هنگام برنامهریزی انتشار دوباره اعتبارسنجی کنید، چون مالکیت Plugin و ردپای پیکربندی میتواند با انتقال ارائهدهندهها و کانالها به خارج از هسته تغییر کند.
بسته بازرس Plugin
بازرس Plugin باید خارج از مخزن اصلی OpenClaw، بهعنوان یک بسته/مخزن جداگانه و متکی بر قراردادهای نسخهبندیشدهی سازگاری و manifest زندگی کند.
CLI روز اول باید چنین باشد:
openclaw-plugin-inspector ./my-plugin
باید این موارد را خروجی دهد:
- اعتبارسنجی manifest/schema
- نسخه سازگاری قرارداد که بررسی میشود
- بررسیهای فراداده نصب/منبع
- بررسیهای import مسیر سرد
- هشدارهای منسوخسازی و سازگاری
برای خروجی پایدار و قابل خواندن توسط ماشین در حاشیهنویسیهای CI، از --json استفاده کنید. هسته OpenClaw باید قراردادها و fixtureهایی را در معرض استفادهی بازرس قرار دهد، اما نباید باینری بازرس را از بسته اصلی openclaw منتشر کند.
مسیر پذیرش نگهدارندگان
برای مسیر پذیرش بسته قابل نصب، هنگام اعتبارسنجی بازرس خارجی در برابر بستههای Plugin OpenClaw از Blacksmith Testbox استفاده کنید. پس از ساخته شدن بسته، آن را از یک checkout تمیز OpenClaw اجرا کنید:
blacksmith testbox warmup ci-check-testbox.yml --ref main --idle-timeout 90
blacksmith testbox run --id <tbx_id> "pnpm install && pnpm build && npm exec --yes @openclaw/[email protected] -- ./extensions/telegram --json"
blacksmith testbox run --id <tbx_id> "npm exec --yes @openclaw/[email protected] -- ./extensions/discord --json"
blacksmith testbox run --id <tbx_id> "npm exec --yes @openclaw/[email protected] -- <clawhub-plugin-dir> --json"
blacksmith testbox stop <tbx_id>
این مسیر را برای نگهدارندگان بهصورت اختیاری نگه دارید، چون یک بسته npm خارجی نصب میکند و ممکن است بستههای Plugin را که بیرون از مخزن clone شدهاند بررسی کند. محافظهای مخزن محلی، نقشه export در SDK، فراداده رجیستری سازگاری، حذف تدریجی importهای منسوخ SDK، و مرزهای import افزونههای بستهبندیشده را پوشش میدهند؛ اثبات بازرس در Testbox، بسته را همانطور پوشش میدهد که نویسندگان Plugin خارجی آن را مصرف میکنند.
سیاست منسوخسازی
OpenClaw نباید یک قرارداد مستند Plugin را در همان انتشاری حذف کند که جایگزین آن را معرفی میکند.
دنباله مهاجرت چنین است:
- قرارداد جدید را اضافه کنید.
- رفتار قدیمی را از طریق یک آداپتر سازگاری نامگذاریشده متصل نگه دارید.
- زمانی که نویسندگان Plugin میتوانند اقدام کنند، عیبیابیها یا هشدارها را صادر کنید.
- جایگزین و زمانبندی را مستند کنید.
- هر دو مسیر قدیمی و جدید را تست کنید.
- تا پایان بازه مهاجرت اعلامشده صبر کنید.
- فقط با تایید صریح انتشار ناسازگار حذف کنید.
رکوردهای منسوخ باید شامل تاریخ شروع هشدار، جایگزین، لینک مستندات، و تاریخ حذف نهایی باشند که بیش از سه ماه پس از شروع هشدار نباشد. مسیر سازگاری منسوخ با بازه حذف باز و بدون پایان اضافه نکنید، مگر اینکه نگهدارندگان صریحا تصمیم بگیرند سازگاری دائمی است و بهجای آن آن را active علامتگذاری کنند.
حوزههای سازگاری فعلی
رکوردهای سازگاری فعلی شامل این موارد هستند:
- importهای گسترده و قدیمی SDK مانند
openclaw/plugin-sdk/compat - شکلهای قدیمی Plugin فقط مبتنی بر hook و
before_agent_start - entrypointهای قدیمی Plugin بهشکل
activate(api)تا زمانی که Pluginها بهregister(api)مهاجرت کنند - aliasهای قدیمی SDK مانند
openclaw/extension-api،openclaw/plugin-sdk/channel-runtime، سازندههای وضعیتopenclaw/plugin-sdk/command-auth،openclaw/plugin-sdk/test-utils(جایگزینشده با زیرمسیرهای تست متمرکزopenclaw/plugin-sdk/*)، و aliasهای نوعClawdbotConfig/OpenClawSchemaType - allowlist و رفتار فعالسازی Pluginهای بستهبندیشده
- فراداده manifest قدیمی env-var برای ارائهدهنده/کانال
- hookها و aliasهای نوع قدیمی Plugin ارائهدهنده، تا زمانی که ارائهدهندهها به hookهای صریح catalog، auth، thinking، replay، و transport منتقل شوند
- aliasهای قدیمی runtime مانند
api.runtime.taskFlow،api.runtime.subagent.getSession،api.runtime.stt، وapi.runtime.config.loadConfig()/api.runtime.config.writeConfigFile(...)منسوخ - ثبت تفکیکشده قدیمی memory-plugin تا زمانی که Pluginهای حافظه به
registerMemoryCapabilityمنتقل شوند - helperهای قدیمی SDK کانال برای schemaهای پیام بومی، gating اشاره، قالببندی پاکت ورودی، و nesting قابلیت تایید
- کلید route قدیمی کانال و aliasهای helper هدف قابل مقایسه، تا زمانی که Pluginها به
openclaw/plugin-sdk/channel-routeمنتقل شوند - hintهای فعالسازی که با مالکیت مشارکت manifest جایگزین میشوند
- fallback runtime در
setup-apiتا زمانی که descriptorهای راهاندازی به فراداده سردsetup.requiresRuntime: falseمنتقل شوند - hookهای
discoveryارائهدهنده، تا زمانی که hookهای catalog ارائهدهنده بهcatalog.run(...)منتقل شوند - فراداده
showConfigured/showInSetupکانال، تا زمانی که بستههای کانال بهopenclaw.channel.exposureمنتقل شوند - کلیدهای پیکربندی قدیمی runtime-policy، تا زمانی که Doctor اپراتورها را به
agentRuntimeمهاجرت دهد - fallback فراداده پیکربندی کانال بستهبندیشده تولیدشده، تا زمانی که فراداده رجیستریمحور
channelConfigsاضافه شود - فلگهای env برای غیرفعالسازی رجیستری Plugin پایدارشده و مهاجرت نصب، تا زمانی که جریانهای تعمیر اپراتورها را به
openclaw plugins registry --refreshوopenclaw doctor --fixمهاجرت دهند - مسیرهای پیکربندی قدیمی جستوجوی وب، دریافت وب، و x_search متعلق به Plugin، تا زمانی که Doctor آنها را به
plugins.entries.<plugin>.configمهاجرت دهد - پیکربندی نوشتهشده قدیمی
plugins.installsو aliasهای مسیر بارگذاری Plugin بستهبندیشده، تا زمانی که فراداده نصب به دفتر Plugin مدیریتشده توسط state منتقل شود
کد جدید Plugin باید جایگزین فهرستشده در رجیستری و در راهنمای مهاجرت مشخص را ترجیح دهد. Pluginهای موجود میتوانند تا زمانی که مستندات، عیبیابیها، و یادداشتهای انتشار یک بازه حذف را اعلام کنند، از مسیر سازگاری استفاده کنند.
یادداشتهای انتشار
یادداشتهای انتشار باید منسوخسازیهای پیشروی Plugin را همراه با تاریخهای هدف و لینکهای مستندات مهاجرت شامل شوند. این هشدار باید پیش از آن رخ دهد که یک مسیر سازگاری به removal-pending یا removed منتقل شود.