All plugins

DSH / BUNDLE / CLIENT-UI

@demxyuanli/dsh-canvas

v0.2.0demxyuanli / dsh-canvas6237d90265

InstallableBundlesUI & client pluginsCommunity · Topic auto-analysisWeb UI

Overview

@demxyuanli/dsh-canvas

DeepSeek Harness project-board plugin: agent-authored .canvas.tsx boards compiled and rendered live in the web GUI, with a host UI kit, action bridge, sidecar state, and agent-readable slices

README / EN

Package documentation

Registry summary

DeepSeek Harness project-board plugin: agent-authored .canvas.tsx boards compiled and rendered live in the web GUI, with a host UI kit, action bridge, sidecar state, and agent-readable slices

dsh.pub verifies the pinned bundle contract, runtime facts, and distribution semantics. The complete README remains in the source repository.

Read the full README on GitHub

LIMITATIONS

Known limitations

1. **信任级别 = 插件**:画布代码在宿主页面里执行。不注入 `fetch` / `localStorage` / `document`,也不允许远程资源,但**能**在浏览器里做任意计算(死循环 / 吃内存只能靠渲染上限与页面可恢复性缓解)。不引入 iframe / Worker 隔离。 2. **不真正虚拟化**:`Table` / `TodoList` 超过单组件 `maxRows`(默认 300)只截断并显示 `showing N of M`;`BarChart` 超过 40 个 category 只渲染前 40。 3. **诊断有两个产出方**:编译期(host 扫描 / 编译器 / 抽取 / `canvas_state_merge`)与渲染期(client 的截断文案)。`canvas_check` 只看得到前者,别用它验证行数上限。 4. **诊断码口径已收敛**(DESIGN §21 / §32):`E_REACT_IMPORT` 已删除(`import React` 归 `E_PARSE_IMPORT`);`W_UNKNOWN_PROP` / `W_DEPRECATED` / `W_NO_METADATA` 是 reserved,当前不产出;`W_MANY_ROWS` 是渲染期文案;`E_UNKNOWN_EXPORT` 校验具名导入是否在套件导出面内(导出面在 `host/kitsurface.js`,与 `lib/client.js` 双向校验)。逐条见 troubleshooting.md。 5. **旧模块不回收**:浏览器无法卸载已 import 的 ESM,长期会话里旧版本模块会累积(数量 = 修订数),只能提示重载页面。 6. **只能 import `dsh/canvas`**:说明符之外的模块一律拒绝(`E_PARSE_IMPORT`),套件没有导出的名字也在编译期拒绝(`E_UNKNOWN_EXPORT`);画布之间不能互相 import,也不能用第三方库;图表只有 `BarChart`(分组柱)、`PieChart`(饼/环)与 `HeatMatrix`,没有折线图。 7. **`runCommand` 只跑白名单**:命令字符串**永远取自** Config 的 `commandWhitelist` 项(请求只能按 `id` 或完整命令选中,不能改写它),执行经 `ctx.shell` 并按调用 Session 的 `ctx.sandboxPolicy` 约束。白名单为空返回 `unsupported`,未登记返回 `denied`。 8. **`startTurn` 有限流**:同一画布 + 同一 prompt 在 `startTurnCooldownMs` 内只接受一次,防止误点或循环刷会话。 9. **发现范围是工作区**:工作区外的 `*.canvas.tsx` 可以用文件地址打开,但不会出现在画布目录里。 10. **单包双半**:host 半边依赖 `sucrase`,浏览器半边必须零依赖;二者一起发布,不能只装一半。 11. **sidecar 可能陈旧**:源文件变化后 overlay 不自动丢弃,会以 `staleOverlay` / `orphan` 暴露给 `canvas_read`,由 agent 决定是否 `canvas_state_merge`。 12. **`.canvas/` 目录名**尚未与既有习惯(`.target-gate/`、`.codegraph/`、`.cursor/`)统一评审。 13. **`compileTimeoutMs` 未生效**:见「配置项」表——它是当前唯一「对外承诺了不存在的保护」的配置项,已作为审计条目 C-05 登记在 [docs/audit/interface-audit.canvas.tsx](docs/audit/interface-audit.canvas.tsx)。 14. **意图入口是启发式**:`agent/pre-step` 的匹配规则是强 / 弱名词 + 创建动词,误判与漏判都会发生;用 `intentHook` / `intentKeywords` / `intentGuide` 调,不要指望 100% 准。