非官方 DeepSeek Harness (dsh) 原生 macOS 客户端 | Unofficial native macOS (SwiftUI) client for DeepSeek Harness — 多版本安装 · 升级自检 · 一键回退 · 手机远控 | multi-version install, post-upgrade self-check, one-click rollback, phone remote
在 DeepSeek Harness 终端运行:
dsh plugin --profile web add danielw203/dsh-native-macosEnglish · 简体中文
macOS 原生 DSH 客户端:任意版本可装、升级自带体检、坏了自动退回;手机远控只要一个开关。
A native SwiftUI macOS shell for DeepSeek Harness — every version installable, upgrades self-checked, one-click rollback.
把 DeepSeek Harness 的 Web UI 装进一个原生 macOS
窗口:SwiftUI 外壳 + 自己管理的 harness 运行时。装 harness、换版本、备 Node、管插件都归 App,
打开就能用,不需要手动 npm install,也不用常驻一个浏览器标签页。
⚠️ 非官方项目。第三方客户端外壳,与 DeepSeek 官方无隶属或背书关系;它下载并运行的
@deepseek-ai/dsh是官方项目,许可与条款以官方为准。应用图标含 DeepSeek 品牌标识、
不在 MIT 范围内,见 NOTICE.md。
/list、/use、/history、/say、/stop、/answer、/workspace、/model、/effort;开启远控后审批与提问推到微信,桌面会话每轮结束把结果与回复正文一起转发| 主窗口:harness Web UI | 控制台:版本更新 + 8 项自检 |
|---|---|
![]() |
![]() |
| 微信通道:手机远控 | 恢复模式:配置回滚 |
|---|---|
![]() |
![]() |
| 插件管理:启停 / 安装 / 修复 | 插件兼容性:逐包比对声明 |
|---|---|
![]() |
![]() |
同生态里已经有两个成熟的跨平台桌面端:dataelement/dsh-desktop(Electron)
和 dsh-tauri/deepseek-harness-desktop(Tauri)——它们覆盖
Windows / Linux 与"下载即用"。本项目只做 macOS,差异按可信度排序:
boot、rpc-endpoints 是阻断项);阻断项没过就~/.nativeharness/harness/upgrade-report.json 与 upgrade-reports/,不是宣传词Sources/HarnessRuntime/HarnessUpgradeCoordinator.swift、Sources/HarnessUI/Upgrade/)。WKWebView。node_modules)Sources/HarnessRuntime/SafeBoot.swift、Sources/HarnessRuntime/ProfileCheckpoint.swift)。Sources/HarnessUI/Shell/HarnessPageWindow.swift)。Sources/HarnessIM/WeChatChannelService.swift)。前四条是能在代码里指到具体文件与分支的差异;第五条是打包方式的差异,不算技术领先。
| 机制 | 做法 |
|---|---|
| 发现更新 | 双通道:npm registry(含预发布)+ GitHub 预构建;一条不通不影响另一条 |
| 安装任意版本 | 五种来源都能进:registry 指定版本、GitHub Release、预构建包、源码归档、源码检出(自动 pnpm 构建) |
| 装完先验 | 入口文件存在 + 真跑一次 --version 冒烟,通过才提交(提交是对同卷目录做原子 rename) |
| 多版本并存 | 每个 release 独立存放,随时激活任意一个;installs.json 记住各自的来源与版本 |
| 工具面差异 | 自检里的 tool-vocabulary 检查新版本播报的工具名本 App 是否都认识 |
| 插件兼容 | 按插件声明的 semver 比对 harness 包版本,结论在「插件兼容性…」(⌥⌘P)与插件列表里可见 |
走「下载并更新」(或对已装版本点「更新并重启」)时,流程是 激活 → 重启 → 自检,
8 项结果写进 ~/.nativeharness/harness/upgrade-report.json,并按时间戳另存一份历史到~/.nativeharness/harness/upgrade-reports/。
| 检查项 | 看什么 | 失败是否阻断 |
|---|---|---|
boot |
新版本真的起来了,并播报出地址 | 是 |
rpc-endpoints |
该有的 RPC 端点都在 | 是 |
session-list |
会话列表可读 | 否 |
session-log |
会话日志可读(session.v3.jsonl.zstd) |
否 |
events-stream |
$events 能连上并收到 ready 帧 |
否 |
turn-follow |
能跟到某一轮的 snapshot 帧 | 否 |
tool-vocabulary |
新版本播报的工具名本 App 全都认识 | 否 |
plugins |
已装插件没有声明冲突 | 否 |
阻断项失败 = 直接把旧版本放回去,并把原因(启动失败 / 哪几项没过)写进报告,界面上能直接看到。
| 要求 | |
|---|---|
| 系统 | macOS 15 (Sequoia) 或更高 |
| 架构 | Apple Silicon (arm64) —— 见已知限制 |
| 构建工具 | Xcode 16+(含命令行工具)、Swift 6、Node.js(生成 Xcode 工程用) |
| 网络 | 首次启动需要能访问 registry.npmjs.org 与 nodejs.org |
sw_vers && uname -m && xcodebuild -version && node --version
目前尚未提供预构建安装包:需要本机构建,Apple Silicon + Xcode 16 起步。
没有 Apple 开发者账号也能装:本机用 ad-hoc 签名构建,不需要证书或公证,Gatekeeper 不会拦。
cd /path/to/dsh-native-macos
Tools/build.sh release # ① 构建 Release 版(产物在 /tmp/harness-native-build/DSHNative.app)
Tools/build.sh install --no-build # ② 装进 ~/Applications(启动台会索引这里)
Tools/build.sh verify # ③ 逐项验证:包完整性、可执行文件、签名、图标、LaunchServices 注册
也可以一步到位:Tools/build.sh install(可选 --wait 等索引、--system 装全局、--dock 钉到程序坞、--quit 先退出正在运行的 App)。改了代码重跑一次即可,启动台里还是同一个图标。
为什么不能在 Xcode 里 ▶ Run:Xcode 只把产物写进 DerivedData,而启动台只索引 /Applications
与 ~/Applications;而且 Debug 产物开了 ENABLE_DEBUG_DYLIB,拷出来双击也跑不起来。所以必须
Release 构建 + 装进上面两个目录,这正是 install 做的事。
可选:装一个不写死版本的 dsh shim(设置 → 插件的安装/卸载需要 PATH 上有 dsh):
Tools/build.sh shim && dsh --version
App 在用户目录下维护一棵自己拥有的运行时树(默认 ~/.nativeharness,可用 NATIVE_HARNESS_ROOT 覆盖):
| 路径 | 内容 |
|---|---|
harness/ |
各 release、installs.json、current、日志、检查点、升级报告 |
home/ |
交给 harness 的 DSH_HOME:profiles、sessions、settings、credentials |
runtime/ |
npm 缓存等 |
safe-mode/ |
只在安全启动时存在:模式标记与一次性 home |
插件加载器没有逐插件隔离,一个坏插件能把整次启动带下去,而关它的界面(Web UI)正好打不开。
菜单栏 Harness 提供了三个启动模式:
| 模式 | 用的 home | 用的 profile | 隔离掉的东西 |
|---|---|---|---|
| 正常启动 | 真实 | web |
—— |
| 安全模式 · 无插件 | 真实 | rescue(官方 web 模板) |
第三方插件 |
| 干净环境 | 一次性 | web |
插件 + patch + settings + 凭据 + 会话 |
两者都复用已装好的 release 与 Node,不下载、不复制,因此结论可判定:安全模式能起来 → 插件问题;
只有干净环境能起来 → home 层问题;都起不来 → App 侧问题(恢复窗口会给结论)。
恢复模式窗口(⌥⌘R) 操作真实 DSH_HOME,四个分区:启动模式、配置检查与修复、配置回滚
(每次确认监听后存一份声明式配置快照,还原前先预览再停 harness)、数据与诊断。
安全模式下微信通道不启动,插件相关菜单项禁用。
Tools/build.sh # 构建所有 target
Tools/build.sh test # 跑测试
Tools/build.sh build --target HarnessKit # 只构建某个 target
Tools/build.sh xcode DSHNative # xcodebuild 一个 scheme(Debug)
Tools/build.sh clean # 清理构建缓存与产物
必须经由脚本的原因有两个:swift-driver 在 TMPDIR 含非 ASCII 字符时会崩溃(脚本把 TMPDIR
固定到 ASCII 路径),以及受限环境下嵌套 sandbox_apply 不被允许(脚本带 --disable-sandbox)。NativeHarness.xcodeproj 由 Tools/gen-xcodeproj.mjs 生成,新增源文件后重跑命令即可,不要手改 .pbxproj。
Apps/DSHNative/ @main App、窗口与菜单(SwiftUI)
Sources/
HarnessKit/ 领域模型与引擎契约(无 UI 依赖)
HarnessCore/ Route B:harness 核心的 Swift 重实现
HarnessRuntime/ 运行时供给:安装/更新 harness、Node、插件、release 校验、升级协调
HarnessUI/ 共享 SwiftUI 界面(含升级自检)
HarnessConsoleUI/ 控制台 / 插件 / 市场窗口
HarnessIM/ 微信 IM 通道(协议、批处理、与运行中 harness 通信)
harnessctl/ 命令行工具
CZstd/ 唯一链接 vendored libzstd 的地方
Vendor/zstd/ 随仓库附带的 libzstd 静态库
Tools/ 构建、安装、验证脚本 + 工程生成器
Tests/ 单元测试与 fixture
Spec/ 向上游对齐的请求头、工具 schema、会话事件 schema
Vendor/zstd/lib/libzstd.a 只有 arm64 切片,Intel Mac 的 x86_64 链接会失败.app)。xattr -dr com.apple.quarantine 或自行签名/公证)。| 现象 | 原因与处理 |
|---|---|
Failed to parse target info (malformed(json: "", ...)) |
直接跑了 swift build 且路径含中文,改用 Tools/build.sh |
swift build 报 sandbox / Operation not permitted |
脚本已带 --disable-sandbox,不要绕过脚本 |
设置 → 插件 报 spawn dsh ENOENT |
跑 Tools/build.sh shim |
| 启动台看不到 App / 双击没反应 | 确认装在 ~/Applications 或 /Applications,跑 Tools/build.sh verify;半成品包请重跑 install |
| 想整体搬走运行时目录 | 用 Tools/relocate-root.sh(先退出 App、同卷原子 mv,旧路径留软链) |
| 更新后想退回旧版本 | 控制台「版本更新」卡片或对已装版本点「更新并重启」,见上文 |
Tools/build.sh install --quit 会接管已在运行的 harness,因此有浏览器窗口正由同一个 harness 提供服务时,
退出它会连带关掉那个窗口。
osascript -e 'tell application id "ai.deepseek.nativeharness.DSHNative" to quit'
rm -rf ~/Applications/DSHNative.app
rm -rf ~/.nativeharness # 会话、配置、插件、各版本 release 全在这里,删前想清楚
rm -f /opt/homebrew/bin/dsh # 如果装过 shim
本仓库代码以 MIT 发布。上游 @deepseek-ai/dsh 与 harness 本体不包含在本仓库中,
其许可与条款见官方项目。
登录后即可为该插件评分和评价。
还没有人评价这个插件,来抢个沙发吧!