dshm_client
deepseek harnes HarmonyOS PC client
- Stars
- 0
- Language
- Shell
- Created
- Aug 20, 2026
- Updated
- Aug 20, 2026
Introduction
DSH Client — DeepSeek Harness 鸿蒙 PC 客户端
鸿蒙 PC(HarmonyOS 6.1 / API 23)上的 DeepSeek Harness 桌面客户端:ArkUI 原生壳 + ArkWeb 全屏加载官方 Web UI,支持 dsh 的全部功能(会话、工作区、模型与插件设置、技能/斜杠命令、计划模式、权限审批、附件上传、会话导出下载等)。
架构
┌───────────────────────────────┐
│ DSH Client (HarmonyOS App) │
│ ArkUI 壳 │
│ ├─ 服务发现 (net.http 探活) │ GET / 指纹校验 __DSH_BOOT__
│ ├─ 启动通道 ① zcode-bridge │ POST 127.0.0.1:39571/exec
│ ├─ 启动通道 ② dsh-launcher │ POST 127.0.0.1:18923/start
│ ├─ ArkWeb 全屏 Web 组件 │ 校验 HTML 含 "__DSH_BOOT__" 指纹
│ ├─ 状态引导页 / 设置页 │
│ └─ 文件选择 / 下载桥接 │
└──────────────┬────────────────┘
│ loopback 同源(HTTP + WebSocket)
┌──────────────▼────────────────┐
│ dsh web(brew 安装,本机运行) │ 全部功能在后端 + 官方 SPA 内实现
│ http://127.0.0.1:3080 │
└───────────────────────────────┘
客户端不重实现任何 harness 逻辑:Web UI 与后端同源通信(/api RPC + 事件 WebSocket),ArkWeb 行为与浏览器一致,因此 dsh 升级后客户端无需改动。设计参考 macOS 案例 chentao326/dsh-gui(系统 WebView 壳 + 指纹校验的服务发现)。
与 Mac 版的差异:鸿蒙应用沙箱不能 spawn 子进程,客户端无法自启后端,改为引导页提示用户在终端启动。
前置条件
-
鸿蒙 PC 已安装 harmonybrew 的 DeepSeek Harness:
brew install deepseek-harness -
启动后端(默认
http://127.0.0.1:3080):dsh web冷启动链路:鸿蒙应用沙箱不允许拉起进程/终端,因此由运行在用户会话里的本机服务代劳,客户端只发 loopback HTTP 请求。启动通道与固定端口轮询并发尝试、先到先得:
- zcode-bridge(
127.0.0.1:39571/41783/45829,依次探测):POST /exec执行~/.dsh/launcher/start-dsh.sh—— 已在运行(带__DSH_BOOT__指纹校验)则返回现有地址;否则dsh web --port 3080后台启动,从就绪行dsh web: http://127.0.0.1:3080解析出实际地址端口返回。 - dsh-launcher(
127.0.0.1:18923,登录自启~/.config/autostart/dsh-launcher.desktop,带监督循环自动拉起):POST /start,同样的"启动 → 解析就绪行 → 返回地址"语义,客户端重试约 10 秒。 - 两条通道等待期间,客户端同时轮询固定端口(8080 自启常驻 / 3080 dsh 默认,20 × 3 s = 60 s)。冷启动固定 3080 意味着即使
DSH_URL响应丢失,轮询也能自愈发现后端。
全部失败才进引导页。所有地址接入前都做
__DSH_BOOT__指纹校验——全程无需打开终端,端口无需固定(8080/3080 冲突时可改配置)。 - zcode-bridge(
构建与安装
本工程为纯源码交付,需用 DevEco Studio 构建:
-
DevEco Studio → File → Open → 选择本目录,等待同步完成。
-
确认 SDK:
build-profile.json5中compatibleSdkVersion为6.1.0(23),与本机安装的 SDK 对齐。 -
出包:Build → Build Hap(s)/APP(s) → Build Hap(s);或命令行:
/data/app/node.org/node_22.7.0/bin/node /data/app/hvigor.org/hvigor_1.0.0/bin/hvigorw.js assembleHap --mode module -p product=default --no-daemon -
签名:工程默认产出未签名 hap(
entry/build/default/outputs/default/entry-default-unsigned.hap),用本地签名工具签名后安装;也可在 DevEco → Project Structure → Signing Configs 勾选自动生成签名后直接 Run。 -
安装:
hdc shell bm install -p <签名后的 hap 路径> -
桌面/应用列表出现鲸鱼图标 "DSH Client",点击即用。
使用说明
- 首次启动:自动探测本机 8080(自启)/ 3080(dsh 默认)端口;探测失败进入引导页,给出启动命令(一键复制)与「重新连接」。
- 设置:主页右上角「设置」可修改后端地址(持久化保存),保存后自动重新连接。
- 附件上传:Web UI 的文件选择已桥接到系统文件选择器。
- 下载(如会话导出 ZIP):保存到应用沙箱
files/download/,完成时有提示。 - 断线:后端停止导致主页面加载失败时自动切到引导页,修复后点「重新连接」。
目录结构
AppScope/ 应用级配置与图标
entry/
src/main/ets/
entryability/EntryAbility.ets 入口
pages/Index.ets 主页:发现状态机 + ArkWeb 壳
pages/Settings.ets 设置页(后端地址)
common/ServerDiscovery.ets 探活 + __DSH_BOOT__ 指纹校验
common/ServerSettings.ets 地址持久化(preferences)
reference/ deepseek-harness 上游源码(仅参考,不参与构建)
reference/launcher/ start-dsh.sh 备份副本(实际运行于 ~/.dsh/launcher/)
FAQ
白屏/一直转圈? 确认后端正在运行;浏览器访问 http://127.0.0.1:8080 或 http://127.0.0.1:3080 应能打开官方界面。端口被非 dsh 程序占用时指纹校验会失败,客户端会落到引导页。
为什么不用 Electron / 内置后端? dsh 后端需要 Node.js ≥22 与原生模块,鸿蒙应用沙箱无法内嵌运行;brew 已将后端装好,客户端只做壳,体积与维护成本最小。