dsh-mini:把 DSH 會話彈出爲置頂 WebView2 小窗

前言

在 DSH 桌面主窗里長時間對話時,主界面往往和 IDE、文檔、瀏覽器疊在一起。想對照屏幕內容提問,要麼來回 Alt+Tab,要麼截圖再粘貼,流程偏碎。DSH 主窗對 window.open 的處理會把 http/https 交給系統瀏覽器並拒絕內嵌第二窗口,宿主進程也沒有 Electron 主進程 API,因此沒法用「再開一個 BrowserWindow」這種常見做法。

dsh-mini 由社區維護者 xiaoxin3309 發佈,分類爲客戶端插件。它把當前會話一鍵彈出成獨立、可置頂的 WebView2 原生小窗,並在 Windows 上提供整屏/框選截圖(小窗自身不出現在畫面裏)、任意程序劃詞後的「問大肥魚」藥丸,以及全局熱鍵等能力。下面按安裝、用法和限制說明如何接入。

這是什麼

npm 包名 dsh-mini,當前版本 0.1.18(MIT)。倉庫:https://github.com/xiaoxin3309/dsh-mini;社區目錄頁:https://www.skillhub.cn/plugins/xiaoxin3309/dsh-mini。SkillHub 爲獨立插件目錄站點,與 DeepSeek / 幻方無官方從屬關係。

插件在架構上拆成三塊:宿主側 lib/index.js(註冊 /dsh-mini/* 路由、拼認證地址、起窗與轉發截圖)、瀏覽器側 lib/client.js(主窗註冊「彈出此窗口」按鈕,小窗用 uiWorkspace.openSession 落在當前會話)、以及原生殼 DSH小窗.exe(WinForms + WebView2,自繪標題條、托盤、截圖與劃詞邏輯)。

核心功能

會話小窗

主窗會話標題欄右側有 ▯「彈出此窗口」。點擊後打開與當前會話同步的置頂小窗;若小窗已存在,再次點擊只會把它提到前面(帶會話參數時才重新導航)。小窗標題條從左到右提供:✕ 關閉、📌 置頂、↔ 回主窗、📷 截整屏、⧉ 框選。

小窗是獨立 WebView2 窗口,沒有主窗 cookie。打開時宿主用 connection.authenticatedUrl() 帶上進程 token,殼在導航前寫入 dsh_hud=1 與 dsh_hud_session=<會話 id>,避免裸地址返回 dsh web authentication required。

截圖

兩個截圖鍵在原生殼內完成:先隱藏小窗,再抓屏,PNG 經 base64 和 postMessage 進入頁面,通過 Lexical 粘貼事件寫入輸入框。

鍵 行爲
📷 一次截取整個虛擬桌面
⧉ 凍結桌面後框選:移動鼠標可吸附光標下窗口(單擊截窗口、拖拽自由矩形),Esc / 右鍵取消

劃詞「問大肥魚」

在任意程序裏用鼠標選中文字並鬆開後,光標右下方會出現藍色小藥丸「問大肥魚」。點擊後小窗置前,選中內容以引用塊(每行 > 前綴)插入輸入框。實現依賴低級鼠標鉤子與 UIA / 剪貼板等讀選區策略;管理員窗口(UIPI)內的選區受 Windows 限制,可能讀不到。

常駐服務

安裝並啓用 bundle 後,插件會在 DSH 啓動約 2.5 秒後拉起常駐服務(劃詞藥丸、全局熱鍵、系統托盤)。小窗本身仍由「彈出此窗口」按需打開。

HTTP 路由(供集成或排查)

路由 方法 作用
/dsh-mini/open POST {sessionId?} 起小窗或複用已有窗口
/dsh-mini/close POST 關閉小窗
/dsh-mini/focus POST 重新置頂
/dsh-mini/shot POST 截全屏(不含小窗),回 dataURL
/dsh-mini/state GET 小窗是否在跑
/dsh-mini/trace GET 診斷信標寫入 trace.log

安裝與啓用

系統要求(除 Node 與 DSH 外需本機自備):Windows 10 1903+ / 11、x64;.NET Framework 4.7.2+;Microsoft Edge WebView2 Runtime(Win11 多數自帶,Win10 常隨 Edge 已有,缺失時原生殼會提示官方 Evergreen 下載地址);package.json 聲明 "os": ["win32"]。DSH 需 >=0.2.0-rc.1,Node 需 >=20。

從 npm 安裝(README 給出的方式):

cd ~/.dsh/profiles/desktop
npm install dsh-mini

在同一 profile 的 package.json 裏,於 dsh.profile.bundles 末尾增加 "dsh-mini",然後重啓 DSH,或通過 plugin_manager set_bundle 關一次再開一次。裝完默認無需額外配置;請確認本機已安裝 WebView2 Runtime。

首次使用原生 exe 時,插件會把 app/bin/ 下的 exe 與 dll 複製到 %LOCALAPPDATA%\dsh-mini\bin\,運行時數據在同級 bin\data\(如 config.ini、hud.log),以避免 DSH 工作區沙箱限制就地運行可執行文件。

本地改源碼時,可將依賴改爲 link:<倉庫絕對路徑> 後 npm install;改 lib/index.js 需重載 bundle,改 lib/client.js 刷新頁面即可。

配置

通過 cordis.patch.yml 補丁項(bundle 自帶):

鍵 默認 說明
titlePrefix DSH 小窗 窗口標題
width / height 460 / 560 小窗初始尺寸(邏輯像素)
browserPath 空 僅在沒有 DSH小窗.exe 的回退模式下使用

典型用法

  1. 在 DSH 桌面 profile 中按上文完成 npm install 與 bundle 啓用,確認 WebView2 Runtime 可用。
  2. 打開任意會話,點擊標題欄 ▯,小窗貼邊置頂顯示同一對話;需要對照其他窗口時用 📷 或 ⧉ 把截圖直接送進輸入框。
  3. 在其他應用裏選中一段文字,點「問大肥魚」藥丸,在小窗輸入框裏繼續提問。
  4. 排查問題時查看 %LOCALAPPDATA%\dsh-mini\bin\data\hud.log 與 trace.log;需要時可調用 /dsh-mini/state 或 /dsh-mini/trace。

適用場景與注意

適合在 Windows x64 上長期使用 DSH 桌面版、希望會話窗口始終置頂、並減少截圖與劃詞粘貼步驟的開發者。不適合 macOS / Linux(插件明確限定 win32)。

插件以當前 DSH 進程及其派生子進程的權限運行;劃詞、剪貼板與全局熱鍵行爲與桌面會話綁定。安裝前建議閱讀 倉庫源碼 與 MIT 許可證,自行評估是否滿足安全與合規要求。社區目錄星標數會變動,以各站點當時顯示爲準。

結尾

dsh-mini 用 WebView2 原生殼繞開主窗無法內嵌第二窗口的限制,把當前會話、截圖和劃詞提問收進一個可置頂的小窗。更多信息見目錄頁 skillhub.cn/plugins/xiaoxin3309/dsh-mini 與 GitHub xiaoxin3309/dsh-mini。

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

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

小夜