Back to home@sol5766

dshm_client

deepseek harnes HarmonyOS PC client

Stars
0
Language
Shell
Created
Aug 20, 2026
Updated
Aug 20, 2026
GitHub repo

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 子进程,客户端无法自启后端,改为引导页提示用户在终端启动。

前置条件

  1. 鸿蒙 PC 已安装 harmonybrew 的 DeepSeek Harness:

    brew install deepseek-harness
    
  2. 启动后端(默认 http://127.0.0.1:3080):

    dsh web
    

    冷启动链路:鸿蒙应用沙箱不允许拉起进程/终端,因此由运行在用户会话里的本机服务代劳,客户端只发 loopback HTTP 请求。启动通道与固定端口轮询并发尝试、先到先得

    1. zcode-bridge127.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 解析出实际地址端口返回。
    2. dsh-launcher127.0.0.1:18923,登录自启 ~/.config/autostart/dsh-launcher.desktop,带监督循环自动拉起):POST /start,同样的"启动 → 解析就绪行 → 返回地址"语义,客户端重试约 10 秒。
    3. 两条通道等待期间,客户端同时轮询固定端口(8080 自启常驻 / 3080 dsh 默认,20 × 3 s = 60 s)。冷启动固定 3080 意味着即使 DSH_URL 响应丢失,轮询也能自愈发现后端。

    全部失败才进引导页。所有地址接入前都做 __DSH_BOOT__ 指纹校验——全程无需打开终端,端口无需固定(8080/3080 冲突时可改配置)。

构建与安装

本工程为纯源码交付,需用 DevEco Studio 构建:

  1. DevEco Studio → File → Open → 选择本目录,等待同步完成。

  2. 确认 SDK:build-profile.json5compatibleSdkVersion6.1.0(23),与本机安装的 SDK 对齐。

  3. 出包: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
    
  4. 签名:工程默认产出未签名 hapentry/build/default/outputs/default/entry-default-unsigned.hap),用本地签名工具签名后安装;也可在 DevEco → Project Structure → Signing Configs 勾选自动生成签名后直接 Run。

  5. 安装:

    hdc shell bm install -p <签名后的 hap 路径>
    
  6. 桌面/应用列表出现鲸鱼图标 "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:8080http://127.0.0.1:3080 应能打开官方界面。端口被非 dsh 程序占用时指纹校验会失败,客户端会落到引导页。

为什么不用 Electron / 内置后端? dsh 后端需要 Node.js ≥22 与原生模块,鸿蒙应用沙箱无法内嵌运行;brew 已将后端装好,客户端只做壳,体积与维护成本最小。