DSH 插件:dsh-teaching-board

在 DeepSeek Harness (DSH) 的会话中,Agent 生成的 self-contained HTML 通常仅作为文本流流转。当需要讲解、圈画或对画面进行交互时,需要一个独立的平面。dsh-teaching-board 提供了这个“教学平面”,将 Agent 的 HTML 投影成可讲解的板书界面,并允许使用者直接在板面上圈画、截图发回对话。

安装与启用

这是一个 profile 级的 bundle。安装一次后,该进程下所有会话都能获得 stage_* 工具与“教学平面”页签。

dsh plugin --profile web add @arcaneorion/dsh-teaching-board
# 然后重启 dsh --profile web 并刷新页面

注意:旧包 @arcaneorion/dsh-stage-panel@0.1.0 已废弃,请勿继续使用。

核心能力

插件提供以下核心功能:

  • 板书展示:在 sandbox="allow-scripts" 的 iframe 中渲染面板 HTML。
  • 手写勾画:支持画笔、橡皮、4 色、粗细调节、撤销、清空。画笔模式下默认不拦截点击事件,点击控件时会转发点击而非落笔。
  • 内置截图:克隆文档、Canvas 换位图、SVG 序列化,生成零依赖的 PNG。
  • 截图交互:
    • 用户截图:通过 inputActions.addAttachments 作为草稿图片提交。
    • Agent 主动截图:通过 stage_snapshot 工具触发,Agent 可以请求查看当前面板的快照。
  • 状态与工具:提供 stage_status / stage_choice 状态条工具,以及 stage_panel 板面操作工具。
  • 自带手册:插件自带 skills/stage-panel,挂载后任何 preset 都无需额外安装手册。

板面模型

stage_panel 不是一次调用画一张图,而是一块板可以被多次写。这类似上课时的黑板:老师写、擦一角、再写。

参数 作用
board 板面 id。同一 id 的连续调用 = 同一块板的演进;换 id 才是换新板(新主题)。省略 = 一次性整块替换,不保留笔迹
op open(开板/整块重写) / append(默认,在板尾再写一段) / set(替换指定区域) / remove(擦掉该区域)
region set / remove 操作的目标区域名

数据流与增量更新:
客户端的板面内容是会话日志里同一 board id 的调用折叠结果,没有私有状态。append、set、remove 通过 postMessage 原地更新 iframe 内容,保留滚动位置、动画和笔迹。只有 open 或切换 board 时才会整块重建文档。

笔迹锚定:
笔迹坐标存储的是文档坐标。滚动或 AI 修改内容导致重排时,笔迹会跟随对应的文本块移动(锚定在 .stg-block),不会像旧版那样钉在屏幕上脱节。

架构与限制

沙箱与注入:
面板 iframe 是 sandbox="allow-scripts"(无 allow-same-origin)。父页面无法直接读取 DOM 或截图,因此勾画与光栅化必须在 iframe 内部完成。插件通过注入 runtime 来实现这些功能。

截图限制:
* 截图需要面板处于挂载状态(conversation.view 处于活跃页签)。用户切到其他页签时无法截图。
* 截图仅包含视口画面,且为 PNG 格式。单图超过约 1.2 MB 时会自动退化为 JPEG。
* 外链字体或图片不会进截图,也不会渲染(面板规范要求 self-contained)。

适用场景

  • 需要在多轮对话中保持同一块“板书”内容的场景。
  • 需要用户或 Agent 对 HTML 结果进行标注和反馈的场景。
  • 需要利用 Agent 的 stage_snapshot 能力主动查看当前画面的场景。
羽毛球分组比赛记分
小程序二维码

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

小夜