前言¶
做智能體開發時常見的一類場景:屏幕上彈了個報錯窗口,得切窗、複製、粘貼、描述;或者一張圖表、一段公式、一張外文截圖,想就着它繼續問。傳統做法是把截圖丟進聊天窗口,再打字描述一遍,問題和圖對不上。
waterfish111 維護的 dsh-glance(一瞥 / Glance)就是針對這個動作的 DSH Desktop 本地插件。點會話標題欄的「一瞥」,屏幕角落出現一個置頂懸浮球;點球框選任意區域,截圖直接發給多模態模型,流式分析顯示在懸浮面板裏,之後追問只發文字、不再重傳圖。
它解決的問題很明確:把「截圖 + 描述上下文」壓縮成「框一下,問一句」。但它不適合批量的文字 OCR、長文檔總結,也只支持 Windows。
下面按實際資料介紹這個插件能做什麼、怎麼裝、怎麼用,以及哪些地方會踩坑。
核心能力¶
dsh-glance 是 DSH Desktop 的本地 profile 插件,核心流程只有兩步:框選屏幕區域,然後就着這張圖提問。能力都圍繞這個展開。
懸浮球支持:左鍵單擊進入框選,拖動換位置不誤觸發,右鍵菜單提供更換外觀 / 恢復默認外觀 / 懸浮球大小 / 退出。懸浮球大小有 4 檔:小 72、標準 84、大 96、特大 108(DIP),選擇立即生效並寫進 settings.json,下次啓動沿用。
面板支持:首輪發送帶截圖,之後輸入變成追問,只帶文字、複用同一條線索;「停止」真正調用 sessionController.cancel 中斷 Harness 裏這一輪,已生成部分保留並標註「已停止」;「重新框選」換一張圖、開一條新線索;標題欄可以換外觀、收起面板。
命令行側有三條:
/glance 或 /glance status 查詢是否在運行
/glance on 啓動懸浮球(冪等)
/glance off 關閉懸浮球
技術路線上沒有 OCR、沒有本地推理:截圖以 base64 直接進模型上下文,發給專用會話,再用 sessionController.follow 把流式回答回灌到面板。三個進程之間是三條單向管道:index.js(Host)通過 stdin/stdout 與 widget.ps1(PowerShell + WinForms)通信,widget.ps1 內嵌 WebView2 跑 panel.html,client.js 每 2 秒向 /api/local/dsh-glance/status 輪詢真實狀態,然後把按鈕狀態反映到標題欄。
安裝與啓用¶
環境要求先確認,否則裝完會卡在運行階段:
| 項 | 要求 |
|---|---|
| 系統 | Windows 10 / 11 |
| 宿主 | DSH Desktop(本地 profile 插件機制) |
| 運行時 | Microsoft Edge WebView2 Runtime(Win11 通常自帶,Win10 可能需手動裝) |
| 腳本 | Windows PowerShell 5.1(系統自帶,widget.ps1 依賴它) |
| 模型 | 默認的 DeepSeek-V4.1-Flash 原生支持圖片,不需要額外裝插件;換成純文本模型會失敗 |
把倉庫放到任意本地目錄(不要放在需要管理員權限的位置),然後執行:
dsh plugin --profile desktop add 'link:D:/path/to/dsh-glance'
打開 %USERPROFILE%\.dsh\profiles\desktop\package.json,確認 dsh.profile.bundles 數組裏有 "@local/dsh-glance",沒有就加一行:
"dsh": { "profile": { "bundles": [ "...", "@local/dsh-glance" ] } }
注意:只寫進 dependencies 不會加載,dsh.profile.bundles 纔是決定加載哪些 bundle 的層列表;重複一遍,這一步不做,重啓後標題欄不會有「一瞥」按鈕。
重啓 DSH Desktop,會話標題欄出現「一瞥」按鈕即安裝成功。
典型用法¶
第一次使用按下面順序走一遍:
- 點標題欄「一瞥」→ 屏幕出現懸浮球,按鈕變成「運行中」
- 點懸浮球 → 屏幕凍結,拖出要分析的矩形
- 面板裏看截圖,可寫一句補充說明(「這報錯什麼意思」/「幫我改這個 UI」)
- 點「發送」→ 回答流式出現在「分析結果」裏
- 接着輸入 → 按鈕變「追問」→ 只發文字,不再重傳截圖
一次框選等於一條線索。新截圖自動開新會話,追問複用同一條;會話標題帶時間(一瞥 · 11-05 19:32),方便事後在 DSH 會話列表裏翻回舊線索。同一張圖追問到第 6 輪會給一句軟提示,提醒換話題時重新框選。
停止與重框是最常用的兩個干預動作:想中斷當前分析點「停止」,想換一張圖點「重新框選」。被中斷的回答可能缺結尾,因爲已經進入的消息不會撤回。
數據放在哪¶
插件的本地狀態都在 %LOCALAPPDATA%\dsh-glance\ 下,日誌在 %TEMP%:
| 位置 | 內容 |
|---|---|
%LOCALAPPDATA%\dsh-glance\state.json |
當前線索(v2:sessionId / title / startedAt / turns) |
%LOCALAPPDATA%\dsh-glance\settings.json |
懸浮球大小,形如 {"ballSize":96} |
%LOCALAPPDATA%\dsh-glance\ball.png |
自定義的懸浮球圖片 |
%LOCALAPPDATA%\dsh-glance\WebView2\ |
WebView2 用戶數據目錄 |
%TEMP%\glance-host.log |
宿主側日誌(命令、會話創建、取消、失敗原因) |
%TEMP%\glance-widget.log |
小部件側日誌(DPI、框選、WebView2 初始化、菜單動作) |
狀態文件舊格式(v1,扁平 {sessionId,title})會在首次啓動時自動升級。日誌只記流程與錯誤,不記截圖內容。
適用場景與注意¶
適合:Windows 10/11 + DSH Desktop 環境,遇到報錯彈窗、公式推導、圖表、UI 修改、外文截圖這類「看一眼就能接着問」的場景。不適合:需要批量文字提取的 OCR、需要長文檔總結的場景、非 Windows 環境。
幾點使用上的限制需要注意:
- 面板只展示當前這一條線索,之前的問答收成可點開的氣泡,更早的線索要去 DSH 會話列表裏找
- 「停止」中斷的是 Harness 這一輪,但不會撤回已經進入隊列的消息;發送失敗會自動重試一次,模型側可能看到重複提問
- 分析會話在 DSH 裏被刪掉時,插件會自動新建並在面板頂部提示,舊上下文不再保留
- 自定義外觀只做等比縮放:圖片不是正方形時四周留空,小於 128×128 會被放大變糊;且不區分懸停態
- 標題欄按鈕每 2 秒輪詢一次,從球菜單退出後按鈕最多 2 秒才變回「一瞥」
- 宿主與 widget 之間沒有協議版本握手:如果兩者版本不一致(例如只更新了一半),不會明確報「版本不匹配」
排錯時先看日誌。標題欄沒按鈕,檢查 dsh.profile.bundles 裏有沒有 @local/dsh-glance,然後重啓 DSH;球沒出來,看 glance-host.log 與 glance-widget.log 的最後幾行,最常見是 WebView2 Runtime 缺失或 widget.ps1 被安全軟件攔截;球在但點不動,首次初始化 WebView2 需要一兩秒,仍無反應再看 glance-widget.log 的 webview init 行。
分析一直失敗多半是當前會話選的模型不接受圖片輸入。默認的 DeepSeek-V4.1-Flash 在 DSH 內置模型目錄裏聲明瞭 inputModalities: ["text", "image"],開箱即用;換成純文本型號圖片會被直接拒收,換回帶視覺的模型即可。面板會顯示具體錯誤,據此區分「模型不收圖片」和「網絡/鑑權失敗」。
隱私方面:截圖只發送到你在 DSH 裏配置的模型服務商,插件不向其他服務上傳;屏幕捕獲只在主動框選時發生,不後臺持續截屏;插件本體不額外落盤截圖(-SelfTest 自測模式除外)。
卸載兩步:
dsh plugin --profile desktop remove @local/dsh-glance
再從 dsh.profile.bundles 裏刪掉 "@local/dsh-glance",重啓 DSH。本地數據 %LOCALAPPDATA%\dsh-glance\ 可留可刪。
版本與開發¶
當前版本 0.5.2(beta),許可證 MIT。採樣幾個版本節點理解演進方向:0.5.0 引入「一次框選一條線索」的會話生命週期、面板多輪氣泡、停止保留文本;0.4.2 讓「停止」真正中斷 Harness 這一輪;0.4.0 實現追問不再重傳截圖、DPI 面板尺寸;0.3.0 改名「一瞥 / Glance」,引入 WebView2 面板與流式分析。
源碼結構如下,開發前值得先讀:
index.js Host 半:命令、會話、子進程、圖片 prompt、流式回傳
client.js Web 半:標題欄啓動按鈕 + 狀態輪詢
widget.ps1 原生小部件:懸浮球、凍結框選、WebView2 面板宿主
panel.html 面板頁面(單文件 HTML/CSS/JS)
cordis.patch.yml DSH bundle 聲明
webview2/ vendored WebView2 SDK(Core / WinForms / Loader)
test/ 迴歸測試
測試命令:
npm run check # 一鍵:JS 語法 + 宿主協議/停止鏈路 + 面板腳本編譯
npm test # 只跑測試(9 項斷言 + 面板內聯腳本)
powershell -STA -File .\widget.ps1 -SelfTest # 小部件自測:起面板、截圖、退出,exit 0 爲通過
開發時有三條硬約束:widget.ps1 必須保持 UTF-8 帶 BOM(PowerShell 5.1 讀無 BOM 文件會按 ANSI 解碼,中文變亂碼且解析失敗);宿主與 widget 之間的消息是裸 JSON 行,改協議要同時改 index.js、widget.ps1、panel.html 三處;改完 widget.ps1 要重啓 DSH,因爲宿主把腳本作爲子進程常駐,不會熱更新。
結尾¶
dsh-glance 的取捨很清楚:不碰 OCR、不做本地推理、不引入額外依賴,只把「截圖 + 上下文」這件事壓到最小路徑,代價是常駐懸浮球、只支持 Windows,以及面板只保留當前線索。對日常要看報錯、圖表、UI 的開發者來說,這個代價換來的是省掉一次切窗加複製粘貼。
目錄頁:https://www.skillhub.cn/plugins/waterfish111/dsh-glance
倉庫:https://github.com/waterfish111/dsh-glance
完整說明見倉庫 docs/MANUAL.md,更新日誌見 CHANGELOG.md。安裝前建議自己過一遍源碼,確認它符合你的模型服務商配置。