---
read_when:
    - Canvas होस्ट, टूल, कमांड, दस्तावेज़ या प्रोटोकॉल का स्वामित्व स्थानांतरित करना
    - यह ऑडिट करना कि Canvas अब भी कोर के स्वामित्व में है या नहीं
    - प्रयोगात्मक Canvas Plugin PR तैयार करना या उसकी समीक्षा करना
summary: Canvas को कोर से बाहर निकालकर एक बंडल किए गए प्रयोगात्मक Plugin में स्थानांतरित करने के लिए योजना और ऑडिट चेकलिस्ट।
title: Canvas Plugin रिफ़ैक्टर
x-i18n:
    generated_at: "2026-07-27T18:33:13Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: ead3f865ea80acb1e47f45a5ab07acf19a6470035c00c81006b2b1230bedd71e
    source_path: refactor/canvas.md
    workflow: 16
---

# 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 रनटाइम के स्वामी नहीं हैं।

## माइग्रेशन के चरण

1. `plugins.entries.canvas.config.host` को Plugin के स्वामित्व वाला कॉन्फ़िगरेशन सरफ़ेस मानें।
2. दस्तावेज़ अपडेट करें, ताकि Canvas को प्रयोगात्मक बंडल किए गए Plugin के रूप में वर्णित किया जाए।
3. केंद्रित 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-समर्थित है।

## सत्यापन कमांड

पुनरावृत्ति करते समय लक्षित स्थानीय जाँचों का उपयोग करें:

```sh
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
```

यदि रनटाइम बैरल, लेज़ी इंपोर्ट, पैकेजिंग या प्रकाशित Plugin सरफ़ेस बदलते हैं, तो पुश से पहले `pnpm build` चलाएँ।
