Get started
إعادة هيكلة Plugin Canvas
إعادة هيكلة Plugin Canvas
Canvas قليل الاستخدام وتجريبي. عامله باعتباره Plugin مضمّنًا، وليس ميزة أساسية. يمكن للنواة الاحتفاظ بالبنية العامة الخاصة بـ Gateway وNode وHTTP والمصادقة والإعدادات والعميل الأصلي، لكن السلوك الخاص بـ Canvas يجب أن يكون تحت extensions/canvas.
الهدف
نقل ملكية Canvas إلى extensions/canvas مع الحفاظ على سلوك العقدة المقترنة الحالي:
- أداة
canvasالموجهة للوكيل يتم تسجيلها بواسطة Plugin Canvas - لا يُسمح بأوامر عقد Canvas إلا عندما يسجلها Plugin Canvas
- ملفات مضيف/مصدر A2UI تكون ضمن Plugin Canvas
- تجسيد مستندات Canvas يكون ضمن Plugin Canvas
- تنفيذ أمر CLI يكون ضمن Plugin Canvas، أو يفوض عبر runtime barrel مملوك للـ Plugin
- تصف الوثائق ومخزون Plugins Canvas بأنه تجريبي ومدعوم بـ Plugin
غير مستهدف
- لا تُعد تصميم واجهة مستخدم Canvas في التطبيق الأصلي ضمن إعادة الهيكلة هذه.
- لا تُزل دعم بروتوكول/عميل Canvas من iOS أو Android أو macOS إلا إذا نص قرار منتج منفصل على حذف Canvas.
- لا تبنِ إطار خدمة Plugin واسعًا لأجل Canvas فقط، إلا إذا احتاج Plugin مضمّن آخر على الأقل إلى نفس الوصلة.
حالة الفرع الحالية
تم:
- تمت إضافة حزمة Plugin مضمّنة في
extensions/canvas. - تمت إضافة
extensions/canvas/openclaw.plugin.json. - نُقلت أداة الوكيل
canvasمنsrc/agents/tools/canvas-tool.tsإلىextensions/canvas/src/tool.ts. - أُزيل تسجيل النواة لـ
createCanvasToolمنsrc/agents/openclaw-tools.ts. - نُقل تنفيذ مضيف Canvas من
src/canvas-hostإلىextensions/canvas/src/host. - أُبقي على
extensions/canvas/runtime-api.tsباعتباره runtime barrel للتوافق مملوكًا للـ Plugin للاختبارات والحزم ومساعدات Canvas العامة الخارجية. - نُقل تجسيد مستندات Canvas من
src/gateway/canvas-documents.tsإلىextensions/canvas/src/documents.ts. - نُقل تنفيذ Canvas CLI ومساعدات A2UI JSONL إلى
extensions/canvas/src/cli.ts. - نُقلت مساعدات عنوان URL لمضيف Canvas والإمكانات محددة النطاق إلى
extensions/canvas/src. - نُقلت افتراضات أوامر عقد Canvas من قوائم النواة الثابتة إلى
nodeInvokePoliciesالخاصة بالـ Plugin. - أُضيف إعداد مضيف Canvas مملوك للـ Plugin عند
plugins.entries.canvas.config.host. - نُقل تقديم Canvas وA2UI عبر HTTP خلف تسجيل مسار HTTP الخاص بـ Plugin Canvas.
- أُضيف توزيع ترقية WebSocket عام للـ Plugin لمسارات HTTP المملوكة للـ Plugin.
- استُبدلت مصادقة عنوان URL لمضيف Gateway الخاص بـ Canvas وإمكانات العقدة بمساعدات عامة لسطح Plugin مستضاف وإمكانات العقدة.
- أُضيفت محللات وسائط مستضافة مملوكة للـ Plugin بحيث تُحل عناوين URL لمستندات Canvas عبر Plugin Canvas بدلًا من استيراد النواة للداخليات الخاصة بمستندات Canvas.
- أُضيف
api.registerNodeCliFeature(...)بحيث يمكن لـ Canvas إعلانopenclaw nodes canvasكميزة عقدة مملوكة للـ Plugin دون كتابة مسار الأمر الأب يدويًا. - أُزيلت استيرادات الإنتاج
src/**منextensions/canvas/runtime-api.js. - نُقل مصدر حزمة A2UI من
apps/shared/OpenClawKit/Tools/CanvasA2UIإلىextensions/canvas/src/host/a2ui-app. - نُقل تنفيذ بناء/نسخ A2UI إلى
extensions/canvas/scriptsواستُبدل ربط البناء الجذري بخطافات أصول عامة للـ Plugin المضمّن. - أُزيل الاسم المستعار القديم في runtime لإعداد
canvasHostذي المستوى الأعلى. - أُبقي على ترحيل الطبيب الخاص بـ Canvas بحيث يعيد
openclaw doctor --fixكتابة إعداداتcanvasHostالقديمة إلىplugins.entries.canvas.config.host. - أُزيل توافق بروتوكول Canvas للوكلاء القدامى خلف بروتوكول Gateway v4. يستخدم العملاء الأصليون وGateways الآن فقط
pluginSurfaceUrls.canvasمعnode.pluginSurface.refresh؛ المسار المهملcanvasHostUrlوcanvasCapabilityوnode.canvas.capability.refreshغير مدعوم عمدًا في إعادة الهيكلة التجريبية هذه. - حُدّث مخزون Plugins المولّد ليشمل Canvas.
- أُضيفت وثائق مرجعية للـ Plugin في
docs/plugins/reference/canvas.md.
أسطح Canvas المعروفة المتبقية المملوكة للنواة:
- ما زالت معالجات Canvas في التطبيق الأصلي ضمن
apps/تستهلك سطح Plugin Canvas عمدًا - معالجات بروتوكول/عميل Canvas في التطبيق الأصلي ضمن
apps/ - ما زال ناتج الأثر المنشور يستخدم
dist/canvas-host/a2uiللبحث المتوافق مع الإصدارات السابقة في runtime، لكن خطوة النسخ أصبحت الآن مملوكة للـ Plugin
الشكل المستهدف
يجب أن يملك extensions/canvas ما يلي:
- بيان Plugin وبيانات تعريف الحزمة
- تسجيل أداة الوكيل
- سياسة أمر استدعاء العقدة
- مضيف Canvas وruntime الخاص بـ A2UI
- مصدر حزمة Canvas A2UI وسكربتات بناء/نسخ الأصول
- إنشاء مستندات Canvas وحل الأصول
- تنفيذ Canvas CLI
- صفحة وثائق Canvas ومدخل مخزون Plugins
يجب أن تملك النواة وصلات عامة فقط:
- اكتشاف Plugins وتسجيلها
- سجل أدوات الوكيل العام
- سجل سياسة استدعاء العقد العام
- HTTP/مصادقة Gateway العامة وتوزيع ترقية WebSocket
- حل عناوين URL لسطح Plugin المستضاف العام
- تسجيل محلل الوسائط المستضافة العام
- نقل إمكانات العقدة العام
- توصيل الإعدادات العام
- اكتشاف خطافات أصول Plugin المضمّنة العامة
يمكن للتطبيقات الأصلية الاحتفاظ بمعالجات أوامر Canvas كعملاء للبروتوكول. فهي ليست مالكة runtime الخاص بالـ Plugin.
خطوات الترحيل
- عامل
plugins.entries.canvas.config.hostباعتباره سطح الإعدادات المملوك للـ Plugin. - حدّث الوثائق بحيث توصف Canvas بأنها Plugin مضمّنة وتجريبية.
- شغّل اختبارات Canvas المركزة، وفحوصات مخزون Plugins، وفحوصات API الخاصة بـ Plugin SDK، وبوابات البناء/الأنواع المتأثرة بحدود runtime.
قائمة تدقيق المراجعة
قبل اعتبار إعادة الهيكلة مكتملة:
- يعيد
rg "src/canvas-host|../canvas-host"عدم وجود أي استيرادات مصدر حية. - لا يجد
rg "canvas-tool|createCanvasTool" srcأي تنفيذ لأداة Canvas مملوك للنواة. - لا يجد
rg "canvas.present|canvas.snapshot|canvas.a2ui" src/gatewayأي افتراضات قائمة سماح ثابتة خارج اختبارات سياسة Plugin العامة. - يكون
rg "extensions/canvas/runtime-api" src --glob '!**/*.test.ts'فارغًا. - يكون
rg "canvas-documents" srcفارغًا. - يكون
rg "registerNodesCanvasCommands|nodes-canvas" srcفارغًا؛ يسجل Plugin Canvasopenclaw nodes canvasعبر بيانات تعريف CLI المتداخلة الخاصة بالـ Plugin. - يعيد
rg "createCanvasHostHandler|handleA2uiHttpRequest" src/gatewayعدم وجود ملكية runtime في Gateway. - لا يجد
rg "apps/shared/OpenClawKit/Tools/CanvasA2UI|canvas-a2ui-copy|extensions/canvas/src/host/a2ui" scripts .github package.jsonإلا مغلفات توافق أو مسارات مملوكة للـ Plugin. - ينجح
pnpm plugins:inventory:check. - ينجح
pnpm plugin-sdk:api:check، أو يتم تحديث ومراجعة خطوط أساس API المولّدة عمدًا. - تنجح اختبارات Canvas المستهدفة.
- تنجح اختبارات changed-lanes لمسارات مضيف Canvas/A2UI.
- يصرح نص PR بوضوح بأن Canvas تجريبي ومدعوم بـ Plugin.
أوامر التحقق
استخدم الفحوصات المحلية المستهدفة أثناء التكرار:
pnpm test extensions/canvas/src/host/server.test.ts extensions/canvas/src/host/server.state-dir.test.ts extensions/canvas/src/host/file-resolver.test.ts
pnpm test src/gateway/server.plugin-node-capability-auth.test.ts src/gateway/server-import-boundary.test.ts
pnpm test extensions/canvas/src/config-migration.test.ts src/commands/doctor-legacy-config.migrations.test.ts
pnpm test test/scripts/changed-lanes.test.ts test/scripts/build-all.test.ts extensions/canvas/scripts/bundle-a2ui.test.ts test/scripts/bundled-plugin-assets.test.ts extensions/canvas/scripts/copy-a2ui.test.ts src/infra/run-node.test.ts
pnpm tsgo:extensions
pnpm plugins:inventory:check
pnpm plugin-sdk:api:check
شغّل pnpm build قبل الدفع إذا تغيّرت runtime barrel أو الاستيراد الكسول أو الحزم أو أسطح Plugin المنشورة.