dsh-slide
dsh-slide 是 DeepSeek Harness Web UI 的 Conversation 级可视化幻灯片编辑器。启用后,当前 Conversation 的默认聊天界面会切换为类似 PowerPoint 的画布,同时继续使用原有 Session、Workspace、模型配置和 AI 输入通道。

功能
- 可以为当前打开的 Conversation 单独开启或关闭 Slide Editor,不影响其他 Conversation。
- 提供多页 16:9 画布、实时缩略图、对象与页面选择,以及自动 Workspace 持久化。
- 人类只负责选择对象、页面或整份幻灯片并向 AI 下达指令,不提供文字编辑、对象移动、缩放、插入、删除或页面快捷键等直接编辑入口。
- 可导出独立 HTML 演示文稿,支持键盘翻页、全屏和打印为 PDF;Workspace 图片会嵌入导出文件。
- 每个 Annotation 由独立 subagent 处理。选中的内容用于提供任务焦点,但 subagent 始终拥有整份幻灯片的修改权限。
- 每个 Annotation 都有独立消息线程,可以继续补充指令。
- Annotation 会根据首次请求自动总结标题,并支持手动重命名;自定义标题不会被后续模型响应覆盖。
- Subagent 执行期间,输入框位置会显示可见文本和工具调用状态,不展示隐藏 reasoning。
- Annotation 支持折叠、标记解决、重新打开和删除。
- 可拖动右侧面板左边缘调整宽度,宽度会保存在本地;也可以聚焦分隔条后使用方向键调整。
- 顶部提供悬浮淡入的 File 菜单,可新建、加载、保存、另存、导出或关闭 deck;New、Load 和 Save As 使用 Workspace 文件选择器,不要求输入路径。
- Workspace 文件浏览器支持单击打开、文本与图片预览、拖拽上传、新建文件夹、重命名和删除。
- 图片元素支持 Workspace 文件、data URL 和 HTTPS URL,并可选择 contain、cover 或 fill 适配方式。
- 使用标准 SVG path data 渲染任意多边形、贝塞尔曲线和椭圆圆弧。
- 可在设置或编辑器内维护共享初始化 Prompt 和 Workspace 知识文件列表。
- 文件接口绑定当前 Session 的真实
cwd,并拒绝路径穿越和符号链接逃逸。
AI 选区操作
框选或点击一个或多个对象后,可以让 Annotation agent 聚焦这些内容。选区只表示任务关注范围,不限制 agent 的权限;如果完成请求需要调整其他页面或对象,agent 仍然可以修改整份幻灯片。

安装
安装 npm 已发布版本:
dsh plugin --profile web add dsh-slide@dsh-plugin
dsh web或者从当前源码构建:
pnpm install
pnpm run build
dsh plugin --profile web add /absolute/path/to/dsh-slide
dsh web切换当前 Conversation 模式
Slide Editor 的开关只作用于当前打开的 Conversation,并不会全局替换所有聊天界面。
1. 打开希望用于制作幻灯片的 Conversation。 2. 点击左下角的 设置。 3. 进入 幻灯片编辑器。 4. 在 当前 Conversation 卡片中,开启标记为 开启幻灯片编辑模式 的开关。 5. 返回 Conversation。默认聊天界面会切换为 Slide Editor,同时保留该 Conversation 原有的 Session、Workspace 和模型配置。
需要切回普通聊天界面时,保持该 Conversation 为当前会话,再进入同一设置页面关闭开关即可。每个 Conversation 的模式独立保存,切换一个 Conversation 不会影响其他 Conversation。
数据存储
每个 Conversation 默认使用以下文件:
.dsh-slide/<session-id>.slides.json默认路径包含 Session ID,因此同一个 Workspace 下的不同 Session 默认不会共用文件。如果用户或工具主动让多个 Session 关联同一个既有 *.slides.json 文件,它们就会共享该文件,并且并发保存可能互相覆盖。
通过顶部悬浮的 File 菜单管理当前 deck。New 和 Save As 会打开 Workspace 目录选择器,并自动生成易读且不冲突的 *.slides.json 文件名,无需输入路径;Load 使用同一个选择器打开既有 deck,Save 立即写入,Close 会先保存再让当前 Conversation 返回普通聊天界面。在 Files 面板中打开 deck 与 Load 具有相同的关联行为。文档保存幻灯片模型和 Annotation 审阅状态;全局设置保存已启用的 Session ID、共享 Prompt、知识文件路径和每个 Session 的文档路径。
主 Conversation 工具
顶层 Conversation 会获得 open_slide_deck 工具。它用于打开当前 Workspace 中已经存在的 *.slides.json 文件,并把当前 Conversation 切换到 Slide Editor 模式。文件必须已经存在并通过文档校验;agent 可以先通过文件系统工具创建文件,再调用 open_slide_deck 打开。
Subagent 不允许使用 open_slide_deck。带有 parentSession 或 origin: "subagent" 的 Session 调用时会被拒绝。关闭 Slide Editor 只会禁用当前 Session 的幻灯片模式,并保留上次关联的文档路径。
AI Annotation 流程
每个 Annotation 都拥有独立消息线程和一个关注范围:选中对象、选中页面或整份幻灯片。每一轮请求都会在当前 Conversation 下启动一个前台 one-shot spawn subagent,并向它提供 Annotation 历史、关注内容、完整 deck JSON、共享指导信息和知识文件路径。选区只用于指导任务,不构成权限限制;每个 Annotation 都可以修改任意对象或页面,也可以新增页面。
服务端通过 NDJSON 实时发送可见文本增量和工具调用开始、结束事件,同时过滤 reasoning 增量。Subagent 最终返回严格 JSON,其中包含简短结果说明和幻灯片操作;浏览器验证操作后立即应用,并同步更新主画布与缩略图。One-shot subagent 不会唤醒父 Conversation,不同 Annotation 可以独立推进。
图片和几何图形语法
图片是带位置和尺寸的元素。Workspace 文件使用 workspace:<相对路径>,也可以使用 data URL 或 HTTPS URL:
所有元素坐标和视觉长度,包括 x、y、width、height、fontSize 和 radius,都使用固定的 1280 × 720 幻灯片设计坐标。编辑器显示不同大小的页面或缩略图时,会将它们整体同比缩放。
{
"kind": "image",
"x": 80,
"y": 120,
"width": 500,
"height": 320,
"src": "workspace:images/photo.png",
"fit": "cover",
"alt": "产品图片"
}任意多边形和曲线统一使用 geometry 元素以及标准 SVG path data。Path 使用局部 viewBox 坐标,渲染时缩放到元素的外层矩形:
{
"kind": "geometry",
"x": 600,
"y": 180,
"width": 400,
"height": 240,
"viewBoxWidth": 100,
"viewBoxHeight": 100,
"path": "M 5 90 L 50 5 L 95 90 Z",
"fill": "#dbeafe",
"stroke": "#2563eb",
"strokeWidth": 2
}多边形使用 M/L/H/V/Z,三次贝塞尔曲线使用 C/S,二次贝塞尔曲线使用 Q/T,椭圆圆弧使用 A。开放曲线通常设置 "fill":"none"。
每次 Annotation 请求都会附加一份操作协议,因此 subagent 可以知道这些语法。协议包含 add-image、add-geometry 和 update-element 的 JSON 示例、SVG 命令说明、当前完整 deck JSON、选区焦点、Annotation 历史、共享 Prompt 和知识文件路径。模型返回的操作必须先经过解码和校验,验证通过后才会应用到幻灯片。
架构
- Host 入口:设置命名空间、Workspace API、Annotation 流、文件路由和
open_slide_deck工具。 - Browser 入口:一个设置区块,以及仅在当前 Session 开启时以优先级
-100注册的conversation插槽。 - Browser bundle:通过
window.__ModuleLoader__延迟加载的 CommonJS factory,安装插件不需要重新构建 DSH 前端。
当前限制
- 原生可编辑格式是
*.slides.json;支持导出 HTML,但暂不支持导出可继续编辑的 PPTX。 - 文件 API 当前限制单次 JSON 上传不超过 32 MB。
- Subagent 响应协议支持文字、矩形、图片、SVG path 几何图形、页面修改和新增页面;暂不支持图片生成或任意文档结构重写。
- 暂不支持富文本、图表、表格、参考线和多人协作光标。