前言¶
在 DeepSeek Harness(DSH)里做演示文稿相关任务时,常见做法是让模型「描述怎么改」或生成一段替代内容,再由人手工在 PowerPoint 里落实。选区、字号、对齐、层级一旦变多,对话里很难把上下文说清楚,改动的也不是磁盘上那份文件本身。
dsh-ppt-canvas 把「点选 / 框选 → 下指令 → 只改选区」做成 DSH 客户端插件:画布按 .pptx 几何与样式渲染,AI 通过 Host 侧工具读取选区并下发 OOXML 补丁,直接写回你打开的 .pptx,并支持撤销与重做。灵感来自腾讯 WorkBuddy「人机双写」中的 PPT 能力;本插件强调改的是真实 .pptx,而非仅界面上的中间产物。
这是什么¶
- 名称:dsh-ppt-canvas(仓库 hg1048596-pixel/dsh-ppt-canvas)
- 维护者:hg1048596-pixel
- 分类:客户端(DSH 侧边栏画布 + Host 读写引擎)
- 许可:MIT(见仓库
package.json) - 定位:DeepSeek Harness 的 PowerPoint 画布——选中形状或整页,用自然语言描述改动,AI 以字节保真的 OOXML 补丁写入
.pptx,带撤销 / 重做与完整错误处理。
社区目录页:SkillHub 插件条目。目录为独立生态站点,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
画布与选择¶
- 按
.pptx真实几何 / 样式渲染:文本框、色块(圆角 / 描边 / 渐变)、图片(含裁剪)、线条、表格、组合。 - 单击选中:2px 主色描边与四角把手;悬停虚线预览。
- 框选(marquee):空白处拖拽,与选框相交的元素一并选中。
- 多选:
Shift/Ctrl + 点击增删;属性面板支持批量对齐(左右 / 居中 / 顶底 / 水平等距等)。 - 选整页:缩略图左上角「整页」,一次选中该页全部元素。
- 打开文件:拖拽
.pptx到面板、系统文件选择,或内置演示文稿(复制到~/.dsh/ppt-canvas/)。插件直接读写该路径文件,修改前自动留档。
界面为可拖动、可缩放的浮窗,位置与尺寸记在 localStorage;启动时默认最小化,仅保留右下角「PPT 画布」入口,避免挡主界面。
AI 协同与同步¶
- 底部指令框:
Enter发送,Shift+Enter换行;「加入待发」可合并多条再发。 - 选区上下文(位置、尺寸、样式、层级 z、文本)随指令交给 AI,无需截图或复述全文。
- 模型侧工具:
ppt_canvas_open、ppt_canvas_context、ppt_canvas_apply、ppt_canvas_history。 - 流程概要:客户端先把选区 POST 到 Host 拿到
requestId,AI 用ppt_canvas_context(requestId)取回;产出ops后由ppt_canvas_apply落盘;复杂方案可先dryRun。 - 写盘成功后画布按新
rev刷新;刚改动的元素约 3 秒高亮;面板约每 4 秒轮询rev。 - 撤销 / 重做:Host 侧每次写盘前字节级快照,
Ctrl+Z/Ctrl+Shift+Z,最多 50 步。 - 右侧「对话转播」展示当前会话(你 / AI),推理弱化为附注。
- 会话里出现做 PPT 相关表述且画布未打开时,可弹出「打开画布」提示(插件自身发的指令不触发)。
Patch 能力(AI 可用 op)¶
| op | 作用 |
|---|---|
setText |
替换整段文本(保留 run 样式) |
setTextStyle |
颜色、字号、粗体、斜体、下划线、对齐、字体 |
setFill / setLine |
填充色或清空;描边颜色、线宽、线型 |
setGeometry / move / resize |
绝对或相对位置与尺寸、旋转 |
align |
对齐与等距 |
setZ / bringToFront / sendToBack |
层级 |
duplicate / remove |
复制 / 删除 |
单位约定为 px(96 DPI),1px = 9525 EMU;完整契约见仓库 docs/CONTRACT.md。
架构要点¶
- Host 为唯一权威:磁盘
.pptx与rev以 Host 为准;校验失败则整包拒绝,文件不动。 - 编辑在原 OOXML 树上打补丁,未触碰的页尽量保持字节不变;撤销存完整字节而非 diff。
- HTTP:优先独立 loopback
127.0.0.1:19488(占用则顺延),失败回退宿主路由/dsh ppt/api。 - 引擎零 npm 依赖,ZIP / XML / PPTX 读写自研,仅使用
node:内建模块。 - 画布精确渲染依赖本机 LibreOffice(未安装时部分渲染相关测试会跳过)。
当前版本不包含独立 Electron 桌面窗口;相关代码在 archive/standalone-window/ 归档。
安装与启用¶
插件以 link 方式装进 profile。README 推荐用仓库内脚本(避免部分环境下 dsh plugin add 与 pnpm store 路径冲突):
node tools/install-profile.mjs profile desktop
脚本会在 ~/.dsh/profiles/<profile>/node_modules 下建立指向本仓库的 junction,并把包名写入 profile package.json 的 dsh.profile.bundles。
卸载:
node tools/install-profile.mjs profile desktop uninstall
安装后重启 DSH(新增 loader 行需要重新 boot)。预期效果:
- 侧边栏底部出现 ▦ PPT 画布;
- 对话中 AI 可使用上述四个
ppt_canvas_*工具。
验证(未重启时 Host 路由可能 404):
curl.exe -s http://127.0.0.1:19387/dsh ppt/api/selftest
curl.exe -s -o NUL -w "%{http_code}" http://127.0.0.1:19387/plugins/dsh-ppt-canvas/client.js
node tests/host-load.test.mjs
开发时改 plugin/client.js 相关源码后,可同步构建产物:
node tools/sync-plugin.mjs
安全与权限:插件在 DSH 进程权限下读写你指定的 .pptx 路径;安装前请阅读源码与 MIT 许可证,对重要文稿先自行备份。
典型用法¶
- 点侧边栏 ▦ PPT 画布(或右下角「PPT 画布」启动器)打开面板。
- 拖拽或「打开」选择
.pptx(插件直接改该文件)。 - 点选、框选或「整页」确定选区。
- 在指令框输入要求并回车,例如:
-把标题改成红色并右对齐
-这三个色块统一成品牌蓝 #1A73E8,圆角 8
-把这行字缩小到 14px 并居中
-把这张图片右移 40px,并置顶
-把选中的两个文本框左对齐、水平等距 - 查看画布刷新与高亮;不满意则
Ctrl+Z。
也可在对话中说「打开 D:\work\deck.pptx」,由 AI 调用 ppt_canvas_open。
适用场景与注意¶
适合:已在用 DSH 做智能体或长对话,需要对着真实幻灯片做局部 AI 修改(文案、样式、布局、层级),并希望在同一窗口内可视化选区与撤销。
注意:
- 修改作用于你打开的那份文件路径,虽有撤销与写盘前留档,仍建议重要 deck 先备份。
- 需重启 DSH 完成 Host 侧加载;受限宿主下 loopback 通道可提高可用性。
- 渲染与部分测试依赖 LibreOffice;无 LibreOffice 时核心读写与 API 仍可用,精确预览可能受限。
- 独立桌面窗口功能已移除,勿依赖历史文档中的窗口入口。
仓库测试入口:node tools/test-all.mjs(README 记载当前多套件合计 137 项用例)。
结尾¶
dsh-ppt-canvas 把「可视化选区 + 自然语言 + 字节保真写盘」接到 DSH 客户端:Host 管权威 .pptx 与历史,模型通过 ppt_canvas_context / ppt_canvas_apply 落盘,人留在画布上验收与撤销。
- 目录页:https://www.skillhub.cn/plugins/hg1048596-pixel/dsh-ppt-canvas
- 源码与说明:https://github.com/hg1048596-pixel/dsh-ppt-canvas