dsh-ui-toolbox:在 DSH Web 界面裏點選元素並寫入會話

前言

在 DeepSeek Harness(DSH)裏用模型改界面或排查樣式時,常見做法是在聊天裏用文字描述「左邊那個按鈕」「設置行右側的圖標」——對方看不見你的屏幕,上下文容易缺組件名、選擇器和計算樣式。DSH 的生態裏可以把能力拆成插件掛在客戶端;下面介紹 dsh-ui-toolbox,一個在 Web 側邊欄底部常駐的 UI 工具箱,當前首選工具是元素選取器,把頁面上任意 DOM 的結構化信息收成緊湊的 @ 引用 chip 寫進當前會話輸入框,完整上下文仍隨消息交給模型。

這是什麼

dsh-ui-toolbox(npm 包名同名)由 miniluckybull 維護,許可證 MIT,當前發佈版本 0.2.0。它是 DSH 的客戶端插件:在瀏覽器裏註冊側邊欄底部工具按鈕,不依賴本插件自帶的服務端邏輯(index.js 爲宿主側空殼)。分類上屬於「客戶端」——只在 DSH Web 界面運行,與你在本機啓動的 DSH 進程權限一致;安裝前建議在 GitHub 倉庫 閱讀源碼與許可證。

與「截圖 + 口述」相比,選取器會採集 React 組件樹線索、CSS 選擇器、盒模型尺寸與位置、可見文本、常用屬性以及關鍵計算樣式,並以約定格式打包;對話區只顯示小 chip,避免消息被大段 HTML 撐滿。

界面上的位置與行爲

工具箱在側邊欄 footer 的賬號(設置)一行右端增加一個圖標按鈕(十字準星表示選取模式)。側邊欄展開時,宿主設置區會變窄約 38px,給工具按鈕讓位;按鈕參與側邊欄排版,不會浮在會話列表或設置彈窗之上。側邊欄收成窄條時按鈕仍可用。每個工具對應一個圖標,懸停顯示短提示;更長說明寫在插件 locale(locale/*.json 的 meta.description)裏。

選取過程中的高亮、提示條和 toast 通過 shell.overlay 掛到 document.body 的 portal,z-index 高於設置模態(約 1100–1105),避免反饋被設置窗口擋住;工具按鈕本身仍受宿主模態正常遮擋。

核心功能:元素選取器(Element Picker)

當前 client.js 裏工具由數據驅動的 tools 數組定義,首個工具即元素選取器,能力如下。

  1. 進入選取模式後,鼠標劃過頁面元素會實時高亮。
  2. 用 ↑ / ↓ 在父級 / 子級 DOM 之間切換當前候選。
  3. 單擊確認採集;Esc 或再次點擊側邊欄圖標退出選取模式。
  4. 採集結果插入當前會話輸入框,表現爲緊湊的 @標籤 引用 chip;可連續採集多個元素。
  5. 用戶消息在對話裏只渲染 chip;提交給模型時由輸入觸發器的 codec.serialize 展開爲完整 <selected-element>…</selected-element> 文本塊。
  6. 若在設置頁、插件頁、歡迎頁等非會話界面採集,引用會先暫存,回到任意會話後自動插入 chip,無需手動粘貼。

採集內容包含:元素標籤片段、React 組件名與祖先組件、CSS 選擇器、寬高與座標、文本、重要屬性、關鍵計算樣式、結構片段與祖先鏈等。chip 首行形如 [[el:<id>|<label>]],與閉合標記 </selected-element> 之間的正文在 UI 層摺疊。緩存在瀏覽器 localStorage 鍵 dsh-ui-toolbox.elements.v1,最多 100 條、保留 7 天,便於同一會話多次引用。

安裝與版本要求

package.json 聲明 engines.dsh 爲 >=0.2.1-rc.2 <0.3.0;README 寫明在 DSH 0.2.1-rc.2 上做過測試。

命令行安裝(將 <your-profile> 換成你的 profile 名):

dsh plugin --profile <your-profile> add dsh-ui-toolbox

或在 DSH 界面打開 Plugins → Add plugin,輸入包名 dsh-ui-toolbox,然後重啓 DSH。

典型用法

經過上面的安裝與重啓,可以按下面步驟把界面元素交給模型。

  1. 打開任意會話,點側邊欄底部賬號行右側的十字準星圖標,進入選取模式。
  2. 移動鼠標到目標控件(例如設置按鈕),用 ↑ / ↓ 微調至希望的 DOM 節點,單擊採集。
  3. 輸入框會出現對應 @ chip;可繼續點選第二個元素。
  4. 直接寫自然語言需求,例如「把這兩個元素合併」「把按鈕換成次要樣式」——模型收到的是展開後的完整元素上下文,而不是僅 chip 上的短標籤。

若在非會話頁面完成採集,chip 會在你下一次進入會話輸入框時自動出現。

提交後模型側可見的展開格式示例(對話裏仍爲 chip):

[[el:el-abc|設置]]
(以下內容由 DSH 工具箱的元素選取器採集,來自當前 Web 界面)
<selected-element>
元素: <button class="…" aria-label="設置">
組件: SidebarSettingsTrigger ← SidebarRoot
選擇器: div.hHd-Xa_footArea > div.hHd-Xa_settingsArea > button
位置: 200 × 36 @ (12, 680)
文本: 設置
屬性: type="button"; aria-label="設置"
關鍵樣式: display: flex; padding: 7px 8px; background-color: …; border-radius: 8px; …
結構: <button class="…" aria-label="設置">…</button>
祖先鏈: div.hHd-Xa_footArea > div.hHd-Xa_settingsArea
</selected-element>

在 DSH 裏的掛載方式(開發者參考)

插件通過 Cordis patch 與多個公開 client 槽位接入宿主,不直接 import Harness Client 包,而是使用 ctx.inputTriggers、ctx.sessions、ctx.uiConversation 等服務。主要掛點包括:

槽位 / 註冊點 作用
sidebar.footer.action(id toolbox) 側邊欄底部常駐圖標
shell.overlay 選取過程的高亮、提示、toast
conversation.composer.dock 橋接會話 inputActions,插入 chip
conversation.user.text.node(key elementRef) 用戶消息裏渲染 chip
ctx.inputTriggers.registerSource @ 下 element 引用源與序列化
ctx.uiConversation.userText.register 將長文本摺疊回 chip

client.js 的 ToolboxFooter 中向 tools 數組追加項即可擴展更多側邊欄圖標工具;顏色與圓角取自 --dsw-* 主題 token,文案走 toolbox locale 命名空間。

適用場景與注意

適合誰:在 DSH Web 裏做 UI 微調、對照真實 DOM 向模型提需求、或給插件/主題開發收集選擇器與組件名的用戶與開發者。

權限與安全:插件以當前 DSH 進程與瀏覽器會話的權限運行,會讀取你正在操作的 Web UI DOM,並把採集結果寫入本地 localStorage 與待發消息。安裝前請自行審查 源碼 與 MIT 許可證條款。

版本:僅保證在 README 披露的 DSH 0.2.1-rc.2 與 engines.dsh 區間內測試;升級到 DSH 0.3.x 前需確認新版本是否仍滿足引擎約束。

生態說明:DSH 奉行「一切皆插件」;SkillHub 目錄頁 是社區收錄站點,與 DeepSeek / 幻方無官方從屬關係,並非官方應用商店。

結尾

dsh-ui-toolbox 把「指着界面說話」變成可複用的結構化上下文:側邊欄一點、chip 進框,模型側拿到組件、選擇器與樣式。若需安裝說明與採集格式細節,以倉庫 README 爲準。

  • 目錄頁:https://www.skillhub.cn/plugins/miniluckybull/dsh-ui-toolbox
  • GitHub:https://github.com/miniluckybull/dsh-ui-toolbox
羽毛球分组比赛记分
小程序二维码

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

小夜