用 dsh-annotate 把瀏覽器元素點給 DeepSeek Harness

前言

讓智能體改網頁,最難的往往不是寫 CSS,而是把問題說清楚。會話裏常見的說法是「這個按鈕偏了」「標題顏色不對」「移動端這裏擠在一起」。模型看到的是文字,看不到你指的是哪一個 DOM 節點、計算樣式實際是什麼、無障礙樹上的角色叫什麼。截一張圖貼進去,也只剩像素,選擇器和佈局數據還是要人再口述一遍。

DeepSeek Harness(命令名 dsh)把智能體運行時拆成可組合的插件:模型、工具、會話、沙箱和界面都可以在 Cordis 內核上增刪。官方倉庫把這件事概括成 Everything is a plugin(一切皆插件)。社區裏因此出現了一批界面增強插件,專門補「人怎麼把視覺信息交給 agent」這一層。

dsh-annotate 做的就是這件事:在 Chrome / Chromium 裏點選頁面元素,把選擇器、DOM 事實、計算樣式、無障礙數據、評論和當前視口截圖,整理成下一輪對話裏 agent 能直接讀的結構化記錄。它由 BrambleXu 維護,社區目錄歸在「界面增強」。

需要先說明:下文引用的目錄頁來自獨立社區站點 DeepSeek Harness 插件庫,該站 About 頁寫明與 DeepSeek / 幻方沒有官方從屬關係,不能當成官方應用商店。官方倉庫是 deepseek-ai/deepseek-harness。本文按目錄詳情頁、GitHub README / package.json / src/ / 配套擴展源碼交叉覈對,覈實日期爲 2026-08-18

這是什麼

dsh-annotate 是一款 DeepSeek Harness 瀏覽器元素可視化標註插件。目錄頁和倉庫 README 的定位一致:捕獲 DOM、樣式、無障礙數據、評論與視口截圖,把頁面結構整理成 agent 可參考、可標註的可視化記錄。

倉庫歸屬是 BrambleXu/dsh-annotate,許可證 MIT(目錄頁、GitHub license 字段和倉庫 LICENSE 一致),主要語言 TypeScript。package.json 裏的版本是 0.1.0,要求 Node.js ^22.19.0 || >=24.0.0。截至 2026-08-18,GitHub 顯示 6 星;社區目錄頁當時列出的是 5 星,星標以倉庫頁面爲準。

它不是單獨的截圖工具,也不是通用網頁爬蟲。插件在 dsh 進程裏註冊 /annotate 命令,並在本機 loopback 上開一個 WebSocket;配套的 Chrome 擴展連上這座橋之後,才能進入選擇模式。README 寫明交互受到 pi-annotate 啓發,但實現走的是 Harness 的 human-command、attachment 和 Agent API,用小型 loopback WebSocket,而不是 native-messaging host。

核心功能

在頁面上點選,而不是口述

在已連接擴展的前提下,會話裏執行 /annotate,擴展會在當前活動標籤頁進入選擇模式。鼠標移到元素上會畫出高亮框;點擊後彈出評論輸入。可以連續點多個節點,點 Submit 一次性提交,EscapeCancel 取消。

如果命令後面帶 URL,例如 /annotate http://localhost:3000,擴展會先把當前標籤頁導航到該地址,等加載完成再開始選擇。源碼裏會對輸入做 new URL(url) 校驗,空輸入則沿用當前頁。

每個元素帶上可覈對的頁面事實

擴展的 content.js 和插件側的 protocol.ts 約定了同一套字段。每個被選中的元素會貢獻:

  • 選擇器:有 id 時用 #id,否則沿祖先拼一段最多 4 層的 tag.class:nth-of-type 路徑
  • DOM 事實:標籤名、id、class 列表、截斷後的文本(最多約 500 字符)、前 20 個 HTML 屬性、視口內的矩形位置
  • 計算樣式高亮displaypositioncolorbackgroundColorfontmarginpaddingborder
  • 無障礙數據role(屬性或標籤隱含角色)、名稱、是否可聚焦、是否 disabled
  • 評論:你在選擇時輸入的那句說明

整次提交還會帶上頁面 URL 和視口寬高。插件把這些內容渲染成 Markdown 風格的文本,再以插件通知的形式 followup 給當前 agent,摘要類似 Captured N browser annotations.

可選的可見視口截圖

擴展在提交時調用 chrome.tabs.captureVisibleTab,格式是 PNG。默認配置 includeScreenshot: true 時,插件會把截圖存成附件 dsh-annotate.png,和文本一起交給模型。README 把範圍限定爲當前可見視口,不是整頁長截圖。

本地橋,而不是把瀏覽器暴露到網上

橋的默認地址是 127.0.0.1:43119apply() 裏如果 host 不是 127.0.0.1::1localhost,插件直接拋錯退出。WebSocket 的 verifyClient 只接受 chrome-extension:// 來源;擴展連上後先發 hello(協議 version 1 + 擴展 ID)。allowedExtensionId 爲空時接受任意本機已裝擴展,填了則只認這一個 ID。載荷默認上限 16 MiB,請求超時默認 300000 毫秒。

安裝與啓用

社區目錄頁給出的安裝命令如下,在 DeepSeek Harness 終端裏運行即可:

dsh plugin add github:BrambleXu/dsh-annotate

如需可復現安裝,目錄頁建議固定 commit 哈希:

dsh plugin add github:BrambleXu/dsh-annotate#commit

#commit 換成實際的 commit SHA,不要照抄字面量。官方 CLI 文檔裏 dsh plugin 會轉發到當前 profile 的 pnpm;從倉庫本地檢出安裝時,README 用的是:

dsh plugin --profile demo add ./dsh-annotate

插件只完成 Harness 這一側。配套擴展還要手動裝進 Chrome 或 Chromium:

  1. 打開 chrome://extensions
  2. 啓用開發者模式
  3. 選擇加載已解壓的擴展程序,指向倉庫(或已安裝包)裏的 browser-extension 目錄
  4. 打開擴展彈窗,保留默認 bridge 地址 ws://127.0.0.1:43119

彈窗會顯示當前擴展 ID。若要把連接收窄到這一份擴展,把該 ID 寫進後面說的 allowedExtensionId

目錄頁有一條安全提示,需要原樣理解後再裝:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。 安裝前請檢查源代碼倉庫和許可證。擴展清單是 Manifest V3,申請了 activeTabscriptingstoragetabs,以及 <all_urls> 的 host 權限——這是它能在任意頁面注入選擇層、截可見標籤頁的原因,裝之前應當自己看過源碼。

典型用法

擴展已連接、dsh 進程已加載該插件後,在會話裏執行:

/annotate
/annotate http://localhost:3000

然後在瀏覽器裏:

  1. 把鼠標移到目標元素上,確認藍色高亮框罩住的就是你要說的節點
  2. 點擊,在彈出的提示裏寫下評論,例如「桌面寬度下這個主按鈕和次按鈕換行了」
  3. 需要的話繼續點其他元素
  4. 點工具條上的 Submit;不想提交就按 Escape

提交成功後,命令返回類似 Sent N browser annotations to the agent. 的提示;agent 下一輪會讀到頁面 URL、視口尺寸、每個元素的選擇器 / 文本 / 樣式 / 無障礙字段 / 評論,以及默認附上的視口 PNG。一個常見用法是:本地前端跑在 localhost,讓 agent 改樣式或修復佈局,你用 /annotate 把「錯的是哪一塊」釘死,而不是再寫一段容易對錯節點的自然語言。

默認配置來自倉庫的 cordis.patch.yml,README 給出的可改項如下(allowedExtensionId 示例是佔位符,請換成彈窗裏的真實 ID):

- id: dsh-annotate
  name: dsh-annotate
  config:
    host: 127.0.0.1
    port: 43119
    allowedExtensionId: abcdefghijklmnopqrstuvwxyzabcdef
    requestTimeoutMs: 300000
    maxPayloadBytes: 16777216
    includeScreenshot: true

擴展未連接時,命令會報 The dsh-annotate browser extension is not connected. 改過擴展文件後,需要在 chrome://extensions 裏重新加載已解壓擴展。倉庫開發命令是 pnpm installpnpm run check(類型檢查、測試、構建)。

適用場景與注意事項

比較適合這些情況:

  • 本地前端開發,agent 負責改 CSS / 組件結構,人負責在真實頁面上指出節點
  • 覈對計算樣式、按鈕是否可聚焦、aria-disabled 是否生效這類「截圖裏看不出來」的事實
  • 一次提交多個元素,把同一屏上的幾處問題綁在同一輪反饋裏

0.1 版本自己劃定的範圍也很清楚,README 寫明:一臺本地 Chrome/Chromium、一個活動標籤頁、可見視口截圖。 遠程瀏覽器、整頁截圖、編輯過程錄製、可拖拽的行內批註卡片都還沒有。不要指望用它去標遠程真機、Firefox,或把整頁長圖送進模型。

還需要注意:

  • 選擇器是啓發式拼出來的,複雜頁面上不一定唯一;評論仍然有用,不要只靠選擇器
  • 文本、屬性、祖先層數都有截斷,超長節點不會完整進入上下文
  • 橋只綁 loopback,擴展默認連 ws://127.0.0.1:43119;改端口或 host 時兩邊要一起改
  • allowedExtensionId 爲空等於接受本機任意來源爲 chrome-extension:// 的連接,多擴展並存時建議改成精確 ID
  • 插件跟當前 dsh 進程同權限,擴展又能讀當前標籤頁並截屏。裝的是社區倉庫,不是官方應用商店,源碼和許可證要自己看過再執行安裝命令

小結

dsh-annotate 把「用手指一下頁面」接進了 DeepSeek Harness 的對話循環:點選、寫評論、提交,agent 拿到的是選擇器、DOM、樣式、無障礙數據和一張視口截圖,而不是一句含糊的「那邊有點問題」。它目前仍是 0.1 的本地 Chrome 方案,要同時裝 Harness 插件和未打包擴展,安全邊界也明確寫在目錄頁上。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-annotate/

GitHub:https://github.com/BrambleXu/dsh-annotate

羽毛球分组比赛记分
小程序二维码

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

小夜