Get started
Canvas Plugin रिफ़ैक्टर
Canvas Plugin रीफ़ैक्टर
Canvas का उपयोग कम होता है और यह प्रयोगात्मक है। इसे कोर फ़ीचर नहीं, बल्कि बंडल किए गए Plugin के रूप में मानें। कोर में सामान्य Gateway, Node, HTTP, प्रमाणीकरण, कॉन्फ़िगरेशन और नेटिव-क्लाइंट प्लंबिंग रह सकती है, लेकिन Canvas-विशिष्ट व्यवहार extensions/canvas के अंतर्गत होना चाहिए।
लक्ष्य
वर्तमान युग्मित-Node व्यवहार को बनाए रखते हुए Canvas का स्वामित्व extensions/canvas में ले जाएँ:
- एजेंट के लिए उपलब्ध
canvasटूल Canvas Plugin द्वारा पंजीकृत होता है - Canvas Node कमांड केवल तभी अनुमत होते हैं, जब Canvas Plugin उन्हें पंजीकृत करता है
- A2UI होस्ट/स्रोत फ़ाइलें Canvas Plugin के अंतर्गत रहती हैं
- Canvas दस्तावेज़ का मटेरियलाइज़ेशन Canvas Plugin के अंतर्गत रहता है
- CLI कमांड का कार्यान्वयन Canvas Plugin के अंतर्गत रहता है या Plugin के स्वामित्व वाले रनटाइम बैरल के माध्यम से डेलिगेट करता है
- दस्तावेज़ और Plugin इन्वेंटरी Canvas को प्रयोगात्मक और Plugin-समर्थित बताते हैं
गैर-लक्ष्य
- इस रीफ़ैक्टर में नेटिव ऐप के Canvas UI को पुनः डिज़ाइन न करें।
- iOS, Android या macOS से Canvas प्रोटोकॉल/क्लाइंट समर्थन न हटाएँ, जब तक किसी अलग उत्पाद निर्णय में Canvas को हटाने के लिए न कहा गया हो।
- केवल Canvas के लिए व्यापक Plugin सेवा फ़्रेमवर्क न बनाएँ, जब तक कम-से-कम एक अन्य बंडल किए गए Plugin को भी उसी सीम की आवश्यकता न हो।
वर्तमान ब्रांच की स्थिति
पूर्ण:
extensions/canvasमें बंडल किया गया Plugin पैकेज जोड़ा गया।extensions/canvas/openclaw.plugin.jsonजोड़ा गया।- एजेंट के
canvasटूल कोsrc/agents/tools/canvas-tool.tsसेextensions/canvas/src/tool.tsमें ले जाया गया। src/agents/openclaw-tools.tsसेcreateCanvasToolका कोर पंजीकरण हटाया गया।- Canvas होस्ट कार्यान्वयन को
src/canvas-hostसेextensions/canvas/src/hostमें ले जाया गया। - परीक्षणों, पैकेजिंग और बाहरी सार्वजनिक Canvas सहायकों के लिए
extensions/canvas/runtime-api.tsको Plugin के स्वामित्व वाले संगतता बैरल के रूप में रखा गया। - Canvas दस्तावेज़ मटेरियलाइज़ेशन को
src/gateway/canvas-documents.tsसेextensions/canvas/src/documents.tsमें ले जाया गया। - Canvas CLI कार्यान्वयन और A2UI JSONL सहायकों को
extensions/canvas/src/cli.tsमें ले जाया गया। - Canvas होस्ट URL और स्कोप किए गए क्षमता सहायकों को
extensions/canvas/srcमें ले जाया गया। - Canvas Node कमांड के डिफ़ॉल्ट को हार्डकोड की गई कोर सूचियों से निकालकर Plugin
nodeInvokePoliciesमें ले जाया गया। plugins.entries.canvas.config.hostपर Plugin के स्वामित्व वाला Canvas होस्ट कॉन्फ़िगरेशन जोड़ा गया।- Canvas और A2UI की HTTP सर्विंग को Canvas Plugin के HTTP रूट पंजीकरण के पीछे ले जाया गया।
- Plugin के स्वामित्व वाले HTTP रूट के लिए सामान्य Plugin WebSocket अपग्रेड डिस्पैच जोड़ा गया।
- Canvas-विशिष्ट Gateway होस्ट URL और Node क्षमता प्रमाणीकरण को सामान्य होस्ट किए गए Plugin सरफ़ेस और Node क्षमता सहायकों से बदला गया।
- Plugin के स्वामित्व वाले होस्टेड मीडिया रिज़ॉल्वर जोड़े गए, ताकि Canvas दस्तावेज़ URL कोर द्वारा Canvas दस्तावेज़ के आंतरिक भागों को इंपोर्ट करने के बजाय Canvas Plugin के माध्यम से रिज़ॉल्व हों।
api.registerNodeCliFeature(...)जोड़ा गया, ताकि Canvas पैरेंट कमांड पथ को मैन्युअल रूप से लिखे बिनाopenclaw nodes canvasको Plugin के स्वामित्व वाले Node फ़ीचर के रूप में घोषित कर सके।extensions/canvas/runtime-api.jsके प्रोडक्शनsrc/**इंपोर्ट हटाए गए।- A2UI बंडल स्रोत को
apps/shared/OpenClawKit/Tools/CanvasA2UIसेextensions/canvas/src/host/a2ui-appमें ले जाया गया। - A2UI बिल्ड/कॉपी कार्यान्वयन को
extensions/canvas/scriptsके अंतर्गत ले जाया गया और रूट बिल्ड वायरिंग को सामान्य बंडल-Plugin एसेट हुक से बदला गया। - रनटाइम का पुराना शीर्ष-स्तरीय
canvasHostकॉन्फ़िगरेशन उपनाम हटाया गया। - Canvas डॉक्टर माइग्रेशन रखा गया, ताकि
openclaw doctor --fixपुरानेcanvasHostकॉन्फ़िगरेशन कोplugins.entries.canvas.config.hostमें फिर से लिखे। - Gateway प्रोटोकॉल v4 के पीछे पुराने एजेंट की Canvas प्रोटोकॉल संगतता हटाई गई। नेटिव क्लाइंट और Gateway अब केवल
pluginSurfaceUrls.canvasतथाnode.pluginSurface.refreshका उपयोग करते हैं; इस प्रयोगात्मक रीफ़ैक्टर में अप्रचलितcanvasHostUrl,canvasCapabilityऔरnode.canvas.capability.refreshपथ जानबूझकर असमर्थित हैं। - Canvas को शामिल करने के लिए जनरेट की गई Plugin इन्वेंटरी अपडेट की गई।
docs/plugins/reference/canvas.mdपर Plugin संदर्भ दस्तावेज़ जोड़े गए।
कोर के स्वामित्व वाले ज्ञात शेष Canvas सरफ़ेस:
apps/के अंतर्गत नेटिव ऐप Canvas हैंडलर अभी भी जानबूझकर Canvas Plugin सरफ़ेस का उपयोग करते हैंapps/के अंतर्गत नेटिव ऐप Canvas प्रोटोकॉल/क्लाइंट हैंडलर- प्रकाशित आर्टिफ़ैक्ट आउटपुट पश्चगामी-संगत रनटाइम लुकअप के लिए अभी भी
dist/canvas-host/a2uiका उपयोग करता है, लेकिन कॉपी चरण अब Plugin के स्वामित्व में है
लक्षित संरचना
extensions/canvas के स्वामित्व में ये होने चाहिए:
- Plugin मैनिफ़ेस्ट और पैकेज मेटाडेटा
- एजेंट टूल पंजीकरण
- Node इनवोक कमांड नीति
- Canvas होस्ट और A2UI रनटाइम
- Canvas A2UI बंडल स्रोत और एसेट बिल्ड/कॉपी स्क्रिप्ट
- Canvas दस्तावेज़ निर्माण और एसेट रिज़ॉल्यूशन
- Canvas CLI कार्यान्वयन
- Canvas दस्तावेज़ पृष्ठ और Plugin इन्वेंटरी प्रविष्टि
कोर के स्वामित्व में केवल सामान्य सीम होने चाहिए:
- Plugin खोज और पंजीकरण
- सामान्य एजेंट टूल रजिस्ट्री
- सामान्य Node इनवोक नीति रजिस्ट्री
- सामान्य Gateway HTTP/प्रमाणीकरण और WebSocket अपग्रेड डिस्पैच
- सामान्य होस्ट किए गए Plugin सरफ़ेस का URL रिज़ॉल्यूशन
- सामान्य होस्टेड मीडिया रिज़ॉल्वर पंजीकरण
- सामान्य Node क्षमता ट्रांसपोर्ट
- सामान्य कॉन्फ़िगरेशन प्लंबिंग
- सामान्य बंडल-Plugin एसेट हुक खोज
नेटिव ऐप्स प्रोटोकॉल के क्लाइंट के रूप में Canvas कमांड हैंडलर रख सकते हैं। वे Plugin रनटाइम के स्वामी नहीं हैं।
माइग्रेशन के चरण
plugins.entries.canvas.config.hostको Plugin के स्वामित्व वाला कॉन्फ़िगरेशन सरफ़ेस मानें।- दस्तावेज़ अपडेट करें, ताकि Canvas को प्रयोगात्मक बंडल किए गए Plugin के रूप में वर्णित किया जाए।
- केंद्रित Canvas परीक्षण, Plugin इन्वेंटरी जाँच, Plugin SDK API जाँच और रनटाइम सीमाओं से प्रभावित बिल्ड/टाइप गेट चलाएँ।
ऑडिट चेकलिस्ट
रीफ़ैक्टर को पूर्ण कहने से पहले:
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खाली है; Canvas Plugin नेस्टेड Plugin CLI मेटाडेटा के माध्यम सेopenclaw nodes canvasको पंजीकृत करता है।rg "createCanvasHostHandler|handleA2uiHttpRequest" src/gatewayकोई 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 परीक्षण सफल होते हैं।
- 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यदि रनटाइम बैरल, लेज़ी इंपोर्ट, पैकेजिंग या प्रकाशित Plugin सरफ़ेस बदलते हैं, तो पुश से पहले pnpm build चलाएँ।