DeepSeek Harness Hub
← 返回列表

ChanceFlow/deepseek-harness-app

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
需源码安装

基于 Flutter 开发的 DeepSeek Harness

暂不能直接安装(需源码编译或环境不满足):仓库缺少 package.json,无法用 dsh 插件安装命令安装。 · 最近上游提交 2026/9/17 · 已提供中文文档

DeepSeek Harness (dsh) 的 Flutter 客户端:在 Android 上提供聊天、工作区、模型、目标和子代理功能——与未经修改的 dsh Web 后端通信。

综合分
30.7
GitHub 分
30.7
用户评分
★ Stars
1
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add ChanceFlow/deepseek-harness-app
仓库缺少 package.json,无法用 dsh 插件安装命令安装,改用 GitHub 源安装
数据截至 2026/9/18(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查需源码安装

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

npm 包deepseek-harness-app(未发布到 npm,仅可源码安装)
Node 引擎未声明 engines.node
dsh CLI 依赖未声明 dsh 版本约束
入口文件缺少入口声明

仓库缺少 package.json,无法用 dsh 插件安装命令安装

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/19 14:35:29

用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

deepseek-harness-app

CI
Release
Flutter
Platform
License: MIT

基于 Flutter 开发的 DeepSeek Harness
(dsh)原生 Android 客户端。它连接运行在你电脑上的未经修改的 dsh web
主机,让你把 agent 会话装进口袋:实时观看任务运行、审批工具调用、回答问题、
管理工作区、模型、目标和子代理——支持英文和简体中文。

快速开始

1. 安装 APK

从 发布页 获取最新 APK:

- v — 稳定版。
- dev — 滚动预发布版,每次合入 master 都会刷新,是尝鲜最新功能最快的途径。

adb install dsh-android--arm64-v8a.apk

每个发布按 ABI 各出一个包——native 库就是全部体积,而一台手机只会用其中一个:

| APK | 装在哪 |
|---|---|
| -arm64-v8a | 2017 年之后的所有手机(拿这个) |
| -armeabi-v7a | 更早的 32 位手机 |
| -x86_64 | 模拟器与 Chromebook |

每个 APK 都有自己的 .sha256 校验文件。每个发布还按 ABI 附带可下载的 ASR
运行时(asr-runtime---libonnxruntime.so 与
…-libsherpa-onnx-c-api.so):启用离线语音输入时,应用会抓取与自身 ABI 匹配的
那一对,并校验 packages/asr/lib/src/runtime/asr_runtime_manifest.dart 里的
尺寸与哈希。

2. 在电脑上启动主机

应用连接的是原生 dsh web 服务——无需插件、无需补丁:

npx @deepseek-ai/dsh web --port 3080

3. 连接主机

dsh web 只监听 loopback——这是上游出于安全的刻意决定,因为 agent 可以执行代码:
dsh web 会直接拒绝 --host 0.0.0.0("会把远程代码执行暴露到网络上")。dsh 没有
面向局域网的模式,所以发布 APK 内置 http://127.0.0.1:3080,你需要把这条 loopback
端口转发到运行 dsh 的电脑上:

| 场景 | 做法 |
|---|---|
| USB 连接手机或模拟器 | adb reverse tcp:3080 tcp:3080 —— 一条命令,应用即可连接。 |
| 不用 adb 的模拟器 | 用 --dart-define=DSH_BASE_URL=http://10.0.2.2:3080 自建 APK,这是模拟器访问宿主机 loopback 的专用路由。 |
| 其他任何可达端点 —— 隧道、第二台机器 | 直接在应用里把它加为另一台主机——见 多主机。 |

主机只对 loopback 连接开放设置面,因此应用内的主机设置页也需要同样的端口转发。

多主机

一个应用,多个 dsh 主机:设置页维护一份设备本地的主机注册表——随时添加、重命名、
切换。每个已配置的主机都保持在线,激活的那个驱动聊天。全新安装时注册表以构建期
URL 为种子,所以在你添加第二台主机(笔记本、构建机、隧道连接的远程 dsh)之前,
一切如常。

功能一览

- 聊天与 Agent 执行时间轴 — 对齐 Cursor Composer 与 Windsurf Cascade
风格的活动时间轴:带耗时的大模型思考块折叠(“已思考 10秒”)、语义化工具调用聚合
(“浏览了 3 个文件,2 次搜索”)、实时执行脉冲点与扫光动效、树形步骤展开及入参与
结果下钻、会话列表(搜索、在工作区内创建、重命名、归档、分叉、运行中指示)、
扁平时间线与账本式大纲(可折叠回合分组、压缩标记)、Markdown 渲染(围栏代码、
标题、列表、表格、可点击链接)、队列行、审批、提问、计划审阅卡片、后台任务、
图片附件、技能候选、会话日志导出(从输入框的 /export 或会话标题栏
把当前会话的 ZIP 归档保存到下载目录)。
- 文件查看 — agent 写出的文件可原地打开:点文件工具行上的预览动作,或点
回合结束时产出文件行里的文件芯片。文本走与对话区相同的 Markdown/代码渲染,
并对二进制文件、空文件、被截断的窗口与读取失败分别给出诚实的状态。
- Trajectory 账本 — 当前会话的第二个视图:按回合组织的带步骤标记的事件账本、
可选中记录、显示宿主真实上报过的 token 用量与首 token 时机的检查器、
更早历史分页,以及针对已加载窗口的本地搜索。会话日志里没有记录的数值
显示为“不可用”,而不是猜测值。
- 动态插件审批 — 模型加载 Cordis 插件时可能在等人批准而阻塞。该请求会出现在
输入框区域,带插件名称、用途与标识;本客户端可以拒绝(这会释放被阻塞的调用),
但无法批准——批准需要一个手机上并不存在的浏览器插件运行时。
- 端侧语音输入与 ASR — 100% 离线端侧语音识别(流式 Zipformer,
离线 SenseVoice 与 Fun-ASR-Nano),集成实时声浪波形底栏、计时器与流式文字上屏;
另有可选的在线模式,可使用用户自备密钥将同一路麦克风音频流式送至火山引擎豆包
或腾讯混元实时语音识别。模型与 sherpa-onnx 引擎都在你启用时按需下载,都不打进
APK(光引擎每个安装就占 26 MB),因此没开这个功能前安装包一直很小。
- 多主机 — 在本机配置多个 dsh 主机,随时切换由哪个驱动聊天。按主机还可选择
接受该主机的 TLS 证书,用于自签名或内网 CA 签发的场景。
- 工作区 — 从路径或应用内主机目录浏览器创建、重命名、删除、手动排序。
- 模型 — 提供商分组、当前选择、推理档位、提供商故障,以及提供商管理:
增删已配置的提供商、通过宿主凭据面保存或清除其 API 密钥、发现端点提供的模型。
- 斜杠命令 — 命令目录从宿主读取,因此宿主或插件注册的命令也能被发现并执行,
且发送前会按宿主自己的参数与附件规则校验。
- 子代理 — 父级选择器、子级条目、打开子级时间线、发送提示、中断。
- 目标 — 按阶段创建/暂停/恢复/完成,带 CAS 修订的目标编辑。
- 设置 — 应用设置(界面语言、外观、发送行为)与主机设置:按命名空间编辑并带
修订 CAS,凭据的 describe/set/unset,宿主已加载插件的只读清单(含其 fiber 状态),
以及一个 About 区段,带本次构建的版本与项目的文档、问题反馈入口。
- 失败面 — 主机断开时给出具名横幅与手动重连,加载失败给出重试而不是裸异常,
聊天错误条可关闭;以上全部已本地化。

协议兼容性

上游 dsh 仓库以 git submodule 形式钉在 reference/deepseek-harness
下的一个官方提交——当前是 dsh-v0.1.5-rc.2
(钉版本与契约文件映射)。dsh 正在快速迭代且有破坏性变更:
本客户端只追踪这一个钉死的契约,请勿假设与其他 dsh 版本协议兼容。目前覆盖钉死源码树
注册的 84 个 Remote 方法中的 52 个——精确计数、未接线余量与两个经复核的
「仅声明」名称见 docs/spec.md §4.6,两者的一致性由
verify_wire_pin 门禁守护;该门禁还会让一个「仅声明」却被线上层实际调用的名称失败。

模块边界

pub 工作区位于 flutter/ 下:

flutter/app                        Flutter UI(界面、Markdown 渲染器)。
flutter/packages/domain            面向 UI 的中性模型:ChatMessage、Session、TimelineItem。
flutter/packages/harness_adapter   唯一理解 dsh 线上协议的包。
flutter/packages/network           传输原语:RPC 信封、HTTP/WebSocket 接缝。
flutter/packages/dev               调试构建工具:遥测、帧跟踪、崩溃采集。

app 和 domain 永不导入 dsh 类型;所有线上协议知识都隔离在 harness_adapter
边界之后,由 scripts/check_dart_imports.py 强制。

开发

git clone --recurse-submodules https://github.com/ChanceFlow/deepseek-harness-app.git
adb reverse tcp:3080 tcp:3080    # 设备 loopback 3080 -> 宿主机的 dsh
cd flutter/app
flutter run

构建期默认主机是 http://127.0.0.1:3080;可用 --dart-define=DSH_BASE_URL=...
覆盖(仅模拟器可用的 10.0.2.2 路由见 §连接主机)。

完整命令清单与聚合验证门禁见 AGENTS.md §Commands;
PATH 上需要 Flutter 3.47.1 stable。真实主机端到端测试是可选开启的——见下方
§可选真实主机端到端。

可选真实主机端到端

cd flutter
DSH_E2E_URL=http://127.0.0.1:3080 flutter test packages/harness_adapter/test/local_dsh_e2e_test.dart

APK 发布

发布 APK 由内部 forge 流水线
(.gitea/workflows/release-apk.yaml)构建,
并镜像到 发布页:每次 master 推送都会刷新滚动 dev
预发布版,v 标签切出稳定版,两者都附带按 ABI 拆分的签名 APK
(发布密钥库,非调试密钥),每个 APK 各有自己的 .sha256 校验文件。命名
遵循 SemVer 2.0;内部发布正文带自动生成的 ## What's Changed 变更日志,
镜像到 GitHub 的发布则携带产物与版本元数据。GitHub 侧的同名工作流
(.github/workflows/release-apk.yaml)
在没有签名 secrets 时会跳过构建——本仓库是镜像,不是第二个构建渠道。

验证状态

python3 scripts/verify_all.py 是聚合门禁:严格 casts/inference/raw-types 下的
flutter analyze、完整测试套件(未设 DSH_E2E_URL 时真实主机端到端自动跳过)、
导入门禁、启动图标漂移门禁,以及文档门禁。CI 以两个并行任务运行它——docs
(仅 Python)和 code(Flutter)——每次推送和 PR 都会执行,两者都是合并必需。

历史

由最初的 Kotlin/Compose 原型用 Flutter 重写——见
ADR-0001。Kotlin 时代的提交保留在历史中;
当前发布的是 flutter/ 下的 Flutter 工作区。

许可证

MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群