dsh-desktop-window

by fengzhiyushui

1 UI 增强github收录于 08-23

DSH desktop-window 插件:以独立应用窗口(Edge/Chrome --app 模式)打开 DeepSeek Harness Web UI——双击启动、自动弹窗、无地址栏

DSH desktop-window plugin: opens the DeepSeek Harness Web UI in a standalone app window (Edge/Chrome --app mode) — double-click to launch, auto-popup, no address bar, fully…

安装

dsh plugin --profile web add github:fengzhiyushui/dsh-desktop-window

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

安装与环境配置指引、插件开发教程见 DSH 中文社区文档 ↗

安装即在你的机器上以你的权限运行第三方代码——它可读写文件、使用凭据、访问网络,DSH 的工具审批不会为插件代码加沙箱。「检测到 manifest」仅代表发现 dsh.bundle / dsh.plugin 清单,不构成兼容性或安全审查;安装前请审阅源码,不熟悉的插件先在不含密钥的环境试用。

README

目录

中文 | English

DSH 桌面窗口插件:让 DeepSeek Harness 的 Web UI 以独立应用窗口(Edge/Chrome --app 模式)打开——双击启动、自动弹窗、无地址栏、与日常浏览器互不干扰。

特性

  • 自动开窗:dsh web 启动、服务器就绪后,自动弹出独立应用窗口(默认开启);
  • 手动开关:会话头部操作行新增「独立窗口」按钮,一键开/关窗口;
  • 设置开关:设置 → 常规 →「启动时自动打开独立窗口」,持久化到 $DSH_HOME/desktop-window.json(兼容记事本编辑产生的 BOM);
  • 鲸鱼图标:向页面注入 DeepSeek 官方鲸鱼 favicon(16/32/64/128/256 多尺寸)+ web manifest(192/512),窗口标题栏显示鲸鱼;任务栏图标通过图标助手尽力设置(见已知限制);
  • 安全:操作路由带同源校验(跨站 POST 返回 403);窗口使用 TEMP 下的独立配置目录,与你的日常 Edge/Chrome 完全隔离;
  • 生命周期:关窗后状态自动同步;插件卸载时清理窗口进程树、图标助手与全部路由。

安装

前置条件:已安装 DSH(dsh 命令可用)与 pnpm(dsh plugin 内部依赖 pnpm;没有则 npm install -g pnpm)。

从 GitHub 安装(推荐):

dsh plugin --profile web add github:<你的用户名>/dsh-desktop-window
# 或
dsh plugin --profile web add "git+https://github.com/<你的用户名>/dsh-desktop-window.git"

从本地目录安装:

dsh plugin --profile web add "file:D:/path/to/dsh-desktop-window"

Windows 空格路径坑:dsh plugin 转发参数给 pnpm 时,含空格的路径会被命令行二次切分导致 ERR_PNPM_SPEC_NOT_SUPPORTED_BY_ANY_RESOLVER。解法:为插件目录建一个无空格的 junction 再安装:

New-Item -ItemType Junction -Path D:\dsh-desktop-window -Target 'D:\path with spaces\dsh-desktop-window'
dsh plugin --profile web add "file:D:/dsh-desktop-window"

dsh plugin add 会把插件装进 profile 的 node_modules,并自动把声明了 dsh.bundle 的包并入 dsh.profile.bundles 组合层,无需手改配置。安装后重启 dsh web 生效。

更新

# 更新到最新版本(git 依赖会重新拉取默认分支最新提交)
dsh plugin --profile web update dsh-desktop-window

# 然后重启 dsh web

新版发布流程见 CHANGELOG.md;插件新增版本无需用户重新 add,直接 update 即可。

使用

dsh web
# 服务器就绪后自动弹出独立应用窗口
  • 会话标题右侧的「独立窗口」按钮:开/关窗口;
  • 设置 → 常规:关闭/开启自动开窗;
  • 浏览器选择:默认优先 Edge,其次 Chrome(均使用 --app 应用窗口模式,参数通用)。想指定优先级可编辑 lib/index.js 中的 BROWSER_CANDIDATES 顺序。

桌面快捷方式(Windows)

一键创建(目标 DSH-Desktop.cmd、鲸鱼图标):

powershell -ExecutionPolicy Bypass -File "<插件目录>\scripts\create-shortcut.ps1"
# 指定默认工作区:
powershell -ExecutionPolicy Bypass -File "<插件目录>\scripts\create-shortcut.ps1" -WorkspaceDir "D:\my project"

也可以直接双击 DSH-Desktop.cmd(自动识别全局 dsh,没有则走 npx)。

平台

Windows 优先(窗口关闭依赖 taskkill、任务栏图标助手依赖 PowerShell)。macOS/Linux 上 自动开窗与按钮可用,但关闭窗口会退化为仅结束主进程。

开发与构建

lib/client.js 是浏览器端 bundle(构建产物已提交,安装者无需构建)。要点:

  • react 必须 external:官方客户端 bundle 通过 require("react") 命中模块表种子词(shell 内核 注册的共享 React);内联打包会产生第二份 React,导致 Hooks 崩溃;
  • 必须带 __ModuleLoader__.load 注册壳:裸 CJS 输出不会被模块表识别。

重新构建:

npm install          # esbuild + react(开发依赖)
npm run build        # node scripts/build-client.js

目录结构

package.json            dsh.bundle + dsh.client 双面声明
cordis.patch.yml        组合层(一行:desktop-window)
lib/index.js            Host 半边:窗口进程 + HTTP 路由 + 图标/manifest 注入 + 状态持久化
lib/client.js           浏览器 bundle(构建产物,已提交)
src/client.js           客户端源码(React)
scripts/build-client.js 构建脚本(esbuild + 注册壳)
scripts/set-window-icon.ps1  任务栏图标助手(WM_SETICON + 自定义 AUMID)
scripts/install.ps1     一键安装
scripts/create-shortcut.ps1  一键桌面快捷方式
DSH-Desktop.cmd         双击启动器
assets/                 DeepSeek 官方鲸鱼图标(SVG/PNG 多尺寸/ICO)

已知限制

  • Windows 任务栏按钮图标:标题栏已显示鲸鱼(favicon/manifest 生效),但任务栏按钮在部分 Edge 版本仍显示默认图标——图标助手会尝试 WM_SETICON + 自定义 AppUserModelID,效果因 Edge 版本而异。需要 100% 鲸鱼任务栏图标时,可在窗口内「Edge 菜单 → 应用 → 将此站点安装为应用」 (会使用本插件注入的 manifest 图标)。
  • 关闭应用窗口不会退出 dsh 进程(终端里的 dsh 继续运行)。
  • 自动开窗开关存于 $DSH_HOME/desktop-window.json;后续版本可迁移到 settings 服务。

License

MIT

原始 README: https://github.com/fengzhiyushui/dsh-desktop-window/blob/main/README.zh.md ↗