Get started
بازآرایی Plugin بوم
بازآرایی 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 قرار میگیرد، یا از طریق یک barrel زمان اجرای متعلق به Plugin واگذار میشود
- مستندات و فهرست موجودی Plugin، Canvas را بهعنوان آزمایشی و متکی بر Plugin توصیف میکنند
غیرهدفها
- در این بازآرایی، رابط کاربری Canvas در برنامه بومی را بازطراحی نکنید.
- پشتیبانی پروتکل/کلاینت Canvas را از iOS، Android، یا macOS حذف نکنید، مگر اینکه یک تصمیم محصولی جداگانه بگوید Canvas باید حذف شود.
- فقط برای Canvas یک چارچوب گسترده سرویس Plugin نسازید، مگر اینکه دستکم یک Plugin همراه دیگر به همان seam نیاز داشته باشد.
وضعیت فعلی شاخه
انجامشده:
- بسته 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بهعنوان 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 قرار گرفت.
- dispatch عمومی ارتقای WebSocket برای مسیرهای HTTP متعلق به Plugin اضافه شد.
- URL میزبان ویژه Canvas در Gateway و احراز هویت قابلیت Node با سطح عمومی Plugin میزبانیشده و کمککنندههای قابلیت Node جایگزین شد.
- resolverهای رسانه میزبانیشده متعلق به Plugin اضافه شدند تا URLهای سند Canvas بهجای import کردن داخلیات سند Canvas توسط هسته، از طریق Plugin Canvas resolve شوند.
api.registerNodeCliFeature(...)اضافه شد تا Canvas بتواندopenclaw nodes canvasرا بهعنوان قابلیت Node متعلق به Plugin اعلام کند، بدون اینکه مسیر فرمان والد را دستی بنویسد.- importهای production از
extensions/canvas/runtime-api.jsدرsrc/**حذف شدند. - منبع bundle مربوط به A2UI از
apps/shared/OpenClawKit/Tools/CanvasA2UIبهextensions/canvas/src/host/a2ui-appمنتقل شد. - پیادهسازی build/copy مربوط به A2UI زیر
extensions/canvas/scriptsمنتقل شد و سیمکشی build ریشه با hookهای دارایی عمومی Plugin همراه جایگزین شد. - alias پیکربندی قدیمی و سطحبالای زمان اجرا
canvasHostحذف شد. - مهاجرت doctor مربوط به Canvas نگه داشته شد تا
openclaw doctor --fixپیکربندیهای قدیمیcanvasHostرا بهplugins.entries.canvas.config.hostبازنویسی کند. - سازگاری پروتکل Canvas مربوط به عاملهای قدیمی پشت پروتکل Gateway نسخه ۴ حذف شد. کلاینتهای بومی و Gatewayها اکنون فقط از
pluginSurfaceUrls.canvasبههمراهnode.pluginSurface.refreshاستفاده میکنند؛ مسیر منسوخcanvasHostUrl،canvasCapability، وnode.canvas.capability.refreshدر این بازآرایی آزمایشی عمداً پشتیبانی نمیشود. - فهرست موجودی تولیدشده Plugin برای شامل کردن Canvas بهروزرسانی شد.
- مستندات مرجع Plugin در
docs/plugins/reference/canvas.mdاضافه شد.
سطوح شناختهشده Canvas که هنوز متعلق به هسته هستند:
- handlerهای Canvas در برنامه بومی زیر
apps/هنوز عمداً سطح Plugin Canvas را مصرف میکنند - handlerهای پروتکل/کلاینت Canvas در برنامه بومی زیر
apps/ - خروجی artifact منتشرشده هنوز برای lookup زمان اجرای سازگار با گذشته از
dist/canvas-host/a2uiاستفاده میکند، اما گام copy اکنون متعلق به Plugin است
شکل هدف
extensions/canvas باید مالک این موارد باشد:
- manifest و فراداده بسته Plugin
- ثبت ابزار عامل
- سیاست فرمان invoke در Node
- میزبان Canvas و زمان اجرای A2UI
- منبع bundle مربوط به Canvas A2UI و اسکریپتهای build/copy دارایی
- ایجاد سند Canvas و resolve دارایی
- پیادهسازی CLI مربوط به Canvas
- صفحه مستندات Canvas و ورودی فهرست موجودی Plugin
هسته باید فقط مالک seamهای عمومی باشد:
- کشف و ثبت Plugin
- رجیستری عمومی ابزار عامل
- رجیستری عمومی سیاست invoke در Node
- HTTP/auth عمومی Gateway و dispatch ارتقای WebSocket
- resolve عمومی URL سطح Plugin میزبانیشده
- ثبت عمومی resolver رسانه میزبانیشده
- انتقال عمومی قابلیت Node
- لولهکشی عمومی پیکربندی
- کشف عمومی hook دارایی Plugin همراه
برنامههای بومی میتوانند handlerهای فرمان Canvas را بهعنوان کلاینتهای پروتکل نگه دارند. آنها مالک زمان اجرای Plugin نیستند.
گامهای مهاجرت
plugins.entries.canvas.config.hostرا بهعنوان سطح پیکربندی متعلق به Plugin در نظر بگیرید.- مستندات را بهروزرسانی کنید تا Canvas بهعنوان یک Plugin همراه آزمایشی توصیف شود.
- تستهای متمرکز Canvas، بررسیهای فهرست موجودی Plugin، بررسیهای API مربوط به SDK Plugin، و gateهای build/type تحت تأثیر مرزهای زمان اجرا را اجرا کنید.
چکلیست audit
پیش از کامل دانستن بازآرایی:
rg "src/canvas-host|../canvas-host"هیچ import زندهای از منبع برنگرداند.rg "canvas-tool|createCanvasTool" srcهیچ پیادهسازی ابزار Canvas متعلق به هسته پیدا نکند.rg "canvas.present|canvas.snapshot|canvas.a2ui" src/gatewayهیچ پیشفرض allowlist سختکدشدهای بیرون از تستهای عمومی سیاست 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هیچ مالکیت زمان اجرای Gateway برنگرداند.rg "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قبول شود، یا baselineهای 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
اگر barrel زمان اجرا، import تنبل، بستهبندی، یا سطوح منتشرشده Plugin تغییر کرد، پیش از push، pnpm build را اجرا کنید.