Plugins
بناء Plugins الواجهة الخلفية للـ CLI
تتيح Plugins الخلفية الخاصة بـ CLI لـ OpenClaw استدعاء CLI محلي للذكاء الاصطناعي بوصفه خلفية استدلال نصي backend. تظهر الخلفية كبادئة موفر في مراجع النماذج:
acme-cli/acme-large
استخدم خلفية CLI عندما يكون التكامل العلوي مكشوفًا بالفعل كأمر محلي، أو عندما يمتلك CLI حالة تسجيل الدخول المحلية، أو عندما يكون CLI بديلًا مفيدًا إذا كانت موفرو API غير متاحة.
ما الذي يمتلكه Plugin
لدى Plugin خلفية CLI ثلاثة عقود:
| العقد | الملف | الغرض |
|---|---|---|
| مدخل الحزمة | package.json |
يوجّه OpenClaw إلى وحدة وقت تشغيل Plugin |
| ملكية البيان | openclaw.plugin.json |
يعلن معرّف الخلفية قبل تحميل وقت التشغيل |
| تسجيل وقت التشغيل | index.ts |
يستدعي api.registerCliBackend(...) مع افتراضيات الأمر |
البيان هو بيانات وصفية للاكتشاف. لا ينفّذ CLI ولا يسجّل
سلوك وقت التشغيل. يبدأ سلوك وقت التشغيل عندما يستدعي مدخل Plugin
api.registerCliBackend(...).
Plugin خلفية بالحد الأدنى
Create package metadata
{
"name": "@acme/openclaw-acme-cli",
"version": "1.0.0",
"type": "module",
"openclaw": {
"extensions": ["./index.ts"],
"compat": {
"pluginApi": ">=2026.3.24-beta.2",
"minGatewayVersion": "2026.3.24-beta.2"
},
"build": {
"openclawVersion": "2026.3.24-beta.2",
"pluginSdkVersion": "2026.3.24-beta.2"
}
},
"dependencies": {
"openclaw": "^2026.3.24"
},
"devDependencies": {
"typescript": "^5.9.0"
}
}
يجب أن تشحن الحزم المنشورة ملفات وقت تشغيل JavaScript مبنية. إذا كان مدخل
المصدر لديك هو ./src/index.ts، فأضف openclaw.runtimeExtensions يشير إلى
نظير JavaScript المبني. راجع نقاط الدخول.
Declare backend ownership
{
"id": "acme-cli",
"name": "Acme CLI",
"description": "Run Acme's local AI CLI through OpenClaw",
"cliBackends": ["acme-cli"],
"setup": {
"cliBackends": ["acme-cli"],
"requiresRuntime": false
},
"activation": {
"onStartup": false
},
"configSchema": {
"type": "object",
"additionalProperties": false
}
}
cliBackends هي قائمة ملكية وقت التشغيل. تتيح لـ OpenClaw التحميل التلقائي لـ
Plugin عندما يذكر الإعداد أو اختيار النموذج acme-cli/....
setup.cliBackends هي سطح الإعداد القائم على الواصفات أولًا. أضفها عندما
ينبغي لاكتشاف النماذج أو التهيئة الأولية أو الحالة التعرف على الخلفية دون
تحميل وقت تشغيل Plugin. استخدم requiresRuntime: false فقط عندما تكون تلك
الواصفات الثابتة كافية للإعداد.
Register the backend
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
import {
CLI_FRESH_WATCHDOG_DEFAULTS,
CLI_RESUME_WATCHDOG_DEFAULTS,
type CliBackendPlugin,
} from "openclaw/plugin-sdk/cli-backend";
function buildAcmeCliBackend(): CliBackendPlugin {
return {
id: "acme-cli",
liveTest: {
defaultModelRef: "acme-cli/acme-large",
defaultImageProbe: false,
defaultMcpProbe: false,
docker: {
npmPackage: "@acme/acme-cli",
binaryName: "acme",
},
},
config: {
command: "acme",
args: ["chat", "--json"],
output: "json",
input: "stdin",
modelArg: "--model",
sessionArg: "--session",
sessionMode: "existing",
sessionIdFields: ["session_id", "conversation_id"],
systemPromptFileArg: "--system-file",
systemPromptWhen: "first",
imageArg: "--image",
imageMode: "repeat",
reliability: {
watchdog: {
fresh: { ...CLI_FRESH_WATCHDOG_DEFAULTS },
resume: { ...CLI_RESUME_WATCHDOG_DEFAULTS },
},
},
serialize: true,
},
};
}
export default definePluginEntry({
id: "acme-cli",
name: "Acme CLI",
description: "Run Acme's local AI CLI through OpenClaw",
register(api) {
api.registerCliBackend(buildAcmeCliBackend());
},
});
يجب أن يطابق معرّف الخلفية إدخال cliBackends في البيان. config المسجّل
هو الافتراضي فقط؛ يتم دمج إعداد المستخدم ضمن
agents.defaults.cliBackends.acme-cli فوقه في وقت التشغيل.
شكل الإعداد
يصف CliBackendConfig كيف ينبغي لـ OpenClaw تشغيل CLI وتحليل مخرجاته:
| الحقل | الاستخدام |
|---|---|
command |
اسم الثنائي أو مسار أمر مطلق |
args |
argv الأساسي للتشغيلات الجديدة |
resumeArgs |
argv بديل للجلسات المستأنفة؛ يدعم {sessionId} |
output / resumeOutput |
المحلّل: json أو jsonl أو text |
input |
نقل الموجه: arg أو stdin |
modelArg |
العلم المستخدم قبل معرّف النموذج |
modelAliases |
ربط معرّفات نماذج OpenClaw بمعرّفات CLI الأصلية |
sessionArg / sessionArgs |
كيفية تمرير معرّف جلسة |
sessionMode |
always أو existing أو none |
sessionIdFields |
حقول JSON التي يقرؤها OpenClaw من مخرجات CLI |
systemPromptArg / systemPromptFileArg |
نقل موجه النظام |
systemPromptWhen |
first أو always أو never |
imageArg / imageMode |
دعم مسار الصورة |
serialize |
إبقاء تشغيلات الخلفية نفسها مرتبة |
reliability.watchdog |
ضبط مهلة عدم وجود مخرجات |
فضّل أصغر إعداد ثابت يطابق CLI. أضف استدعاءات راجعة لـ Plugin فقط للسلوك الذي ينتمي فعلًا إلى الخلفية.
خطافات الخلفية المتقدمة
يمكن لـ CliBackendPlugin أيضًا تعريف:
| الخطاف | الاستخدام |
|---|---|
normalizeConfig(config, context) |
إعادة كتابة إعداد المستخدم القديم بعد الدمج |
resolveExecutionArgs(ctx) |
إضافة أعلام خاصة بالطلب مثل جهد التفكير |
prepareExecution(ctx) |
إنشاء جسور مصادقة أو إعداد مؤقتة قبل التشغيل |
transformSystemPrompt(ctx) |
تطبيق تحويل نهائي خاص بـ CLI لموجه النظام |
textTransforms |
استبدالات ثنائية الاتجاه للموجه/المخرجات |
defaultAuthProfileId |
تفضيل ملف مصادقة OpenClaw محدد |
authEpochMode |
تحديد كيف تبطل تغييرات المصادقة جلسات CLI المخزنة |
nativeToolMode |
إعلان ما إذا كان لدى CLI أدوات أصلية دائمة التشغيل |
bundleMcp / bundleMcpMode |
الاشتراك في جسر أدوات MCP عبر local loopback الخاص بـ OpenClaw |
أبق هذه الخطافات مملوكة للموفر. لا تضف فروعًا خاصة بـ CLI إلى النواة عندما يمكن لخطاف خلفية التعبير عن السلوك.
جسر أدوات MCP
لا تتلقى خلفيات CLI أدوات OpenClaw افتراضيًا. إذا كان CLI يستطيع استهلاك إعداد MCP، فاشترك صراحة:
return {
id: "acme-cli",
bundleMcp: true,
bundleMcpMode: "codex-config-overrides",
config: {
command: "acme",
args: ["chat", "--json"],
output: "json",
},
};
أوضاع الجسر المدعومة هي:
| الوضع | الاستخدام |
|---|---|
claude-config-file |
CLIs التي تقبل ملف إعداد MCP |
codex-config-overrides |
CLIs التي تقبل تجاوزات الإعداد عبر argv |
gemini-system-settings |
CLIs التي تقرأ إعدادات MCP من دليل إعدادات النظام الخاص بها |
فعّل الجسر فقط عندما يستطيع CLI استهلاكه فعليًا. إذا كان لدى CLI طبقة أدوات
مدمجة خاصة به لا يمكن تعطيلها، فعيّن nativeToolMode: "always-on" لكي يتمكن OpenClaw من الفشل مغلقًا عندما يتطلب المستدعي عدم وجود أدوات أصلية.
إعداد المستخدم
يمكن للمستخدمين تجاوز أي افتراضي للخلفية:
{
agents: {
defaults: {
cliBackends: {
"acme-cli": {
command: "/opt/acme/bin/acme",
args: ["chat", "--json", "--profile", "work"],
modelAliases: {
large: "acme-large-2026",
},
},
},
model: {
primary: "openai/gpt-5.5",
fallbacks: ["acme-cli/large"],
},
},
},
}
وثّق الحد الأدنى من التجاوزات التي سيحتاجها المستخدمون غالبًا. عادةً يكون ذلك
command فقط عندما يكون الثنائي خارج PATH.
التحقق
بالنسبة إلى Plugins المضمّنة، أضف اختبارًا مركزًا حول الباني وتسجيل الإعداد، ثم شغّل مسار الاختبار المستهدف الخاص بـ Plugin:
pnpm test extensions/acme-cli
بالنسبة إلى Plugins المحلية أو المثبتة، تحقق من الاكتشاف ومن تشغيل نموذج حقيقي واحد:
openclaw plugins inspect acme-cli --runtime --json
openclaw agent --message "reply exactly: backend ok" --model acme-cli/acme-large
إذا كانت الخلفية تدعم الصور أو MCP، فأضف اختبار دخان حيًا يثبت تلك المسارات مع CLI الحقيقي. لا تعتمد على الفحص الثابت لسلوك الموجه أو الصورة أو MCP أو استئناف الجلسة.
قائمة التحقق
OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s
يحتوي package.json على openclaw.extensions ومدخلات وقت تشغيل مبنية للحزم المنشورة
OPENCLAW_DOCS_MARKER:calloutClose:
OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s
يعلن openclaw.plugin.json عن cliBackends وactivation.onStartup المقصود
OPENCLAW_DOCS_MARKER:calloutClose:
OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s
يكون setup.cliBackends موجودًا عندما ينبغي للإعداد/اكتشاف النماذج رؤية الخلفية باردة
OPENCLAW_DOCS_MARKER:calloutClose:
OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s
يستخدم api.registerCliBackend(...) معرّف الخلفية نفسه الموجود في البيان
OPENCLAW_DOCS_MARKER:calloutClose:
OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s
لا تزال تجاوزات المستخدم ضمن agents.defaults.cliBackends.<id> هي التي تسود
OPENCLAW_DOCS_MARKER:calloutClose: