Clarklevis1995/dsh-mobile

▲ 13 stars today★ 536⑂ 48

DeepSeek Harness Mobile 是一个面向 DeepSeek Harness 的原生 iOS 客户端。它通过 dsh-plugin-mobile-gateway 与 Harness 建立 WebSocket 连接,将工作区、会话、实时回复和 Agent 执行轨迹带到 iPhone,同时延续 DeepSeek WebUI 克制、清晰的视觉语言

About Clarklevis1995/dsh-mobile

Clarklevis1995/dsh-mobile is an open-source project on GitHub, mainly written in Kotlin. DeepSeek Harness Mobile 是一个面向 DeepSeek Harness 的原生 iOS 客户端。它通过 dsh-plugin-mobile-gateway 与 Harness 建立 WebSocket 连接,将工作区、会话、实时回复和 Agent 执行轨迹带到 iPhone,同时延续 It currently holds 536 stars and 48 forks with 0 open issues, and was last pushed on an unknown date (repository created unknown).

Project Overview

AI Homed tracks it on the Today's Trending board, currently at rank #60 with 13 new stars today.

GitHub Repository Details

Repository Clarklevis1995/dsh-mobile · default branch - · size 0 KB · watchers 0 · source: GitHub REST API and repository README

README

https://github.com/Clarklevis1995/dsh-mobile/blob/HEAD/Whaleness iOS 应用展示

Whaleness(DeepSeek Harness 的第三方移动端应用)

使用 Kotlin Multiplatform 共享核心逻辑,为 Android 与 iOS 提供原生移动端体验。

通过 Mobile Gateway 在手机上访问 DeepSeek Harness 的工作区、会话、实时对话、Agent 轨迹与文件。

Official website: Whaleness

https://github.com/Clarklevis1995/dsh-mobile/blob/HEAD/加入 iOS TestFlight 公测    https://github.com/Clarklevis1995/dsh-mobile/blob/HEAD/从 GitHub Releases 下载 Android APK

Kotlin Multiplatform Android 7.0+ iOS 17+ Jetpack Compose SwiftUI WebSocket

项目简介

Whaleness 是独立开发的 DeepSeek Harness 第三方原生移动客户端。项目已完成 Kotlin Multiplatform(KMP)架构改造,并同时提供可运行的 Android 与 iOS 应用:

两端均通过 dsh-plugin-mobile-gateway 与 Harness 建立 WebSocket 连接。网络、安全存储、文件、图片、生命周期和后台任务由各平台原生实现,业务规则则尽可能收敛到 shared/commonMain。

当前平台状态

| 平台/模块 | 当前状态 | 主要实现 | | --- | --- | --- | | KMP shared | 已接入 Android 与 iOS | Gateway 协议、Store/Reducer、Conversation/Trajectory 投影、History 同步、Question/Approval、Session Control、工作区文件状态与代码预览支持 | | Android | 已实现原生客户端 | Jetpack Compose、OkHttp WebSocket、DataStore(非敏感配置)、Keystore(凭据)、CameraX/ML Kit 扫码、前台服务、附件缓存、文件下载与预览 | | iOS | 已实现原生客户端 | SwiftUI/UIKit、URLSession WebSocket、UserDefaults(非敏感配置)、Keychain(凭据)、二维码配对、后台执行、附件与工作区文件 |

Android 与 iOS 使用各自的原生 UI 和平台能力,并不是共享 UI。功能和交互会持续对齐,但个别系统级行为可能因平台限制而不同。

功能亮点

界面预览

当前仓库中的界面截图来自 iOS 版本;Android 使用 Jetpack Compose 实现相同的信息架构和核心流程。

核心体验

https://github.com/Clarklevis1995/dsh-mobile/blob/HEAD/iOS 工作区首页 https://github.com/Clarklevis1995/dsh-mobile/blob/HEAD/iOS 浅色模式对话 https://github.com/Clarklevis1995/dsh-mobile/blob/HEAD/iOS 浅色模式轨迹
工作区首页
工作区与最近会话
对话
Markdown、代码与工具结果
轨迹
时间概览与事件时间线

默认配置

https://github.com/Clarklevis1995/dsh-mobile/blob/HEAD/iOS 应用设置 https://github.com/Clarklevis1995/dsh-mobile/blob/HEAD/iOS Agent 预设 https://github.com/Clarklevis1995/dsh-mobile/blob/HEAD/iOS 默认模型
设置
部署默认值与 Gateway 状态
Agent 预设
工具、提示词与能力组合
默认模型
Provider、模型与思考等级

工作区操作与轨迹详情

https://github.com/Clarklevis1995/dsh-mobile/blob/HEAD/iOS 切换工作区 https://github.com/Clarklevis1995/dsh-mobile/blob/HEAD/iOS 选择工作区目录 https://github.com/Clarklevis1995/dsh-mobile/blob/HEAD/iOS 轨迹详情面板
切换工作区
快速访问不同项目
目录选择
浏览并创建工作区
轨迹详情
摘要、Token 与内容预览

浅色、深色与设备配对

https://github.com/Clarklevis1995/dsh-mobile/blob/HEAD/iOS 浅色模式设备认证 https://github.com/Clarklevis1995/dsh-mobile/blob/HEAD/iOS 深色模式设备认证 https://github.com/Clarklevis1995/dsh-mobile/blob/HEAD/iOS 深色模式对话
浅色配对
扫码或手动输入
深色配对
完整深色模式适配
深色对话
阅读、代码与输入面板

跨端架构

                         DeepSeek Harness
                                │
                  dsh-plugin-mobile-gateway
                                │
                             WebSocket
                ┌───────────────┴───────────────┐
                │                               │
     Android OkHttp Transport          iOS URLSession GatewayClient
                │                               │
       KMP Gateway Runtime             Swift Router / KMP Adapter
                │                               │
                └───────────────┬───────────────┘
                                │
                    KMP shared / commonMain
            Protocol · Store · Reducer · Projection
       History Sync · Question/Approval · Workspace Files
                ┌───────────────┴───────────────┐
                │                               │
       Jetpack Compose                     SwiftUI / UIKit
          Android UI                          iOS UI

共享层职责

共享层不依赖 Compose、SwiftUI、Android Framework 或 Apple UI Framework。iOS 复用共享 Store、Reducer、Projection 和文件状态机,但当前仍由 Swift GatewayClient 负责 WebSocket、连接与重连,再通过 Adapter 将事件送入共享层;它尚未接入完整的 KMP Gateway Runtime。

Android 和 iOS 均在平台侧负责安全存储、图片处理、临时文件落盘、系统分享/打开以及应用生命周期。共享层负责远端文件协议、状态流转、分块一致性和完整性校验,不直接操作平台文件系统。

项目结构

.
├── shared/                         # Kotlin Multiplatform 共享业务模块
│   └── src/
│       ├── commonMain/             # 协议、状态机、投影、同步与 facade
│       └── commonTest/             # 跨平台单元测试
├── androidApp/                     # Android 原生应用(Jetpack Compose)
│   └── src/
│       ├── main/                   # 产品代码与平台实现
│       ├── test/                   # JVM 测试
│       └── androidTest/            # 设备测试
├── DeepSeekHarnessMobile/          # iOS 原生应用(SwiftUI/UIKit)
├── DeepSeekHarnessMobileTests/     # iOS XCTest
├── DeepSeekHarnessMobile.xcodeproj
├── Docs/                           # 调研、KMP 迁移与验证文档
└── Design/                         # 设计规范与展示素材

环境要求

通用

Android

iOS

运行 Android

1. 配置 Java 17,并确保 ANDROID_HOME 或 ANDROID_SDK_ROOT 指向 Android SDK。 2. 在仓库根目录构建 Debug APK:

   ./gradlew :androidApp:assembleDebug
   

3. 安装到已连接的设备或模拟器:

   ./gradlew :androidApp:installDebug
   

4. 启动 DshMobile,扫描 WebUI 生成的配对二维码,或手动输入配对信息。

Debug APK 位于:

androidApp/build/outputs/apk/debug/androidApp-debug.apk

当 Android Emulator 需要访问宿主机的 127.0.0.1:3080 时,可以先执行:

adb reverse tcp:3080 tcp:3080

运行 iOS

1. 配置 Java 17 和 Android SDK。 2. 使用 Xcode 打开 DeepSeekHarnessMobile.xcodeproj。 3. 选择 DeepSeekHarnessMobile Scheme 与目标设备。 4. 构建并运行。Xcode 中的 Build KMP Framework 阶段会自动选择并编译对应的 Kotlin/Native framework。 5. 在应用中扫描 WebUI 配对二维码,或手动输入配对信息。

无需提前手工构建 framework;如需单独生成 Apple Silicon iOS Simulator framework,可执行:

./gradlew :shared:linkDebugFrameworkIosSimulatorArm64

连接与配对

1. 在 DeepSeek Harness 中安装并启用 dsh-plugin-mobile-gateway。 2. 打开 WebUI 的“移动设备”面板,启用移动设备连接与设备鉴权。 3. 确认 WebSocket 地址能被手机或模拟器访问。 4. 生成一次性配对二维码/Token,并在 Android 或 iOS 客户端中完成认证。 5. 返回首页,确认 Gateway 状态已连接,然后选择工作区和会话。

常见地址:

| 场景 | 地址 | | --- | --- | | iOS Simulator | ws://127.0.0.1:3080/ws/mobile | | Android Emulator + adb reverse | ws://127.0.0.1:3080/ws/mobile | | 同一局域网内的真机 | ws://:3081/ws/mobile | | 公网部署 | wss:///ws/mobile |

[!IMPORTANT]
真机不能使用 127.0.0.1 访问电脑。表中的 ws:// 仅用于受信任的本地开发环境;公网或不可信网络必须使用 wss:// 并正确配置 TLS 与设备鉴权。一次性配对 Token 不应写入日志、Issue 或聊天记录。
[!NOTE]
局域网真机走的是 dsh-plugin-mobile-gateway 独立监听的 3081 端口,该端口只提供经过鉴权的 /ws/mobile,其余路径返回 404。3080 是 DSH WebUI 自身的端口且仅监听回环,真机无法通过它连接。

构建与测试

执行共享层测试、Android 单元测试、Lint 和 APK 构建:

./gradlew \
  :shared:allTests \
  :androidApp:testDebugUnitTest \
  :androidApp:lintDebug \
  :androidApp:assembleDebug

有可用 Android 设备或模拟器时,可继续执行:

./gradlew :androidApp:connectedDebugAndroidTest

iOS 测试可在 Xcode 中选择 DeepSeekHarnessMobile Scheme 后执行 Product → Test。构建阶段会自动链接对应架构的 DeepSeekHarnessShared.framework。

相关文档

以下文档记录 KMP 迁移和 Android 落地过程,阶段性状态以本文档和当前代码为准:

当前状态

项目处于持续开发阶段。KMP 共享层、Android 原生应用和 iOS 原生应用均已落地,协议、跨端一致性和移动端体验仍会随 DeepSeek Harness 与 Mobile Gateway 持续演进。

本项目是面向 DeepSeek Harness 的社区客户端,不代表 DeepSeek 官方发布。

Listed on dsh-plugin.org

应用内发布说明资源

Android 和 iOS 的“关于”页共用 AppRelease/release-info.json 与 AppRelease/release-notes.md。JSON 中的 version 必须与 App 版本一致,minimumGatewayVersion 表示必需的移动网关插件最低版本。Markdown 保存本版本发布说明;应用启动时从本地打包资源读取,不依赖网络获取正文。

KMM 双端打包技能会在编译前写入经过整理的最终发布说明并同步资源版本,校验 APK、AAB 和 iOS Bundle 内资源与源文件完全一致;打包失败会恢复资源和版本文件。更新说明后需要重新构建应用,不能只修改打包输出目录中的说明文件。

Android Studio 的 iOS Metal 编译

项目通过 Build Metal Library 阶段执行 scripts/build_metal_library.sh,自动查找已安装的 Metal 工具链,并把 default.metallib 写入应用 Bundle。该阶段只在子进程中清除 Android Studio 注入的 TOOLCHAINS 与 SDKROOT,编译时仍明确使用当前 iOS SDK 和部署目标,避免强制 XcodeDefault 导致误报缺少 Metal Toolchain。

Android 更新下载源

Android 优先读取 https://download.whaleness.cc/latest.json,请求失败或配置无效时回退 GitHub Releases。配置格式为 schemaVersion: 1,包含 version、versionCode、packageName、downloadUrl、size、sha256,可包含 githubDownloadUrl 与 releaseNotes。下载仅接受配置中的可信加速域名和本项目 GitHub 地址;加速源失败时切换备用地址,仍按同一份配置校验安装包大小、SHA-256、版本、包名和签名。

发布时先上传不可覆盖的版本 APK,再更新根目录的 latest.json。更新配置应绕过 CDN 缓存;APK 可缓存。未发现新构建时不请求 GitHub,启动检查保持静默,设置页手动检查显示结果。

R2 自动发布

先运行 python3 scripts/configure_r2_release.py,将指定桶的 S3 对象读写凭据保存在 ~/.config/whaleness/r2-release.json(权限 600)。执行 sh scripts/r2_release.sh --check 仅验证连接。执行 sh scripts/r2_release.sh --prepare <发布目录> 生成清单;--publish <发布目录> 才进行远程发布。S3 SDK 隔离安装在 build/r2-tools。

KMM 双端打包技能在本机存在配置时自动发布:先校验本地包,再上传带构建号的不可变 APK,验证远程对象及公开下载内容,最后条件更新 latest.json。上传失败可用同一发布目录重试,不需要重新打包。只需本地打包时设 R2_UPLOAD=0。完整上传测试可能产生 R2 读取请求;首次连接验证不会修改远程对象。

GitHub Stars & Activity

536Stars
48Forks
0Open issues
KotlinLanguage

GitHub Popularity

GitHub stars536
Forks48
Open issues0
Primary languageKotlin
License-
Stars gained today13
Created-
Last pushed-

Trending History

Daily boardrank #60 · ▲ 13 stars

Related AI Projects

1

obra / superpowers

Shell★ 301,134⑂ 26,883▲ 663 stars
→
2

affaan-m / ECC

JavaScript★ 282,295⑂ 41,960▲ 1,145 stars
→
3

anomalyco / opencode

TypeScript★ 215,031⑂ 28,847▲ 576 stars
→
4

tensorflow / tensorflow

C++★ 201,078⑂ 79,638▲ 35 stars
→
5

ollama / ollama

Go★ 183,617⑂ 18,358▲ 166 stars
→
6

DietrichGebert / ponytail

JavaScript★ 166,055⑂ 8,978▲ 704 stars
→
7

anthropics / claude-code

TypeScript★ 151,591⑂ 26,867▲ 168 stars
→
8

ggml-org / llama.cpp

C++★ 131,513⑂ 24,494▲ 126 stars
→

More AI Rankings