الانتقال إلى المحتوى الرئيسي

Plugin manifest ‏(openclaw.plugin.json)

هذه الصفحة مخصصة فقط لـ manifest الخاصة بالـ plugin الأصلية في OpenClaw. للتخطيطات المتوافقة مع bundles، راجع Plugin bundles. تستخدم تنسيقات bundles المتوافقة ملفات manifest مختلفة:
  • Codex bundle: ‏.codex-plugin/plugin.json
  • Claude bundle: ‏.claude-plugin/plugin.json أو تخطيط مكوّن Claude الافتراضي من دون manifest
  • Cursor bundle: ‏.cursor-plugin/plugin.json
يكتشف OpenClaw هذه التخطيطات المتوافقة مع bundles تلقائيًا أيضًا، لكنها لا تُتحقق مقابل schema الخاصة بـ openclaw.plugin.json الموصوفة هنا. بالنسبة إلى bundles المتوافقة، يقرأ OpenClaw حاليًا بيانات تعريف bundle بالإضافة إلى جذور Skills المعلنة، وجذور أوامر Claude، والقيم الافتراضية لـ settings.json في Claude bundle، والقيم الافتراضية لـ Claude bundle LSP، وحزم الخطافات المدعومة عندما يطابق التخطيط توقعات وقت تشغيل OpenClaw. يجب على كل plugin أصلية في OpenClaw أن تشحن ملف openclaw.plugin.json في جذر plugin. يستخدم OpenClaw هذه manifest للتحقق من التكوين من دون تنفيذ شيفرة plugin. وتُعامل manifestات المفقودة أو غير الصالحة على أنها أخطاء plugin وتمنع التحقق من التكوين. راجع الدليل الكامل لنظام plugins: Plugins. وللاطلاع على نموذج الإمكانات الأصلية وإرشادات التوافق الخارجي الحالية: Capability model.

ما الذي يفعله هذا الملف

openclaw.plugin.json هي بيانات التعريف التي يقرأها OpenClaw قبل تحميل شيفرة plugin. استخدمها من أجل:
  • هوية plugin
  • التحقق من التكوين
  • بيانات تعريف المصادقة والتهيئة الأولية التي يجب أن تكون متاحة من دون تشغيل وقت تشغيل plugin
  • بيانات تعريف الاسم المستعار والتمكين التلقائي التي يجب أن تُحل قبل تحميل وقت تشغيل plugin
  • بيانات تعريف ملكية عائلة النماذج المختصرة التي يجب أن تفعّل plugin تلقائيًا قبل تحميل وقت التشغيل
  • لقطات ملكية الإمكانات الثابتة المستخدمة في توصيلات التوافق المضمّنة وتغطية العقود
  • بيانات تعريف تكوين خاصة بالقناة يجب دمجها في أسطح الفهرس والتحقق من دون تحميل وقت التشغيل
  • تلميحات واجهة التكوين
لا تستخدمها من أجل:
  • تسجيل سلوك وقت التشغيل
  • الإعلان عن entrypoints الشيفرة
  • بيانات تعريف npm install
فهذه تنتمي إلى شيفرة 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-"]
  },
  "cliBackends": ["openrouter-cli"],
  "providerAuthEnvVars": {
    "openrouter": ["OPENROUTER_API_KEY"]
  },
  "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نعمobjectJSON Schema مضمنة لتكوين هذه الـ plugin.
enabledByDefaultلاtrueتضع علامة على plugin مضمّنة على أنها مفعلة افتراضيًا. احذف الحقل، أو عيّن أي قيمة غير true، لترك plugin معطلة افتراضيًا.
legacyPluginIdsلاstring[]معرّفات قديمة تُطبّع إلى معرّف plugin الأساسي هذا.
autoEnableWhenConfiguredProvidersلاstring[]معرّفات مزوّدين يجب أن تفعّل هذه الـ plugin تلقائيًا عندما تشير إليهم المصادقة أو التكوين أو مراجع النماذج.
kindلا"memory" | "context-engine"يعلن نوع plugin حصريًا يُستخدم بواسطة plugins.slots.*.
channelsلاstring[]معرّفات القنوات المملوكة لهذه الـ plugin. تُستخدم للاكتشاف والتحقق من التكوين.
providersلاstring[]معرّفات المزوّدين المملوكة لهذه الـ plugin.
modelSupportلاobjectبيانات تعريف مختصرة لعائلة النماذج مملوكة للـ manifest وتُستخدم لتحميل plugin تلقائيًا قبل وقت التشغيل.
cliBackendsلاstring[]معرّفات backends استدلال CLI المملوكة لهذه الـ plugin. تُستخدم للتفعيل التلقائي عند بدء التشغيل من مراجع التكوين الصريحة.
providerAuthEnvVarsلاRecord<string, string[]>بيانات تعريف رخيصة لمتغيرات بيئة مصادقة المزوّد يمكن لـ OpenClaw فحصها من دون تحميل شيفرة plugin.
providerAuthChoicesلاobject[]بيانات تعريف رخيصة لاختيارات المصادقة لمحددات onboarding، وتحليل المزوّد المفضّل، وربط علامات CLI البسيطة.
contractsلاobjectلقطة ثابتة لإمكانات مضمّنة تشمل speech وrealtime transcription وrealtime voice وmedia-understanding وimage-generation وvideo-generation وweb-fetch وweb search وملكية الأدوات.
channelConfigsلاRecord<string, object>بيانات تعريف تكوين القناة المملوكة للـ manifest والمُدمجة في أسطح الاكتشاف والتحقق قبل تحميل وقت التشغيل.
skillsلاstring[]أدلة Skills المطلوب تحميلها، نسبةً إلى جذر plugin.
nameلاstringاسم plugin قابل للقراءة البشرية.
descriptionلاstringملخص قصير يظهر في أسطح plugin.
versionلاstringإصدار plugin لأغراض معلوماتية.
uiHintsلاRecord<string, object>تسميات واجهة المستخدم والعناصر النائبة وتلميحات الحساسية لحقول التكوين.

مرجع providerAuthChoices

يصف كل إدخال في providerAuthChoices اختيارًا واحدًا للتهيئة الأولية أو للمصادقة. يقرأ OpenClaw هذا قبل تحميل وقت تشغيل المزوّد.
الحقلمطلوبالنوعالمعنى
providerنعمstringمعرّف المزوّد الذي ينتمي إليه هذا الاختيار.
methodنعمstringمعرّف طريقة المصادقة المطلوب توجيهها إليها.
choiceIdنعمstringمعرّف auth-choice ثابت يُستخدم في onboarding وتدفقات CLI.
choiceLabelلاstringتسمية موجهة للمستخدم. وإذا حُذفت، يعود OpenClaw إلى choiceId.
choiceHintلاstringنص مساعد قصير للمحدد.
assistantPriorityلاnumberالقيم الأقل تُرتَّب أولًا في محددات التفاعل التي يقودها المساعد.
assistantVisibilityلا"visible" | "manual-only"إخفاء الاختيار من محددات المساعد مع السماح باختياره يدويًا عبر CLI.
deprecatedChoiceIdsلاstring[]معرّفات اختيار قديمة يجب أن تعيد توجيه المستخدمين إلى اختيار الاستبدال هذا.
groupIdلاstringمعرّف مجموعة اختياري لتجميع الاختيارات ذات الصلة.
groupLabelلاstringتسمية موجهة للمستخدم لتلك المجموعة.
groupHintلاstringنص مساعد قصير للمجموعة.
optionKeyلاstringمفتاح خيار داخلي لتدفقات المصادقة البسيطة ذات العلم الواحد.
cliFlagلاstringاسم علم CLI، مثل --openrouter-api-key.
cliOptionلاstringشكل خيار CLI الكامل، مثل --openrouter-api-key <key>.
cliDescriptionلاstringالوصف المستخدم في مساعدة CLI.
onboardingScopesلاArray<"text-inference" | "image-generation">أسطح onboarding التي يجب أن يظهر فيها هذا الاختيار. وإذا حُذف، تكون القيمة الافتراضية ["text-inference"].

مرجع uiHints

تمثل uiHints خريطة من أسماء حقول التكوين إلى تلميحات عرض صغيرة.
{
  "uiHints": {
    "apiKey": {
      "label": "API key",
      "help": "Used for OpenRouter requests",
      "placeholder": "sk-or-v1-...",
      "sensitive": true
    }
  }
}
يمكن أن يتضمن كل تلميح حقل:
الحقلالنوعالمعنى
labelstringتسمية الحقل الموجهة للمستخدم.
helpstringنص مساعد قصير.
tagsstring[]وسوم اختيارية لواجهة المستخدم.
advancedbooleanيضع علامة على الحقل على أنه متقدم.
sensitivebooleanيضع علامة على الحقل كسري أو حساس.
placeholderstringنص العنصر النائب لمدخلات النماذج.

مرجع contracts

استخدم contracts فقط لبيانات تعريف ملكية الإمكانات الثابتة التي يستطيع OpenClaw قراءتها من دون استيراد وقت تشغيل plugin.
{
  "contracts": {
    "speechProviders": ["openai"],
    "realtimeTranscriptionProviders": ["openai"],
    "realtimeVoiceProviders": ["openai"],
    "mediaUnderstandingProviders": ["openai", "openai-codex"],
    "imageGenerationProviders": ["openai"],
    "videoGenerationProviders": ["qwen"],
    "webFetchProviders": ["firecrawl"],
    "webSearchProviders": ["gemini"],
    "tools": ["firecrawl_search", "firecrawl_scrape"]
  }
}
كل قائمة اختيارية:
الحقلالنوعالمعنى
speechProvidersstring[]معرّفات مزوّدي speech التي تملكها هذه الـ plugin.
realtimeTranscriptionProvidersstring[]معرّفات مزوّدي realtime-transcription التي تملكها هذه الـ plugin.
realtimeVoiceProvidersstring[]معرّفات مزوّدي realtime-voice التي تملكها هذه الـ plugin.
mediaUnderstandingProvidersstring[]معرّفات مزوّدي media-understanding التي تملكها هذه الـ plugin.
imageGenerationProvidersstring[]معرّفات مزوّدي image-generation التي تملكها هذه الـ plugin.
videoGenerationProvidersstring[]معرّفات مزوّدي video-generation التي تملكها هذه الـ plugin.
webFetchProvidersstring[]معرّفات مزوّدي web-fetch التي تملكها هذه الـ plugin.
webSearchProvidersstring[]معرّفات مزوّدي web-search التي تملكها هذه الـ plugin.
toolsstring[]أسماء أدوات الوكيل التي تملكها هذه الـ plugin لفحوصات العقود المضمّنة.

مرجع channelConfigs

استخدم channelConfigs عندما تحتاج plugin قناة إلى بيانات تعريف تكوين رخيصة قبل تحميل وقت التشغيل.
{
  "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",
      "preferOver": ["matrix-legacy"]
    }
  }
}
يمكن أن يتضمن كل إدخال قناة:
الحقلالنوعالمعنى
schemaobjectJSON Schema لـ channels.<id>. وهو مطلوب لكل إدخال تكوين قناة معلن.
uiHintsRecord<string, object>تسميات/عناصر نائبة/تلميحات حساسية اختيارية لواجهة المستخدم لذلك القسم من تكوين القناة.
labelstringتسمية القناة المدمجة في أسطح المحدد والفحص عندما لا تكون بيانات تعريف وقت التشغيل جاهزة.
descriptionstringوصف قصير للقناة لأسطح الفحص والفهرس.
preferOverstring[]معرّفات plugin قديمة أو أقل أولوية يجب أن تتفوق عليها هذه القناة في أسطح الاختيار.

مرجع modelSupport

استخدم modelSupport عندما يجب أن يستنتج OpenClaw plugin المزوّد الخاصة بك من معرّفات النماذج المختصرة مثل gpt-5.4 أو claude-sonnet-4.6 قبل تحميل وقت تشغيل plugin.
{
  "modelSupport": {
    "modelPrefixes": ["gpt-", "o1", "o3", "o4"],
    "modelPatterns": ["^computer-use-preview"]
  }
}
يطبّق OpenClaw أولوية كهذه:
  • تستخدم مراجع provider/model الصريحة بيانات تعريف providers المملوكة للـ manifest
  • تتفوق modelPatterns على modelPrefixes
  • إذا طابقت plugin واحدة غير مضمّنة وواحدة مضمّنة معًا، فإن plugin غير المضمّنة تنتصر
  • يتم تجاهل ما تبقى من غموض حتى يحدد المستخدم أو التكوين مزوّدًا
الحقول:
الحقلالنوعالمعنى
modelPrefixesstring[]بادئات تُطابق باستخدام startsWith مع معرّفات النماذج المختصرة.
modelPatternsstring[]مصادر regex تُطابق مع معرّفات النماذج المختصرة بعد إزالة لاحقة ملف التعريف.
أصبحت مفاتيح الإمكانات القديمة ذات المستوى الأعلى متقادمة. استخدم openclaw doctor --fix لنقل speechProviders وrealtimeTranscriptionProviders, وrealtimeVoiceProviders وmediaUnderstandingProviders, وimageGenerationProviders وvideoGenerationProviders, وwebFetchProviders وwebSearchProviders تحت contracts؛ إذ لم يعد تحميل manifest العادي يعامل تلك الحقول ذات المستوى الأعلى كملكية للإمكانات.

manifest مقابل package.json

يخدم الملفان أغراضًا مختلفة:
الملفيُستخدم من أجل
openclaw.plugin.jsonالاكتشاف، والتحقق من التكوين، وبيانات تعريف auth-choice، وتلميحات واجهة المستخدم التي يجب أن توجد قبل تشغيل شيفرة plugin
package.jsonبيانات تعريف npm، وتثبيت التبعيات، وكتلة openclaw المستخدمة للـ entrypoints، وضبط التثبيت، والإعداد، أو بيانات تعريف الفهرس
إذا لم تكن متأكدًا من مكان وضع جزء من بيانات التعريف، فاستخدم هذه القاعدة:
  • إذا كان يجب على OpenClaw معرفته قبل تحميل شيفرة plugin، فضعه في openclaw.plugin.json
  • إذا كان يتعلق بالتغليف، أو ملفات الإدخال، أو سلوك npm install، فضعه في package.json

حقول package.json التي تؤثر في الاكتشاف

تعيش بعض بيانات تعريف plugin السابقة لوقت التشغيل عمدًا في package.json تحت كتلة openclaw بدلًا من openclaw.plugin.json. أمثلة مهمة:
الحقلالمعنى
openclaw.extensionsيعلن entrypoints الخاصة بالـ plugin الأصلية.
openclaw.setupEntryentrypoint خفيف للإعداد فقط، يُستخدم أثناء onboarding وبدء القنوات المؤجل.
openclaw.channelبيانات تعريف خفيفة لفهرس القنوات مثل التسميات ومسارات الوثائق والأسماء المستعارة ونصوص الاختيار.
openclaw.install.npmSpec / openclaw.install.localPathتلميحات تثبيت/تحديث للـ plugins المضمّنة والمنشورة خارجيًا.
openclaw.install.defaultChoiceمسار التثبيت المفضل عندما تتوفر مصادر تثبيت متعددة.
openclaw.install.minHostVersionالحد الأدنى لإصدار مضيف OpenClaw المدعوم، باستخدام حد semver أدنى مثل >=2026.3.22.
openclaw.install.allowInvalidConfigRecoveryيسمح بمسار ضيق لاستعادة إعادة تثبيت plugin المضمّنة عندما يكون التكوين غير صالح.
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListenيسمح بتحميل أسطح القنوات الخاصة بالإعداد فقط قبل plugin القناة الكاملة أثناء بدء التشغيل.
يتم فرض openclaw.install.minHostVersion أثناء التثبيت وتحميل سجل manifest. وتُرفض القيم غير الصالحة؛ أما القيم الأحدث ولكن الصالحة فتتخطى plugin على المضيفات الأقدم. يكون openclaw.install.allowInvalidConfigRecovery ضيقًا عمدًا. فهو لا يجعل التكوينات المعطلة عشوائيًا قابلة للتثبيت. اليوم يسمح فقط لتدفقات التثبيت بالتعافي من إخفاقات ترقية محددة قديمة في plugins المضمّنة، مثل مسار plugin مضمّنة مفقود أو إدخال channels.<id> قديم لتلك plugin المضمّنة نفسها. ولا تزال أخطاء التكوين غير ذات الصلة تمنع التثبيت وتوجّه المشغلين إلى openclaw doctor --fix.

متطلبات JSON Schema

  • يجب أن تشحن كل plugin JSON Schema، حتى إذا لم تكن تقبل أي تكوين.
  • schema فارغة مقبولة (مثل { "type": "object", "additionalProperties": false }).
  • يتم التحقق من schemas في وقت قراءة/كتابة التكوين، وليس وقت التشغيل.

سلوك التحقق

  • تكون مفاتيح channels.* غير المعروفة أخطاء، ما لم يعلن manifest الخاصة بـ plugin عن معرّف القناة.
  • يجب أن تشير plugins.entries.<id> وplugins.allow وplugins.deny وplugins.slots.* إلى معرّفات plugin قابلة للاكتشاف. وتكون المعرفات غير المعروفة أخطاء.
  • إذا كانت plugin مثبتة لكن manifest أو schema الخاصة بها مكسورة أو مفقودة، يفشل التحقق ويبلّغ Doctor عن خطأ plugin.
  • إذا كان تكوين plugin موجودًا لكن plugin معطلة، فيتم الاحتفاظ بالتكوين ويُعرَض تحذير في Doctor + السجلات.
راجع Configuration reference للحصول على schema الكاملة لـ plugins.*.

ملاحظات

  • manifest مطلوبة للـ plugins الأصلية في OpenClaw، بما في ذلك التحميلات المحلية من نظام الملفات.
  • ما يزال وقت التشغيل يحمّل وحدة plugin بشكل منفصل؛ وتُستخدم manifest فقط للاكتشاف + التحقق.
  • تُحلل manifests الأصلية باستخدام JSON5، لذا تُقبل التعليقات والفواصل اللاحقة والمفاتيح غير المقتبسة ما دام أن القيمة النهائية ما تزال كائنًا.
  • لا يقرأ محمّل manifest إلا الحقول الموثقة. تجنّب إضافة مفاتيح عليا مخصصة هنا.
  • يمثّل providerAuthEnvVars مسار بيانات التعريف الرخيصة لفحوصات المصادقة، والتحقق من علامات env، والأسطح المشابهة لمصادقة المزوّد التي لا ينبغي أن تشغّل وقت تشغيل plugin فقط لفحص أسماء env.
  • يمثّل providerAuthChoices مسار بيانات التعريف الرخيصة لمحددات auth-choice، وتحليل --auth-choice، وربط المزوّد المفضّل، وتسجيل أعلام CLI البسيطة قبل تحميل وقت تشغيل المزوّد. أما بالنسبة إلى بيانات تعريف معالج وقت التشغيل التي تتطلب شيفرة المزوّد، فراجع Provider runtime hooks.
  • يتم اختيار أنواع plugins الحصرية عبر plugins.slots.*.
    • يُختار kind: "memory" بواسطة plugins.slots.memory.
    • يُختار kind: "context-engine" بواسطة plugins.slots.contextEngine (والافتراضي: legacy المضمّنة).
  • يمكن حذف channels وproviders وcliBackends وskills عندما لا تحتاج plugin إليها.
  • إذا كانت plugin تعتمد على وحدات أصلية، فوثّق خطوات البناء وأي متطلبات لقائمة السماح الخاصة بمدير الحزم (مثل pnpm allow-build-scripts
    • pnpm rebuild <package>).

ذو صلة