DeepSeek Harness Hub
← 返回列表

桌面客户端chinachat/deepseek-harness-desktop

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

双击即用,免装 Node.js 启动 Web 界面

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/11 · 已提供中文文档

DeepSeek Harness 桌面版

综合分
30.2
GitHub 分
30.2
用户评分
★ Stars
1
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add chinachat/deepseek-harness-desktop
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis-plugin-group@deepseek-ai/dsh@deepseek-ai/dsh-anonymous-user-id@deepseek-ai/dsh-atomic-write@deepseek-ai/dsh-attachment@deepseek-ai/dsh-authorization@deepseek-ai/dsh-bash-local@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-directory-picker-browse@deepseek-ai/dsh-client-ui-dockkit@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-slots
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

DeepSeek Harness 桌面版

DeepSeek Harness(dsh)的桌面版图形界面。将 dsh 的 Web UI 封装为独立的 Windows 桌面应用,双击即用,无需安装 Node.js 或在命令行手动启动。

基于 Electron + TypeScript 构建,应用启动时自动拉起内置的 dsh web 服务并在本地窗口中加载界面。

功能特性

- 一键启动:自动拉起 dsh web 服务,加载 DeepSeek Harness Web UI。
- 纯壳:不再向 dsh 页面注入任何界面。附件上传、目录选择等能力均由 dsh 0.1.5 原生提供,宿主只负责拉起服务、承载窗口与托盘。
- 系统托盘:服务状态显示、显示/隐藏主窗口、查看日志、重启服务、退出。
- 设置持久化:开机自启、关闭窗口最小化到托盘。
- 日志面板:实时查看 dsh 服务日志。
- 服务守护:dsh 进程异常退出自动重启。

技术栈

- Electron 43
- TypeScript 5
- electron-builder(NSIS 安装包)

运行与构建

安装依赖
npm install

开发运行
npm run dev

编译 TypeScript
npm run build

打包 Windows 安装包(NSIS)
npm run dist

仅产出未打包目录(调试用)
npm run pack

打包产物输出到 release/,安装包为 release/DeepSeek Harness Setup .exe。

注意:打包为 NSIS 时若内存不足,可设置 NODE_OPTIONS=--max-old-space-size=4096 避免 OOM。

在线升级

应用内置在线升级(electron-updater + GitHub Releases):

- 升级源:https://github.com/chinachat/deepseek-harness-desktop/releases(publish.github 配置)。
- 检查方式:托盘「设置…」→「检查更新」,或直接打开设置窗口。下载进度实时显示,下载完成后可一键重启安装。
- 代理配置:网络受限时,在设置窗口填写 GitHub 代理(如 http://127.0.0.1:7890)即可,升级请求会经该代理走 GitHub。
- 发布新版本:打标签发布时,用 GH_TOKEN 环境变量将产物上传到 GitHub Releases:

GH_TOKEN= npm run dist -- --publish always

electron-builder 会把安装包和 latest.yml 一起发布,用户端即可检测到更新。

项目结构

src/
main/          # 主进程
main.ts        # 窗口/视图编排、主题同步
dsh-server.ts  # dsh 子进程管理(启动/守护/重启)
ipc-guard.ts   # IPC 发送方校验
tray.ts        # 系统托盘
settings.ts    # 设置持久化
settings-window.ts # 设置窗口 + 在线升级
updater.ts     # electron-updater 封装
log-window.ts  # 日志查看窗口
logger.ts      # 日志(含轮转)
preload/        # 预加载脚本
preload.ts               # dsh 视图预加载(仅暴露运行时信息)
settings-preload.ts      # 设置窗口
log-preload.ts           # 日志窗口
assets/          # 资源(图标、日志/设置页面、patch 等)
build/           # 打包资源(应用图标、NSIS 自定义脚本)

关键实现说明

- dsh 运行时内置:应用使用 Electron 自带的 Node 运行时(ELECTRON_RUN_AS_NODE)以子进程方式运行 @deepseek-ai/dsh,无需单独安装 Node。
- --expose-internals:dsh 的 HMR 插件需要该标志,启动 dsh 时已传入。
- --no-open:桌面版自己就是界面,因此启动 dsh 时显式关闭它「用默认浏览器打开」的行为,避免每次启动(含崩溃重启)多弹一个标签页。
- 端口自动分配:dsh web --port 0 让系统分配空闲端口,并解析标准输出中的 URL。
- 目录选择器:dsh 原生 Win32 文件夹选择器在打包环境下会崩溃(koffi.view 越界),已通过 assets/picker-browse.patch.yml 覆盖为纯 JS 的 browse 后端。
- peerDependencies 补齐:electron-builder 默认不打包 peer 依赖,已将 dsh 运行时需要的 @deepseek-ai/ peer 包显式加入 dependencies(含 picker-browse.patch.yml 引用的两个 browse 插件包)。
- 进程树清理:重启/退出时用 taskkill /T 结束 dsh 及其全部子进程,避免留下孤儿服务。
- 日志轮转:dsh-desktop.log 超过 5MB 时保留最近 2000 行,不会无限增长。

安全模型

桌面壳把宿主能力收敛在三个边界上,改动 IPC 时请一并维护:

1. 发送方校验:ipcMain.handle 是进程级注册,任何能触达 ipcRenderer 的渲染进程都能调用。因此 src/main/ipc-guard.ts 要求每个 handler 校验 event.senderFrame:settings: / updater: / logs:read 只接受来自应用自身 file:// 页面的顶层 frame。仅靠 preload 的 contextBridge 作用域不构成边界——它是按 webPreferences 而非 URL 安装的。
2. 导航与开窗:dsh 视图只允许停留在本次启动的 loopback 来源,其余一律拦截并交给系统浏览器打开;setWindowOpenHandler 拒绝在应用内新建窗口。
3. 不再持有文件能力:资源管理器移除后,宿主不再注册任何 dsh-fs: / dsh-explorer:* 通道,也不再向 dsh 页面注入脚本,因此不存在「宿主代理文件访问」这一攻击面。三个本地页面都带 CSP;dsh 视图使用独立会话分区(persist:dsh-web)。

已知限制

- 更新链路无代码签名:安装包未签名,electron-updater 的签名校验被显式跳过(见 src/main/updater.ts),完整性只靠 latest.yml 里的 SHA-512,而它与安装包同源。要消除风险需要给安装包签名;否则请把可配置的 GitHub 代理当作更新链路的信任组成部分。
- wasm/原生模块构建:@deepseek-ai/dsh-subprocess-local、koffi、node-pty 带 install script。npm ci 默认可能不执行它们;从零 clone 后若要使用原生目录选择器或终端功能,需要 npm approve-scripts(本仓库默认走 browse 后端,因此不影响正常启动)。
- 发布产物的文件名必须与 latest.yml 一致:electron-updater 由 latest.yml 的 path 推导下载地址(仅把空格换成连字符),而 GitHub 会把上传资产名里的空格规范成点号。因此 package.json 固定了 artifactName(无空格);改动它时请同时确认三者一致,否则自动更新会 404。

License

MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群