它是什么
DSH Visualize 让模型除了文字之外多了一种回答方式。它注册了一个 visualize(path, title?, mode?) 工具:模型把一份 HTML 片段写进文件,用路径调用这个工具,DSH 网页界面就会把这份片段渲染成对话里的一张可交互卡片——模拟器、图表、对比面板或 UI mockup,而不再只是另一段文字。
包描述里点名了两个组成部分:工具本身,以及一个教模型如何写片段的捆绑 skill。README 对来源说得很坦白——整体灵感来自 Codex 桌面端的 /visualize,skill 的分层 reference 与 Chart.js 优先路线借鉴了 himself65/finance-skills 里的 generative-ui skill。可选的 mode: "wide" 让卡片占据更宽的横向空间,适合并排对比的内容。
卡片会跟随 harness 的明暗主题与鲸鱼蓝配色。会话重放时,卡片从持久化的工具结果恢复,不依赖原始片段文件仍然存在。
沙箱模型
安装之前最该读的是这一节,README 写得相当具体:
- 每张卡片运行在不透明来源的 sandboxed iframe 里,与宿主页面隔离。
- CSP 会阻止网络请求、嵌套页面与表单提交;唯一允许的出站加载是从固定 CDN 拉取静态资源。
- 单个片段默认上限 1,000,000 字节,可通过
maxFragmentBytes调整。
有两处需要如实指出。「固定 CDN」仍然是第三方网络依赖——卡片渲染时引用 Chart.js 就是在访问互联网,README 既没有点名是哪家 CDN,也没说允许列表是否可配。另外,沙箱描述的是被渲染片段的隔离;插件宿主端那一半能读什么、做什么,README 只字未提。请按「未说明」理解,而不是按「安全」理解。
运行要求
- Harness 版本:未声明。 清单没有
dsh.compatibility字段,也没有engines。peer 依赖要求^0.1.0-rc.6一代的 dsh 平台包(dsh-fs、dsh-llm、dsh-session、dsh-tools、dsh-skill、dsh-sandbox-policy)、Cordis^4.0.1、Schemastery^3.18.1与 React^18.2.0;devDependencies 钉在0.1.1-rc.2。这一代之外的版本请按「未测试」对待,而不是按「兼容」对待。 - 仅限 Web。 客户端平台声明为
web,注入@deepseek-ai/dsh-client-runtime;没有 TUI 或 headless 渲染路径。 - 没有安装期生命周期脚本。 包只定义了
build、typecheck、test、check,没有preinstall/install/postinstall/prepare。README 说明构建产物已提交进仓库,GitHub 安装无需本地构建。 - 权限与遥测: README 只记录了 iframe 沙箱,没有权限模型、没有宿主端文件或网络行为说明、没有遥测声明。未记录;按「未说明」而不是「安全」理解。
已知限制
- 卡片只在网页界面渲染。TUI 与 headless 客户端显示的是普通工具结果,同样的请求在那里不会产生任何可视内容。
- 卡片无法回话。 卡片里的按钮暂时不能向主对话发送 follow-up 消息;交互被限制在卡片内部。
- 字节上限是硬性天花板;超限之后的具体表现,README 没有描述。
- 已记录的配置面只有
maxFragmentBytes一项。没有已记录的方式可以放宽 CSP、更换 CDN,或在自动明暗跟随之外自定义卡片外观。
什么时候用它、什么时候不要用
当你在 DSH 网页界面工作、希望模型把答案展示出来——能调参数的排序可视化、一个小模拟器、一块对比面板——而不是描述出来时,用它。工具加 skill 的组合意味着你用大白话提需求,写片段是模型的事。
如果你主要在 TUI 或 headless 环境工作,不要装:卡片无处可渲染。也不要因为沙箱的存在就随意渲染不可信片段——iframe 隔离是有文档的,宿主端那一半没有,而本条目的安全状态就是 unverified。如果你想要的东西需要任意第三方脚本、实时 API 调用或表单,CSP 会按设计把它们全部挡住;一个静态图表 CDN 就是卡片能够到的最远边界。
安装
dsh plugin --profile web add github:Nagi-ovo/dsh-visualize
只能从 GitHub 安装——包清单标记为 private,未发布到 npm。构建产物已提交,无需本地构建;如果 dsh web 正在运行,重启后刷新页面。README 建议用 dsh --profile web --dump-config 确认插件已进入最终配置,并提到使用社区 plugin-registry 的用户也可以从「设置 → 插件」安装。
