DeepSeek Harness Hub
← 返回列表

liuliyisui/dsh-desktop

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

DeepSeek Harness 桌面客户端:Electron + dsh-web-app 内核,对标 Codex…

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

DeepSeek Harness 桌面客户端:Electron + dsh-web-app 内核,对标 Codex Desktop —— 原生窗口、工作区切换、插件市场、内置更新器

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

README

DeepSeek Harness 桌面端

对标 Codex Desktop 的本地桌面 GUI 客户端,基于 DeepSeek-Harness (dsh) 开源框架。

技术栈:Electron + React + @deepseek-ai/dsh-web-app 内核(复用 dsh Cordis 插件系统与全部原生能力)。

特性(对照需求清单)

| 需求 | 实现 |
|---|---|
| 本地桌面窗口(非浏览器网页) | Electron BrowserWindow 承载 dsh Web GUI;WebView 内核即 Electron/Chromium |
| Windows / macOS | electron-builder 输出 exe(NSIS)与 dmg |
| 工作区目录选择 | 菜单/按钮「选择工作区文件夹…」→ 服务以该目录为 cwd 重启 |
| Agent 对话 · 流式输出 · 工具调用链 | dsh-web-app 原生:流式渲染、工具调用树、可批准/拒绝(权限预设) |
| 插件市场 | 🚧 规划中——当前仓库未包含 market/ 与 electron/plugins.js,代码中暂无引用 |
| 会话保存 / 历史回溯 | dsh 原生:会话持久化 JSONL + 侧边栏历史 |
| 导出会话日志 | dsh 原生:对话内 /export 命令 → 下载对话框 |
| 插件热加载 | dsh 原生:dsh-client-hmr 客户端重载链;服务重启后新插件生效 |
| 文件读写 / bash 沙箱 / str_replace_editor | dsh 原生:工具集 + sandbox ACL 权限隔离 |
| 深浅主题 | dsh 原生:设置 → 外观(Appearance),明暗切换 |
| 设置页(API Key / 沙箱权限 / 模型选择) | dsh 原生:设置 → 模型(API Key、Provider)/ 权限预设 / 模型选择 |

核心原则(约束 1):不重复实现 Agent 运行内核。dsh 的 web profile 本身就是完整的 Agent 客户端;桌面端只做「服务生命周期管理 + 原生窗口 + 工作区 + 插件市场」四件事。

⚠️ 当前实现状态:本仓库已包含「服务生命周期管理 + 原生窗口 + 工作区选择」及下述桌面端增强;插件市场(market/ + electron/plugins.js)尚未实现。文档中与之相关的内容均为规划中的设计,代码里没有任何引用,对应菜单项与命令当前不可用(相关段落已标注 🚧)。

桌面端增强(借鉴 xuboboo/dsh-gui,MIT)

| 增强 | 说明 |
|---|---|
| 🎬 品牌启动动画 | 深色渐变 + logo 呼吸光晕 + 双环加载动画(assets/splash.html,纯 CSS);服务就绪后自动切入 GUI |
| 🎨 DeepSeek 设计语言主题 | token 级覆盖层(dsw-override.css):品牌蓝按钮、浅蓝气泡、圆角滚动条、选区/焦点环 |
| 📋 复制按钮修复 | 放行 clipboard-sanitized-write 权限(官方 launcher 默认拒绝一切权限,复制按钮曾静默失效) |
| 🔌 端口可配置 | 环境变量 DSH_DESKTOP_PORT=3082 可改端口,解决端口冲突 |
| 📊 Token 用量统计(可选) | 借鉴其 ui-settings-token-usage 客户端插件,设置页新增用量统计(需复制到 profile 并注册 roster) |

主题覆盖层修改的是 node_modules/@deepseek-ai/dsh-web-frontend/dist/(dsw-override.css + index.html 注入 link);重装依赖后需重新复制(与 API 网关白名单同类的部署说明)。

架构

┌────────────────────────────── Electron 主进程 ─────────────────────────────┐
│  electron/main.js      窗口、菜单、IPC 注册                                 │
│  electron/service.js   拉起 dsh web 服务(ELECTRON_RUN_AS_NODE,无需 Node)│
│                        DSH_HOME → %APPDATA%\dsh-desktop\dsh-home           │
│  electron/plugins.js   插件市场后端:GitHub 搜索 / 安装(git clone/API 下载 │
│                        → bundle/roster 注册 → npm 依赖) / 卸载            │
│  electron/preload.js   contextBridge:window.dshDesktop API                │
└───────────────┬───────────────────────────────────────┬────────────────────┘
│ spawn(dsh CLI, cwd=工作区)            │ loadURL / loadFile
▼                                       ▼
┌──────────────────────────────┐        ┌──────────────────────────────┐
│ dsh web 服务(端口 3080)     │        │ 渲染进程                      │
│  = @deepseek-ai/dsh-web-app  │        │  · 主窗口:dsh Web GUI        │
│  (Agent 内核 / 工具 / 会话)  │        │  · 市场窗口:market/dist     │
└──────────────────────────────┘        │    (React + Vite 构建)       │
└──────────────────────────────┘

📌 架构图与目录树中的 electron/plugins.js、market/ 为 🚧 规划中组件,当前仓库未包含。

目录结构

dsh-desktop/
├── package.json                  # 主包:electron + @deepseek-ai/dsh + electron-builder
├── electron/
│   ├── main.js                   # 主进程入口(窗口 / 菜单 / IPC)
│   ├── service.js                # dsh web 服务生命周期(启动/就绪探测/重启/停止/崩溃自愈)
│   ├── plugins.js                # 🚧 规划中(当前未包含)
│   ├── preload.js                # contextBridge 白名单桥
│   └── constants.js              # 端口 / DSH_HOME / GitHub API 常量
├── market/                       # 🚧 规划中:插件市场页面(React + Vite),当前未包含
│   ├── package.json / vite.config.js / index.html
│   └── src/  App.jsx · main.jsx · market.css
├── assets/
│   ├── icon.png / icon.ico       # 应用图标(用户提供,2000×2000 → 512)
│   ├── source-icon.jpeg          # 图标源图
│   └── logo.svg                  # 备用 logo(深蓝鲸鱼)
├── scripts/
│   └── ensure-profile.js         # postinstall:初始化 AppData 下 DSH_HOME 骨架
├── 启动桌面端.cmd                # Windows 双击入口(开发/运行)
└── README.md

配置位置(约束 2)

所有用户配置位于系统 AppData 目录(Electron userData):

- Windows:%APPDATA%\dsh-desktop\
- macOS:~/Library/Application Support/dsh-desktop/

其中 dsh-home\ 是独立的 DSH_HOME(settings.yaml、sessions、profiles 都在内),与 npx 版完全隔离。

启动 / 打包

1. 安装依赖
bash
根工程(electron、electron-builder、@deepseek-ai/dsh 内核)
npm install

插件市场页面依赖 —— 🚧 market/ 规划中,当前仓库未包含,此步暂不需要

首次 npm install 会拉取 Electron 与 dsh 全家桶,请耐心等待。postinstall 会自动创建 AppData 下的 DSH_HOME 骨架。

Electron 二进制下载慢/失败(国内网络常见):使用 npmmirror 镜像

bash
Windows(PowerShell)
$env:ELECTRON_MIRROR = "https://npmmirror.com/mirrors/electron/"
npm install
macOS (bash)
export ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"
npm install

⚠️ 不要再设 ELECTRON_CUSTOM_DIR="{{ version }}":electron-builder(app-builder)不会替换该占位符,会拼出 .../electron/{{ version }}/electron-vX-win32-x64.zip 直接 404。只设 ELECTRON_MIRROR 即可,版本目录由 app-builder 自动补上(实测 121 MB 约 4 秒)。那行 {{ version }} 写法是 @electron/get 的语法,对 electron-builder 无效。

2. 启动开发模式
bash
方式 A:启动 Electron(开发模式)
npm run dev

方式 B:直接启动
npm start

启动后主窗口自动加载 http://127.0.0.1:3080(首次启动 dsh 会自动初始化 web profile)。菜单栏可随时「选择工作区」「重启服务」。(「打开插件市场」为 🚧 规划中功能,当前不可用。)

3. 打包桌面客户端
bash
npm run dist:win                 # Windows:release\.exe(NSIS 安装包)
npm run dist:mac                 # macOS:release\.dmg(x64 + arm64)
npm run dist                     # 当前平台
npm run pack                     # 仅解包目录(调试用,不打安装包)

- Windows 图标:assets/icon.ico;macOS:assets/icon.png(自动转 icns)。
- 打包体积较大(dsh 内核 + Electron),属预期。
- 产物在 release\ 目录;安装后桌面创建快捷方式(NSIS 配置)。
- ⚠️ Windows 打包常见坑:electron-builder 会从 GitHub 下载 winCodeSign 工具包(用于给 exe 写图标与版本信息),国内容易连续踩两个坑,需要分别处理:
1. 下载超时 —— 加二进制镜像解决:

bash
Windows(PowerShell)
$env:ELECTRON_BUILDER_BINARIES_MIRROR = "https://npmmirror.com/mirrors/electron-builder-binaries/"
npm run pack

2. 下载成功但解压失败(ERROR: Cannot create symbolic link ... libcrypto.dylib)—— 该压缩包内含 macOS 符号链接,Windows 下创建符号链接需要权限,加镜像解决不了这一步。解法:开启 Windows「开发者模式」(设置 → 系统 → 开发者选项),或以管理员身份运行一次终端。(若之前解压失败过,先清掉 %LOCALAPPDATA%\electron-builder\Cache\winCodeSign 再重试。)

- 本机实测结论(供参考):Electron 走镜像约 4 秒下完、配置加载与打包流程正常,产物落在 release\win-unpacked\;但当前机器未开启开发者模式,winCodeSign 解压会卡在符号链接这一步。临时加 win.signAndEditExecutable: false 可绕过(代价是 exe 丢失自定义图标与版本信息,不适合出正式安装包,仅用于验证打包链路本身是否通)。

插件市场(🚧 规划中,当前仓库未包含)

以下为设计说明,market/ 与 electron/plugins.js 尚未实现,当前不可用。

- 打开方式:菜单「插件 → 打开插件市场」(快捷键 Ctrl+Shift+M)。
- 数据源:GitHub topic:dsh-plugin(与社区插件市场同源,可搜索关键词)。
- 安装流程(与官方 dsh plugin add 行为一致,不依赖 pnpm):
1. git clone(自动兼容失效镜像重写;失败回退 GitHub API 递归下载);
2. 复制到 dsh-home\profiles\web\node_modules\;
3. 按包形态注册:bundle 型 → 加入 dsh.profile.bundles;普通型 → 插入 cordis.patch.yml roster;
4. 有 npm 依赖自动执行 npm install --legacy-peer-deps;
5. 点击「立即重启服务」生效。
- 卸载:移除注册项 + 删除目录 + 重启。

备注

- 沙箱权限隔离(约束 3):Agent 的 bash/文件工具受 dsh 的 sandbox + permission-presets 管控,与官方一致;桌面端不放松任何权限。
- 会话导出:对话中输入 /export 使用官方导出对话框。
- 故障排查:服务日志见 dsh-home\profiles\web(或主进程 stderr);服务崩溃会自动重启(3s 间隔)。
- 内核为 dsh 官方 @deepseek-ai/dsh(^0.1.5-rc.1),升级内核 = 升级依赖版本后重启。

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

同作者(liuliyisui)的其他插件

💬 加入 DPharness 群聊

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

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