Plugin SDK reference
مانیفست Plugin
این صفحه مانیفست بومی Plugin در OpenClaw، یعنی openclaw.plugin.json، را پوشش میدهد. برای چیدمان بستههای سازگار (Codex، Claude، Cursor)، به بستههای Plugin مراجعه کنید.
قالبهای بستهٔ سازگار در عوض از فایلهای مانیفست خودشان استفاده میکنند:
- بستهٔ Codex:
.codex-plugin/plugin.json - بستهٔ Claude:
.claude-plugin/plugin.json، یا چیدمان پیشفرض مؤلفههای Claude بدون مانیفست - بستهٔ Cursor:
.cursor-plugin/plugin.json
OpenClaw این چیدمانها را بهطور خودکار شناسایی میکند، اما آنها را بر اساس شِمای openclaw.plugin.json در ادامه اعتبارسنجی نمیکند. برای یک بستهٔ سازگار، هرگاه چیدمان با انتظارات زمان اجرای OpenClaw مطابقت داشته باشد، OpenClaw فرادادهٔ بسته، ریشههای اعلامشدهٔ Skills، ریشههای فرمان Claude، مقادیر پیشفرض settings.json در Claude، مقادیر پیشفرض LSP در Claude و بستههای هوک پشتیبانیشده را میخواند.
هر Plugin بومی OpenClaw باید فایل openclaw.plugin.json را در ریشهٔ Plugin ارائه کند. OpenClaw آن را برای اعتبارسنجی پیکربندی، بدون اجرای کد Plugin، میخواند. مانیفست مفقود یا نامعتبر، اعتبارسنجی پیکربندی را مسدود میکند و خطای Plugin در نظر گرفته میشود.
برای راهنمای کامل سامانهٔ Plugin به Pluginها و برای مدل قابلیت بومی و راهنمای فعلی سازگاری خارجی به مدل قابلیت مراجعه کنید.
این فایل چه کاری انجام میدهد
openclaw.plugin.json فرادادهای است که OpenClaw آن را پیش از بارگذاری کد Plugin شما میخواند. بررسی تمام موارد موجود در آن باید بدون راهاندازی زمان اجرای Plugin بهاندازهٔ کافی کمهزینه باشد.
از آن برای موارد زیر استفاده کنید:
- هویت Plugin، اعتبارسنجی پیکربندی و راهنمای رابط کاربری پیکربندی
- فرادادهٔ احراز هویت، ورود اولیه و راهاندازی (نام مستعار، فعالسازی خودکار، متغیرهای محیطی ارائهدهنده، گزینههای احراز هویت)
- راهنمای فعالسازی برای سطوح صفحهٔ کنترل
- مالکیت مختصر خانوادهٔ مدل
- نماهای ایستای مالکیت قابلیت (
contracts) - فرادادهٔ اجراکنندهٔ تضمین کیفیت که میزبان مشترک
openclaw qaبتواند بررسی کند - فرادادهٔ پیکربندی مخصوص کانال که در سطوح فهرست و اعتبارسنجی ادغام میشود
از آن برای موارد زیر استفاده نکنید: ثبت رفتار زمان اجرا، اعلام نقاط ورود کد یا فرادادهٔ نصب npm. این موارد به کد Plugin شما و package.json تعلق دارند.
نمونهٔ حداقلی
{ "id": "voice-call", "configSchema": { "type": "object", "additionalProperties": false, "properties": {} }}نمونهٔ جامع
{ "id": "openrouter", "name": "OpenRouter", "description": "OpenRouter provider plugin", "version": "1.0.0", "providers": ["openrouter"], "modelSupport": { "modelPrefixes": ["router-"] }, "modelIdNormalization": { "providers": { "openrouter": { "prefixWhenBare": "openrouter" } } }, "providerEndpoints": [ { "endpointClass": "openrouter", "hostSuffixes": ["openrouter.ai"] } ], "providerRequest": { "providers": { "openrouter": { "family": "openrouter" } } }, "cliBackends": ["openrouter-cli"], "syntheticAuthRefs": ["openrouter-cli"], "setup": { "providers": [ { "id": "openrouter", "envVars": ["OPENROUTER_API_KEY"] } ] }, "providerAuthAliases": { "openrouter-coding": "openrouter" }, "channelEnvVars": { "openrouter-chatops": ["OPENROUTER_CHATOPS_TOKEN"] }, "providerAuthChoices": [ { "provider": "openrouter", "method": "api-key", "choiceId": "openrouter-api-key", "choiceLabel": "OpenRouter API key", "groupId": "openrouter", "groupLabel": "OpenRouter", "optionKey": "openrouterApiKey", "cliFlag": "--openrouter-api-key", "cliOption": "--openrouter-api-key <key>", "cliDescription": "OpenRouter API key", "onboardingScopes": ["text-inference"] } ], "uiHints": { "apiKey": { "label": "API key", "placeholder": "sk-or-v1-...", "sensitive": true } }, "configSchema": { "type": "object", "additionalProperties": false, "properties": { "apiKey": { "type": "string" } } }}مرجع فیلدهای سطح بالا
| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
id |
بله | string |
شناسهٔ استاندارد Plugin. این همان شناسهای است که در plugins.entries.<id> استفاده میشود. |
configSchema |
بله | object |
طرحوارهٔ JSON درونخطی برای پیکربندی این Plugin. |
requiresPlugins |
خیر | string[] |
شناسههای Pluginهایی که برای اثرگذاری این Plugin باید آنها نیز نصب شده باشند. فرایند کشف، Plugin را قابل بارگذاری نگه میدارد، اما در صورت نبود هر یک از Pluginهای الزامی هشدار میدهد. |
enabledByDefault |
خیر | true |
یک Plugin همراه را بهعنوان فعال بهصورت پیشفرض علامتگذاری میکند. برای غیرفعال ماندن پیشفرض Plugin، این فیلد را حذف کنید یا مقداری غیر از true برای آن تنظیم کنید. |
enabledByDefaultOnPlatforms |
خیر | string[] |
یک Plugin همراه را فقط در پلتفرمهای فهرستشدهٔ Node.js، برای مثال ["darwin"]، بهصورت پیشفرض فعال علامتگذاری میکند. پیکربندی صریح همچنان اولویت دارد. |
legacyPluginIds |
خیر | string[] |
شناسههای قدیمی که به این شناسهٔ استاندارد Plugin نرمالسازی میشوند. |
autoEnableWhenConfiguredProviders |
خیر | string[] |
شناسههای ارائهدهندهای که هنگام اشارهٔ احراز هویت، پیکربندی یا ارجاعهای مدل به آنها، باید این Plugin را بهطور خودکار فعال کنند. |
kind |
خیر | PluginKind | PluginKind[] |
یک یا چند نوع انحصاری Plugin ("memory"، "context-engine") را که plugins.slots.* استفاده میکند اعلام میکند. Pluginی که مالک هر دو شکاف است، هر دو نوع را در یک آرایه اعلام میکند. |
channels |
خیر | string[] |
شناسههای کانالی که این Plugin مالک آنها است. برای کشف و اعتبارسنجی پیکربندی استفاده میشود. |
providers |
خیر | string[] |
شناسههای ارائهدهندهای که این Plugin مالک آنها است. |
providerCatalogEntry |
خیر | string |
مسیر ماژول سبکوزن کاتالوگ ارائهدهنده، نسبت به ریشهٔ Plugin، برای فرادادهٔ کاتالوگ ارائهدهنده با دامنهٔ مانیفست که میتوان آن را بدون فعالسازی کامل زمان اجرای Plugin بارگذاری کرد. |
modelSupport |
خیر | object |
فرادادهٔ خلاصهٔ خانوادهٔ مدل تحت مالکیت مانیفست که برای بارگذاری خودکار Plugin پیش از زمان اجرا استفاده میشود. |
modelCatalog |
خیر | object |
فرادادهٔ اعلانی کاتالوگ مدل برای ارائهدهندگانی که این Plugin مالک آنها است. این قرارداد صفحهٔ کنترل برای فهرستسازی فقطخواندنی آینده، راهاندازی اولیه، انتخابگرهای مدل، نامهای مستعار و پنهانسازی بدون بارگذاری زمان اجرای Plugin است. |
modelPricing |
خیر | object |
خطمشی جستوجوی قیمتگذاری خارجی تحت مالکیت ارائهدهنده. از آن برای خارج کردن ارائهدهندگان محلی/خودمیزبان از کاتالوگهای قیمتگذاری راهدور یا نگاشت ارجاعهای ارائهدهنده به شناسههای کاتالوگ OpenRouter/LiteLLM بدون کدنویسی ثابت شناسههای ارائهدهنده در هسته استفاده کنید. |
modelIdNormalization |
خیر | object |
پاکسازی نام مستعار/پیشوند شناسهٔ مدل تحت مالکیت ارائهدهنده که باید پیش از بارگذاری زمان اجرای ارائهدهنده انجام شود. |
providerEndpoints |
خیر | object[] |
فرادادهٔ میزبان/baseUrl نقطهٔ پایانی تحت مالکیت مانیفست برای مسیرهای ارائهدهنده که هسته باید پیش از بارگذاری زمان اجرای ارائهدهنده طبقهبندی کند. |
providerRequest |
خیر | object |
فرادادهٔ کمهزینهٔ خانوادهٔ ارائهدهنده و سازگاری درخواست که خطمشی عمومی درخواست پیش از بارگذاری زمان اجرای ارائهدهنده از آن استفاده میکند. |
secretProviderIntegrations |
خیر | Record<string, object> |
پیشتنظیمهای اعلانی ارائهدهندهٔ اجرایی SecretRef که بخشهای راهاندازی یا نصب میتوانند بدون کدنویسی ثابت یکپارچهسازیهای مختص ارائهدهنده در هسته عرضه کنند. |
cliBackends |
خیر | string[] |
شناسههای پشتیبان استنتاج CLI که این Plugin مالک آنها است. برای فعالسازی خودکار هنگام راهاندازی بر اساس ارجاعهای صریح پیکربندی استفاده میشود. |
syntheticAuthRefs |
خیر | string[] |
ارجاعهای ارائهدهنده یا پشتیبان CLI که قلاب احراز هویت مصنوعی تحت مالکیت Plugin آنها باید هنگام کشف سرد مدل و پیش از بارگذاری زمان اجرا بررسی شود. |
nonSecretAuthMarkers |
خیر | string[] |
مقادیر جاینگهدار کلید API تحت مالکیت Plugin همراه که بیانگر وضعیت اعتبارنامهٔ غیرمحرمانهٔ محلی، OAuth یا محیطی هستند. |
commandAliases |
خیر | object[] |
نامهای فرمان تحت مالکیت این Plugin که باید پیش از بارگذاری زمان اجرا، عیبیابی پیکربندی و CLI آگاه از Plugin ایجاد کنند. |
providerAuthEnvVars |
خیر | Record<string, string[]> |
فرادادهٔ متغیر محیطی سازگاری منسوخشده برای جستوجوی احراز هویت/وضعیت ارائهدهنده. برای Pluginهای جدید، setup.providers[].envVars را ترجیح دهید؛ OpenClaw همچنان در بازهٔ منسوخسازی این مورد را میخواند. |
providerUsageAuthEnvVars |
خیر | Record<string, string[]> |
اعتبارنامههای ارائهدهنده فقط برای مصرف/صورتحساب. OpenClaw این نامها را برای کشف مصرف و پاکسازی اسرار استفاده میکند، اما هرگز برای احراز هویت استنتاج به کار نمیبرد. |
providerAuthAliases |
خیر | Record<string, string> |
شناسههای ارائهدهندهای که برای جستوجوی احراز هویت باید از شناسهٔ ارائهدهندهٔ دیگری استفاده کنند؛ برای مثال، یک ارائهدهندهٔ کدنویسی که کلید API و نمایههای احراز هویت ارائهدهندهٔ پایه را به اشتراک میگذارد. |
channelEnvVars |
خیر | Record<string, string[]> |
فرادادهٔ کمهزینهٔ متغیر محیطی کانال که OpenClaw میتواند بدون بارگذاری کد Plugin بررسی کند. از این مورد برای راهاندازی کانال مبتنی بر متغیر محیطی یا بخشهای احراز هویت استفاده کنید که کمککنندههای عمومی راهاندازی/پیکربندی باید مشاهده کنند. |
providerAuthChoices |
خیر | object[] |
فرادادهٔ کمهزینهٔ گزینههای احراز هویت برای انتخابگرهای راهاندازی اولیه، تشخیص ارائهدهندهٔ ترجیحی و سیمکشی سادهٔ پرچمهای CLI. |
activation |
خیر | object |
فرادادهٔ کمهزینهٔ برنامهریز فعالسازی برای بارگذاری برانگیختهشده توسط راهاندازی، ارائهدهنده، فرمان، کانال، مسیر و قابلیت. فقط فراداده است؛ زمان اجرای Plugin همچنان مالک رفتار واقعی است. |
setup |
خیر | object |
توصیفگرهای کمهزینهٔ راهاندازی/راهاندازی اولیه که بخشهای کشف و راهاندازی میتوانند بدون بارگذاری زمان اجرای Plugin بررسی کنند. |
qaRunners |
خیر | object[] |
توصیفگرهای کمهزینهٔ اجراکنندهٔ تضمین کیفیت که میزبان مشترک openclaw qa پیش از بارگذاری زمان اجرای Plugin استفاده میکند. |
contracts |
خیر | object |
تصویر ثابت مالکیت قابلیتها برای قلابهای احراز هویت خارجی، تعبیهسازیها، گفتار، رونویسی بلادرنگ، صدای بلادرنگ، درک رسانه، تولید تصویر/ویدئو/موسیقی، واکشی وب، جستوجوی وب، ارائهدهندگان کارگر، استخراج سند/محتوای وب و مالکیت ابزار. |
configContracts |
خیر | object |
رفتار پیکربندی تحت مالکیت مانیفست که کمککنندههای عمومی هسته از آن استفاده میکنند: تشخیص پرچم خطرناک، مقصدهای مهاجرت SecretRef و محدودسازی مسیر پیکربندی قدیمی. مرجع configContracts را ببینید. |
mediaUnderstandingProviderMetadata |
خیر | Record<string, object> |
پیشفرضهای کمهزینهٔ درک رسانه برای شناسههای ارائهدهندهٔ اعلامشده در contracts.mediaUnderstandingProviders. |
imageGenerationProviderMetadata |
خیر | Record<string, object> |
فرادادهٔ کمهزینهٔ احراز هویت تولید تصویر برای شناسههای ارائهدهندهٔ اعلامشده در contracts.imageGenerationProviders، شامل نامهای مستعار احراز هویت تحت مالکیت ارائهدهنده و محافظهای نشانی پایه. |
videoGenerationProviderMetadata |
خیر | Record<string, object> |
فرادادهٔ کمهزینهٔ احراز هویت تولید ویدئو برای شناسههای ارائهدهندهٔ اعلامشده در contracts.videoGenerationProviders، شامل نامهای مستعار احراز هویت تحت مالکیت ارائهدهنده و محافظهای نشانی پایه. |
musicGenerationProviderMetadata |
خیر | Record<string, object> |
فرادادهٔ کمهزینهٔ احراز هویت تولید موسیقی برای شناسههای ارائهدهندهٔ اعلامشده در contracts.musicGenerationProviders، شامل نامهای مستعار احراز هویت تحت مالکیت ارائهدهنده و محافظهای نشانی پایه. |
toolMetadata |
خیر | Record<string, object> |
فرادادهٔ کمهزینهٔ دسترسپذیری برای ابزارهای تحت مالکیت Plugin که در contracts.tools اعلام شدهاند. زمانی از آن استفاده کنید که ابزار نباید زماناجرا را بارگذاری کند، مگر اینکه شواهد پیکربندی، محیط یا احراز هویت وجود داشته باشد. |
channelConfigs |
خیر | Record<string, object> |
فرادادهٔ پیکربندی کانال تحت مالکیت مانیفست که پیش از بارگذاری زماناجرا، در سطوح کشف و اعتبارسنجی ادغام میشود. |
skills |
خیر | string[] |
پوشههای Skills که باید بارگذاری شوند، بهصورت نسبی نسبت به ریشهٔ Plugin. |
name |
خیر | string |
نام خوانای Plugin برای انسان. |
description |
خیر | string |
خلاصهٔ کوتاهی که در سطوح Plugin نمایش داده میشود. |
catalog |
خیر | object |
راهنمای اختیاری نمایش برای سطوح کاتالوگ Plugin. این فراداده یک Plugin را نصب یا فعال نمیکند و به آن اعتماد اعطا نمیکند. |
icon |
خیر | string |
نشانی HTTPS تصویر برای کارتهای بازار/کاتالوگ. ClawHub هر نشانی معتبر https:// را میپذیرد و اگر این مقدار حذف شده یا نامعتبر باشد، از نماد پیشفرض Plugin استفاده میکند. |
version |
خیر | string |
نسخهٔ اطلاعرسانی Plugin. |
uiHints |
خیر | Record<string, object> |
برچسبهای رابط کاربری، جاینگهدارها و راهنمای حساسیت برای فیلدهای پیکربندی. |
مرجع catalog
catalog راهنمای اختیاری برای نحوه نمایش در مرورگرهای Plugin فراهم میکند. میزبانها میتوانند این راهنماها را نادیده بگیرند. این راهنماها هرگز Plugin را نصب یا فعال نمیکنند و رفتار زمان اجرا یا سطح اعتماد آن را تغییر نمیدهند.
{ "catalog": { "featured": true, "order": 10 }}| فیلد | نوع | مفهوم |
|---|---|---|
featured |
boolean |
آیا سطوح catalog باید این Plugin را برجسته کنند. |
order |
number |
راهنمای ترتیب نمایش صعودی میان Pluginهای گزینششده؛ مقادیر کمتر زودتر نمایش داده میشوند. |
مرجع فراداده ارائهدهنده تولید
فیلدهای فراداده ارائهدهنده تولید، نشانههای ایستای احراز هویت را برای ارائهدهندگانی توصیف میکنند که در فهرست متناظر contracts.*GenerationProviders اعلام شدهاند. OpenClaw این فیلدها را پیش از بارگذاری زمان اجرای ارائهدهنده میخواند تا ابزارهای هسته بتوانند بدون واردکردن همه Pluginهای ارائهدهنده تصمیم بگیرند که آیا یک ارائهدهنده تولید در دسترس است.
این فیلدها را فقط برای واقعیتهای کمهزینه و اعلانی به کار ببرید. انتقال، تبدیل درخواستها، نوسازی توکن، اعتبارسنجی اطلاعات احراز هویت و رفتار واقعی تولید در زمان اجرای Plugin باقی میمانند.
{ "contracts": { "imageGenerationProviders": ["example-image"] }, "imageGenerationProviderMetadata": { "example-image": { "aliases": ["example-image-oauth"], "authProviders": ["example-image"], "configSignals": [ { "rootPath": "plugins.entries.example-image.config", "overlayPath": "image", "mode": { "path": "mode", "default": "local", "allowed": ["local"] }, "requiredAny": ["workflow", "workflowPath"], "required": ["promptNodeId"] } ], "authSignals": [ { "provider": "example-image" }, { "provider": "example-image-oauth", "providerBaseUrl": { "provider": "example-image", "defaultBaseUrl": "https://api.example.com/v1", "allowedBaseUrls": ["https://api.example.com/v1"] } } ] } }}هر ورودی فراداده از موارد زیر پشتیبانی میکند:
| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
aliases |
خیر | string[] |
شناسههای اضافی ارائهدهنده که باید برای ارائهدهنده تولید، نام مستعار ایستای احراز هویت محسوب شوند. |
authProviders |
خیر | string[] |
شناسههای ارائهدهندهای که نمایههای احراز هویت پیکربندیشده آنها باید برای این ارائهدهنده تولید، احراز هویت محسوب شوند. |
configSignals |
خیر | object[] |
نشانههای دسترسپذیری کمهزینه و صرفاً مبتنی بر پیکربندی برای ارائهدهندگان محلی یا خودمیزبانیشده که بدون نمایه احراز هویت یا متغیر محیطی پیکربندی میشوند. |
authSignals |
خیر | object[] |
نشانههای صریح احراز هویت. در صورت وجود، این موارد جایگزین مجموعه نشانه پیشفرض حاصل از شناسه ارائهدهنده، aliases و authProviders میشوند. |
referenceAudioInputs |
خیر | boolean |
فقط برای تولید ویدئو. وقتی ارائهدهنده داراییهای صوتی مرجع را میپذیرد، روی true تنظیم کنید؛ در غیر این صورت video_generate پارامترهای مرجع صوتی را پنهان میکند. |
هر ورودی configSignals از موارد زیر پشتیبانی میکند:
| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
rootPath |
بله | string |
مسیر نقطهای به شیء پیکربندی متعلق به Plugin که باید بررسی شود؛ برای مثال plugins.entries.example.config. |
overlayPath |
خیر | string |
مسیر نقطهای درون پیکربندی ریشه که شیء آن باید پیش از ارزیابی نشانه روی شیء ریشه قرار گیرد. از این گزینه برای پیکربندی ویژه قابلیتهایی مانند image، video یا music استفاده کنید. |
overlayMapPath |
خیر | string |
مسیر نقطهای درون پیکربندی ریشه که هرکدام از مقادیر شیء آن باید روی شیء ریشه قرار گیرند. از این گزینه برای نگاشتهای حساب نامگذاریشده مانند accounts استفاده کنید که در آن هر حساب پیکربندیشده باید واجد شرایط باشد. |
required |
خیر | string[] |
مسیرهای نقطهای درون پیکربندی مؤثر که باید دارای مقادیر پیکربندیشده باشند. رشتهها باید ناتهی باشند؛ اشیا و آرایهها نیز نباید تهی باشند. |
requiredAny |
خیر | string[] |
مسیرهای نقطهای درون پیکربندی مؤثر که دستکم یکی از آنها باید دارای مقدار پیکربندیشده باشد. |
mode |
خیر | object |
محدودکننده اختیاری حالت رشتهای درون پیکربندی مؤثر. وقتی دسترسپذیری صرفاً مبتنی بر پیکربندی فقط برای یک حالت کاربرد دارد، از این گزینه استفاده کنید. |
هر محدودکننده mode از موارد زیر پشتیبانی میکند:
| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
path |
خیر | string |
مسیر نقطهای درون پیکربندی مؤثر. مقدار پیشفرض mode است. |
default |
خیر | string |
مقدار حالت که وقتی مسیر در پیکربندی وجود ندارد استفاده میشود. |
allowed |
خیر | string[] |
در صورت وجود، نشانه فقط زمانی پذیرفته میشود که حالت مؤثر یکی از این مقادیر باشد. |
disallowed |
خیر | string[] |
در صورت وجود، نشانه زمانی رد میشود که حالت مؤثر یکی از این مقادیر باشد. |
هر ورودی authSignals از موارد زیر پشتیبانی میکند:
| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
provider |
بله | string |
شناسه ارائهدهندهای که باید در نمایههای احراز هویت پیکربندیشده بررسی شود. |
providerBaseUrl |
خیر | object |
محدودکننده اختیاری که باعث میشود نشانه فقط زمانی لحاظ شود که ارائهدهنده پیکربندیشده مورد ارجاع از یک URL پایه مجاز استفاده کند. وقتی نام مستعار احراز هویت فقط برای APIهای خاص معتبر است، از این گزینه استفاده کنید. |
هر محدودکننده providerBaseUrl از موارد زیر پشتیبانی میکند:
| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
provider |
بله | string |
شناسه پیکربندی ارائهدهنده که باید baseUrl آن بررسی شود. |
defaultBaseUrl |
خیر | string |
URL پایهای که وقتی baseUrl در پیکربندی ارائهدهنده وجود ندارد، باید فرض شود. |
allowedBaseUrls |
بله | string[] |
URLهای پایه مجاز برای این نشانه احراز هویت. وقتی URL پایه پیکربندیشده یا پیشفرض با یکی از این مقادیر نرمالشده مطابقت نداشته باشد، نشانه نادیده گرفته میشود. |
مرجع فراداده ابزار
toolMetadata از همان ساختارهای configSignals و authSignals در فراداده ارائهدهنده تولید استفاده میکند و کلید آن نام ابزار است. contracts.tools مالکیت را اعلام میکند. toolMetadata شواهد کمهزینه دسترسپذیری را اعلام میکند تا OpenClaw فقط برای اینکه کارخانه ابزار آن null برگرداند، از واردکردن زمان اجرای Plugin خودداری کند.
{ "setup": { "providers": [ { "id": "example", "envVars": ["EXAMPLE_API_KEY"] } ] }, "contracts": { "tools": ["example_search"] }, "toolMetadata": { "example_search": { "authSignals": [ { "provider": "example" } ], "configSignals": [ { "rootPath": "plugins.entries.example.config", "overlayPath": "search", "required": ["apiKey"] } ] } }}ورودیهای toolMetadata علاوه بر فیلدهای مشترک configSignals/authSignals در بالا، optional (ابزار را برای فعالسازی Plugin غیرالزامی علامتگذاری میکند) و replaySafe (اجرای ابزار را پس از یک نوبت ناقص مدل، برای تکرار ایمن علامتگذاری میکند) را نیز میپذیرند.
اگر ابزاری toolMetadata نداشته باشد، OpenClaw رفتار موجود را حفظ میکند و هنگامی که قرارداد ابزار با خطمشی مطابقت داشته باشد، Plugin مالک را بارگذاری میکند. برای ابزارهای مسیر داغ که کارخانه آنها به احراز هویت/پیکربندی وابسته است، نویسندگان Plugin باید بهجای وادارکردن هسته به واردکردن زمان اجرا برای پرسوجو، toolMetadata را اعلام کنند.
مرجع providerAuthChoices
هر ورودی providerAuthChoices یک گزینه راهاندازی اولیه یا احراز هویت را توصیف میکند. OpenClaw این مورد را پیش از بارگذاری زمان اجرای ارائهدهنده میخواند. فهرستهای راهاندازی ارائهدهنده از این گزینههای مانیفست، گزینههای راهاندازی مشتقشده از توصیفگر و فراداده catalog نصب استفاده میکنند، بدون اینکه زمان اجرای ارائهدهنده را بارگذاری کنند.
| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
provider |
بله | string |
شناسهٔ ارائهدهندهای که این گزینه به آن تعلق دارد. |
method |
بله | string |
شناسهٔ روش احراز هویت که درخواست باید به آن هدایت شود. |
choiceId |
بله | string |
شناسهٔ پایدار گزینهٔ احراز هویت که در فرایندهای راهاندازی اولیه و CLI استفاده میشود. |
choiceLabel |
خیر | string |
برچسب قابلنمایش به کاربر. اگر حذف شود، OpenClaw از choiceId استفاده میکند. |
choiceHint |
خیر | string |
متن راهنمای کوتاه برای انتخابگر. |
assistantPriority |
خیر | number |
مقادیر کمتر در انتخابگرهای تعاملی هدایتشده توسط دستیار، زودتر مرتب میشوند. |
assistantVisibility |
خیر | "visible" | "manual-only" |
گزینه را از انتخابگرهای دستیار پنهان میکند، درحالیکه انتخاب دستی آن از طریق CLI همچنان مجاز است. |
deprecatedChoiceIds |
خیر | string[] |
شناسههای قدیمی گزینه که باید کاربران را به این گزینهٔ جایگزین هدایت کنند. |
groupId |
خیر | string |
شناسهٔ اختیاری گروه برای دستهبندی گزینههای مرتبط. |
groupLabel |
خیر | string |
برچسب قابلنمایش به کاربر برای آن گروه. |
groupHint |
خیر | string |
متن راهنمای کوتاه برای گروه. |
onboardingFeatured |
خیر | boolean |
این گروه را پیش از ورودی «بیشتر...» در ردهٔ ویژهٔ انتخابگر تعاملی راهاندازی اولیه نمایش میدهد. |
optionKey |
خیر | string |
کلید داخلی گزینه برای فرایندهای سادهٔ احراز هویت تکپرچمی. |
cliFlag |
خیر | string |
نام پرچم CLI، مانند --openrouter-api-key. |
cliOption |
خیر | string |
ساختار کامل گزینهٔ CLI، مانند --openrouter-api-key <key>. |
cliDescription |
خیر | string |
توضیحی که در راهنمای CLI استفاده میشود. |
onboardingScopes |
خیر | Array<"text-inference" | "image-generation" | "music-generation"> |
مشخص میکند این گزینه در کدام بخشهای راهاندازی اولیه نمایش داده شود. اگر حذف شود، مقدار پیشفرض آن ["text-inference"] است. |
مرجع commandAliases
وقتی یک plugin مالک نام یک فرمان زمان اجراست که ممکن است کاربران آن را بهاشتباه در plugins.allow قرار دهند یا بکوشند آن را بهعنوان فرمان ریشهٔ CLI اجرا کنند، از commandAliases استفاده کنید. OpenClaw بدون وارد کردن کد زمان اجرای plugin، از این فراداده برای عیبیابی استفاده میکند.
{ "commandAliases": [ { "name": "dreaming", "kind": "runtime-slash", "cliCommand": "memory" } ]}| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
name |
بله | string |
نام فرمانی که به این plugin تعلق دارد. |
kind |
خیر | "runtime-slash" |
نام مستعار را بهجای فرمان ریشهٔ CLI، بهعنوان فرمان اسلش در گفتوگو مشخص میکند. |
cliCommand |
خیر | string |
فرمان ریشهٔ مرتبط CLI که در صورت وجود، برای عملیات CLI پیشنهاد میشود. |
مرجع activation
وقتی plugin میتواند با هزینهٔ اندک اعلام کند که کدام رویدادهای صفحهٔ کنترل باید آن را در طرح فعالسازی/بارگذاری بگنجانند، از activation استفاده کنید.
این بلوک فرادادهٔ برنامهریز است، نه API چرخهٔ حیات. رفتار زمان اجرا را ثبت نمیکند، جایگزین register(...) نمیشود و تضمین نمیکند که کد plugin از قبل اجرا شده باشد. برنامهریز فعالسازی از این فیلدها برای محدود کردن pluginهای نامزد استفاده میکند و سپس در صورت نیاز به فرادادهٔ مالکیت موجود در مانیفست، مانند providers، channels، commandAliases، setup.providers، contracts.tools و hookها بازمیگردد.
محدودترین فرادادهای را ترجیح دهید که از قبل مالکیت را توصیف میکند. وقتی فیلدهای providers، channels، commandAliases، توصیفگرهای راهاندازی یا contracts این رابطه را بیان میکنند، از آنها استفاده کنید. برای راهنماییهای اضافی برنامهریز که با آن فیلدهای مالکیت قابل بیان نیستند، از activation استفاده کنید. برای نامهای مستعار زمان اجرای CLI مانند claude-cli، my-cli یا google-gemini-cli از cliBackends سطحبالا استفاده کنید؛ activation.onAgentHarnesses فقط برای شناسههای چارچوب عامل تعبیهشدهای است که از قبل فیلد مالکیتی ندارند.
هر plugin باید activation.onStartup را آگاهانه تنظیم کند. فقط زمانی آن را روی true قرار دهید که plugin باید هنگام راهاندازی Gateway اجرا شود. وقتی plugin هنگام راهاندازی غیرفعال است و باید فقط بر اساس محرکهای محدودتر بارگذاری شود، آن را روی false قرار دهید. حذف onStartup دیگر باعث بارگذاری ضمنی plugin هنگام راهاندازی نمیشود؛ برای راهاندازی، کانال، پیکربندی، چارچوب عامل، حافظه یا دیگر محرکهای محدودتر فعالسازی، از فرادادهٔ فعالسازی صریح استفاده کنید.
{ "activation": { "onStartup": false, "onProviders": ["openai"], "onCommands": ["models"], "onChannels": ["web"], "onRoutes": ["gateway-webhook"], "onConfigPaths": ["browser"], "onCapabilities": ["provider", "tool"] }}| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
onStartup |
خیر | boolean |
فعالسازی صریح هنگام راهاندازی Gateway. هر plugin باید این فیلد را تنظیم کند. true هنگام راهاندازی plugin را وارد میکند؛ false آن را هنگام راهاندازی بهصورت تنبل نگه میدارد، مگر اینکه محرک منطبق دیگری بارگذاری را ضروری کند. |
onProviders |
خیر | string[] |
شناسههای ارائهدهندهای که باید این plugin را در طرحهای فعالسازی/بارگذاری بگنجانند. |
onAgentHarnesses |
خیر | string[] |
شناسههای زمان اجرای چارچوب عامل تعبیهشده که باید این plugin را در طرحهای فعالسازی/بارگذاری بگنجانند. برای نامهای مستعار پشتیبان CLI از cliBackends سطحبالا استفاده کنید. |
onCommands |
خیر | string[] |
شناسههای فرمانی که باید این plugin را در طرحهای فعالسازی/بارگذاری بگنجانند. |
onChannels |
خیر | string[] |
شناسههای کانالی که باید این plugin را در طرحهای فعالسازی/بارگذاری بگنجانند. |
onRoutes |
خیر | string[] |
انواع مسیری که باید این plugin را در طرحهای فعالسازی/بارگذاری بگنجانند. |
onConfigPaths |
خیر | string[] |
مسیرهای پیکربندی نسبی به ریشه که در صورت وجود مسیر و غیرفعال نبودن صریح آن، باید این plugin را در طرحهای راهاندازی/بارگذاری بگنجانند. |
onCapabilities |
خیر | Array<"provider" | "channel" | "tool" | "hook"> |
راهنماییهای کلی قابلیت که در برنامهریزی فعالسازی صفحهٔ کنترل استفاده میشوند. در صورت امکان، فیلدهای محدودتر را ترجیح دهید. |
مصرفکنندگان فعال کنونی:
- برنامهریزی راهاندازی Gateway برای وارد کردن صریح هنگام راهاندازی از
activation.onStartupاستفاده میکند. - برنامهریزی CLI که با فرمان فعال میشود، به
commandAliases[].cliCommandیاcommandAliases[].nameقدیمی بازمیگردد. - برنامهریزی راهاندازی زمان اجرای عامل، برای چارچوبهای تعبیهشده از
activation.onAgentHarnessesو برای نامهای مستعار زمان اجرای CLI ازcliBackends[]سطحبالا استفاده میکند. - برنامهریزی راهاندازی/کانال که با کانال فعال میشود، در صورت نبود فرادادهٔ صریح فعالسازی کانال به مالکیت قدیمی
channels[]بازمیگردد. - برنامهریزی plugin هنگام راهاندازی، برای بخشهای پیکربندی ریشهای غیرکانالی مانند بلوک
browserدر plugin مرورگر همراه، ازactivation.onConfigPathsاستفاده میکند. - برنامهریزی راهاندازی/زمان اجرا که با ارائهدهنده فعال میشود، در صورت نبود فرادادهٔ صریح فعالسازی ارائهدهنده به مالکیت قدیمی
providers[]وcliBackends[]سطحبالا بازمیگردد.
عیبیابی برنامهریز میتواند راهنماییهای صریح فعالسازی را از بازگشت به مالکیت مانیفست متمایز کند. برای مثال، activation-command-hint یعنی activation.onCommands منطبق شده است، درحالیکه manifest-command-alias یعنی برنامهریز بهجای آن از مالکیت commandAliases استفاده کرده است. این برچسبهای دلیل برای عیبیابی میزبان و آزمونها هستند؛ نویسندگان plugin باید همچنان فرادادهای را اعلام کنند که مالکیت را به بهترین شکل توصیف میکند.
مرجع qaRunners
وقتی یک plugin یک یا چند اجراکنندهٔ انتقال را زیر ریشهٔ مشترک openclaw qa
ارائه میکند، از qaRunners استفاده کنید. این فراداده را سبک و ایستا نگه دارید؛ زمان اجرای
plugin همچنان ثبت واقعی CLI را از طریق سطح سبکوزن runtime-api.ts که
qaRunnerCliRegistrations منطبق را صادر میکند، در اختیار دارد. یک
adapterFactory اختیاری، بدون تغییر اجراکنندهٔ فرمان ثبتشده، انتقال را در اختیار
سناریوهای مشترک تضمین کیفیت قرار میدهد.
{ "qaRunners": [ { "commandName": "matrix", "description": "Run the Docker-backed Matrix live QA lane against a disposable homeserver" } ]}| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
commandName |
بله | string |
زیرفرمانی که زیر openclaw qa سوار میشود؛ برای مثال matrix. |
description |
خیر | string |
متن راهنمای جایگزین که وقتی میزبان مشترک به یک فرمان جاینگهدار نیاز دارد، استفاده میشود. |
شناسهٔ adapterFactory باید با commandName مطابقت داشته باشد. برای فرمانهایی که در مانیفست وجود ندارند، ثبتها را صادر نکنید.
مرجع setup
هنگامی از setup استفاده کنید که بخشهای راهاندازی و ورود اولیه، پیش از بارگذاری زمان اجرا، به فرادادهٔ کمهزینه و تحت مالکیت Plugin نیاز دارند.
{ "setup": { "providers": [ { "id": "openai", "authMethods": ["api-key"], "envVars": ["OPENAI_API_KEY"], "authEvidence": [ { "type": "local-file-with-env", "fileEnvVar": "OPENAI_CREDENTIALS_FILE", "requiresAllEnv": ["OPENAI_PROJECT"], "credentialMarker": "openai-local-credentials", "source": "openai local credentials" } ] } ], "cliBackends": ["openai-cli"], "configMigrations": ["legacy-openai-auth"], "requiresRuntime": false }}cliBackends سطح بالا همچنان معتبر است و به توصیف بکاندهای استنتاج CLI ادامه میدهد. setup.cliBackends سطح توصیفگر مختص راهاندازی برای جریانهای صفحهٔ کنترل/راهاندازی است که باید صرفاً مبتنی بر فراداده باقی بمانند.
در صورت وجود، setup.providers و setup.cliBackends سطح ترجیحیِ جستوجوی توصیفگرمحور برای کشف راهاندازی هستند. اگر توصیفگر فقط Plugin نامزد را محدود میکند و راهاندازی همچنان به هوکهای غنیتر زمان اجرا در زمان راهاندازی نیاز دارد، requiresRuntime: true را تنظیم کنید و setup-api را بهعنوان مسیر اجرایی جایگزین حفظ کنید.
OpenClaw همچنین setup.providers[].envVars را در جستوجوهای عمومی احراز هویت ارائهدهنده و متغیرهای محیطی لحاظ میکند. providerAuthEnvVars در طول دورهٔ منسوخسازی از طریق یک سازگارکنندهٔ سازگاری همچنان پشتیبانی میشود، اما Pluginهای غیربستهای که هنوز از آن استفاده میکنند، یک عیبیابی مانیفست دریافت میکنند. Pluginهای جدید باید فرادادهٔ محیطی راهاندازی/وضعیت را در setup.providers[].envVars قرار دهند.
هنگامی از providerUsageAuthEnvVars استفاده کنید که یک اعتبارنامهٔ سطح صورتحساب یا سازمان باید resolveUsageAuth را فعال کند، بیآنکه به اعتبارنامهٔ استنتاج تبدیل شود. این نامها به مسدودسازی dotenv فضای کاری، حذف از فرایند فرزند ACP، پالایش اسرار در جعبهٔ شنی و پاکسازی گستردهٔ اسرار افزوده میشوند. زمان اجرای ارائهدهنده همچنان مقدار را درون resolveUsageAuth میخواند و طبقهبندی میکند.
OpenClaw همچنین میتواند هنگامی که هیچ ورودی راهاندازی در دسترس نیست، یا وقتی setup.requiresRuntime: false غیرضروری بودن زمان اجرای راهاندازی را اعلام میکند، گزینههای سادهٔ راهاندازی را از setup.providers[].authMethods استخراج کند. ورودیهای صریح providerAuthChoices برای برچسبهای سفارشی، پرچمهای CLI، دامنهٔ ورود اولیه و فرادادهٔ دستیار همچنان ترجیح داده میشوند.
فقط زمانی requiresRuntime: false را تنظیم کنید که این توصیفگرها برای سطح راهاندازی کافی باشند. OpenClaw مقدار صریح false را یک قرارداد صرفاً توصیفگرمحور تلقی میکند و برای جستوجوی راهاندازی، setup-api یا openclaw.setupEntry را اجرا نخواهد کرد. اگر یک Plugin صرفاً توصیفگرمحور همچنان یکی از این ورودیهای زمان اجرای راهاندازی را ارائه کند، OpenClaw یک عیبیابی افزوده گزارش میدهد و به نادیده گرفتن آن ادامه میدهد. حذف requiresRuntime رفتار جایگزین قدیمی را حفظ میکند تا Pluginهای موجودی که توصیفگرها را بدون این پرچم افزودهاند، خراب نشوند.
از آنجا که جستوجوی راهاندازی میتواند کد setup-api تحت مالکیت Plugin را اجرا کند، مقادیر نرمالشدهٔ setup.providers[].id و setup.cliBackends[] باید در میان Pluginهای کشفشده یکتا باقی بمانند. در صورت ابهام مالکیت، عملیات بهصورت بسته شکست میخورد و برندهای بر اساس ترتیب کشف انتخاب نمیشود.
هنگامی که زمان اجرای راهاندازی اجرا میشود، اگر setup-api ارائهدهنده یا بکاند CLIای را ثبت کند که توصیفگرهای مانیفست آن را اعلام نکردهاند، یا اگر توصیفگری ثبت متناظر زمان اجرا نداشته باشد، عیبیابیهای رجیستری راهاندازی ناهماهنگی توصیفگر را گزارش میکنند. این عیبیابیها افزوده هستند و Pluginهای قدیمی را رد نمیکنند.
مرجع setup.providers
| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
id |
بله | string |
شناسهٔ ارائهدهنده که هنگام راهاندازی یا ورود اولیه در معرض قرار میگیرد. شناسههای نرمالشده را در سطح سراسری یکتا نگه دارید. |
authMethods |
خیر | string[] |
شناسههای روش راهاندازی/احراز هویت که این ارائهدهنده بدون بارگذاری کامل زمان اجرا پشتیبانی میکند. |
envVars |
خیر | string[] |
متغیرهای محیطی که بخشهای عمومی راهاندازی/وضعیت میتوانند پیش از بارگذاری زمان اجرای Plugin بررسی کنند. |
authEvidence |
خیر | object[] |
بررسیهای کمهزینهٔ شواهد احراز هویت محلی برای ارائهدهندگانی که میتوانند از طریق نشانگرهای غیرمحرمانه احراز هویت کنند. |
authEvidence برای نشانگرهای اعتبارنامهٔ محلی تحت مالکیت ارائهدهنده است که میتوان آنها را بدون بارگذاری کد زمان اجرا تأیید کرد. این بررسیها باید کمهزینه و محلی باقی بمانند: بدون فراخوانی شبکه، بدون خواندن از جاکلیدی یا مدیر اسرار، بدون فرمان پوسته و بدون کاوش API ارائهدهنده.
ورودیهای شواهد پشتیبانیشده:
| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
type |
بله | string |
در حال حاضر local-file-with-env. |
fileEnvVar |
خیر | string |
متغیر محیطی حاوی مسیر صریح فایل اعتبارنامه. |
fallbackPaths |
خیر | string[] |
مسیرهای فایل اعتبارنامهٔ محلی که هنگام نبودن یا خالی بودن fileEnvVar بررسی میشوند. از ${HOME} و ${APPDATA} پشتیبانی میکند. |
requiresAnyEnv |
خیر | string[] |
پیش از معتبر شدن شواهد، دستکم یکی از متغیرهای محیطی فهرستشده باید خالی نباشد. |
requiresAllEnv |
خیر | string[] |
پیش از معتبر شدن شواهد، همهٔ متغیرهای محیطی فهرستشده باید خالی نباشند. |
credentialMarker |
بله | string |
نشانگر غیرمحرمانهای که هنگام وجود شواهد بازگردانده میشود. |
source |
خیر | string |
برچسب منبع قابلنمایش به کاربر برای خروجی احراز هویت/وضعیت. |
فیلدهای setup
| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
providers |
خیر | object[] |
توصیفگرهای راهاندازی ارائهدهنده که هنگام راهاندازی و ورود اولیه در معرض قرار میگیرند. |
cliBackends |
خیر | string[] |
شناسههای بکاند زمان راهاندازی که برای جستوجوی راهاندازی توصیفگرمحور استفاده میشوند. شناسههای نرمالشده را در سطح سراسری یکتا نگه دارید. |
configMigrations |
خیر | string[] |
شناسههای مهاجرت پیکربندی تحت مالکیت سطح راهاندازی این Plugin. |
requiresRuntime |
خیر | boolean |
اینکه آیا راهاندازی پس از جستوجوی توصیفگر همچنان به اجرای setup-api نیاز دارد یا نه. |
مرجع uiHints
uiHints نگاشتی از نام فیلدهای پیکربندی به راهنماییهای کوچک رندر است. کلیدها میتوانند برای فیلدهای پیکربندی تودرتو از نقطه استفاده کنند، اما هیچ بخش مسیر نباید __proto__، constructor یا prototype باشد؛ راهاندازی این نامها را رد میکند.
{ "uiHints": { "apiKey": { "label": "API key", "help": "Used for OpenRouter requests", "placeholder": "sk-or-v1-...", "sensitive": true } }}هر راهنمای فیلد میتواند شامل موارد زیر باشد:
| فیلد | نوع | مفهوم |
|---|---|---|
label |
string |
برچسب فیلد قابلنمایش به کاربر. |
help |
string |
متن راهنمای کوتاه. |
tags |
string[] |
برچسبهای اختیاری رابط کاربری. |
advanced |
boolean |
فیلد را بهعنوان پیشرفته علامت میزند. |
sensitive |
boolean |
فیلد را محرمانه یا حساس علامت میزند. |
placeholder |
string |
متن جاینگهدار برای ورودیهای فرم. |
مرجع contracts
فقط برای فرادادهٔ ایستای مالکیت قابلیت که OpenClaw میتواند بدون وارد کردن زمان اجرای Plugin بخواند، از contracts استفاده کنید.
{ "contracts": { "agentToolResultMiddleware": ["openclaw", "codex"], "trustedToolPolicies": ["workflow-budget"], "externalAuthProviders": ["acme-ai"], "embeddingProviders": ["openai-compatible"], "speechProviders": ["openai"], "realtimeTranscriptionProviders": ["openai"], "realtimeVoiceProviders": ["openai"], "memoryEmbeddingProviders": ["local"], "mediaUnderstandingProviders": ["openai"], "imageGenerationProviders": ["openai"], "videoGenerationProviders": ["qwen"], "musicGenerationProviders": ["stability-audio"], "documentExtractors": ["example-docs"], "webContentExtractors": ["firecrawl"], "webFetchProviders": ["firecrawl"], "webSearchProviders": ["gemini"], "workerProviders": ["example-worker"], "usageProviders": ["acme-ai"], "migrationProviders": ["hermes"], "gatewayMethodDispatch": ["authenticated-request"], "tools": ["firecrawl_search", "firecrawl_scrape"] }}هر فهرست اختیاری است:
| فیلد | نوع | مفهوم |
|---|---|---|
embeddedExtensionFactories |
string[] |
شناسههای کارخانهٔ افزونهٔ app-server مربوط به Codex، که در حال حاضر codex-app-server است. |
agentToolResultMiddleware |
string[] |
شناسههای زمان اجرایی که این Plugin میتواند میانافزار نتیجهٔ ابزار را برای آنها ثبت کند. |
trustedToolPolicies |
string[] |
شناسههای سیاست مورد اعتمادِ محلی Plugin پیش از اجرای ابزار که یک Plugin نصبشده میتواند ثبت کند. Pluginهای همراه میتوانند بدون این فیلد سیاست ثبت کنند. |
externalAuthProviders |
string[] |
شناسههای ارائهدهندهای که قلاب پروفایل احراز هویت خارجی آنها در مالکیت این Plugin است. |
embeddingProviders |
string[] |
شناسههای ارائهدهندهٔ عمومی تعبیهسازی که برای استفادهٔ مجدد از تعبیهسازی برداری، از جمله حافظه، در مالکیت این Plugin هستند. |
speechProviders |
string[] |
شناسههای ارائهدهندهٔ گفتار که در مالکیت این Plugin هستند. |
realtimeTranscriptionProviders |
string[] |
شناسههای ارائهدهندهٔ رونویسی بلادرنگ که در مالکیت این Plugin هستند. |
realtimeVoiceProviders |
string[] |
شناسههای ارائهدهندهٔ صدای بلادرنگ که در مالکیت این Plugin هستند. |
memoryEmbeddingProviders |
string[] |
شناسههای منسوخشدهٔ ارائهدهندهٔ تعبیهسازی ویژهٔ حافظه که در مالکیت این Plugin هستند. |
mediaUnderstandingProviders |
string[] |
شناسههای ارائهدهندهٔ درک رسانه که در مالکیت این Plugin هستند. |
transcriptSourceProviders |
string[] |
شناسههای ارائهدهندهٔ منبع رونویسی که در مالکیت این Plugin هستند. |
documentExtractors |
string[] |
شناسههای ارائهدهندهٔ استخراجکنندهٔ سند، برای مثال PDF، که در مالکیت این Plugin هستند. |
imageGenerationProviders |
string[] |
شناسههای ارائهدهندهٔ تولید تصویر که در مالکیت این Plugin هستند. |
videoGenerationProviders |
string[] |
شناسههای ارائهدهندهٔ تولید ویدئو که در مالکیت این Plugin هستند. |
musicGenerationProviders |
string[] |
شناسههای ارائهدهندهٔ تولید موسیقی که در مالکیت این Plugin هستند. |
webContentExtractors |
string[] |
شناسههای ارائهدهندهٔ استخراج محتوای صفحهٔ وب که در مالکیت این Plugin هستند. |
webFetchProviders |
string[] |
شناسههای ارائهدهندهٔ واکشی وب که در مالکیت این Plugin هستند. |
webSearchProviders |
string[] |
شناسههای ارائهدهندهٔ جستوجوی وب که در مالکیت این Plugin هستند. |
workerProviders |
string[] |
شناسههای ارائهدهندهٔ کارگر ابری که برای تأمین و چرخهٔ عمر اجارهٔ مبتنی بر پروفایل در مالکیت این Plugin هستند. |
usageProviders |
string[] |
شناسههای ارائهدهندهای که قلابهای احراز هویت مصرف و تصویر لحظهای مصرف آنها در مالکیت این Plugin است. |
migrationProviders |
string[] |
شناسههای ارائهدهندهٔ واردسازی که برای openclaw migrate در مالکیت این Plugin هستند. |
gatewayMethodDispatch |
string[] |
مجوز محفوظ برای مسیرهای HTTP احرازشدهٔ Plugin که متدهای Gateway را درونفرایندی فراخوانی میکنند. |
tools |
string[] |
نام ابزارهای عامل که در مالکیت این Plugin هستند. |
contracts.embeddedExtensionFactories برای کارخانههای افزونهٔ همراه که فقط مختص app-server مربوط به Codex هستند، حفظ شده است. تبدیلهای همراهِ نتیجهٔ ابزار باید در عوض contracts.agentToolResultMiddleware را اعلام و با api.registerAgentToolResultMiddleware(...) ثبت کنند. Pluginهای نصبشده تنها در صورتی میتوانند از همین درگاه میانافزار استفاده کنند که بهصراحت فعال شده باشند و فقط برای زمانهای اجرایی که در contracts.agentToolResultMiddleware اعلام میکنند.
Pluginهای نصبشدهای که به لایهٔ سیاست مورد اعتماد میزبان پیش از اجرای ابزار نیاز دارند، باید هر شناسهٔ محلی ثبتشده را در contracts.trustedToolPolicies اعلام کنند و بهصراحت فعال شوند. Pluginهای همراه مسیر موجود سیاست مورد اعتماد را حفظ میکنند، اما Pluginهای نصبشده با شناسههای سیاست اعلامنشده پیش از ثبت رد میشوند. دامنهٔ شناسههای سیاست به Plugin ثبتکننده محدود است؛ بنابراین دو Plugin میتوانند هر دو workflow-budget را اعلام و ثبت کنند، اما یک Plugin نمیتواند یک شناسهٔ محلی را دو بار ثبت کند.
ثبتهای زمان اجرای api.registerTool(...) باید با contracts.tools مطابقت داشته باشند. کشف ابزار از این فهرست استفاده میکند تا فقط زمانهای اجرای Pluginهایی را بارگذاری کند که میتوانند مالک ابزارهای درخواستی باشند.
Pluginهای ارائهدهندهای که resolveExternalAuthProfiles را پیادهسازی میکنند باید contracts.externalAuthProviders را اعلام کنند؛ قلابهای احراز هویت خارجی اعلامنشده نادیده گرفته میشوند.
Pluginهای ارائهدهندهای که هم resolveUsageAuth و هم fetchUsageSnapshot را پیادهسازی میکنند، باید هر شناسهٔ ارائهدهندهٔ کشفشدهٔ خودکار را در contracts.usageProviders اعلام کنند. کشف مصرف، پیش از بارگذاری کد زمان اجرا این قرارداد را میخواند و سپس، پس از بارگذاری فقط مالکان اعلامشده، وجود هر دو قلاب را تأیید میکند.
ارائهدهندگان عمومی تعبیهسازی باید برای هر آداپتور ثبتشده با api.registerEmbeddingProvider(...)، contracts.embeddingProviders را اعلام کنند. برای تولید بردار قابل استفادهٔ مجدد، از جمله ارائهدهندگانی که جستوجوی حافظه از آنها استفاده میکند، از قرارداد عمومی استفاده کنید. contracts.memoryEmbeddingProviders سازگاری منسوخشدهٔ ویژهٔ حافظه است و فقط تا زمانی باقی میماند که ارائهدهندگان موجود به درگاه عمومی ارائهدهندهٔ تعبیهسازی مهاجرت کنند.
ارائهدهندگان کارگر باید هر شناسهٔ api.registerWorkerProvider(...) را در contracts.workerProviders اعلام کنند. هسته پیش از فراخوانی provision قصد پایدار را ذخیره میکند؛ ارائهدهندگان تنظیمات خود را پیش از تخصیص خارجی اعتبارسنجی میکنند و فراخوانیهای تکراری با شناسهٔ عملیات یکسان باید همان اجاره را بهکار گیرند. هسته همچنین تصویر لحظهای تنظیمات اعتبارسنجیشده را ذخیره میکند و آن را همراه با leaseId به inspect({ leaseId, profile }) و destroy({ leaseId, profile }) میفرستد؛ حتی پس از تغییر یا حذف پروفایل نامگذاریشده. تخریب همتوان است، بازرسی یکی از وضعیتهای مجموعهٔ بستهٔ active / destroyed / unknown را برمیگرداند و به محتوای کلید خصوصی SSH فقط از طریق SecretRef ارجاع داده میشود. نقاط پایانی SSH تأمینشده باید یک hostKey عمومی از خروجی تأمین مورد اعتماد نیز دقیقاً با قالب algorithm base64 و بدون نام میزبان یا توضیح داشته باشند تا هسته بتواند پیش از اتصال، میزبان را سنجاق کند. ارائهدهندگانی که ارجاعهای هویت پویا صادر میکنند میتوانند resolveSshIdentity({ leaseId, profile, keyRef }) معتبر را پیادهسازی کنند؛ ارائهدهندگان فاقد آن از حلکنندهٔ عمومی راز هسته استفاده میکنند. پاسخ معتبر unknown یک رکورد محلی فعال را بیصاحب میکند؛ پس از درخواست تخریب ذخیرهشده، این پاسخ برچیدهشدن را تأیید میکند.
contracts.gatewayMethodDispatch در حال حاضر "authenticated-request" را میپذیرد. این یک دروازهٔ پاکیزگی API برای مسیرهای HTTP بومی Plugin است که عمداً متدهای صفحهٔ کنترل Gateway را درونفرایندی فراخوانی میکنند، نه یک محیط ایزوله در برابر Pluginهای بومی مخرب. از آن فقط برای سطوح همراه یا عملیاتی که با دقت بازبینی شدهاند و از قبل به احراز هویت HTTP در Gateway نیاز دارند استفاده کنید. هنگامی که پذیرش کار ریشه در Gateway بسته است، یک مسیر دارای مجوز فقط وقتی همچنان قابل دسترسی میماند که auth: "gateway" و مقدار ویژهٔ مسیرِ gatewayRuntimeScopeSurface: "trusted-operator" را نیز اعلام کند؛ مسیرهای همردهٔ عادی از همان Plugin همچنان پشت مرز پذیرش باقی میمانند. این کار وضعیت تعلیق و ازسرگیری را بدون اعطای امکان دورزدن پذیرش به کل Plugin، قابل دسترسی نگه میدارد. تجزیه و شکلدهی پاسخ را بهصورت محدود خارج از فراخوانی نگه دارید؛ کار اساسی یا تغییردهنده باید از طریق فراخوانی متد Gateway انجام شود که مالک اعمال پذیرش و دامنه است.
مرجع configContracts
برای رفتار پیکربندی تحت مالکیت مانیفست که کمکتابعهای عمومی هسته بدون واردکردن زمان اجرای Plugin به آن نیاز دارند، از configContracts استفاده کنید: تشخیص پرچم خطرناک، اهداف مهاجرت SecretRef و محدودسازی مسیر پیکربندی قدیمی.
{ "configContracts": { "compatibilityMigrationPaths": ["legacyProvider"], "compatibilityRuntimePaths": ["legacyProvider.webhook"], "dangerousFlags": [ { "path": "accounts.*.allowUnverifiedSenders", "equals": true } ], "secretInputs": { "bundledDefaultEnabled": false, "paths": [ { "path": "apiKey", "expected": "string" } ] } }}| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
compatibilityMigrationPaths |
خیر | string[] |
مسیرهای پیکربندی نسبی به ریشه که نشان میدهند مهاجرتهای سازگاری زمان راهاندازی این Plugin ممکن است اعمال شوند. به خواندنهای عمومی پیکربندی زمان اجرا اجازه میدهد وقتی پیکربندی هرگز به Plugin ارجاع نمیدهد، از همهٔ سطوح راهاندازی Plugin صرفنظر کنند. |
compatibilityRuntimePaths |
خیر | string[] |
مسیرهای سازگاری نسبی به ریشه که این Plugin میتواند پیش از فعالشدن کامل کد Plugin در زمان اجرا ارائه دهد. از این مورد برای سطوح قدیمی استفاده کنید که باید مجموعههای نامزد همراه را بدون واردکردن زمان اجرای همهٔ Pluginهای سازگار محدود کنند. |
dangerousFlags |
خیر | object[] |
مقادیر ثابت پیکربندی که openclaw doctor باید هنگام فعالبودن، آنها را ناامن یا خطرناک علامتگذاری کند. به بخش زیر مراجعه کنید. |
secretInputs |
خیر | object |
مسیرهای پیکربندی زیر plugins.entries.<id>.config که ثبت اهداف مهاجرت/ممیزی SecretRef باید با آنها بهعنوان رشتههایی با ساختار راز برخورد کند. به بخش زیر مراجعه کنید. |
هر ورودی dangerousFlags از موارد زیر پشتیبانی میکند:
| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
path |
بله | string |
مسیر پیکربندی جداشده با نقطه، نسبت به plugins.entries.<id>.config. از نویسههای عام * برای بخشهای نگاشت/آرایه پشتیبانی میکند. |
equals |
بله | string | number | boolean | null |
مقدار ثابت دقیقی که این مقدار پیکربندی را خطرناک مشخص میکند. |
secretInputs از موارد زیر پشتیبانی میکند:
| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
bundledDefaultEnabled |
خیر | boolean |
هنگام تصمیمگیری دربارهٔ فعال بودن این سطح SecretRef، فعالسازی پیشفرض Plugin همراه را بازنویسی میکند. زمانی از این گزینه استفاده کنید که Plugin همراه است، اما سطح باید تا زمان فعالسازی صریح در پیکربندی غیرفعال بماند. |
paths |
بله | object[] |
مسیرهای پیکربندی با ساختار راز، هرکدام دارای path (با جداسازی نقطهای، نسبی به plugins.entries.<id>.config و با پشتیبانی از نویسههای عام *) و expected اختیاری (در حال حاضر فقط "string"). |
مرجع mediaUnderstandingProviderMetadata
زمانی از mediaUnderstandingProviderMetadata استفاده کنید که یک ارائهدهندهٔ درک رسانه دارای مدلهای پیشفرض، اولویت بازگشت خودکار احراز هویت، یا پشتیبانی بومی از سند است که کمکتابعهای عمومی هسته پیش از بارگذاری زمان اجرا به آن نیاز دارند. کلیدها باید در contracts.mediaUnderstandingProviders نیز اعلان شوند.
{ "contracts": { "mediaUnderstandingProviders": ["example"] }, "mediaUnderstandingProviderMetadata": { "example": { "capabilities": ["image", "audio"], "defaultModels": { "image": "example-vision-latest", "audio": "example-transcribe-latest" }, "autoPriority": { "image": 40 }, "nativeDocumentInputs": ["pdf"], "documentModels": { "pdf": { "textExtraction": "example-doc-text-latest", "image": "example-doc-vision-latest" } } } }}هر ورودی ارائهدهنده میتواند شامل موارد زیر باشد:
| فیلد | نوع | مفهوم |
|---|---|---|
capabilities |
("image" | "audio" | "video")[] |
قابلیتهای رسانهای ارائهشده توسط این ارائهدهنده. |
defaultModels |
Record<string, string> |
پیشفرضهای نگاشت قابلیت به مدل که وقتی پیکربندی مدلی را مشخص نمیکند، استفاده میشوند. |
autoPriority |
Record<string, number> |
برای بازگشت خودکار ارائهدهنده بر پایهٔ اطلاعات ورود، اعداد کمتر زودتر مرتب میشوند. |
nativeDocumentInputs |
"pdf"[] |
ورودیهای بومی سند که ارائهدهنده پشتیبانی میکند. |
documentModels |
{ pdf?: { textExtraction?: string; image?: string | false } } |
بازنویسی مدل بهازای هر نوع سند. برای غیرفعالکردن استخراج مبتنی بر تصویر برای آن نوع سند، image: false را تنظیم کنید. |
مرجع channelConfigs
زمانی از channelConfigs استفاده کنید که یک Plugin کانال پیش از بارگذاری زمان اجرا به فرادادهٔ کمهزینهٔ پیکربندی نیاز دارد. کشف فقطخواندنی راهاندازی/وضعیت کانال میتواند برای کانالهای خارجی پیکربندیشده، وقتی هیچ ورودی راهاندازی موجود نیست یا وقتی setup.requiresRuntime: false غیرضروری بودن زمان اجرای راهاندازی را اعلان میکند، مستقیماً از این فراداده استفاده کند.
channelConfigs فرادادهٔ مانیفست Plugin است، نه یک بخش جدید پیکربندی سطحبالای کاربر. کاربران همچنان نمونههای کانال را زیر channels.<channel-id> پیکربندی میکنند. OpenClaw فرادادهٔ مانیفست را میخواند تا پیش از اجرای کد زمان اجرای Plugin تعیین کند کدام Plugin مالک آن کانال پیکربندیشده است.
برای یک Plugin کانال، configSchema و channelConfigs مسیرهای متفاوتی را توصیف میکنند:
configSchemaاعتبارplugins.entries.<plugin-id>.configرا بررسی میکندchannelConfigs.<channel-id>.schemaاعتبارchannels.<channel-id>را بررسی میکند
Pluginهای غیرهمراهی که channels[] را اعلان میکنند، باید ورودیهای منطبق channelConfigs را نیز اعلان کنند. بدون آنها، OpenClaw همچنان میتواند Plugin را بارگذاری کند، اما سطوح طرحوارهٔ پیکربندی مسیر سرد، راهاندازی و رابط کاربری کنترل تا زمان اجرای زمان اجرای Plugin نمیتوانند ساختار گزینههای متعلق به کانال را تشخیص دهند.
channelConfigs.<channel-id>.commands.nativeCommandsAutoEnabled و nativeSkillsAutoEnabled میتوانند پیشفرضهای ایستای auto را برای بررسیهای پیکربندی فرمان که پیش از بارگذاری زمان اجرای کانال انجام میشوند، اعلان کنند. کانالهای همراه همچنین میتوانند همین پیشفرضها را از طریق package.json#openclaw.channel.commands در کنار دیگر فرادادهٔ کاتالوگ کانال متعلق به بستهٔ خود منتشر کنند.
{ "channelConfigs": { "matrix": { "schema": { "type": "object", "additionalProperties": false, "properties": { "homeserverUrl": { "type": "string" } } }, "uiHints": { "homeserverUrl": { "label": "Homeserver URL", "placeholder": "https://matrix.example.com" } }, "label": "Matrix", "description": "Matrix homeserver connection", "commands": { "nativeCommandsAutoEnabled": true, "nativeSkillsAutoEnabled": true }, "preferOver": ["matrix-legacy"] } }}هر ورودی کانال میتواند شامل موارد زیر باشد:
| فیلد | نوع | مفهوم |
|---|---|---|
schema |
object |
طرحوارهٔ JSON برای channels.<id>. برای هر ورودی اعلانشدهٔ پیکربندی کانال الزامی است. |
uiHints |
Record<string, object> |
برچسبها/متنهای جاینما/راهنمای حساسبودن اختیاری رابط کاربری برای آن بخش پیکربندی کانال. |
label |
string |
برچسب کانال که وقتی فرادادهٔ زمان اجرا آماده نیست، در سطوح انتخابگر و بازرسی ادغام میشود. |
description |
string |
توضیح کوتاه کانال برای سطوح بازرسی و کاتالوگ. |
commands |
object |
پیشفرضهای خودکار ایستای فرمان بومی و Skills بومی برای بررسیهای پیکربندی پیش از زمان اجرا. |
preferOver |
string[] |
شناسههای Plugin قدیمی یا کماولویتتری که این کانال باید در سطوح انتخاب بر آنها اولویت داشته باشد. |
جایگزینکردن Plugin کانال دیگر
زمانی از preferOver استفاده کنید که Plugin شما مالک ترجیحی شناسهٔ کانالی است که Plugin دیگری نیز میتواند آن را ارائه کند. موارد رایج شامل شناسهٔ تغییرنامیافتهٔ Plugin، یک Plugin مستقل که جایگزین Plugin همراه میشود، یا یک انشعاب نگهداریشده است که برای سازگاری پیکربندی همان شناسهٔ کانال را حفظ میکند.
{ "id": "acme-chat", "channels": ["chat"], "channelConfigs": { "chat": { "schema": { "type": "object", "additionalProperties": false, "properties": { "webhookUrl": { "type": "string" } } }, "preferOver": ["chat"] } }}وقتی channels.chat پیکربندی شده باشد، OpenClaw هم شناسهٔ کانال و هم شناسهٔ Plugin ترجیحی را در نظر میگیرد. اگر Plugin کماولویتتر فقط بهدلیل همراه بودن یا فعال بودن پیشفرض انتخاب شده باشد، OpenClaw آن را در پیکربندی مؤثر زمان اجرا غیرفعال میکند تا یک Plugin مالک کانال و ابزارهای آن باشد. انتخاب صریح کاربر همچنان اولویت دارد: اگر کاربر هر دو Plugin را بهصراحت فعال کند (از طریق plugins.allow یا یک پیکربندی مؤثر plugins.entries)، OpenClaw آن انتخاب را حفظ میکند و بهجای تغییر بیسروصدای مجموعهٔ Pluginهای درخواستی، عیبیابی کانال/ابزار تکراری را گزارش میدهد.
دامنهٔ preferOver را به شناسههای Pluginی محدود کنید که واقعاً میتوانند همان کانال را ارائه کنند. این یک فیلد اولویت عمومی نیست و کلیدهای پیکربندی کاربر را تغییرنام نمیدهد.
مرجع modelSupport
زمانی از modelSupport استفاده کنید که OpenClaw باید پیش از بارگذاری زمان اجرای Plugin، Plugin ارائهدهندهٔ شما را از شناسههای کوتاه مدل مانند gpt-5.6-sol یا claude-sonnet-4.6 استنباط کند.
{ "modelSupport": { "modelPrefixes": ["gpt-", "o1", "o3", "o4"], "modelPatterns": ["^computer-use-preview"] }}OpenClaw این ترتیب تقدم را اعمال میکند:
- ارجاعهای صریح
provider/modelاز فرادادهٔ مانیفستprovidersمتعلق به مالک استفاده میکنند modelPatternsبرmodelPrefixesمقدم است- اگر یک Plugin غیرهمراه و یک Plugin همراه هر دو منطبق باشند، Plugin غیرهمراه برنده میشود
- ابهام باقیمانده تا زمانی که کاربر یا پیکربندی یک ارائهدهنده را مشخص کند، نادیده گرفته میشود
فیلدها:
| فیلد | نوع | مفهوم |
|---|---|---|
modelPrefixes |
string[] |
پیشوندهایی که با startsWith در برابر شناسههای کوتاه مدل تطبیق داده میشوند. |
modelPatterns |
string[] |
منابع عبارت منظم که پس از حذف پسوند پروفایل در برابر شناسههای کوتاه مدل تطبیق داده میشوند. |
ورودیهای modelPatterns از طریق compileSafeRegex کامپایل میشوند که الگوهای دارای تکرار تودرتو (برای مثال (a+)+$) را رد میکند. الگوهایی که بررسی ایمنی را نمیگذرانند، همانند عبارتهای منظم دارای نحو نامعتبر، بیسروصدا نادیده گرفته میشوند. الگوها را ساده نگه دارید و از کمیتسازهای تودرتو پرهیز کنید.
مرجع modelCatalog
زمانی از modelCatalog استفاده کنید که OpenClaw باید پیش از بارگذاری زمان اجرای Plugin، فرادادهٔ مدل ارائهدهنده را بداند. این منبع متعلق به مانیفست برای ردیفهای ثابت کاتالوگ، نامهای مستعار ارائهدهنده، قواعد حذف و حالت کشف است. تازهسازی زمان اجرا همچنان متعلق به کد زمان اجرای ارائهدهنده است، اما مانیفست به هسته اعلام میکند چه زمانی زمان اجرا لازم است.
{ "providers": ["openai"], "modelCatalog": { "providers": { "openai": { "baseUrl": "https://api.openai.com/v1", "api": "openai-responses", "models": [ { "id": "gpt-5.4", "name": "GPT-5.4", "input": ["text", "image"], "reasoning": true, "contextWindow": 256000, "maxTokens": 128000, "cost": { "input": 1.25, "output": 10, "cacheRead": 0.125 }, "status": "available", "tags": ["default"] } ] } }, "aliases": { "azure-openai-responses": { "provider": "openai", "api": "azure-openai-responses" } }, "suppressions": [ { "provider": "azure-openai-responses", "model": "gpt-5.3-codex-spark", "reason": "not available on Azure OpenAI Responses" } ], "discovery": { "openai": "static" } }}فیلدهای سطحبالا:
| فیلد | نوع | مفهوم |
|---|---|---|
providers |
Record<string, object> |
ردیفهای کاتالوگ برای شناسههای ارائهدهندهای که مالکیتشان با این Plugin است. کلیدها باید در providers سطح بالا نیز ظاهر شوند. |
aliases |
Record<string, object> |
نامهای مستعار ارائهدهنده که برای برنامهریزی کاتالوگ یا سرکوب باید به یک ارائهدهنده تحت مالکیت تفکیک شوند. |
suppressions |
object[] |
ردیفهای مدل از منبعی دیگر که این Plugin به دلیلی مختص ارائهدهنده سرکوب میکند. |
discovery |
Record<string, "static" | "refreshable" | "runtime"> |
اینکه آیا کاتالوگ ارائهدهنده از فراداده مانیفست قابل خواندن است، میتوان آن را در کش تازهسازی کرد، یا به زمان اجرا نیاز دارد. |
runtimeAugment |
boolean |
فقط زمانی روی true تنظیم شود که زمان اجرای ارائهدهنده باید پس از برنامهریزی مانیفست/پیکربندی، ردیفهایی به کاتالوگ بیفزاید. |
aliases در جستوجوی مالکیت ارائهدهنده برای برنامهریزی کاتالوگ مدل مشارکت دارد. مقصد نامهای مستعار باید ارائهدهندگان سطح بالایی باشند که تحت مالکیت همان Plugin هستند. وقتی فهرستی پالایششده بر اساس ارائهدهنده از یک نام مستعار استفاده میکند، OpenClaw میتواند بدون بارگذاری زمان اجرای ارائهدهنده، مانیفست مالک را بخواند و بازنویسیهای API/نشانی پایه نام مستعار را اعمال کند. نامهای مستعار، فهرستهای پالایشنشده کاتالوگ را گسترش نمیدهند؛ فهرستهای گسترده فقط ردیفهای ارائهدهنده متعارفِ مالک را خروجی میدهند.
suppressions جایگزین هوک قدیمی suppressBuiltInModel در زمان اجرای ارائهدهنده میشود. ورودیهای سرکوب فقط زمانی اعمال میشوند که ارائهدهنده تحت مالکیت Plugin باشد یا بهعنوان کلید modelCatalog.aliases تعریف شده باشد که به یک ارائهدهنده تحت مالکیت اشاره میکند. هوکهای سرکوب زمان اجرا دیگر هنگام تفکیک مدل فراخوانی نمیشوند.
فیلدهای ارائهدهنده:
| فیلد | نوع | مفهوم |
|---|---|---|
baseUrl |
string |
نشانی پایه پیشفرض اختیاری برای مدلهای این کاتالوگ ارائهدهنده. |
api |
ModelApi |
آداپتور API پیشفرض اختیاری برای مدلهای این کاتالوگ ارائهدهنده. |
headers |
Record<string, string> |
سرآیندهای ایستای اختیاری که برای این کاتالوگ ارائهدهنده اعمال میشوند. |
defaultUtilityModel |
string |
شناسه اختیاری مدل کوچک پیشنهادی ارائهدهنده برای وظایف کوتاه و داخلی کمکی (عنوانها، روایت پیشرفت). وقتی agents.defaults.utilityModel تنظیم نشده باشد و این ارائهدهنده مدل اصلی عامل را ارائه کند، استفاده میشود. |
models |
object[] |
ردیفهای الزامی مدل. ردیفهای فاقد id نادیده گرفته میشوند. |
فیلدهای مدل:
| فیلد | نوع | مفهوم |
|---|---|---|
id |
string |
شناسه مدل محلیِ ارائهدهنده، بدون پیشوند provider/. |
name |
string |
نام نمایشی اختیاری. |
api |
ModelApi |
بازنویسی اختیاری API برای هر مدل. |
baseUrl |
string |
بازنویسی اختیاری نشانی پایه برای هر مدل. |
headers |
Record<string, string> |
سرآیندهای ایستای اختیاری برای هر مدل. |
input |
Array<"text" | "image" | "document"> |
شیوههای ورودی پذیرفتهشده توسط مدل. مقادیر دیگر بدون هشدار حذف میشوند. |
reasoning |
boolean |
اینکه آیا مدل رفتار استدلالی ارائه میکند. |
contextWindow |
number |
پنجره زمینه بومی ارائهدهنده. |
contextTokens |
number |
سقف مؤثر و اختیاری زمینه در زمان اجرا، هنگامی که با contextWindow متفاوت است. |
maxTokens |
number |
حداکثر توکنهای خروجی، در صورت مشخص بودن. |
thinkingLevelMap |
Record<string, string | null> |
بازنویسیهای اختیاری شناسه مدل یا پارامتر برای هر سطح تفکر. |
cost |
object |
قیمتگذاری اختیاری دلاری بهازای هر یک میلیون توکن، شامل tieredPricing اختیاری. |
compat |
object |
پرچمهای سازگاری اختیاری منطبق با سازگاری پیکربندی مدل OpenClaw. |
mediaInput |
object |
پیکربندی اختیاری ورودی برای هر شیوه، که در حال حاضر فقط تصویر را پوشش میدهد. |
status |
"available" | "preview" | "deprecated" | "disabled" |
وضعیت فهرستشدن. فقط زمانی سرکوب شود که ردیف نباید بههیچوجه ظاهر شود. |
statusReason |
string |
دلیل اختیاری که همراه وضعیت غیرقابلدسترس نمایش داده میشود. |
replaces |
string[] |
شناسههای قدیمیتر مدل محلیِ ارائهدهنده که این مدل جایگزین آنها میشود. |
replacedBy |
string |
شناسه مدل محلیِ ارائهدهنده جایگزین برای ردیفهای منسوخشده. |
tags |
string[] |
برچسبهای پایداری که انتخابگرها و پالایهها از آنها استفاده میکنند. |
فیلدهای سرکوب:
| فیلد | نوع | مفهوم |
|---|---|---|
provider |
string |
شناسه ارائهدهنده برای ردیف بالادستی که باید سرکوب شود. باید تحت مالکیت این Plugin باشد یا بهعنوان نام مستعار تحت مالکیت تعریف شده باشد. |
model |
string |
شناسه مدل محلیِ ارائهدهنده که باید سرکوب شود. |
reason |
string |
پیام اختیاری که هنگام درخواست مستقیم ردیف سرکوبشده نمایش داده میشود. |
when.baseUrlHosts |
string[] |
فهرست اختیاری میزبانهای مؤثر نشانی پایه ارائهدهنده که پیش از اعمال سرکوب باید وجود داشته باشند. |
when.providerConfigApiIn |
string[] |
فهرست اختیاری مقادیر دقیق api در پیکربندی ارائهدهنده که پیش از اعمال سرکوب الزامی هستند. |
دادههای مخصوص زمان اجرا را در modelCatalog قرار ندهید. فقط زمانی از static استفاده کنید که ردیفهای مانیفست بهاندازه کافی کامل باشند تا سطوح فهرست و انتخابگرِ پالایششده بر اساس ارائهدهنده بتوانند از کشف رجیستری/زمان اجرا صرفنظر کنند. از refreshable زمانی استفاده کنید که ردیفهای مانیفست بذرها یا مکملهای مفیدی برای فهرستشدن باشند، اما تازهسازی/کش بتواند بعداً ردیفهای بیشتری اضافه کند؛ ردیفهای قابل تازهسازی بهتنهایی مرجع قطعی نیستند. از runtime زمانی استفاده کنید که OpenClaw برای دانستن فهرست باید زمان اجرای ارائهدهنده را بارگذاری کند.
مرجع modelIdNormalization
از modelIdNormalization برای پاکسازی کمهزینه شناسه مدل تحت مالکیت ارائهدهنده استفاده کنید که باید پیش از بارگذاری زمان اجرای ارائهدهنده انجام شود. این کار نامهای مستعار مانند نامهای کوتاه مدل، شناسههای قدیمی محلیِ ارائهدهنده و قواعد پیشوند پراکسی را بهجای جدولهای اصلی انتخاب مدل، در مانیفست Plugin مالک نگه میدارد.
{ "providers": ["anthropic", "openrouter"], "modelIdNormalization": { "providers": { "anthropic": { "aliases": { "sonnet-4.6": "claude-sonnet-4-6" } }, "openrouter": { "prefixWhenBare": "openrouter" } } }}فیلدهای ارائهدهنده:
| فیلد | نوع | مفهوم |
|---|---|---|
aliases |
Record<string,string> |
نامهای مستعار دقیق شناسه مدل بدون حساسیت به حروف بزرگ و کوچک. مقادیر همانگونه که نوشته شدهاند بازگردانده میشوند. |
stripPrefixes |
string[] |
پیشوندهایی که پیش از جستوجوی نام مستعار حذف میشوند و برای تکرار قدیمی ارائهدهنده/مدل مفیدند. |
prefixWhenBare |
string |
پیشوندی که وقتی شناسه مدل نرمالشده از قبل شامل / نیست، افزوده میشود. |
prefixWhenBareAfterAliasStartsWith |
object[] |
قواعد شرطی پیشوند برای شناسه بدون پیشوند پس از جستوجوی نام مستعار، با کلیدهای modelPrefix و prefix. |
مرجع providerEndpoints
از providerEndpoints برای دستهبندی نقطه پایانی استفاده کنید که سیاست عمومی درخواست باید پیش از بارگذاری زمان اجرای ارائهدهنده از آن آگاه باشد. هسته همچنان مالک معنای هر endpointClass است؛ مانیفستهای Plugin مالک فراداده میزبان و نشانی پایه هستند.
Pluginهای ارائهدهنده که رسماً بیرونی شدهاند از توزیع هسته کنار گذاشته میشوند، بنابراین
مانیفستهای آنها تا زمان نصب قابل مشاهده نیستند. providerEndpoints آنها باید
در scripts/lib/official-external-provider-catalog.json نیز منعکس شود تا
دستهبندی نقطه پایانی بدون Plugin همچنان کار کند؛ یک آزمون قرارداد
این همسانسازی را اعمال میکند.
فیلدهای نقطه پایانی:
| فیلد | نوع | مفهوم |
|---|---|---|
endpointClass |
string |
کلاس شناختهشدهٔ نقطهٔ پایانی هسته، مانند openrouter، moonshot-native یا google-vertex. |
hosts |
string[] |
نامهای میزبان دقیقی که به کلاس نقطهٔ پایانی نگاشت میشوند. |
hostSuffixes |
string[] |
پسوندهای میزبانی که به کلاس نقطهٔ پایانی نگاشت میشوند. برای تطبیق صرفاً با پسوند دامنه، با . آغاز کنید. |
baseUrls |
string[] |
نشانیهای پایهٔ HTTP(S) دقیق و نرمالسازیشدهای که به کلاس نقطهٔ پایانی نگاشت میشوند. |
googleVertexRegion |
string |
منطقهٔ ایستای Google Vertex برای میزبانهای سراسری دقیق. |
googleVertexRegionHostSuffix |
string |
پسوندی که از میزبانهای منطبق حذف میشود تا پیشوند منطقهٔ Google Vertex آشکار شود. |
مرجع providerRequest
از providerRequest برای فرادادهٔ کمهزینهٔ سازگاری درخواست استفاده کنید که سیاست عمومی درخواست بدون بارگذاری زمان اجرای ارائهدهنده به آن نیاز دارد. بازنویسی محمولهٔ مختص رفتار را در هوکهای زمان اجرای ارائهدهنده یا کمکتابعهای مشترک خانوادهٔ ارائهدهندگان نگه دارید.
{ "providerRequest": { "providers": { "vllm": { "family": "vllm", "openAICompletions": { "supportsStreamingUsage": true } } } }}فیلدهای ارائهدهنده:
| فیلد | نوع | مفهوم |
|---|---|---|
family |
string |
برچسب خانوادهٔ ارائهدهنده که تصمیمهای عمومی سازگاری درخواست و عیبیابی از آن استفاده میکنند. |
compatibilityFamily |
"moonshot" |
دستهٔ اختیاری سازگاری خانوادهٔ ارائهدهنده برای کمکتابعهای مشترک درخواست. |
openAICompletions |
object |
پرچمهای درخواست تکمیل سازگار با OpenAI که در حال حاضر شامل supportsStreamingUsage است. |
مرجع secretProviderIntegrations
هنگامی از secretProviderIntegrations استفاده کنید که یک Plugin بتواند پیشتنظیم ارائهدهندهٔ اجرایی و قابلاستفادهٔ مجدد SecretRef را منتشر کند. OpenClaw این فراداده را پیش از بارگذاری زمان اجرای Plugin میخواند، مالکیت Plugin را در secrets.providers.<alias>.pluginIntegration ذخیره میکند و حل واقعی محرمانه را به زمان اجرای SecretRef واگذار میکند. پیشتنظیمها فقط برای Pluginهای همراه و Pluginهای نصبشدهای ارائه میشوند که از ریشههای مدیریتشدهٔ نصب Plugin، مانند نصبهای git و ClawHub، کشف شدهاند.
{ "secretProviderIntegrations": { "secret-store": { "providerAlias": "team-secrets", "displayName": "Team secrets", "source": "exec", "command": "${node}", "args": ["./bin/resolve-secrets.mjs"] } }}کلید نگاشت، شناسهٔ یکپارچهسازی است. اگر providerAlias حذف شود، OpenClaw از شناسهٔ یکپارچهسازی بهعنوان نام مستعار ارائهدهندهٔ SecretRef استفاده میکند. نامهای مستعار ارائهدهنده باید با الگوی عادی نام مستعار ارائهدهندهٔ SecretRef مطابقت داشته باشند؛ برای مثال team-secrets یا onepassword-work.
هنگامی که یک اپراتور پیشتنظیم را انتخاب میکند، OpenClaw مرجع ارائهدهندهای مانند نمونهٔ زیر مینویسد:
{ "secrets": { "providers": { "team-secrets": { "source": "exec", "pluginIntegration": { "pluginId": "acme-secrets", "integrationId": "secret-store" } } } }}هنگام راهاندازی یا بارگذاری مجدد، OpenClaw این ارائهدهنده را با بارگذاری فرادادهٔ فعلی مانیفست Plugin، بررسی نصب و فعالبودن Plugin مالک، و ساخت دستور اجرایی از مانیفست حل میکند. غیرفعال یا حذفکردن Plugin، ارائهدهنده را برای SecretRefهای فعال لغو میکند. اپراتورهایی که پیکربندی اجرایی مستقل میخواهند، همچنان میتوانند ارائهدهندگان دستی command/args را مستقیماً تعریف کنند.
در حال حاضر فقط پیشتنظیمهای source: "exec" پشتیبانی میشوند. command باید ${node} باشد و args[0] باید یک اسکریپت حلکنندهٔ نسبی به ریشهٔ Plugin با پیشوند ./ باشد. OpenClaw هنگام راهاندازی یا بارگذاری مجدد، آن را به فایل اجرایی فعلی Node و مسیر مطلق اسکریپت درون Plugin تبدیل میکند. گزینههای Node مانند --require، --import، --loader، --env-file، --eval و --print بخشی از قرارداد پیشتنظیم مانیفست نیستند. اپراتورهایی که به دستورهای غیر Node نیاز دارند، میتوانند ارائهدهندگان اجرایی دستی و مستقل را مستقیماً پیکربندی کنند.
OpenClaw مقدار trustedDirs را برای پیشتنظیمهای مانیفست از ریشهٔ Plugin و، برای پیشتنظیمهای ${node}، از پوشهٔ فایل اجرایی فعلی Node استخراج میکند. مقادیر trustedDirs تعریفشده در مانیفست نادیده گرفته میشوند. سایر گزینههای ارائهدهندهٔ اجرایی مانند timeoutMs، noOutputTimeoutMs، maxOutputBytes، jsonOnly، env، passEnv و allowInsecurePath بدون تغییر به پیکربندی عادی ارائهدهندهٔ اجرایی SecretRef منتقل میشوند.
مرجع modelPricing
هنگامی از modelPricing استفاده کنید که یک ارائهدهنده پیش از بارگذاری زمان اجرا به کنترل رفتار قیمتگذاری در صفحهٔ کنترل نیاز دارد. حافظهٔ نهان قیمتگذاری Gateway این فراداده را بدون واردکردن کد زمان اجرای ارائهدهنده میخواند.
{ "providers": ["ollama", "openrouter"], "modelPricing": { "providers": { "ollama": { "external": false }, "openrouter": { "openRouter": { "passthroughProviderModel": true }, "liteLLM": false } } }}فیلدهای ارائهدهنده:
| فیلد | نوع | مفهوم |
|---|---|---|
external |
boolean |
برای ارائهدهندگان محلی یا خودمیزبان که هرگز نباید قیمتگذاری OpenRouter یا LiteLLM را دریافت کنند، روی false تنظیم کنید. |
openRouter |
false | object |
نگاشت جستوجوی قیمتگذاری OpenRouter. مقدار false جستوجوی OpenRouter را برای این ارائهدهنده غیرفعال میکند. |
liteLLM |
false | object |
نگاشت جستوجوی قیمتگذاری LiteLLM. مقدار false جستوجوی LiteLLM را برای این ارائهدهنده غیرفعال میکند. |
فیلدهای منبع:
| فیلد | نوع | مفهوم |
|---|---|---|
provider |
string |
شناسهٔ ارائهدهنده در کاتالوگ خارجی، هنگامی که با شناسهٔ ارائهدهندهٔ OpenClaw متفاوت است؛ برای مثال z-ai برای ارائهدهندهٔ zai. |
passthroughProviderModel |
boolean |
شناسههای مدل دارای اسلش را بهعنوان مراجع تودرتوی ارائهدهنده/مدل در نظر میگیرد؛ برای ارائهدهندگان پراکسی مانند OpenRouter مفید است. |
modelIdTransforms |
"version-dots"[] |
گونههای اضافی شناسهٔ مدل در کاتالوگ خارجی. version-dots شناسههای نسخهٔ نقطهدار مانند claude-opus-4.6 را امتحان میکند. |
نمایهٔ ارائهدهندگان OpenClaw
نمایهٔ ارائهدهندگان OpenClaw فرادادهٔ پیشنمایش متعلق به OpenClaw برای ارائهدهندگانی است که ممکن است Plugin آنها هنوز نصب نشده باشد. این نمایه بخشی از مانیفست Plugin نیست. مانیفستهای Plugin همچنان مرجع معتبر Pluginهای نصبشده هستند. نمایهٔ ارائهدهندگان قرارداد بازگشت داخلی است که رابطهای آیندهٔ ارائهدهندگان قابلنصب و انتخابگر مدل پیش از نصب، هنگامی که Plugin ارائهدهنده نصب نیست، از آن استفاده خواهند کرد.
ترتیب اعتبار کاتالوگ:
- پیکربندی کاربر.
modelCatalogمانیفست Plugin نصبشده.- حافظهٔ نهان کاتالوگ مدل حاصل از نوسازی صریح.
- ردیفهای پیشنمایش نمایهٔ ارائهدهندگان OpenClaw.
نمایهٔ ارائهدهندگان نباید شامل محرمانهها، وضعیت فعالبودن، هوکهای زمان اجرا یا دادههای زندهٔ مدل مختص حساب باشد. کاتالوگهای پیشنمایش آن از همان ساختار ردیف ارائهدهندهٔ modelCatalog در مانیفستهای Plugin استفاده میکنند، اما باید به فرادادهٔ نمایشی پایدار محدود بمانند؛ مگر اینکه فیلدهای آداپتور زمان اجرا مانند api، baseUrl، قیمتگذاری یا پرچمهای سازگاری عمداً با مانیفست Plugin نصبشده همتراز نگه داشته شوند. ارائهدهندگانی که کشف زندهٔ /models دارند باید ردیفهای نوسازیشده را از مسیر صریح حافظهٔ نهان کاتالوگ مدل بنویسند، نه اینکه فهرستسازی عادی یا فرایند ورود اولیه را وادار به فراخوانی APIهای ارائهدهنده کنند.
ورودیهای نمایهٔ ارائهدهندگان همچنین میتوانند فرادادهٔ Plugin قابلنصب را برای ارائهدهندگانی داشته باشند که Plugin آنها از هسته خارج شده یا هنوز نصب نشده است. این فراداده از الگوی کاتالوگ کانال پیروی میکند: نام بسته، مشخصات نصب npm، یکپارچگی مورد انتظار و برچسبهای کمهزینهٔ انتخاب احراز هویت برای نمایش یک گزینهٔ راهاندازی قابلنصب کافی هستند. پس از نصب Plugin، مانیفست آن اولویت دارد و ورودی نمایهٔ ارائهدهندگان برای آن ارائهدهنده نادیده گرفته میشود.
openclaw doctor --fix مجموعهای کوچک و بسته از کلیدهای قدیمی قابلیت در سطح بالای مانیفست را به contracts.* منتقل میکند: speechProviders، mediaUnderstandingProviders، imageGenerationProviders و tools. دیگر هیچیک از این موارد یا هر فهرست قابلیت دیگری بهعنوان فیلدهای سطح بالای مانیفست خوانده نمیشوند؛ بارگذاری عادی مانیفست فقط آنها را زیر contracts میشناسد.
مانیفست در برابر package.json
این دو فایل وظایف متفاوتی دارند:
| فایل | کاربرد |
|---|---|
openclaw.plugin.json |
کشف، اعتبارسنجی پیکربندی، فرادادهٔ انتخاب احراز هویت و راهنماییهای رابط کاربری که باید پیش از اجرای کد Plugin وجود داشته باشند |
package.json |
فرادادهٔ npm، نصب وابستگیها و بلوک openclaw که برای نقاط ورود، محدودسازی نصب، راهاندازی یا فرادادهٔ کاتالوگ استفاده میشود |
اگر مطمئن نیستید یک بخش از فراداده به کدام فایل تعلق دارد، از این قاعده استفاده کنید:
- اگر OpenClaw باید پیش از بارگذاری کد Plugin آن را بداند، در
openclaw.plugin.jsonقرارش دهید - اگر مربوط به بستهبندی، فایلهای ورودی یا رفتار نصب npm است، در
package.jsonقرارش دهید
فیلدهای package.json که بر کشف اثر میگذارند
بخشی از فرادادهٔ پیش از زمان اجرای Plugin عمداً بهجای openclaw.plugin.json، در بلوک openclaw درون package.json قرار دارد. openclaw.bundle و openclaw.bundle.json قراردادهای Plugin در OpenClaw نیستند؛ Pluginهای بومی باید از openclaw.plugin.json بههمراه فیلدهای پشتیبانیشدهٔ package.json#openclaw در ادامه استفاده کنند.
نمونههای مهم:
| فیلد | معنی آن |
|---|---|
openclaw.extensions |
نقاط ورود Plugin بومی را اعلام میکند. باید داخل پوشهٔ بستهٔ Plugin باقی بماند. |
openclaw.runtimeExtensions |
نقاط ورود زمان اجرای JavaScript ساختهشده برای بستههای نصبشده را اعلام میکند. باید داخل پوشهٔ بستهٔ Plugin باقی بماند. |
openclaw.setupEntry |
نقطهٔ ورود سبکوزن و مختص راهاندازی که هنگام آغاز به کار، شروع با تأخیر کانال و کشف وضعیت فقطخواندنی کانال/SecretRef استفاده میشود. باید داخل پوشهٔ بستهٔ Plugin باقی بماند. |
openclaw.runtimeSetupEntry |
نقطهٔ ورود راهاندازی JavaScript ساختهشده را برای بستههای نصبشده اعلام میکند. به setupEntry نیاز دارد، باید موجود باشد و باید داخل پوشهٔ بستهٔ Plugin باقی بماند. |
openclaw.channel |
فرادادهٔ کمهزینهٔ فهرست کانال، مانند برچسبها، مسیرهای مستندات، نامهای مستعار و متن انتخاب. |
openclaw.channel.commands |
فرادادهٔ ایستای فرمان بومی و پیشفرض خودکار Skills بومی که پیش از بارگذاری زمان اجرای کانال، در سطوح پیکربندی، ممیزی و فهرست فرمانها استفاده میشود. |
openclaw.channel.configuredState |
فرادادهٔ سبکوزن بررسیکنندهٔ وضعیت پیکربندیشده که بدون بارگذاری کامل زمان اجرای کانال میتواند پاسخ دهد «آیا راهاندازی صرفاً مبتنی بر env از قبل وجود دارد؟». |
openclaw.channel.persistedAuthState |
فرادادهٔ سبکوزن بررسیکنندهٔ احراز هویت ماندگار که بدون بارگذاری کامل زمان اجرای کانال میتواند پاسخ دهد «آیا از قبل ورود به حسابی انجام شده است؟». |
openclaw.install.clawhubSpec / openclaw.install.npmSpec / openclaw.install.localPath |
راهنمای نصب/بهروزرسانی برای Pluginهای همراه و منتشرشده بهصورت خارجی. |
openclaw.install.defaultChoice |
مسیر نصب ترجیحی هنگامی که چند منبع نصب در دسترس است. |
openclaw.install.minHostVersion |
حداقل نسخهٔ پشتیبانیشدهٔ میزبان OpenClaw، با استفاده از کران پایین semver مانند >=2026.3.22 یا >=2026.5.1-beta.1. |
openclaw.compat.pluginApi |
حداقل بازهٔ API مربوط به Plugin در OpenClaw که این بسته به آن نیاز دارد، با استفاده از کران پایین semver مانند >=2026.5.27. |
openclaw.install.expectedIntegrity |
رشتهٔ یکپارچگی مورد انتظار برای توزیع npm، مانند sha512-...؛ جریانهای نصب و بهروزرسانی مصنوع دریافتشده را با آن تطبیق میدهند. |
openclaw.install.allowInvalidConfigRecovery |
در صورت نامعتبر بودن پیکربندی، مسیر بازیابی محدودِ نصب مجدد Plugin همراه را مجاز میکند. |
openclaw.install.requiredPlatformPackages |
نامهای مستعار بستههای npm که وقتی محدودیتهای سکوی آنها در فایل قفل با میزبان فعلی مطابقت دارد، باید ایجاد شوند. |
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen |
اجازه میدهد سطوح کانال زمان اجرای راهاندازی پیش از آغاز گوشدادن بارگذاری شوند و سپس Plugin کامل کانال پیکربندیشده تا فعالسازی پس از گوشدادن به تعویق بیفتد. |
فرادادهٔ مانیفست تعیین میکند پیش از بارگذاری زمان اجرا، کدام گزینههای ارائهدهنده/کانال/راهاندازی در آغاز به کار نمایش داده شوند. package.json#openclaw.install به فرایند آغاز به کار میگوید وقتی کاربر یکی از آن گزینهها را انتخاب میکند، چگونه آن Plugin را دریافت یا فعال کند. راهنمای نصب را به openclaw.plugin.json منتقل نکنید.
openclaw.install.minHostVersion هنگام نصب و بارگذاری رجیستری مانیفست برای منابع Plugin غیرهمراه اعمال میشود. مقادیر نامعتبر رد میشوند؛ مقادیر جدیدتر اما معتبر باعث میشوند Pluginهای خارجی روی میزبانهای قدیمیتر نادیده گرفته شوند. فرض بر این است که Pluginهای منبع همراه با نسخهٔ کد منبع میزبان همنسخه هستند.
openclaw.install.requiredPlatformPackages برای بستههای npm است که فایلهای اجرایی بومی الزامی را از طریق نامهای مستعار اختیاری و مختص سکو ارائه میکنند. نام سادهٔ بستهٔ npm را برای نام مستعار هر سکوی پشتیبانیشده فهرست کنید. هنگام نصب npm، OpenClaw فقط نام مستعار اعلامشدهای را بررسی میکند که محدودیتهای فایل قفل آن با میزبان فعلی مطابقت دارد. اگر npm موفقیت را گزارش کند اما آن نام مستعار را حذف کرده باشد، OpenClaw یک بار با حافظهٔ نهان تازه دوباره تلاش میکند و اگر نام مستعار همچنان وجود نداشته باشد، نصب را بازمیگرداند.
openclaw.compat.pluginApi هنگام نصب بسته برای منابع Plugin غیرهمراه اعمال میشود. از آن برای تعیین کران پایین API مربوط به SDK/زمان اجرای Plugin در OpenClaw استفاده کنید که بسته بر مبنای آن ساخته شده است. هنگامی که یک بستهٔ Plugin به API جدیدتری نیاز دارد اما همچنان برای جریانهای دیگر راهنمای نصب پایینتری را حفظ میکند، این مقدار میتواند سختگیرانهتر از minHostVersion باشد. همگامسازی انتشار رسمی OpenClaw بهطور پیشفرض کرانهای پایین موجود API مربوط به Pluginهای رسمی را به نسخهٔ انتشار OpenClaw افزایش میدهد، اما انتشارهای مختص Plugin میتوانند در صورتی که بسته عمداً از میزبانهای قدیمیتر پشتیبانی میکند، کران پایینتری را حفظ کنند. نسخهٔ بسته را بهتنهایی بهعنوان قرارداد سازگاری استفاده نکنید. peerDependencies.openclaw همچنان فرادادهٔ بستهٔ npm است؛ OpenClaw برای تصمیمهای سازگاری نصب از قرارداد openclaw.compat.pluginApi استفاده میکند.
فرادادهٔ رسمی نصب در صورت نیاز، وقتی Plugin در ClawHub منتشر شده است، باید از clawhubSpec استفاده کند؛ فرایند آغاز به کار آن را منبع راهدور ترجیحی در نظر میگیرد و پس از نصب، اطلاعات مصنوع ClawHub را ثبت میکند. npmSpec برای بستههایی که هنوز به ClawHub منتقل نشدهاند، بهعنوان مسیر جایگزین سازگاری باقی میماند.
ثابتکردن دقیق نسخهٔ npm از قبل در npmSpec قرار دارد؛ برای مثال "npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3". مدخلهای رسمی فهرست خارجی باید مشخصات دقیق را با expectedIntegrity جفت کنند تا اگر مصنوع npm دریافتشده دیگر با انتشار ثابتشده مطابقت نداشت، جریانهای بهروزرسانی بهصورت بسته و امن شکست بخورند. فرایند تعاملی آغاز به کار برای سازگاری همچنان مشخصات npm رجیستری مورد اعتماد، از جمله نام سادهٔ بسته و برچسبهای توزیع، را ارائه میدهد. عیبیابی فهرست میتواند منابع دقیق، شناور، ثابتشده با یکپارچگی، فاقد یکپارچگی، دارای عدم تطابق نام بسته و دارای انتخاب پیشفرض نامعتبر را از یکدیگر تشخیص دهد. همچنین وقتی expectedIntegrity وجود دارد اما منبع معتبر npm برای ثابتکردن آن وجود ندارد، هشدار میدهد. وقتی expectedIntegrity وجود دارد، جریانهای نصب/بهروزرسانی آن را اعمال میکنند؛ وقتی حذف شده باشد، وضوح رجیستری بدون ثابتکردن یکپارچگی ثبت میشود.
Pluginهای کانال باید زمانی openclaw.setupEntry را ارائه کنند که بررسیهای وضعیت، فهرست کانال یا SecretRef لازم است حسابهای پیکربندیشده را بدون بارگذاری کامل زمان اجرا شناسایی کنند. نقطهٔ ورود راهاندازی باید فرادادهٔ کانال را بههمراه سازگارکنندههای امن برای راهاندازیِ پیکربندی، وضعیت و اسرار ارائه کند؛ کلاینتهای شبکه، شنوندههای Gateway و زمانهای اجرای انتقال را در نقطهٔ ورود افزونهٔ اصلی نگه دارید.
فیلدهای نقطهٔ ورود زمان اجرا، بررسیهای مرز بسته برای فیلدهای نقطهٔ ورود منبع را بازنویسی نمیکنند. برای مثال، openclaw.runtimeExtensions نمیتواند مسیر openclaw.extensions خارجشونده از بسته را قابل بارگذاری کند.
openclaw.install.allowInvalidConfigRecovery عمداً محدود است. این گزینه پیکربندیهای خراب دلخواه را قابل نصب نمیکند. در حال حاضر فقط به جریانهای نصب اجازه میدهد از شکستهای مشخص و قدیمی ارتقای Plugin همراه بازیابی شوند؛ مانند نبود مسیر Plugin همراه یا مدخل قدیمی channels.<id> برای همان Plugin همراه. خطاهای نامرتبط پیکربندی همچنان نصب را مسدود میکنند و راهبران را به openclaw doctor --fix هدایت میکنند.
openclaw.channel.persistedAuthState فرادادهٔ بسته برای یک ماژول بررسیکنندهٔ کوچک است:
{ "openclaw": { "channel": { "id": "whatsapp", "persistedAuthState": { "specifier": "./auth-presence", "exportName": "hasAnyWhatsAppAuth" } } }}از آن زمانی استفاده کنید که راهاندازی، doctor، وضعیت یا جریانهای فقطخواندنی حضور، پیش از بارگذاری کامل Plugin کانال به یک بررسی ارزان بله/خیر برای احراز هویت نیاز دارند. وضعیت احراز هویت ماندگار با وضعیت کانال پیکربندیشده یکسان نیست: از این فراداده برای فعالسازی خودکار Pluginها، ترمیم وابستگیهای زمان اجرا یا تصمیمگیری دربارهٔ بارگذاری زمان اجرای کانال استفاده نکنید. خروجی هدف باید تابع کوچکی باشد که فقط وضعیت ماندگار را میخواند؛ آن را از مسیر barrel کامل زمان اجرای کانال عبور ندهید.
openclaw.channel.configuredState برای بررسیهای کمهزینهٔ وضعیت پیکربندیشدهٔ صرفاً مبتنی بر env از همین ساختار پیروی میکند:
{ "openclaw": { "channel": { "id": "telegram", "configuredState": { "specifier": "./configured-state", "exportName": "hasTelegramConfiguredState" } } }}از آن زمانی استفاده کنید که یک کانال بتواند وضعیت پیکربندیشده را از env یا ورودیهای کوچک دیگرِ غیرزماناجرا تعیین کند. اگر بررسی به وضوح کامل پیکربندی یا زمان اجرای واقعی کانال نیاز دارد، آن منطق را در هوک config.hasConfiguredState مربوط به Plugin نگه دارید.
تقدم کشف (شناسههای تکراری Plugin)
OpenClaw، Pluginها را از سه ریشه کشف میکند که به این ترتیب بررسی میشوند: Pluginهای همراه عرضهشده با OpenClaw، ریشهٔ نصب سراسری (~/.openclaw/extensions) و ریشهٔ فضای کاری فعلی (<workspace>/.openclaw/extensions)، بهعلاوهٔ هر مدخل صریح plugins.load.paths.
اگر دو کشف id یکسانی داشته باشند، فقط مانیفست دارای بالاترین تقدم نگه داشته میشود؛ موارد تکراری با تقدم پایینتر بهجای بارگذاری در کنار آن حذف میشوند. تقدم از بالاترین به پایینترین:
- انتخابشده با پیکربندی — مسیری که بهصراحت در
plugins.entries.<id>ثابت شده است - نصب سراسری منطبق با یک سابقهٔ نصب ردیابیشده — Pluginی که از طریق
openclaw plugin install/openclaw plugin updateنصب شده و ردیابی نصب OpenClaw آن را برای همان شناسه تشخیص میدهد، حتی وقتی شناسه به یک Plugin همراه نیز تعلق دارد - همراه — Pluginهای عرضهشده با OpenClaw
- فضای کاری — Pluginهایی که نسبت به فضای کاری فعلی کشف شدهاند
- هر نامزد کشفشدهٔ دیگر
پیامدها:
- یک نسخهٔ منشعب یا قدیمی از Plugin همراه که بدون ردیابی در فضای کاری یا ریشهٔ سراسری قرار دارد، نسخهٔ همراه را تحتالشعاع قرار نمیدهد.
- برای بازنویسی یک Plugin همراه، یا
openclaw plugin installرا برای آن شناسه اجرا کنید تا نصب سراسری ردیابیشده بر نسخهٔ همراه تقدم پیدا کند، یا مسیر مشخصی را از طریقplugins.entries.<id>ثابت کنید تا بهواسطهٔ تقدم انتخابشده با پیکربندی برنده شود. - حذف موارد تکراری ثبت میشود تا Doctor و عیبیابی هنگام شروع بتوانند نسخهٔ کنار گذاشتهشده را مشخص کنند.
- بازنویسیهای تکراری انتخابشده با پیکربندی در عیبیابی بهعنوان بازنویسیهای صریح بیان میشوند، اما همچنان هشدار میدهند تا انشعابهای قدیمی و تحتالشعاعقرارگیریهای تصادفی قابل مشاهده بمانند.
الزامات JSON Schema
- هر Plugin باید یک JSON Schema ارائه کند، حتی اگر هیچ پیکربندیای نپذیرد.
- یک schema خالی قابلقبول است (برای مثال،
{ "type": "object", "additionalProperties": false }). - schemaها هنگام خواندن/نوشتن پیکربندی اعتبارسنجی میشوند، نه هنگام اجرا.
- هنگام گسترش یا انشعابگرفتن از یک Plugin همراه و افزودن کلیدهای پیکربندی جدید، همزمان
configSchemaآن Plugin را درopenclaw.plugin.jsonبهروزرسانی کنید. schemaهای Pluginهای همراه سختگیرانهاند؛ بنابراین، افزودنplugins.entries.<id>.config.myNewKeyبه پیکربندی کاربر بدون افزودنmyNewKeyبهconfigSchema.properties، پیش از بارگذاری زمان اجرای Plugin رد خواهد شد.
نمونهٔ گسترش schema:
{ "configSchema": { "type": "object", "additionalProperties": false, "properties": { "myNewKey": { "type": "string" } } }}رفتار اعتبارسنجی
- کلیدهای ناشناختهٔ
channels.*خطا هستند، مگر اینکه شناسهٔ کانال در مانیفست یک Plugin اعلام شده باشد. اگر همان شناسه درplugins.allow،plugins.entriesیاplugins.installsنیز وجود داشته باشد (Pluginی که به آن ارجاع شده اما در حال حاضر قابل کشف نیست)، OpenClaw در عوض سطح آن را به هشدار کاهش میدهد. - ارجاع
plugins.entries.<id>،plugins.allowوplugins.denyبه شناسههای ناشناختهٔ Plugin هشدار است («ورودی منسوخ پیکربندی نادیده گرفته شد»)، نه خطا؛ بنابراین ارتقاها و Pluginهای حذفشده یا تغییرنامیافته مانع راهاندازی Gateway نمیشوند. - ارجاع
plugins.slots.memoryبه شناسهٔ ناشناختهٔ Plugin خطا است، بهجز Plugin خارجی رسمی و شناختهشدهٔmemory-lancedbکه در عوض هشدار میدهد. - اگر Pluginی نصب شده باشد اما مانیفست یا schema آن خراب یا مفقود باشد، اعتبارسنجی ناموفق میشود و Doctor خطای Plugin را گزارش میکند.
- اگر پیکربندی Plugin وجود داشته باشد اما Plugin غیرفعال باشد، پیکربندی حفظ میشود و یک هشدار در Doctor و گزارشها نمایش داده میشود.
برای schema کامل plugins.*، مرجع پیکربندی را ببینید.
نکتهها
- مانیفست برای Pluginهای بومی OpenClaw الزامی است، از جمله بارگذاریها از فایلسیستم محلی. زمان اجرا همچنان ماژول Plugin را جداگانه بارگذاری میکند؛ مانیفست فقط برای کشف و اعتبارسنجی است.
- مانیفستهای بومی با JSON5 تجزیه میشوند؛ بنابراین توضیحات، ویرگولهای پایانی و کلیدهای بدون نقلقول پذیرفته میشوند، مشروط بر اینکه مقدار نهایی همچنان یک شیء باشد.
- بارگذار مانیفست فقط فیلدهای مستندشدهٔ مانیفست را میخواند. از کلیدهای سفارشی سطحبالا اجتناب کنید.
- وقتی Plugin به آنها نیازی ندارد، همهٔ
channels،providers،cliBackendsوskillsرا میتوان حذف کرد. providerCatalogEntryباید سبک باقی بماند و نباید کد گستردهٔ زمان اجرا را وارد کند؛ از آن برای فرادادهٔ ایستای فهرست ارائهدهندگان یا توصیفگرهای محدود کشف استفاده کنید، نه اجرای هنگام درخواست.- گونههای انحصاری Plugin از طریق
plugins.slots.*انتخاب میشوند:kind: "memory"از طریقplugins.slots.memory(پیشفرضmemory-core) وkind: "context-engine"از طریقplugins.slots.contextEngine(پیشفرضlegacy). - گونهٔ انحصاری Plugin را در این مانیفست اعلام کنید.
OpenClawPluginDefinition.kindدر ورودی زمان اجرا منسوخ شده و فقط بهعنوان راهکار سازگاری جایگزین برای Pluginهای قدیمی باقی مانده است. - فرادادهٔ متغیر محیطی (
setup.providers[].envVars،providerAuthEnvVarsمنسوخشده وchannelEnvVars) فقط جنبهٔ اعلامی دارد. وضعیت، ممیزی، اعتبارسنجی تحویل Cron و دیگر سطوح فقطخواندنی، پیش از پیکربندیشده تلقیکردن یک متغیر محیطی، همچنان سیاست اعتماد و فعالسازی مؤثر Plugin را اعمال میکنند. - برای فرادادهٔ راهنمای زمان اجرا که به کد ارائهدهنده نیاز دارد، قلابهای زمان اجرای ارائهدهنده را ببینید.
- اگر Plugin شما به ماژولهای بومی وابسته است، مراحل ساخت و هرگونه الزام فهرست مجاز مدیر بسته را مستند کنید (برای مثال،
allow-build-scriptsدر pnpm بههمراهpnpm rebuild <package>).