在 DSH(DeepSeek Harness)开发中,使用 dsh web 启动 Web UI 是常见做法。这种方式需要在本地启动 HTTP 服务器,并手动打开浏览器访问。如果希望获得更原生的应用体验,直接使用桌面窗口是个更优解。
下面介绍 dsh-desktop 插件。这是一个 DSH bundle patch 插件,它通过 Electron 启动一个原生窗口,直接加载 DSH Web UI,并提供完整的桌面交互能力。
核心功能¶
- 一键启动:执行启动命令后,桌面窗口会自动弹出并加载界面,无需手动打开浏览器。
- 无需本地 HTTP 服务:插件通过 IPC(进程间通信)和自定义协议(
dsh-desktop://)桥接前端与后端,不占用 TCP 端口,不启动node:http服务。 - 终端立即释放:如果在交互式终端中运行,插件会将窗口实例移交为后台进程,命令行提示符会立即返回。日志会输出到
~/.dsh/desktop.log。 - 复用 DSH Web 能力:前端 UI、会话持久化、Agent 及工具均复用 DSH 现有的 Cordis 服务,无需二次开发。
- 定制化标题栏:隐藏原生系统标题栏,通过 preload 脚本注入 DSH 风格的标题栏,并保留原生最小化/最大化/关闭控件。
- 双向清理机制:
- 关闭窗口会触发 DSH 自身退出(清理 Agent 和相关服务)。
- DSH 主进程退出时,Electron 会检测并在 2 秒内自动关闭窗口。
安装与启用¶
前置要求¶
- Node.js 24+ 及 npm。
- DSH CLI 版本 0.1.2-rc.1 或更高。
- 已配置模型凭证(如
DEEPSEEK_API_KEY)。
安装步骤¶
- 从 Releases 页面下载对应平台的压缩包(如
dsh-desktop-0.4.0-win32-x64.zip)。 - 解压文件。
- 将解压后的目录链接到 DSH 的
dsh-desktopprofile 中。
注意:DSH 0.1.5+ 将 desktop profile 名字保留给官方应用,因此本插件使用非保留的 dsh-desktop profile。如果 profile 不存在,需先初始化:
# 初始化 profile(仅首次使用)
dsh --profile dsh-desktop --from-default-profile web --dump-config
然后执行安装命令(Windows 示例):
dsh plugin --profile dsh-desktop add link:D:\path\to\dsh-desktop-0.4.0-win32-x64
在 macOS/Linux 上,路径替换为对应的绝对路径即可。由于发布包已内置 Electron 运行时(位于 dist/electron/runtime/),无需执行 npm install。
典型用法¶
安装完成后,使用以下命令启动桌面客户端:
dsh --profile dsh-desktop
启动后,Electron 窗口会自动打开并加载 DSH Web UI,你可以在窗口内直接进行交互。
终端行为控制¶
如果需要在调试或 CI 环境中保持前台运行,可以使用环境变量:
DSH_DESKTOP_NO_DETACH=1:强制前台运行,不脱离终端。DSH_DESKTOP_LOG:指定日志路径,默认为~/.dsh/desktop.log。
查看插件帮助信息:
dsh --profile dsh-desktop --help
注意事项¶
- 开发模式差异:如果是直接从源码开发,需要执行
npm install来解析依赖;如果下载的是已打包的 Release 版本,则不需要安装依赖。 - 权限与安全:插件以当前 DSH 进程的权限运行,安装前建议检查源码及许可证。
总结¶
dsh-desktop 解决了从命令行直接进入桌面级 DSH 交互的需求。它通过 IPC 通信替代了 HTTP 服务,使得启动更加轻量,同时保留了完整的会话和工具能力。对于习惯在终端工作,但又需要图形化界面的开发者,这是一个实用的工具。