Get started
การปรับโครงสร้าง Plugin Canvas
การปรับโครงสร้าง Plugin Canvas
Canvas มีการใช้งานน้อยและอยู่ในขั้นทดลอง ให้ถือว่าเป็น Plugin ที่รวมมากับระบบ ไม่ใช่ฟีเจอร์หลัก ส่วนแกนกลางอาจคงโครงสร้างพื้นฐานทั่วไปสำหรับ Gateway, Node, HTTP, การตรวจสอบสิทธิ์, การกำหนดค่า และไคลเอนต์แบบเนทีฟไว้ได้ แต่พฤติกรรมเฉพาะของ Canvas ควรอยู่ภายใต้ extensions/canvas
เป้าหมาย
ย้ายความเป็นเจ้าของ Canvas ไปยัง extensions/canvas โดยคงพฤติกรรม Node ที่จับคู่ไว้ในปัจจุบัน:
- เครื่องมือ
canvasที่เอเจนต์ใช้งานได้รับการลงทะเบียนโดย Plugin Canvas - อนุญาตคำสั่ง Node ของ Canvas เฉพาะเมื่อ Plugin Canvas ลงทะเบียนคำสั่งเหล่านั้น
- ไฟล์โฮสต์/ซอร์สของ A2UI อยู่ภายใต้ Plugin Canvas
- การจัดทำเอกสาร Canvas ให้อยู่ในรูปแบบพร้อมใช้งานอยู่ภายใต้ Plugin Canvas
- การติดตั้งใช้งานคำสั่ง CLI อยู่ภายใต้ Plugin Canvas หรือมอบหมายผ่าน runtime barrel ที่ Plugin เป็นเจ้าของ
- เอกสารและบัญชีรายการ Plugin อธิบายว่า Canvas เป็นฟีเจอร์ทดลองและทำงานผ่าน Plugin
สิ่งที่ไม่ใช่เป้าหมาย
- ห้ามออกแบบ UI ของ 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ไว้เป็น compatibility barrel ที่ Plugin เป็นเจ้าของ สำหรับการทดสอบ การจัดแพ็กเกจ และตัวช่วย Canvas สาธารณะภายนอก - ย้ายการจัดทำเอกสาร Canvas ให้อยู่ในรูปแบบพร้อมใช้งานจาก
src/gateway/canvas-documents.tsไปยังextensions/canvas/src/documents.ts - ย้ายการติดตั้งใช้งาน CLI ของ Canvas และตัวช่วย JSONL ของ A2UI ไปยัง
extensions/canvas/src/cli.ts - ย้าย URL โฮสต์ Canvas และตัวช่วยความสามารถที่จำกัดขอบเขตไปยัง
extensions/canvas/src - ย้ายค่าเริ่มต้นของคำสั่ง Node ของ Canvas ออกจากรายการแกนกลางที่เขียนค่าตายตัว ไปยัง
nodeInvokePoliciesของ Plugin - เพิ่มการกำหนดค่าโฮสต์ Canvas ที่ Plugin เป็นเจ้าของไว้ที่
plugins.entries.canvas.config.host - ย้ายการให้บริการ HTTP ของ Canvas และ A2UI ไปอยู่หลังการลงทะเบียนเส้นทาง HTTP ของ Plugin Canvas
- เพิ่มการส่งต่อการอัปเกรด WebSocket ของ Plugin แบบทั่วไปสำหรับเส้นทาง HTTP ที่ Plugin เป็นเจ้าของ
- แทนที่ URL โฮสต์ Gateway และการตรวจสอบสิทธิ์ความสามารถของ Node ที่เจาะจงกับ Canvas ด้วยพื้นผิว Plugin แบบโฮสต์และตัวช่วยความสามารถของ Node ที่ใช้ร่วมกันได้
- เพิ่มตัวแก้ไขสื่อแบบโฮสต์ที่ Plugin เป็นเจ้าของ เพื่อให้ URL เอกสาร Canvas แก้ไขผ่าน Plugin Canvas แทนที่แกนกลางจะนำเข้ารายละเอียดภายในของเอกสาร Canvas
- เพิ่ม
api.registerNodeCliFeature(...)เพื่อให้ Canvas สามารถประกาศopenclaw nodes canvasเป็นฟีเจอร์ Node ที่ Plugin เป็นเจ้าของ โดยไม่ต้องระบุเส้นทางคำสั่งแม่ด้วยตนเอง - นำการนำเข้า
extensions/canvas/runtime-api.jsจากsrc/**ในโค้ดที่ใช้จริงออก - ย้ายซอร์สบันเดิล A2UI จาก
apps/shared/OpenClawKit/Tools/CanvasA2UIไปยังextensions/canvas/src/host/a2ui-app - ย้ายการติดตั้งใช้งานสำหรับการบิลด์/คัดลอก A2UI ไปไว้ภายใต้
extensions/canvas/scriptsและแทนที่การเชื่อมโยงการบิลด์ระดับรากด้วยฮุกแอสเซ็ต Plugin ที่รวมมากับระบบแบบทั่วไป - นำชื่อแทนการกำหนดค่าระดับบนแบบเก่า
canvasHostออกจาก runtime - คงการย้ายข้อมูล Canvas ของ doctor ไว้ เพื่อให้
openclaw doctor --fixเขียนการกำหนดค่าcanvasHostแบบเก่าใหม่เป็นplugins.entries.canvas.config.host - นำความเข้ากันได้ของโปรโตคอล Canvas สำหรับเอเจนต์รุ่นเก่าที่อยู่หลังโปรโตคอล Gateway v4 ออก ปัจจุบันไคลเอนต์แบบเนทีฟและ Gateway ใช้เพียง
pluginSurfaceUrls.canvasร่วมกับnode.pluginSurface.refreshเท่านั้น ส่วนเส้นทางcanvasHostUrl,canvasCapabilityและnode.canvas.capability.refreshที่เลิกใช้แล้วจะไม่ได้รับการรองรับโดยเจตนาในการปรับโครงสร้างเชิงทดลองครั้งนี้ - อัปเดตบัญชีรายการ Plugin ที่สร้างขึ้นให้รวม Canvas
- เพิ่มเอกสารอ้างอิง Plugin ที่
docs/plugins/reference/canvas.md
พื้นผิว Canvas ที่แกนกลางยังคงเป็นเจ้าของและทราบอยู่แล้ว:
- ตัวจัดการ Canvas ของแอปแบบเนทีฟภายใต้
apps/ยังคงใช้พื้นผิว Plugin Canvas โดยเจตนา - ตัวจัดการโปรโตคอล/ไคลเอนต์ Canvas ของแอปแบบเนทีฟภายใต้
apps/ - เอาต์พุตอาร์ติแฟกต์ที่เผยแพร่ยังคงใช้
dist/canvas-host/a2uiเพื่อให้การค้นหา runtime เข้ากันได้กับเวอร์ชันก่อนหน้า แต่ขณะนี้ขั้นตอนการคัดลอกเป็นของ Plugin แล้ว
รูปแบบเป้าหมาย
extensions/canvas ควรเป็นเจ้าของ:
- ไฟล์ manifest และข้อมูลเมตาของแพ็กเกจ Plugin
- การลงทะเบียนเครื่องมือของเอเจนต์
- นโยบายคำสั่งเรียกใช้ Node
- โฮสต์ Canvas และ runtime ของ A2UI
- ซอร์สบันเดิล Canvas A2UI และสคริปต์บิลด์/คัดลอกแอสเซ็ต
- การสร้างเอกสาร Canvas และการแก้ไขแอสเซ็ต
- การติดตั้งใช้งาน CLI ของ Canvas
- หน้าเอกสาร Canvas และรายการในบัญชีรายการ Plugin
แกนกลางควรเป็นเจ้าของเฉพาะจุดเชื่อมต่อทั่วไป:
- การค้นหาและลงทะเบียน Plugin
- รีจิสทรีเครื่องมือของเอเจนต์แบบทั่วไป
- รีจิสทรีนโยบายการเรียกใช้ Node แบบทั่วไป
- การส่งต่อ HTTP/การตรวจสอบสิทธิ์ของ Gateway และการอัปเกรด WebSocket แบบทั่วไป
- การแก้ไข URL พื้นผิว Plugin แบบโฮสต์ที่ใช้ร่วมกันได้
- การลงทะเบียนตัวแก้ไขสื่อแบบโฮสต์ที่ใช้ร่วมกันได้
- การขนส่งความสามารถของ Node แบบทั่วไป
- โครงสร้างพื้นฐานการกำหนดค่าแบบทั่วไป
- การค้นหาฮุกแอสเซ็ต Plugin ที่รวมมากับระบบแบบทั่วไป
แอปแบบเนทีฟอาจคงตัวจัดการคำสั่ง Canvas ไว้ในฐานะไคลเอนต์ของโปรโตคอล แอปเหล่านี้ไม่ใช่เจ้าของ runtime ของ Plugin
ขั้นตอนการย้าย
- ถือว่า
plugins.entries.canvas.config.hostเป็นพื้นผิวการกำหนดค่าที่ Plugin เป็นเจ้าของ - อัปเดตเอกสารให้อธิบายว่า Canvas เป็น Plugin ที่รวมมากับระบบและอยู่ในขั้นทดลอง
- เรียกใช้การทดสอบ Canvas แบบเจาะจง การตรวจสอบบัญชีรายการ Plugin การตรวจสอบ API ของ SDK Plugin และเกตการบิลด์/ประเภทที่ได้รับผลกระทบจากขอบเขตของ 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 Canvas จะลงทะเบียนopenclaw nodes canvasผ่านข้อมูลเมตา CLI ของ Plugin แบบซ้อนrg "createCanvasHostHandler|handleA2uiHttpRequest" src/gatewayต้องไม่พบความเป็นเจ้าของ runtime ของ Gatewayrg "apps/shared/OpenClawKit/Tools/CanvasA2UI|canvas-a2ui-copy|extensions/canvas/src/host/a2ui" scripts .github package.jsonต้องพบเฉพาะ wrapper สำหรับความเข้ากันได้หรือเส้นทางที่ Plugin เป็นเจ้าของpnpm plugins:inventory:checkผ่านpnpm plugin-sdk:api:checkผ่าน หรือมีการอัปเดตและตรวจทานค่าฐาน API ที่สร้างขึ้นโดยเจตนา- การทดสอบ Canvas แบบเจาะจงผ่าน
- การทดสอบเลนที่เปลี่ยนแปลงสำหรับเส้นทางโฮสต์ 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.tspnpm test src/gateway/server.plugin-node-capability-auth.test.ts src/gateway/server-import-boundary.test.tspnpm test extensions/canvas/src/config-migration.test.ts src/commands/doctor-legacy-config.migrations.test.tspnpm 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.tspnpm tsgo:extensionspnpm plugins:inventory:checkpnpm plugin-sdk:api:checkเรียกใช้ pnpm build ก่อนพุช หากมีการเปลี่ยนแปลง runtime barrel, การนำเข้าแบบ lazy, การจัดแพ็กเกจ หรือพื้นผิว Plugin ที่เผยแพร่