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 能力主動查看當前畫面的場景。
羽毛球分组比赛记分
小程序二维码

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

小夜