dsh-desktop
Desktop Plugin for Deepseek Harness
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 27, 2026
- Updated
- Aug 27, 2026
Introduction
dsh-desktop — DeepSeek Harness 桌面端
把 DeepSeek Harness 的 Web GUI 装进一个独立的桌面窗口(Electron),像普通软件一样使用。本项目位于官方仓库之外(C:\Users\Hanming\Deepseek\dsh-desktop),官方仓库 git pull 更新永远不会影响它。
使用
双击启动
双击本目录下的 start.cmd(或桌面上的「DeepSeek Harness」快捷方式):
- 如果 DSH 服务已在 3080 端口运行 → 直接弹出桌面窗口接入;
- 如果没有 → 自动在后台启动
dsh web(隐藏窗口),就绪后自动打开桌面窗口; - 关闭窗口 = 连同它启动的服务一起退出(如果是接入已存在的服务,则服务保持运行);
- 服务重启后自动恢复:接入模式下监测到服务消失又回来,窗口会自动刷新重连,不会停留在失效页面;
- 再次双击时若已有窗口,只会把它调到前台(单实例行为)。
等价命令:pnpm start(在本目录下)。
图标
- 窗口与任务栏图标:
assets\icon-black.ico(黑色鲸鱼 logo,来自你提供的deepseek_logo_black.png); - 桌面快捷方式「DeepSeek Harness」已创建,使用同一图标;
assets\icon-white.ico已备好(深色任务栏可切换,改main.js里windowIconPath()的候选顺序即可);- 重新生成:
pnpm run logo-ico(源文件assets\icon-black.png/icon-white.png)。
参数(可选)
| 参数 | 含义 | 默认 |
|---|---|---|
--port <n> | 探测/启动的服务端口 | 3080 |
--repo <dir> | deepseek-harness 仓库路径 | 先找 %USERPROFILE%\Deepseek\deepseek-harness,找不到回退 %USERPROFILE%\deepseek-harness |
--cwd <dir> | 服务的工作目录(即 agent 的 workspace) | %USERPROFILE% |
--dsh-home <dir> | DSH 数据目录(会话/凭据/插件配置) | 继承的 DSH_HOME;没有则自动探测 Deepseek\.dsh |
--user-data <dir> | Electron 用户数据目录 | %APPDATA%\dsh-desktop |
--target-url <url> | 跳过探测/启动,直接加载该 URL | 无(插件走 DSH_DESKTOP_URL 环境变量) |
环境变量:DSH_DESKTOP_REPO / DSH_DESKTOP_CWD / DSH_DESKTOP_DSH_HOME /
DSH_DESKTOP_USER_DATA 对应前四个;DSH_DESKTOP_URL 传递目标 URL。
注意:
http://…形式的 URL 不要放在命令行参数里——Electron/Chromium 会把带://的参数当位置参数吃掉导致启动失败,一律用DSH_DESKTOP_URL环境变量传。
打包(生产发布)
Windows:
pnpm run build:win
产物:dist\DeepSeekHarness.exe(约 95MB 便携版,免安装、单文件、自带鲸鱼图标)。
打包后的 exe 任务栏固定会显示「DeepSeek Harness」和鲸鱼图标(开发模式下固定
显示的是 Electron 图标,属正常现象)。国内网络已通过 .npmrc /
pnpm-workspace.yaml 配置好镜像;未签名 exe 首次运行时 SmartScreen 可能提示
,点"仍要运行"即可——正式对外分发建议用代码签名证书。
macOS(必须在 Mac 上打包,Windows 无法交叉打包 mac 产物):
pnpm run build:mac
产物:dist/mac*/DeepSeek Harness.app、dist/DeepSeekHarness-*-mac-*.dmg / .zip
(arm64 与 x64 双架构)。未签名包首次运行会被 Gatekeeper 拦截:右键点
"打开"再确认,或终端执行 xattr -cr "DeepSeek Harness.app";正式分发建议
申请 Apple Developer ID 签名。开发模式双击 start.command(或 pnpm start)
无需打包,前提是本机有 node 22.19+、pnpm 和 deepseek-harness 仓库
(路径用 --repo / --cwd / --dsh-home 指定,默认探测 ~/Deepseek/)。
可选:让终端里的 dsh web 也走桌面窗口(DSH 插件)
本目录的 plugin/ 是一个官方插件机制的 DSH 插件(已安装到
~\.dsh\profiles\web,并在该 profile 的 cordis.patch.yml 中注册)。
设置环境变量后,任何方式启动的 dsh web 都会弹出桌面窗口而不是浏览器:
set DSH_DESKTOP=1
pnpm dsh web
不设该变量时 dsh web 行为与官方完全一致(打开默认浏览器)。
架构与"pull 安全性"
官方仓库 C:\Users\Hanming\Deepseek\deepseek-harness\ ← git pull 随意更新
(完全不被本项目的任何文件触碰)
C:\Users\Hanming\Deepseek\dsh-desktop\ ← 本项目(独立目录)
main.js Electron 主进程:探测端口 → 接入或拉起 dsh web → 窗口
start.cmd 双击入口
assets/icon.* 由官方 favicon 生成的图标
plugin/ DSH 插件(可选),在 ~/.dsh 注册
~\.dsh\profiles\web\cordis.patch.yml
仅此一个文件改动:插入 desktop-launcher 插件行,
并把浏览器拉起改为 DSH_DESKTOP 环境变量控制
- 官方约定的"用户层"(
~/.dsh)与仓库严格分离,git pull只更新仓库; - 桌面端启动服务的方式是直接运行仓库的
apps/cli/src/bin.ts(即官方文档里的pnpm dsh web的底层命令),官方不改变 CLI 入口/端口行为就不会受影响; - 若官方某天改了 web 配置行的 id(
web-runtime),只需要调整~\.dsh\profiles\web\cordis.patch.yml这一个文件即可,本项目代码无需改动。
迁移(把三个目录挪进 C:\Users\Hanming\Deepseek)
最终形态不需要任何 junction:数据目录的位置由 DSH_HOME 环境变量(或
桌面端自动钉住)决定。
.dsh数据目录:move C:\Users\Hanming\.dsh C:\Users\Hanming\Deepseek\.dsh setx DSH_HOME "C:\Users\Hanming\Deepseek\.dsh"- 双击
start.cmd启动的桌面端不依赖环境变量:未继承DSH_HOME时 自动探测并用Deepseek\.dsh; - 终端里跑
pnpm dsh web需要环境变量生效(setx后重新登录,或重启 资源管理器;已打开的旧终端看不到新变量); - 过渡期若在旧位置留了 junction,服务重启后可用
rmdir C:\Users\Hanming\.dsh删掉(只删链接;别在资源管理器里删,可能连真数据一起删)。 注意:先停旧服务再删链接,否则运行中的服务会把空目录重建出来。
- 双击
- dsh-desktop:整个目录移过去(内部全是相对路径)。移动后要做两件事:
- 重挂插件,否则下次
dsh web启动会因插件行解析失败而报错:cd /d C:\Users\Hanming\Deepseek\deepseek-harness node --import tsx/esm apps/cli/src/bin.ts plugin --profile web remove dsh-desktop-launcher node --import tsx/esm apps/cli/src/bin.ts plugin --profile web add "link:C:\Users\Hanming\Deepseek\dsh-desktop\plugin" - 重装依赖:pnpm 的顶层
node_modules链接是绝对路径,搬目录会断。pnpm install会提示需要清空;直接删掉目录重装即可(store 缓存很快), 若electron.exe仍缺失就补跑 install.js:cd /d C:\Users\Hanming\Deepseek\dsh-desktop rmdir /s /q node_modules pnpm install node node_modules\electron\install.js
- 重挂插件,否则下次
- deepseek-harness 仓库:整体移动(pnpm 链接指向全局 store,仓库可整体搬)。
无需手动处理:
main.js会自动探测新位置(找不到才回退旧位置),且下次dsh web启动时官方机制会自动修复~\.dsh\profiles\node_modules的依赖链接。 - 最后双击
start.cmd验证;从旧位置跑着的dsh web终端要改为新位置启动。
注意:若正在移动的当时有一场正在进行的会话,它的"实现源码位置"信息会过时; 会话本身继续运行,重启服务后自动恢复。
分享给社区
本仓库 = 一个独立桌面壳 + 官方插件机制的 DSH 插件(dsh-plugin 主题),
任何有 Node 22.19+/24+ 和 deepseek-harness 仓库的用户都可以用:
git clone <你的仓库地址>,然后pnpm install(国内建议先配electron_mirror=https://npmmirror.com/mirrors/electron/);- 双击
start.cmd或pnpm start;仓库/工作目录/数据目录按需指定:--repo <dir>、--cwd <dir>、--dsh-home <dir>(也有同名环境变量); - 想打包成单文件 exe:
pnpm run build:win(产物dist\DeepSeekHarness.exe, 可挂到 GitHub Releases 给别人免安装使用); - 可选插件:
dsh plugin --profile web add link:<本仓库>\plugin,然后在~\.dsh\profiles\web\cordis.patch.yml里注册(见本 README 架构一节的 patch 片段)。这样DSH_DESKTOP=1 dsh web就会弹桌面窗口而非浏览器。
上传 GitHub(本机装了 gh 时):
gh repo create dsh-desktop --public --source C:\Users\Hanming\Deepseek\dsh-desktop --push
gh repo edit dsh-desktop --add-topic dsh-plugin
也可以去 DeepSeek Harness Discord 分享链接。
常见问题
- Electron 二进制下载慢/失败:本项目
.npmrc已配置electron_mirror=https://npmmirror.com/mirrors/electron/。若仍失败,手动执行node node_modules\electron\install.js(设置ELECTRON_MIRROR环境变量)。 - pnpm 不在 PATH:桌面端不依赖 pnpm;它用
node(按DSH_DESKTOP_NODE→ PATH → 系统默认安装路径的顺序查找,最后回退到 Electron 内置 Node)。 - 日志:
%APPDATA%\dsh-desktop\electron.log。 - 重新生成图标:
pnpm run icon(需要官方仓库的 favicon.svg;通过 DSH 自带运行闭包中的 sharp 渲染,本项目不引入额外渲染依赖)。
目录
dsh-desktop/
main.js Electron 主进程
start.cmd 双击入口
package.json electron devDependency + start/icon 脚本
.npmrc Electron 中国镜像
pnpm-workspace.yaml 允许 electron 安装后置脚本
assets/ icon.svg / icon.png / icon.ico
plugin/ DSH 插件 dsh-desktop-launcher(可选组件)
scripts/make-icon.mjs