deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:sol5766/dshm_client
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
鸿蒙 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 请求。启动通道与固定端口轮询并发尝试、先到先得:
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 解析出实际地址端口返回。127.0.0.1:18923,登录自启 ~/.config/autostart/dsh-launcher.desktop,带监督循环自动拉起):POST /start,同样的"启动 → 解析就绪行 → 返回地址"语义,客户端重试约 10 秒。DSH_URL 响应丢失,轮询也能自愈发现后端。全部失败才进引导页。所有地址接入前都做 __DSH_BOOT__ 指纹校验——全程无需打开终端,端口无需固定(8080/3080 冲突时可改配置)。
本工程为纯源码交付,需用 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",点击即用。
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/)
白屏/一直转圈? 确认后端正在运行;浏览器访问 http://127.0.0.1:8080 或 http://127.0.0.1:3080 应能打开官方界面。端口被非 dsh 程序占用时指纹校验会失败,客户端会落到引导页。
为什么不用 Electron / 内置后端? dsh 后端需要 Node.js ≥22 与原生模块,鸿蒙应用沙箱无法内嵌运行;brew 已将后端装好,客户端只做壳,体积与维护成本最小。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。