9月15日消息,DeepSeek 官方仓库 deepseek-harness 的 master 分支上有桌面客户端的代码与打包、上传脚本,GitHub Release 中没有对应安装包。桌面模块分布在 apps/desktop 与 apps/desktop-host 两个目录,在9月1日到9月10日之间收到 43 个提交。 DeepSeek Harness 是 DeepSeek 的开源 agent harness,dsh 是它的缩写,现在的用法是运行 npm 包 @deepseek-ai/dsh:起 Web UI,或走命令行。桌面端是包裹这套 Web UI 的 Electron 壳,版本号 0.1.5-rc.2,与该 npm 包精确同版本。README 把版本绑定的原因写在发布身份这一行:Electron 与 @deepseek-ai/dsh 使用同一精确版本,桌面壳代码不变,升级 dsh 时必须发布新的 Desktop 版本。
Electron 壳包住 Web UI,不打开监听端口
使用流程里少掉的一步是启动 Web 服务。Electron 拉起内置的上游 Node.js 子进程,由它运行本机安装的 dsh 项目;客户端资源与 Fetch 流量走 dsh-app:// 协议,请求与响应以分帧字节管道传输,进程生命周期控制走 Node IPC。主进程把 dsh-app 注册为特权协议,传输层限定在文件描述符 3 与 4 两条管道上,单帧上限 64 KiB,不占用本地端口。
README 的通信决策一行给出理由:监听 Web 服务会引入端口归属、认证、CORS 与暴露风险。这条取舍带来一个限制,桌面端禁用 Web 的“在本地应用中打开…”操作,因为该功能依赖 Host 插件的 HTTP 路由,而桌面不提供 webServer。
内置 Node.js 24.17.0 与 pnpm 11.7.0,发布包带着完整依赖树
运行时不依赖用户机器上的 Node 与包管理器。打包脚本把上游 Node.js 版本固定为 24.17.0:从 nodejs.org 下载归档并核对 SHASUMS256 校验和,把 pnpm 11.7.0 的命令行复制进 resources。两者与 Electron 壳组成一个签名更新单元。README 给出的理由是:Electron 的 Node.js 带 Electron 补丁、fuse、ABI 与生命周期约束,系统运行时和包管理器状态不可控,所以系统 Node.js 与系统 pnpm 不在执行路径内。
发布包在 extraResources/dsh 里携带物化后的生产依赖树,desktop-runtime.json 记录壳版本、Node 版本、平台、架构、共享包版本与文件清单,打包阶段校验 schema、目标兼容性与文件完整性。首次启动不把核心包复制到 profile 存储,pnpm 不参与核心包的安装。插件安装、更新与删除走内置 pnpm,写入桌面独有的包管理器状态。
状态归属划成两套。Electron 在访问 profile 前获取单实例锁,独占 Harness 状态目录 DSHHOME下的profiles/desktop;CLI与桌面共享DSHHOME下的profiles/desktop;CLI与桌面共享DSH_HOME 下的会话、设置、凭据与存储,两边的可执行包、插件激活、锁文件与 node_modules 是两套。README 给这条决策的理由是:共享可执行依赖图会让 CLI 与桌面改坏对方的 dsh、插件框架 Cordis、插件或原生模块版本,两个桌面进程存在争用同一个 profile 的可能。
三套打包目标,更新源指向 download.deepseek.com
仓库为三个目标准备了固定命令:package:desktop:mac:arm64、package:desktop:mac:x64、package:desktop:win:x64。README 标注 macOS arm64 命令需要 Apple Silicon,macOS x64 命令可在 Intel macOS 或带 Rosetta 的 Apple Silicon 上运行,Windows x64 命令需要 Windows x64,Linux 不是受支持的 Desktop 发布目标。
macOS 打包要求反向域名应用 ID、Apple Team ID 与一套 notarytool 凭据,配置里打开 hardened runtime 与公证,产物为 DMG 与 ZIP;签名结束后做深度严格检查,拒绝其他叶证书 Authority 或 Team ID。9月9日与9月10日的两次提交把公证改成两路并行:一路对 App 公证并钉票,然后生成 ZIP 与更新元数据;另一路把 App 副本封装进 DMG,对 DMG 公证、钉票并校验。
Windows 发布打包要求 GlobalSign EV 叶证书、兼容 SafeNet 的 SignTool、私钥容器名与 Token PIN 四个输入,签名钩子调用一次 SignTool,用 eToken 加密服务提供程序与 DigiCert SHA-256 RFC 3161 时间戳。SignTool、证书、容器、PIN 或 Token 不可用时,发布打包失败,不产出未签名产物;仓库另设一条未签名打包命令,用于本机安装测试。
更新的生产源固定为 https://download.deepseek.com,测试环境没有固定源,须由 DOWNLOAD_TEST_ORIGIN 给出 HTTPS origin。对象路径为 _/harness/desktop/stable//,target 取 mac-arm64、mac-x64 或 win-x64。上传前的校验有几项:目标完成记录要与环境、目标、公开 URL 和 dsh 版本一致;产物名称、大小与 SHA-512 要与 electron-builder 生成的更新元数据一致;频道元数据版本要与版本线一致。产物以 immutable 缓存上传,latest-mac.yml 或 latest.yml 以 no-cache 上传,历史对象不删除。 最近一轮提交修的是公证提速、启动恢复和安装包
9月8日的提交集中在打包方式与启动速度,其中一条提速 macOS 签名。9月9日并行化 macOS 公证,另两条改 Windows 安装包与错误处理。9月10日的提交收紧并行公证的检查,把启动恢复与包重建改成可重试;0.1.5-rc.1 与 0.1.5-rc.2 两个候选版本在9月10日发布到 npm。
启动恢复的设计写在 README 里:主窗口在 profile 准备或后端启动前显示本地加载页,错误页提供重启与重装指导;打包应用资源支持 profile 恢复时,另提供禁用插件与重置 Desktop。包操作或 Host 启动失败会保留改过的文件并留下标记,下次启动重试锁定依赖的安装与待执行构建;桌面不创建 staging 目录、激活日志或回滚副本。重置删除 profiles/desktop 中除事务锁外的条目,删除范围覆盖 Desktop 配置与第三方包,共享任务、设置与 Harness-home 的 .env 不受影响。
安装环节的恢复落在 NSIS 脚本上:安装阶段先清理 7z 临时解压目录,完成页与自动启动排在其后,避免 NSIS 删除插件目录时与应用进程冲突。
安装包没有发布,公开工作流里找不到桌面打包作业
GitHub Release 共 16 个版本,从 dsh-v0.1.0-rc.7 到 dsh-v0.1.5-rc.2,每个版本的资产数为 0。根目录 README 不提桌面端;apps/desktop/README.zh.md 写的是构建、签名与上传流程,没有下载入口。仓库 .github/workflows 下的 21 个工作流覆盖 dsh 的 npm 发版、CI、文档页与 e2e,其中没有桌面打包作业:三套打包命令在具备签名条件的机器上执行,公开仓库里没有把它们接成自动流水线。
npm 上的版本线走到 0.1.6-alpha.1:@deepseek-ai/dsh 的 dist-tags 显示 latest 为 0.1.5-rc.1、next 为 0.1.5-rc.2、alpha 为 0.1.6-alpha.1,alpha 版本发布于9月15日,没有对应的 GitHub tag。桌面版本与 dsh 同版本绑定,这条 alpha 版本是否包含新的桌面产物,公开渠道没有信息。
桌面端缺少的环节写在 README 的已知限制里:发布签名、公证、更新托管与跨上一版本的安装产物验证需要生产发布环境;带安装脚本(lifecycle script)的桌面插件,需要包名进入经过评审的 allowBuilds 列表。
想用桌面版的用户,今天能走的路是源码打包。社区里有自述非官方的封装在流传,其中两个仓库的最近一次提交落在9月11日与9月14日;这些封装由第三方维护,官方没有参与。
剩下的工作在分发环节:出口前的每一步,脚本与前置条件写在仓库里,缺的是在生产环境里把它们跑完。这些步骤要用到签名身份、公证凭据与更新服务器的写入权限,三类输入由官方掌握,仓库里出现的是变量名。到哪一步算完成,公开信息里没有时间表。版本绑定这条约束的用意落在更新上:Electron 壳、匹配的 dsh 运行时、Node.js 与 pnpm 组成一个签名更新单元,运行时版本的选择不脱离 Desktop 发布,桌面壳代码不变的 dsh 升级,同样要出一版新的 Desktop。
对不想碰命令行的用户,桌面端消掉的是启动 Web 服务这一步,代价落在包体与状态隔离两处。发布包要装载 Electron、物化的 dsh 生产依赖树、上游 Node.js 与 pnpm,README 要求对安装包大小与文件系统占用做两次测量;桌面独占一套 profile 与包管理器状态,CLI 装过的插件不会出现在桌面端。
以上是仓库状态。官方没有公布发布时间,生产更新服务器上的产物情况未公开。