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 فراداده بسته، ریشههای اعلامشده مهارتها، ریشههای فرمان Claude، پیشفرضهای settings.json در Claude، پیشفرضهای LSP در Claude و بستههای hook پشتیبانیشده را میخواند.
هر Plugin بومی OpenClaw باید فایل openclaw.plugin.json را در ریشه Plugin ارائه کند. OpenClaw آن را برای اعتبارسنجی پیکربندی، بدون اجرای کد Plugin، میخواند. نبودن یا نامعتبر بودن مانیفست، اعتبارسنجی پیکربندی را مسدود میکند و بهعنوان خطای Plugin در نظر گرفته میشود.
برای راهنمای کامل سامانه Plugin به Pluginها و برای مدل قابلیت بومی و راهنمای فعلی سازگاری خارجی به مدل قابلیت مراجعه کنید.
کار این فایل چیست
openclaw.plugin.json فرادادهای است که OpenClaw آن را پیش از بارگذاری کد Plugin شما میخواند. بررسی همه موارد موجود در آن باید بدون راهاندازی زمان اجرای Plugin بهاندازه کافی کمهزینه باشد.
از آن برای موارد زیر استفاده کنید:
- هویت Plugin، اعتبارسنجی پیکربندی و راهنمای رابط کاربری پیکربندی
- فراداده احراز هویت، ورود اولیه و راهاندازی (نام مستعار، فعالسازی خودکار، متغیرهای محیطی ارائهدهنده، گزینههای احراز هویت)
- راهنمای فعالسازی برای سطوح صفحه کنترل
- مالکیت مختصر خانواده مدل
- تصویرهای لحظهای ایستای مالکیت قابلیت (
contracts) - اتصالهای داده ویجت داشبورد و افعال کنش
- سرورهای ایستای MCP که باید هنگام فعال بودن Plugin وجود داشته باشند
- فراداده اجراکننده QA که میزبان مشترک
openclaw qaمیتواند بررسی کند - فراداده پیکربندی ویژه کانال که در سطوح فهرست و اعتبارسنجی ادغام میشود
از آن برای موارد زیر استفاده نکنید: ثبت hookهای بومی زمان اجرا، اعلام نقاط ورود کد Plugin یا فراداده نصب npm. این موارد به کد Plugin شما و package.json تعلق دارند.
نمونه حداقلی
{ "id": "voice-call", "configSchema": { "type": "object", "additionalProperties": false, "properties": {} }}نمونه جامع
{ "id": "openrouter", "name": "OpenRouter", "description": "Plugin ارائهدهنده OpenRouter", "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" }, "providerAuthChoices": [ { "provider": "openrouter", "method": "api-key", "choiceId": "openrouter-api-key", "choiceLabel": "کلید API در OpenRouter", "groupId": "openrouter", "groupLabel": "OpenRouter", "optionKey": "openrouterApiKey", "cliFlag": "--openrouter-api-key", "cliOption": "--openrouter-api-key <key>", "cliDescription": "کلید API در OpenRouter", "onboardingScopes": ["text-inference"] } ], "uiHints": { "apiKey": { "label": "کلید API", "placeholder": "sk-or-v1-...", "sensitive": true } }, "configSchema": { "type": "object", "additionalProperties": false, "properties": { "apiKey": { "type": "string" } } }}مرجع فیلدهای سطح بالا
| فیلد | الزامی | نوع | معنای آن |
|---|---|---|---|
id |
بله | string |
شناسهٔ متعارف Plugin. این همان شناسهای است که در plugins.entries.<id> استفاده میشود. |
configSchema |
بله | object |
JSON Schema درونخطی برای پیکربندی این 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 مالک آنهاست و باید پیش از بارگذاری زمان اجرا، عیبیابیهای آگاه از Plugin را برای پیکربندی و CLI تولید کنند. |
providerUsageAuthEnvVars |
خیر | Record<string, string[]> |
اعتبارنامههای ارائهدهنده که فقط برای مصرف/صورتحساب هستند. OpenClaw از این نامها برای کشف مصرف و پاکسازی اسرار استفاده میکند، اما هرگز برای احراز هویت استنتاج بهکار نمیبرد. |
providerAuthAliases |
خیر | Record<string, string> |
شناسههای ارائهدهندهای که برای جستوجوی احراز هویت باید از شناسهٔ ارائهدهندهٔ دیگری استفاده کنند؛ برای مثال، ارائهدهندهٔ کدنویسیای که کلید API و پروفایلهای احراز هویت ارائهدهندهٔ پایه را به اشتراک میگذارد. |
providerAuthChoices |
خیر | object[] |
فرادادهٔ کمهزینهٔ انتخاب احراز هویت برای انتخابگرهای راهاندازی اولیه، تفکیک ارائهدهندهٔ ترجیحی و اتصال سادهٔ پرچمهای CLI. |
activation |
خیر | object |
فرادادهٔ کمهزینهٔ برنامهریز فعالسازی برای بارگذاریِ راهاندازی، ارائهدهنده، فرمان، کانال، مسیر و بارگذاری فعالشده بر اساس قابلیت. فقط فراداده است؛ زمان اجرای Plugin همچنان مالک رفتار واقعی است. |
setup |
خیر | object |
توصیفگرهای کمهزینهٔ تنظیم/راهاندازی اولیه که سطوح کشف و تنظیم میتوانند بدون بارگذاری زمان اجرای Plugin بررسی کنند. |
qaRunners |
خیر | object[] |
توصیفگرهای کمهزینهٔ اجراکنندهٔ تضمین کیفیت که میزبان مشترک openclaw qa پیش از بارگذاری زمان اجرای Plugin از آنها استفاده میکند. |
dashboard |
خیر | object |
اتصالهای داده و افعال عملیاتی ویجت داشبورد. هر ورودی در برابر یک متد Gateway که این Plugin با دامنهٔ خواندن یا نوشتن الزامی ثبت کرده است، اعتبارسنجی میشود. مرجع داشبورد را ببینید. |
mcpServers |
خیر | Record<string, object> |
تعریفهای ایستای سرور MCP که هنگام فعال بودن این Plugin ارائه میشوند. آرگومانهای نسبی فرمان و دایرکتوریهای کاری نسبت به ریشهٔ Plugin حل میشوند. ورودیهای mcp.servers اپراتور، تعریفهای همنام را لغو یا غیرفعال میکنند. به مرجع سرور MCP مراجعه کنید. |
contracts |
خیر | object |
تصویر لحظهای ایستای مالکیت قابلیت برای هوکهای احراز هویت خارجی، تعبیهها، گفتار، رونویسی بلادرنگ، صدای بلادرنگ، درک رسانه، تولید تصویر/ویدئو/موسیقی، واکشی وب، جستوجوی وب، ارائهدهندگان worker، استخراج سند/محتوای وب و مالکیت ابزار. |
configContracts |
خیر | object |
رفتار پیکربندی تحت مالکیت مانیفست که کمکتابعهای عمومی هسته از آن استفاده میکنند: تشخیص پرچم خطرناک، مقصدهای مهاجرت SecretRef و محدودسازی مسیر پیکربندی قدیمی. به مرجع configContracts مراجعه کنید. |
mediaUnderstandingProviderMetadata |
خیر | Record<string, object> |
پیشفرضهای کمهزینهٔ درک رسانه برای شناسههای ارائهدهندهٔ اعلامشده در contracts.mediaUnderstandingProviders. |
imageGenerationProviderMetadata |
خیر | Record<string, object> |
فرادادهٔ کمهزینهٔ احراز هویت تولید تصویر برای شناسههای ارائهدهندهٔ اعلامشده در contracts.imageGenerationProviders، شامل نامهای مستعار احراز هویت تحت مالکیت ارائهدهنده و محافظهای URL پایه. |
videoGenerationProviderMetadata |
خیر | Record<string, object> |
فرادادهٔ کمهزینهٔ احراز هویت تولید ویدئو برای شناسههای ارائهدهندهٔ اعلامشده در contracts.videoGenerationProviders، شامل نامهای مستعار احراز هویت تحت مالکیت ارائهدهنده و محافظهای URL پایه. |
musicGenerationProviderMetadata |
خیر | Record<string, object> |
فرادادهٔ کمهزینهٔ احراز هویت تولید موسیقی برای شناسههای ارائهدهندهٔ اعلامشده در contracts.musicGenerationProviders، شامل نامهای مستعار احراز هویت تحت مالکیت ارائهدهنده و محافظهای URL پایه. |
toolMetadata |
خیر | Record<string, object> |
فرادادهٔ کمهزینهٔ دسترسپذیری برای ابزارهای تحت مالکیت Plugin که در contracts.tools اعلام شدهاند. هنگامی از آن استفاده کنید که ابزار نباید runtime را بارگذاری کند، مگر اینکه شواهدی از پیکربندی، محیط یا احراز هویت وجود داشته باشد. |
channelConfigs |
خیر | Record<string, object> |
فرادادهٔ پیکربندی کانال تحت مالکیت مانیفست که پیش از بارگذاری runtime در سطوح کشف و اعتبارسنجی ادغام میشود. |
skills |
خیر | string[] |
دایرکتوریهای Skill برای بارگذاری، نسبت به ریشهٔ Plugin. |
name |
خیر | string |
نام خوانای Plugin برای انسان. |
description |
خیر | string |
خلاصهٔ کوتاهی که در سطوح Plugin نمایش داده میشود. |
catalog |
خیر | object |
راهنمای اختیاری نمایش برای سطوح کاتالوگ Plugin. این فراداده یک Plugin را نصب یا فعال نمیکند و به آن اعتماد اعطا نمیکند. |
icon |
خیر | string |
URL تصویر HTTPS برای کارتهای بازار/کاتالوگ. ClawHub هر URL معتبر https:// را میپذیرد و اگر این مقدار حذفشده یا نامعتبر باشد، از نماد پیشفرض Plugin استفاده میکند. |
version |
خیر | string |
نسخهٔ اطلاعرسانی Plugin. |
uiHints |
خیر | Record<string, object> |
برچسبهای UI، جاینگهدارها و راهنمای حساسیت برای فیلدهای پیکربندی. |
مرجع سرور MCP
mcpServers به یک Plugin بومی اجازه میدهد یک سرور MCP، از جمله یک برنامه MCP، ارائه کند، بدون اینکه اپراتورها مجبور باشند تعریف ایستای فرایند آن را در openclaw.json تکرار کنند:
{ "mcpServers": { "example": { "transport": "stdio", "command": "node", "args": ["./mcp-server.js"] } }}OpenClaw این سرورها را فقط تا زمانی در بر میگیرد که Plugin مالک فعال باشد. مسیرهای نسبی command، args، cwd و workingDirectory از ریشه Plugin تفکیک میشوند. پیکربندی کاربر همچنان مرجع نهایی است: mcp.servers.<name> میتواند مقدار پیشفرض یک Plugin را جایگزین کند یا با تنظیم enabled: false آن را کنار بگذارد. رندر برنامه MCP و فراخوانی ابزارهای سرور همچنان به تنظیم معمول برنامههای MCP و سیاست مؤثر ابزار نیاز دارند؛ اعلام یک سرور هیچیک از این مرزها را دور نمیزند.
مرجع داشبورد
dashboard به یک Plugin فعال اجازه میدهد RPCهای موجود Gateway را بدون افزودن سیاست Plugin به هسته، در اختیار ویجتهای مجاز داشبورد قرار دهد. پیوندهای داده باید متدی را نام ببرند که همان Plugin با operator.read ثبت میکند؛ افعال کنش باید متدی را نام ببرند که با operator.write ثبت میشود. هرگونه عدم تطابق باعث رد Plugin هنگام ثبت میشود.
{ "dashboard": { "dataBindings": [ { "id": "items.list", "method": "example.items.list", "description": "فهرستکردن موارد نمونه." } ], "actionVerbs": [ { "id": "refresh", "method": "example.items.refresh", "description": "تازهسازی موارد نمونه.", "paramShape": { "type": "object", "additionalProperties": false, "properties": { "force": { "type": "boolean" } } } } ] }}شناسههای مانیفست محلیِ Plugin هستند. مجوزهای ویجت از <plugin-id>.<id> استفاده میکنند، مانند example.items.list و example.refresh. برای بدون ابهام نگهداشتن فضای نام مجوزهای ماندگارشده، OpenClaw نویسههای % و . را در بخش شناسه Plugin بهترتیب بهصورت %25 و %2E گریز میدهد؛ شناسههای عادی Plugin شکل طبیعی خود را حفظ میکنند. paramShape یک JSON Schema اختیاری است که پیش از فراخوانی RPC مربوط به Plugin توسط OpenClaw، روی شیء پارامترهای کنش اعمال میشود.
مرجع کاتالوگ
catalog راهنماییهای نمایشی اختیاری برای مرورگرهای Plugin فراهم میکند. میزبانها میتوانند این راهنماییها را نادیده بگیرند. این راهنماییها هرگز Plugin را نصب یا فعال نمیکنند و رفتار زمان اجرای آن یا سطح اعتمادش را تغییر نمیدهند.
{ "catalog": { "featured": true, "order": 10 }}| فیلد | نوع | مفهوم |
|---|---|---|
featured |
boolean |
آیا سطوح کاتالوگ باید این 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 بتواند از واردکردن زمان اجرای Plugin، صرفاً برای اینکه سازنده ابزار آن null را برگرداند، اجتناب کند.
{ "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 این مورد را پیش از بارگذاری زمان اجرای ارائهدهنده میخواند. فهرستهای راهاندازی ارائهدهنده، بدون بارگذاری زمان اجرای ارائهدهنده، از این گزینههای مانیفست، گزینههای راهاندازی مشتقشده از توصیفگر و فراداده کاتالوگ نصب استفاده میکنند.
| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
provider |
بله | string |
شناسه ارائهدهندهای که این گزینه به آن تعلق دارد. |
method |
بله | string |
شناسه روش احراز هویت که باید به آن هدایت شود. |
choiceId |
بله | string |
شناسه پایدار گزینه احراز هویت که در جریانهای راهاندازی اولیه و CLI استفاده میشود. |
choiceLabel |
خیر | string |
برچسب قابلمشاهده برای کاربر. اگر حذف شود، OpenClaw از choiceId بهعنوان گزینه جایگزین استفاده میکند. |
choiceHint |
خیر | string |
متن راهنمای کوتاه برای انتخابگر. |
icon |
خیر | نشانی HTTPS | تصویر نمایشی کنار این گزینه در کلاینتهای راهاندازی اولیه پشتیبانیشده. |
website |
خیر | نشانی HTTPS | صفحه محصول، ورود یا نصب که کلاینتهای راهاندازی اولیه پشتیبانیشده نمایش میدهند. |
assistantPriority |
خیر | number |
مقادیر کمتر در انتخابگرهای تعاملی هدایتشده توسط دستیار زودتر مرتب میشوند. |
assistantVisibility |
خیر | "visible" | "manual-only" |
گزینه را از انتخابگرهای دستیار پنهان میکند، اما همچنان انتخاب دستی از طریق CLI را مجاز نگه میدارد. |
deprecatedChoiceIds |
خیر | string[] |
شناسههای قدیمی گزینه که باید کاربران را به این گزینه جایگزین هدایت کنند. |
groupId |
خیر | string |
شناسه گروه اختیاری برای گروهبندی گزینههای مرتبط. |
groupLabel |
خیر | string |
برچسب قابلمشاهده برای کاربر برای آن گروه. |
groupHint |
خیر | string |
متن راهنمای کوتاه برای گروه. |
onboardingFeatured |
خیر | boolean |
این گروه را در سطح ویژه انتخابگر تعاملی راهاندازی اولیه، پیش از ورودی "More..."، نمایش میدهد. |
optionKey |
خیر | string |
کلید داخلی گزینه برای جریانهای ساده احراز هویت تکپرچمی. |
cliFlag |
خیر | string |
نام پرچم CLI، مانند --openrouter-api-key. |
cliOption |
خیر | string |
شکل کامل گزینه CLI، مانند --openrouter-api-key <key>. |
cliDescription |
خیر | string |
توضیحی که در راهنمای CLI استفاده میشود. |
appGuidedSecret |
خیر | boolean |
یک راز جایگذاریشده بههمراه پیشفرضهای ارائهدهنده برای راهاندازی هدایتشده توسط برنامه کافی است. |
appGuidedDiscovery |
خیر | boolean |
روش احراز هویت زمان اجرای منطبق، مالک کشف محلی فقطخواندنی از طریق appGuidedSetup است. |
appGuidedAuth |
خیر | "oauth" | "device-code" |
ورود تعاملی تحت مالکیت ارائهدهنده که کلاینتهای بومی راهاندازی میتوانند آن را بهصورت عمومی رندر کنند. |
onboardingScopes |
خیر | Array<"text-inference" | "image-generation" | "music-generation"> |
این گزینه باید در کدام سطوح راهاندازی اولیه ظاهر شود. اگر حذف شود، مقدار پیشفرض آن ["text-inference"] است. |
وقتی appGuidedDiscovery درست است، روش احراز هویت ارائهدهنده منطبق باید
appGuidedSetup.detect و appGuidedSetup.prepare را ارائه کند. تشخیص باید
فقطخواندنی باشد: بدون ورود، دریافت مدل، دانلود یا نوشتن پیکربندی. آمادهسازی،
مدل دقیق انتخابشده را دوباره بررسی میکند و یک پیشنهاد پیکربندی بازمیگرداند؛ OpenClaw آن
پیشنهاد را بهصورت مجزا بهطور زنده آزمایش میکند و تنها پس از موفقیت آن را ثبت میکند.
مرجع 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 و هوکها بازمیگردد.
محدودترین فرادادهای را ترجیح دهید که از قبل مالکیت را توصیف میکند. وقتی providers، channels، commandAliases، توصیفگرهای راهاندازی یا contracts رابطه را بیان میکنند، از آنها استفاده کنید. برای راهنماییهای اضافی برنامهریز که با آن فیلدهای مالکیت قابلنمایش نیستند، از activation استفاده کنید. برای نامهای مستعار زمان اجرای CLI مانند claude-cli، my-cli یا google-gemini-cli از cliBackends سطحبالا استفاده کنید؛ activation.onAgentHarnesses فقط برای شناسههای مهار عامل تعبیهشدهای است که از قبل فیلد مالکیت ندارند.
هر Plugin باید activation.onStartup را آگاهانه تنظیم کند. فقط زمانی آن را روی true تنظیم کنید که Plugin باید هنگام راهاندازی Gateway اجرا شود. زمانی آن را روی false تنظیم کنید که Plugin هنگام راهاندازی غیرفعال است و باید فقط بر اثر محرکهای محدودتر بارگذاری شود. حذف 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 اختیاری، انتقال را بدون تغییر اجراکننده فرمان ثبتشده در اختیار سناریوهای مشترک QA قرار میدهد.
{ "qaRunners": [ { "commandName": "matrix", "description": "اجرای مسیر QA زنده Matrix با پشتوانه Docker در برابر یک homeserver یکبارمصرف" } ]}| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
commandName |
بله | string |
زیرفرمانی که زیر openclaw qa نصب میشود؛ برای نمونه matrix. |
description |
خیر | string |
متن راهنمای جایگزین که هنگام نیاز میزبان مشترک به یک فرمان موقت استفاده میشود. |
شناسه adapterFactory باید با commandName مطابقت داشته باشد. برای فرمانهایی
که در مانیفست وجود ندارند، ثبت صادر نکنید.
مرجع راهاندازی
وقتی سطوح راهاندازی و ورود اولیه پیش از بارگذاری زمان اجرا به فراداده کمهزینه متعلق به Plugin نیاز دارند، از setup استفاده کنید.
{ "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" } ] } ], "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 را در جستوجوهای عمومی احراز هویت ارائهدهنده و متغیر محیطی لحاظ میکند. فراداده محیطی راهاندازی و وضعیت را آنجا قرار دهید.
وقتی یک اعتبارنامه در سطح صورتحساب یا سازمان باید resolveUsageAuth را بدون تبدیلشدن به اعتبارنامه استنتاج فعال کند، از providerUsageAuthEnvVars استفاده کنید. این نامها به مسدودسازی 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 |
برچسب منبع قابلمشاهده برای کاربر در خروجی احراز هویت/وضعیت. |
فیلدهای راهاندازی
| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
providers |
خیر | object[] |
توصیفگرهای پیکربندی ارائهدهنده که هنگام پیکربندی و راهاندازی اولیه در دسترس قرار میگیرند. |
cliBackends |
خیر | string[] |
شناسههای بکاندِ زمان پیکربندی که برای جستوجوی توصیفگرمحور پیکربندی استفاده میشوند. شناسههای نرمالشده را در سطح سراسری یکتا نگه دارید. |
configMigrations |
خیر | string[] |
شناسههای مهاجرت پیکربندی که سطح پیکربندی این Plugin مالک آنهاست. |
requiresRuntime |
خیر | boolean |
آیا پس از جستوجوی توصیفگر، پیکربندی همچنان به اجرای setup-api نیاز دارد یا نه. |
مرجع uiHints
uiHints نگاشتی از نام فیلدهای پیکربندی به راهنماییهای کوچک رندر است. کلیدها میتوانند برای فیلدهای پیکربندی تودرتو از نقطه استفاده کنند، اما هیچ بخش مسیر نمیتواند __proto__، constructor یا prototype باشد؛ پیکربندی این نامها را رد میکند.
{ "uiHints": { "apiKey": { "label": "کلید API", "help": "برای درخواستهای OpenRouter استفاده میشود", "placeholder": "sk-or-v1-...", "sensitive": true } }}راهنمای هر فیلد میتواند شامل موارد زیر باشد:
| فیلد | نوع | مفهوم |
|---|---|---|
label |
string |
برچسب فیلد برای نمایش به کاربر. |
help |
string |
متن راهنمای کوتاه. |
tags |
string[] |
برچسبهای اختیاری رابط کاربری. |
advanced |
boolean |
فیلد را بهعنوان پیشرفته علامتگذاری میکند. |
sensitive |
boolean |
فیلد را بهعنوان محرمانه یا حساس علامتگذاری میکند. |
placeholder |
string |
متن جاینگهدار برای ورودیهای فرم. |
presentation |
"phone-number" |
قالببندی محلیشده و صرفاً نمایشی شماره تلفن برای مقادیر بینالمللی قابل تجزیه (+...)؛ مقادیر خام بدون تغییر باقی میمانند. |
مرجع contracts
از contracts فقط برای فراداده ایستای مالکیت قابلیت استفاده کنید که OpenClaw بتواند بدون واردکردن زمان اجرای Plugin آن را بخواند.
{ "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های همراه میتوانند بدون این فیلد سیاستها را ثبت کنند. |
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[] |
شناسههای ارائهدهنده واردسازی که این Plugin برای openclaw migrate مالک آنهاست. |
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 را درونپردازشی اعزام میکنند، نه یک sandbox در برابر Pluginهای بومی مخرب. از آن فقط برای سطوح همراه/اپراتوریِ بهدقت بازبینیشدهای استفاده کنید که از قبل به احراز هویت HTTP در Gateway نیاز دارند. یک مسیر دارای مجوز، هنگام بستهبودن پذیرش کار ریشهٔ Gateway، فقط زمانی قابل دسترسی باقی میماند که auth: "gateway" و gatewayRuntimeScopeSurface: "trusted-operator" مختص مسیر را نیز اعلام کند؛ مسیرهای همسطح عادی از همان Plugin همچنان پشت مرز پذیرش میمانند. به این ترتیب، وضعیت تعلیق و ازسرگیری قابل دسترسی میماند، بیآنکه دورزدن پذیرش به کل Plugin اعطا شود. تجزیه و شکلدهی پاسخ را بیرون از اعزام، محدود نگه دارید؛ کار اساسی یا تغییردهنده باید از طریق اعزام متد Gateway انجام شود که مالک اعمال پذیرش و دامنه است.
مرجع configContracts
از configContracts برای رفتار پیکربندی تحت مالکیت مانیفست استفاده کنید که کمککنندههای عمومی هسته بدون واردکردن زماناجرای Plugin به آن نیاز دارند: تشخیص پرچم خطرناک، مقصدهای مهاجرت SecretRef و محدودسازی مسیر پیکربندی قدیمی.
{ "configContracts": { "compatibilityMigrationPaths": ["legacyProvider"], "compatibilityRuntimePaths": ["legacyProvider.webhook"], "dangerousFlags": [ { "path": "accounts.*.allowUnverifiedSenders", "equals": true } ], "secretInputs": { "bundledDefaultEnabled": false, "paths": [ { "path": "routes.*.secret", "expected": "string", "ownerKind": "route" } ] } }}| فیلد | الزامی | نوع | مفهوم |
|---|---|---|---|
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[] |
مسیرهای پیکربندی با شکل secret که هرکدام دارای path (جداشده با نقطه، نسبی به plugins.entries.<id>.config، با پشتیبانی از نویسههای عام *) و بهصورت اختیاری دارای expected (در حال حاضر فقط "string") و ownerKind (در حال حاضر فقط "route") هستند. مالک اعلامشده، هنگام شکست تفکیک فقط همان مسیر منطبق دقیق را جدا میکند؛ شناسهٔ مالک آن، مسیر کامل پیکربندی است. |
مرجع 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 را بارگذاری کند، اما سطوح طرحوارهٔ پیکربندی در مسیر سرد، راهاندازی و Control UI تا پیش از اجرای زماناجرای 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": "نشانی وب سرور خانگی", "placeholder": "https://matrix.example.com" } }, "label": "Matrix", "description": "اتصال به سرور خانگی Matrix", "commands": { "nativeCommandsAutoEnabled": true, "nativeSkillsAutoEnabled": true }, "preferOver": ["matrix-legacy"] } }}هر ورودی کانال میتواند شامل موارد زیر باشد:
| فیلد | نوع | مفهوم |
|---|---|---|
schema |
object |
JSON Schema برای 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[] |
فهرست اختیاری میزبانهای مؤثر URL پایه ارائهدهنده که پیش از اعمال سرکوب الزامیاند. |
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 مالک فراداده میزبان و URL پایه هستند.
Pluginهای ارائهدهنده که رسماً خارجی شدهاند از توزیع هسته کنار گذاشته میشوند، بنابراین
مانیفستهای آنها تا زمان نصب نامرئی هستند. providerEndpoints آنها باید
در scripts/lib/official-external-provider-catalog.json نیز بازتاب داده شود تا
دستهبندی نقطه پایانی بدون Plugin همچنان کار کند؛ یک آزمون قرارداد
این بازتاب را اعمال میکند.
فیلدهای نقطه پایانی:
| فیلد | نوع | مفهوم |
|---|---|---|
endpointClass |
string |
کلاس شناختهشده نقطه پایانی هسته، مانند openrouter، moonshot-native یا google-vertex. |
hosts |
string[] |
نامهای میزبان دقیقی که به کلاس نقطه پایانی نگاشت میشوند. |
hostSuffixes |
string[] |
پسوندهای میزبانی که به کلاس نقطه پایانی نگاشت میشوند. برای تطبیق صرفاً پسوند دامنه، با . آغاز کنید. |
baseUrls |
string[] |
URLهای پایه دقیق و نرمالشده 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
وقتی یک Plugin میتواند یک پیشتنظیم قابلاستفادهمجدد ارائهدهنده اجرایی SecretRef منتشر کند، از secretProviderIntegrations استفاده کنید. 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 ارائهدهنده نصب نیست، از آن استفاده خواهند کرد.
ترتیب مرجعیت کاتالوگ:
- پیکربندی کاربر.
- مانیفست Plugin نصبشده
modelCatalog. - کش کاتالوگ مدل از تازهسازی صریح.
- ردیفهای پیشنمایش نمایه ارائهدهندگان 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 |
کشف، اعتبارسنجی پیکربندی، فرادادهٔ انتخاب احراز هویت و راهنماییهای UI که باید پیش از اجرای کد Plugin وجود داشته باشند |
package.json |
فرادادهٔ npm، نصب وابستگی و بلوک openclaw که برای نقاط ورود، محدودسازی نصب، راهاندازی یا فرادادهٔ کاتالوگ استفاده میشود |
اگر مطمئن نیستید یک بخش از فراداده به کجا تعلق دارد، از این قاعده استفاده کنید:
- اگر OpenClaw باید آن را پیش از بارگذاری کد Plugin بداند، آن را در
openclaw.plugin.jsonقرار دهید - اگر دربارهٔ بستهبندی، فایلهای ورودی یا رفتار نصب npm است، آن را در
package.jsonقرار دهید
فیلدهای package.json که بر کشف اثر میگذارند
برخی فرادادههای پیش از زمان اجرای Plugin عمداً بهجای openclaw.plugin.json، در package.json و زیر بلوک openclaw قرار دارند. 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.approvalFlags |
پرچمهای بستهٔ رفتار تأیید که پیش از بارگذاری زمان اجرا در دسترساند. native یعنی کانال مالک UI بومی تأیید و حلوفصل در همان نوبت است. |
openclaw.channel.commands |
فرادادهٔ ایستای پیشفرض خودکار فرمان بومی و Skills بومی که پیش از بارگذاری زمان اجرای کانال در سطوح پیکربندی، ممیزی و فهرست فرمان استفاده میشود. |
openclaw.channel.cliAddOptions |
گزینههای openclaw channels add متعلق به Plugin. هر ورودی flags، description، defaultValue اختیاری و valueType اختیاری (int یا list) را برای تبدیل نوع عمومی ورودی اعلام میکند. |
openclaw.channel.configuredState |
فرادادهٔ سبک بررسیکنندهٔ وضعیت پیکربندیشده که میتواند بدون بارگذاری کامل زمان اجرای کانال به پرسش «آیا راهاندازی فقط از طریق متغیرهای محیطی از قبل وجود دارد؟» پاسخ دهد. |
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 که وقتی محدودیتهای پلتفرمی lockfile آنها با میزبان فعلی مطابقت دارد، باید ایجاد شوند. |
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen |
به سطوح کانالِ زمان اجرای راهاندازی اجازه میدهد پیش از گوشدادن بارگذاری شوند و سپس Plugin کامل و پیکربندیشدهٔ کانال را تا فعالسازی پس از گوشدادن به تعویق میاندازد. |
فرادادهٔ مانیفست تعیین میکند کدام گزینههای ارائهدهنده/کانال/راهاندازی پیش از بارگذاری زمان اجرا در راهاندازی اولیه ظاهر شوند. package.json#openclaw.install به راهاندازی اولیه میگوید وقتی کاربر یکی از این گزینهها را انتخاب میکند، چگونه آن Plugin را دریافت یا فعال کند. راهنماییهای نصب را به openclaw.plugin.json منتقل نکنید.
برای openclaw.channel.cliAddOptions، از نحو گزینهٔ بلند Commander مانند --initial-sync-limit <n> استفاده کنید. valueType: "int" را برای تجزیهٔ یک عدد صحیح نامنفی یا valueType: "list" را برای تقسیم ورودی جداشده با ویرگول، نقطهویرگول یا خط جدید به رشتهها، پیش از دریافت آن توسط آداپتور راهاندازی Plugin، تنظیم کنید. برای عبور بدون تغییر مقدار تجزیهشدهٔ Commander، valueType را حذف کنید.
openclaw.install.minHostVersion هنگام نصب و بارگذاری رجیستری مانیفست برای منابع Plugin غیرهمراه اعمال میشود. مقادیر نامعتبر رد میشوند؛ مقادیر جدیدتر اما معتبر باعث میشوند Pluginهای خارجی روی میزبانهای قدیمیتر نادیده گرفته شوند. فرض میشود Pluginهای منبع همراه با checkout میزبان همنسخه هستند.
openclaw.install.requiredPlatformPackages برای بستههای npm است که باینریهای بومی موردنیاز را از طریق نامهای مستعار اختیاری و مختص پلتفرم ارائه میکنند. نام سادهٔ بستهٔ npm را برای نام مستعار هر پلتفرم پشتیبانیشده فهرست کنید. هنگام نصب npm، OpenClaw فقط نام مستعار اعلامشدهای را بررسی میکند که محدودیتهای lockfile آن با میزبان فعلی مطابقت دارد. اگر 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 رجیستری مورد اعتماد، از جمله نام سادهٔ بستهها و dist-tagها را ارائه میدهد. عیبیابی کاتالوگ میتواند میان منابع دقیق، شناور، سنجاقشده با یکپارچگی، فاقد یکپارچگی، دارای عدم تطابق نام بسته و دارای انتخاب پیشفرض نامعتبر تمایز بگذارد. همچنین وقتی expectedIntegrity موجود است اما هیچ منبع معتبر npm برای سنجاقکردن وجود ندارد، هشدار میدهد. هنگامی که expectedIntegrity موجود است، جریانهای نصب/بهروزرسانی آن را اعمال میکنند؛ هنگامی که حذف شده است، تفکیک رجیستری بدون سنجاق یکپارچگی ثبت میشود.
Pluginهای کانال باید زمانی که اسکنهای وضعیت، فهرست کانال یا SecretRef نیاز دارند حسابهای پیکربندیشده را بدون بارگذاری کامل زمان اجرا شناسایی کنند، openclaw.setupEntry را ارائه دهند. ورودی راهاندازی باید فرادادهٔ کانال را بههمراه آداپتورهای ایمن برای راهاندازیِ پیکربندی، وضعیت و اسرار ارائه کند؛ کلاینتهای شبکه، شنوندههای 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 از بررسیهای ارزان پیکربندیشدن پشتیبانی میکند. هنگامی که متغیرهای محیطی کافی هستند، فرادادهٔ اعلانی محیط را ترجیح دهید:
{ "openclaw": { "channel": { "id": "telegram", "configuredState": { "env": { "allOf": ["TELEGRAM_BOT_TOKEN"] } } } }}هنگامی که همهٔ متغیرهای فهرستشده الزامیاند از env.allOf و هنگامی که وجود هر یک از متغیرهای غیرخالی کافی است از env.anyOf استفاده کنید. اگر یک بررسی کوچک و غیرزماناجرا به چیزی بیش از فرادادهٔ محیط نیاز دارد، مطابق نمونهٔ persistedAuthState از specifier بههمراه exportName استفاده کنید؛ وقتی env وجود داشته باشد، OpenClaw بدون بارگذاری آن ماژول از آن استفاده میکند. اگر بررسی به تفکیک کامل پیکربندی یا زمان اجرای واقعی کانال نیاز دارد، آن منطق را در هوک 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هایی که نسبت به فضای کاری فعلی کشف میشوند
- هر نامزد کشفشدهٔ دیگر
پیامدها:
- یک نسخهٔ forkشده یا قدیمی از Plugin همراه که بدون ردیابی در فضای کاری یا ریشهٔ سراسری قرار دارد، نسخهٔ همراه را تحتالشعاع قرار نمیدهد.
- برای جایگزینکردن یک Plugin همراه، یا
openclaw plugin installرا برای آن شناسه اجرا کنید تا نصب سراسری ردیابیشده از نسخهٔ همراه تقدم بیشتری داشته باشد، یا مسیر مشخصی را از طریقplugins.entries.<id>تثبیت کنید تا بهدلیل تقدم انتخابشدن توسط پیکربندی برنده شود. - حذف موارد تکراری ثبت میشود تا Doctor و عیبیابی هنگام راهاندازی بتوانند نسخهٔ کنارگذاشتهشده را مشخص کنند.
- جایگزینی موارد تکراری انتخابشده توسط پیکربندی در عیبیابی بهعنوان جایگزینی صریح بیان میشود، اما همچنان هشدار میدهد تا forkهای قدیمی و تحتالشعاعقرارگرفتنهای تصادفی قابل مشاهده بمانند.
الزامات JSON Schema
- هر Plugin باید یک JSON Schema ارائه کند، حتی اگر هیچ پیکربندیای نپذیرد.
- یک Schema خالی قابل قبول است (برای مثال،
{ "type": "object", "additionalProperties": false }). - Schemaها هنگام خواندن/نوشتن پیکربندی اعتبارسنجی میشوند، نه در زمان اجرا.
- هنگام گسترش یا forkکردن یک Plugin همراه با کلیدهای پیکربندی جدید، همزمان
openclaw.plugin.jsonconfigSchemaآن Plugin را نیز بهروزرسانی کنید. 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 تجزیه میشوند؛ بنابراین توضیحات، ویرگولهای انتهایی و کلیدهای بدون نقلقول پذیرفته میشوند، مشروط بر اینکه مقدار نهایی همچنان یک شیء باشد.
- بارگذار مانیفست فقط فیلدهای مستندشدهٔ مانیفست را میخواند. از کلیدهای سفارشی سطح بالا اجتناب کنید.
channels،providers،cliBackendsوskillsهمگی میتوانند در صورت بینیازی Plugin حذف شوند.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صرفاً اعلانی است. وضعیت، ممیزی، اعتبارسنجی تحویل Cron و دیگر سطوح صرفاً خواندنی، پیش از پیکربندیشده تلقیکردن یک متغیر محیطی، همچنان سیاست اعتماد Plugin و فعالسازی مؤثر را اعمال میکنند. - برای فرادادهٔ راهنمای زمان اجرا که به کد ارائهدهنده نیاز دارد، به هوکهای زمان اجرای ارائهدهنده مراجعه کنید.
- اگر Plugin شما به ماژولهای بومی وابسته است، مراحل ساخت و همهٔ الزامات فهرست مجاز مدیر بسته را مستند کنید (برای مثال، pnpm
allow-build-scripts+pnpm rebuild <package>).