Back to home@Hanmingh

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.jswindowIconPath() 的候选顺序即可);
  • 重新生成: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.appdist/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 环境变量(或 桌面端自动钉住)决定。

  1. .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 删掉(只删链接;别在资源管理器里删,可能连真数据一起删)。 注意:先停旧服务再删链接,否则运行中的服务会把空目录重建出来。
  2. 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
      
  3. deepseek-harness 仓库:整体移动(pnpm 链接指向全局 store,仓库可整体搬)。 无需手动处理:main.js 会自动探测新位置(找不到才回退旧位置),且下次 dsh web 启动时官方机制会自动修复 ~\.dsh\profiles\node_modules 的依赖链接。
  4. 最后双击 start.cmd 验证;从旧位置跑着的 dsh web 终端要改为新位置启动。

注意:若正在移动的当时有一场正在进行的会话,它的"实现源码位置"信息会过时; 会话本身继续运行,重启服务后自动恢复。

分享给社区

本仓库 = 一个独立桌面壳 + 官方插件机制的 DSH 插件(dsh-plugin 主题), 任何有 Node 22.19+/24+ 和 deepseek-harness 仓库的用户都可以用:

  1. git clone <你的仓库地址>,然后 pnpm install (国内建议先配 electron_mirror=https://npmmirror.com/mirrors/electron/);
  2. 双击 start.cmdpnpm start;仓库/工作目录/数据目录按需指定: --repo <dir>--cwd <dir>--dsh-home <dir>(也有同名环境变量);
  3. 想打包成单文件 exe:pnpm run build:win(产物 dist\DeepSeekHarness.exe, 可挂到 GitHub Releases 给别人免安装使用);
  4. 可选插件: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