deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:LucasleeCN/deepseek-harness-desktop
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
一个完整开源的 DeepSeek Harness 非官方桌面客户端,覆盖三端:
| 端 | 形态 | 状态 |
|---|---|---|
| Windows | Electron 安装器 + 便携版 | ✅ 已交付 |
| macOS | Electron .dmg(x64 / arm64,ad-hoc 签名) |
✅ 代码与 CI 就绪,dmg 在 macOS/CI 上产出 |
| HarmonyOS | DevEco ArkTS 瘦客户端(ArkWeb 加载局域网宿主) | ✅ 工程就绪,真机/模拟器构建验证 |
桌面端启动官方 @deepseek-ai/dsh 本地 Web 服务,再用隔离的 Electron
WebContentsView 加载官方界面;桌面壳只负责进程生命周期、窗口、安全导航和自绘标题栏。
HarmonyOS 端不捆绑运行时,通过局域网连接运行在你自己电脑上的 dsh web 宿主。
[!IMPORTANT] 本项目不是 DeepSeek 官方产品,也不提供模型额度或绕过 API 鉴权。 DeepSeek Harness 仍处于 Developer Preview,请勿在高权限模式下打开不可信项目。

| 组件 | 版本 |
|---|---|
DeepSeek Harness (@deepseek-ai/dsh) |
0.1.0-rc.6 |
| Electron | 43.4.0 |
| 内置 Node.js | 24.19.0 |
| electron-builder | 26.15.3 |
版本被明确锁定在两个 package-lock.json 中。npm run setup 从 Node.js 官方站点下载运行时,
并在解压前同时比对仓库内固定值和官方 SHASUMS256.txt(Windows x64 与 macOS
arm64/x64 三种归档都已固定 SHA-256)。
要求:Node.js 24、npm、git。
另需 PowerShell 5 或更高版本。
git clone <本仓库地址>
cd deepseek-harness-desktop
npm ci
npm run setup
npm start
npm run setup 会:
harness/package-lock.json 安装官方 Harness 及其完整运行依赖;另需 Node.js 24 与 Xcode Command Line Tools(xcode-select --install;
node-pty 等原生模块编译与 electron-builder 打包都需要)。
git clone <本仓库地址>
cd deepseek-harness-desktop
npm ci
npm run setup
npm start
首次在 macOS 上跑 QA 截图钩子时,系统会请求“屏幕录制”权限;不授权则截图 QA 按
计划记录为跳过(desktop.log 中 macOS screen capture unavailable),不影响窗口控制 QA。
如 GitHub 下载 Electron 超时,可用镜像后重跑:
export ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/。
npm ci
npm run build:windows
生成结果位于 dist/:
win-unpacked/ 快速启动目录;SHA256SUMS.txt。安装包没有商业代码签名,因此 Windows 可能显示“未知发布者”。
安装路径策略(自 2026-08-15 起):安装器允许选择安装目录;默认安装到第一个非系统盘
(D:、E:、F:、G: 中第一个存在的盘),交互安装可选择任意路径。该策略由 build/installer.nsh
强制执行,并由 npm run check(verify-source.mjs)把关。
在 Mac 上(本机架构自动识别,可用 ARCH=x64 或 ARCH=arm64 覆盖;
ARCH 会同步传给内置 Node 运行时的下载流程,避免架构错配):
npm ci
npm run build:mac # = scripts/build.sh
生成 dist/DeepSeek-Harness-Desktop-<版本>-<架构>.dmg 与 dist/SHA256SUMS-mac.txt。
脚本对 .app 做 ad-hoc 签名,并用签名后的 app 重建 dmg。首次打开:
DeepSeek Harness Desktop 拖入 /Applications;一键验证(包含 QA 冒烟 + 打包 + 签名 + 挂载验证):
bash scripts/verify-macos.sh
CI:.github/workflows/macos-release.yml 在 macos-15(arm64)与 macos-15-intel
(x64)两个 runner 上分别产出各自架构的 dmg;推 tag v* 时随 Windows 产物一起创建
GitHub Release。CI 中截图 QA 因无屏幕录制权限按计划跳过,只跑窗口控制 QA。
桌面端按“手机是遥控器,不是运行端”的思路运行:
host: 0.0.0.0,默认端口
8787)、重启 Harness,并显示局域网地址和二维码。127.0.0.1。[!WARNING]
dsh web无 TLS、无认证。远程开关等于把 Harness 暴露给所在网络, 只应在可信局域网使用,用完请关闭。
桌面 App(Windows/macOS) HarmonyOS 设备(真机/模拟器)
┌─────────────────────────────┐ ┌──────────────────────────┐
│ 托盘常驻 Host │ 局域网 │ DevEco 工程 harmonyos/ │
│ 远程开关绑定 0.0.0.0:8787 │ ──────────▶ │ ArkWeb 加载二维码地址 │
│ 官方 UI + 工具运行时 │ └──────────────────────────┘
└─────────────────────────────┘
鸿蒙端只是瘦客户端:会话、工具、模型调用全部发生在宿主机上。
http://<PC-IP>:8787;dsh web 宿主(命令行)CLI 故意拒绝 dsh web --host 0.0.0.0(安全设计),绑定非 loopback 只能通过
profile 用户层补丁。假设用 8080 端口:
创建 $DSH_HOME/profiles/web/cordis.patch.yml(Windows 默认
%USERPROFILE%\.dsh,macOS 默认 ~/.dsh):
- id: webserver
config:
host: 0.0.0.0
port: 8080
启动(不要传 --host):
dsh web
# 输出形如:dsh web: http://127.0.0.1:8080 (LAN: http://<PC-IP>:8080)
放行防火墙(Windows 入站规则 / macOS 防火墙)并以真实局域网 IP 为准 (URL 行的 LAN 地址可能取到 WSL/虚拟网卡 IP)。
验收:先用同一局域网手机浏览器访问 http://<PC-IP>:8080,加载官方 UI
并完成一次真实会话(新建会话 → 提问 → 看到回复)。仅页面加载不算通过。
绑定 0.0.0.0 时 /api 信任围栏会自动信任局域网 IPv4 字面量;若改用主机名访问,
必须追加 dsh web --trusted-host <host[:port]>。
[!WARNING]
dsh web无 TLS、无认证。绑定0.0.0.0等于把 Harness 暴露给所在网络, 只应在可信局域网使用,用完请恢复默认127.0.0.1。
harmonyos/ 目录(Stage 模型 + ArkTS)。build-profile.json5 的
compatibleSdkVersion 改为你本机已安装的 API(工程默认 5.0.0(12))。http://<PC-IP>:8787,命令行宿主
示例 http://<PC-IP>:8080),点击“连接”。地址会持久化,下次启动自动加载;
断线显示错误页,可一键重连。明文 HTTP 是路径 A(MVP)。按 2026-08 官方文档核验,Stage 模型没有
network.cleartextTraffic 之类的 module.json5 配置,ArkWeb 加载纯 HTTP 页面
只需 INTERNET 权限;工程已设置 .mixedMode(MixedMode.All) 应对混合内容拦截。
若真机仍报 net::ERR_CLEARTEXT_NOT_PERMITTED,按 harmonyos/README.md 走
路径 B(https + mkcert 自签证书 + 反代)。两条路径都必须以真实 /api 交互通过为准。
.
├─ main.js Electron 主进程、Harness 子进程和内容视图
├─ preload.js 最小权限窗口控制与远程设置桥
├─ shell.html 自绘标题栏和启动画面
├─ remote.html 手机远程访问开关(地址 + 二维码)
├─ build/
│ ├─ deepseek-harness.svg 官方 Harness 包中的鲸鱼图标
│ ├─ icon.png / icon.icns macOS 图标(由脚本从 SVG 生成并提交)
│ └─ installer.nsh Windows 安装路径策略
├─ harness/ 官方 CLI 的独立运行时依赖与锁文件
├─ scripts/
│ ├─ prepare-runtime.mjs 跨平台运行时准备(npm run setup)
│ ├─ prepare-runtime.ps1 旧 Windows 入口(保留兼容)
│ ├─ generate-icons.mjs 从 SVG 生成 PNG/ICNS(复用 harness 依赖,无需新增包)
│ ├─ build-windows.ps1 / build.sh Windows / macOS 一键构建
│ ├─ verify-macos.sh macOS 端到端验收脚本
│ └─ verify-source.mjs 源码与打包策略把关(npm run check)
├─ harmonyos/ HarmonyOS DevEco 瘦客户端工程
├─ dist/ 各平台构建产物
└─ .github/workflows/ Windows / macOS Release 与源码检查
架构细节参见 docs/ARCHITECTURE.md。
应用会继承启动进程的环境变量,因此已有 DEEPSEEK_API_KEY 时可以直接使用。
也可以在 Harness 左下角的“设置”→“Models”中配置供应商。本项目不保存、上传或内置 API Key。
桌面端用户数据和日志:
Windows: %APPDATA%\deepseek-harness-desktop\harness-home
%APPDATA%\deepseek-harness-desktop\logs\desktop.log
macOS: ~/Library/Application Support/deepseek-harness-desktop/harness-home
~/Library/Application Support/deepseek-harness-desktop/logs/desktop.log
Harness 进程的默认工作区为 <userData>/harness-home/workspace(不会以整个
用户主目录作为工作根目录);如需访问其他目录,在 Harness UI 的目录选择器中
显式选择即可。
鸿蒙端只持久化“宿主 URL”一项设置,不保存会话数据。
127.0.0.1 的随机端口;0.0.0.0:<port>,
关闭后恢复 loopback;<userData>/harness-home/workspace,
不继承用户主目录;sandbox: true、contextIsolation: true、nodeIntegration: false 的内容视图中;桌面壳(main.js / preload.js / shell.html 与构建脚本)为本仓库原创实现,采用
MIT License。DeepSeek Harness 及官方鲸鱼图标归 deepseek-ai 所有,
按其 MIT 许可证使用和署名;本壳所依赖的 @deepseek-ai/dsh、Electron、Node.js 均为第三方发行物,
各自许可证见 THIRD_PARTY_NOTICES.md。
欢迎 Issue 和 Pull Request。提交前请运行:
npm ci
npm run check
参见 CONTRIBUTING.md 和 SECURITY.md。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。