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。

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

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

小夜