DeepSeek Harness 插件:dsh-image-annotate

前言

DeepSeek Harness(DSH)通過插件擴展能力。在調試代碼、閱讀文檔時,常見場景是:需要把側欄裏的一段代碼、一張圖表或一段 PDF 內容發給 AI,並附帶標註。傳統做法是複製文字、截圖、再手動拼湊座標,容易遺漏或對不準。

DSH 的「請求修改」流程(marquee request-changes)允許在右側欄裏框選內容、逐塊寫註釋,一次性打包成一條消息發給 Agent。dsh-image-annotate 就是這套流程的插件實現:框選、註釋、截圖座標、凍結幀,全部在插件內部完成,Agent 收到消息後即可根據座標裁出真實像素。

功能概覽

dsh-image-annotate 爲 DSH 增加一個「右側欄框選標註」流程:

  1. 點擊側欄頭部的「⌗ 請求修改」或右下角懸浮球,進入框選模式。
  2. 遮罩只覆蓋右側欄,不影響聊天區點擊。
  3. 拖出一個矩形,框旁邊彈出註釋框(✓ 保存 / × 丟棄)。
  4. 可繼續框選第 2、3…塊,每塊都有獨立註釋。
  5. 點底部「確認修改併發送」,所有框一次性作爲一條消息發出。

消息內容包含:

  • 當前打開的文件路徑
  • 窗口幾何(innerW×innerH、dpr、screenX/Y、outerW×outerH、chromeH)
  • 側欄矩形與滾動量
  • 每個框的視口座標、換算後的桌面截圖座標、註釋、框內文字
  • 若框內有 <img>,還包含原圖尺寸與裁剪矩形

Agent 可以先對桌面整屏截圖,再按插件給出的座標裁出用戶看到的真實像素。

安裝

插件發佈在 npm,也可直接從 GitHub 倉庫安裝。

Web profile(推薦)

dsh plugin --profile web add dsh-image-annotate

從 GitHub 倉庫安裝

git clone git@github.com:ImpartialLucas/dsh-image-annotate.git
cd dsh-image-annotate
npm pack
dsh plugin --profile web add "file:<絕對路徑>/dsh-image-annotate-0.7.1.tgz"

Desktop profile

desktop profile 由 Electron 獨佔,dsh plugin --profile desktop 會被 CLI 拒絕。建議通過 DSH 插件市場 UI 安裝,或使用官方通道 runCli({ manageDesktopProfile: true })。

使用流程

  1. 打開一個文件(代碼、文檔等),確保側欄可見。
  2. 點擊側欄頭部的「⌗ 請求修改」或右下角懸浮球,進入框選模式。
  3. 在右側欄區域拖出矩形,框旁邊彈出註釋框。
  4. 輸入或修改註釋,點擊 ✓ 保存,× 丟棄。
  5. 重複步驟 3–4,框選更多區域。
  6. 點底部「確認修改併發送」,所有框作爲一條消息發出。

Agent 收到消息後,會收到窗口幾何、側欄矩形、滾動量、截圖座標(已乘 DPR)以及凍結幀(如可用)。根據這些信息,Agent 可以在宿主側完成 DPI-aware 截屏,再按座標裁剪出與用戶所見一致的圖像。

技術細節

消息內容

消息中的截圖座標已經乘過 DPR,是給 DPI-aware 截屏用的。Agent 應該在發送後儘快執行截屏,因爲用戶可能在之後切換文件或關閉側欄,導致佈局變化。

凍結幀(freeze-frame)

v0.7.0+ 引入宿主側截屏:插件在點「請求修改」的瞬間(遮罩繪製之前)向宿主發起一個 POST 請求,宿主用 DPI-aware PowerShell 截取整屏並保存爲 PNG。消息中優先包含這張圖(路徑、尺寸、時間戳),若宿主路由不可用,則降級爲「請 Agent 在收到消息後立刻 DPI-aware 截屏」。

座標系統

框的座標存儲爲 {cx, cy, w, h},其中 cx 相對側欄左邊緣,cy 相對滾動內容原點。發送時,會根據當前的側欄矩形和滾動量重新解析一次,確保裁剪座標對應發送那一刻的真實位置。

已知限制

  • 無法在瀏覽器內把 DOM 轉成圖片(宿主沒有 html2canvas,插件包也不提供截圖 API)。
  • PDF 無法在頁面上直接框選,需要先渲染成 PNG 再框選。
  • 截圖座標存在幾個像素的不確定度(Windows 最大化窗口的不可見邊框),必要時應預留 2–4px 餘量。

Agent 側 DPI-aware 截屏示例(PowerShell)

Add-Type -TypeDefinition @'
using System; using System.Runtime.InteropServices;
public class Dpi { [DllImport("user32.dll")] public static extern bool SetProcessDPIAware(); }
'@
[Dpi]::SetProcessDPIAware() | Out-Null
Add-Type -AssemblyName System.Windows.Forms,System.Drawing
$b = [System.Windows.Forms.SystemInformation]::VirtualScreen   # 現在返回 3200x2000
$bmp = New-Object System.Drawing.Bitmap($b.Width, $b.Height)
$g = [System.Drawing.Graphics]::FromImage($bmp)
$g.CopyFromScreen($b.X, $b.Y, 0, 0, $bmp.Size)
$bmp.Save('full.png', [System.Drawing.Imaging.ImageFormat]::Png)
$g.Dispose(); $bmp.Dispose()

得到整屏 PNG 後,直接用插件給出的「截圖座標」Rectangle(x, y, w, h) 裁剪即可,不要再乘 DPR。

適用場景

  • 需要把側欄中的代碼片段、圖表、文檔段落髮給 AI 並附帶標註。
  • 需要精確的截圖座標,以避免手動截圖對不準。
  • Agent 需要在宿主側執行 DPI-aware 截屏,以獲得與用戶所見一致的圖像。

維護者與許可證

  • 維護者:ImpartialLucas
  • 許可證:MIT
  • GitHub:https://github.com/ImpartialLucas/dsh-image-annotate
  • 分類:客戶端

總結

dsh-image-annotate 爲 DSH 增加了一套完整的「右側欄框選標註」流程:框選、註釋、截圖座標、凍結幀,全部在插件內部完成,Agent 收到消息後即可按座標裁出真實像素。這對需要精確標註和截圖的場景很有幫助。

參考資源

  • GitHub:https://github.com/ImpartialLucas/dsh-image-annotate
  • npm:https://www.npmjs.com/package/dsh-image-annotate
  • SkillHub 目錄頁:https://www.skillhub.cn/plugins/ImpartialLucas/dsh-image-annotate
羽毛球分组比赛记分
小程序二维码

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

小夜