dsh-ppt-canvas:在 DSH 里用自然语言改真实 .pptx

前言

在 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 许可证,对重要文稿先自行备份。

典型用法

  1. 点侧边栏 ▦ PPT 画布(或右下角「PPT 画布」启动器)打开面板。
  2. 拖拽或「打开」选择 .pptx(插件直接改该文件)。
  3. 点选、框选或「整页」确定选区。
  4. 在指令框输入要求并回车,例如:
    - 把标题改成红色并右对齐
    - 这三个色块统一成品牌蓝 #1A73E8,圆角 8
    - 把这行字缩小到 14px 并居中
    - 把这张图片右移 40px,并置顶
    - 把选中的两个文本框左对齐、水平等距
  5. 查看画布刷新与高亮;不满意则 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye