dsh-multi-window:把 DSH 会话拆进独立原生窗口

前言

在 DSH 桌面客户端里,壳层通常只管理一个主窗口。同时盯着多条会话时,你只能在同一块界面里来回切换,或者靠系统里多开几个 DSH 实例,成本和干扰都偏高。社区插件 dsh-multi-window(维护者 JohnshyCY)在会话右键菜单里增加「在独立窗口中打开」,由 Host 拉起独立的 Electron 窗口,里面仍是同一套 Web 前端,只是通过 URL hash 定位到指定会话。下面按安装、验证和注意事项说明用法。

这是什么

dsh-multi-window 是面向 Windows 桌面 DSH 的插件:点击菜单项后,侧车进程打开一个独立窗口,加载与主窗口相同的 UI;每个窗口有各自的进程和 --user-data-dir,关掉副窗不影响主窗。

DSH 生态习惯用插件扩展能力;SkillHub 等目录站点由社区维护,与 DeepSeek / 幻方无官方从属关系。

核心功能

资料中已核实的能力如下。

  1. 完整 Web UI:独立窗口内保留侧栏、插件、技能、自动化任务、上下文洞察等,零裁剪。
  2. 标题与会话一致:从 sessions.list 取 displayTitle,经 hash 的 title 传给窗口;页面改标题会被 page-title-updated 纠正。
  3. 多窗口错开:按 sessionId 做 FNV-1a,落在 6×6 档(每档 40px),并限制在屏内。
  4. 数据隔离:每窗独立 user-data-dir,localStorage、登录态、滚动位置互不干扰。
  5. 同会话单窗:同一会话再次打开会把已有窗口提到前台,不会重复开窗。
  6. 外链:窗口内链接交给系统默认浏览器。
  7. 有界会话校正:新窗启动后 8 秒内每 300ms 复查,目标会话连续保持 3 秒即停;用户点击或按键后不再抢回选中态(lib/client.js 中 CORRECT_DEADLINE_MS / CORRECT_INTERVAL_MS / CORRECT_HOLD_MS)。

后端提供 GET /api/multi-window.open,Node 半注册路由、spawn 侧车;侧车逻辑在 lib/window-main.js;客户端注入在 lib/client.js。

安装与启用

环境要求(README 原文):

  • Windows 10 / 11 桌面客户端
  • DSH 桌面客户端 0.2.1-rc.5 及以上
  • Node.js 20+(DSH 自带,无需单独安装)

方式 A:插件市场(推荐) — 在 DSH 插件市场搜索 dsh-multi-window 一键安装。

方式 B:命令行

dsh plugin add dsh-multi-window

若 dsh 不可用,包内脚本可改 desktop profile 的 package.json 并建 junction:

.\scripts\install.ps1
.\scripts\install.ps1 -DryRun

脚本优先读 DSH_CLI、DSH_HOME(否则 PATH 与 %USERPROFILE%\.dsh),可用 -Profile / -DshHome 覆盖。

安装后必须重启 DSH 桌面应用,插件才会加载。

说明:插件依赖 process.execPath 定位 Electron 载荷,命令行 dsh web 模式不适用。本包不含预编译二进制,首次开窗会在 %TEMP%\dsh-multi-window-runtime\ 硬链接 DSH 的 exe 与资源,体积仅几十 KB 级。

典型用法

  1. 重启 DSH,在 设置 → 插件列表 确认出现 dsh-multi-window。
  2. 在任意会话上 右键 → 在独立窗口中打开。
  3. 观察标题栏是否为该会话标题,内容是否为该会话;再开另一条会话,两窗位置应错开。
  4. 关闭独立窗口,主窗口应仍正常。

也可用 curl 直接测后端(token 从主窗口地址栏复制):

curl.exe "http://127.0.0.1:<port>/api/multi-window.open?session=<sessionId>&title=<标题>&token=<token>"

成功时返回形如 {"url":"...", "session":"...", "pid":1234, "focused":false};同一会话再次请求时 focused 为 true。

卸载(按需保留临时运行时):

dsh plugin remove dsh-multi-window

或:

.\scripts\uninstall.ps1
.\scripts\uninstall.ps1 -RemoveRuntime
.\scripts\uninstall.ps1 -RemoveProfiles

适用场景与注意

适合谁:在 Windows 上长期用 DSH 桌面版、需要并行查看或操作多条会话的开发者;不适合只靠 dsh web 或未装桌面客户端的环境。

权限与安全:插件以当前 DSH 进程权限运行,会 spawn 子进程并写临时目录;安装前建议扫一眼 源码仓库 与 MIT 许可证。

已知限制(README):

  • 空白会话会停在「探索未至之境」欢迎页,属正常渲染。
  • 默认 1280×820,最小 520×600;多显示器按主屏定位。
  • 重启 DSH 后 token 变更,已开的旧窗口需关掉重开。
  • 同一窗口内并排多个对话尚未实现。

常见故障(节选):窗口一闪退出 — 侧车需 --no-sandbox 且子进程不得继承 ELECTRON_RUN_AS_NODE;503 多为临时目录不可写或 DSH_MULTI_WINDOW_EXE 无效;可设 DSH_MULTI_WINDOW_EXE 指向其他 Electron exe。完整表见仓库 README「故障排查」。

结尾

dsh-multi-window 在不改 DSH 单主窗模型的前提下,用独立 Electron 窗口和隔离的 profile 实现多会话并行查看;安装命令是 dsh plugin add dsh-multi-window,核心操作是会话右键「在独立窗口中打开」。更多细节与实现原理见 GitHub README,社区索引见 SkillHub 目录页。

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

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

Xiaoye