概览
@demxyuanli/dsh-canvas
README / ZH
插件文档
目录摘要
dsh.pub 核对固定版本的组合包契约、运行时事实与分发语义;完整 README 请查看源仓库。
在 GitHub 阅读完整 READMELIMITATIONS
已知限制
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% 准。
