MrMu666/dsh-app
用于连接deepseek harness的移动端app
项目介绍Project Overview
dsh-app 是 DeepSeek Harness 的客户端,基于 Tauri 2 与 React 19 构建。它能在 App 内打开局域网内指定地址的 DeepSeek Harness 页面,并支持多地址切换、页面实例缓存与本地存储隔离。适合在移动端或桌面端便捷访问内网服务。注意:iOS 真机构建需付费开发者账号及签名配置。
dsh-app is a client for DeepSeek Harness, built with Tauri 2 and React 19. It opens DeepSeek Harness pages at specified LAN addresses within the app, supporting multiple address switching, page instance caching, and isolated local storage. Ideal for convenient access to intranet services on mobile or desktop. Note: iOS device builds require a paid developer account and signing configuration.
请帮我了解并安装插件:【dsh-app】【https://github.com/MrMu666/dsh-app】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add github:MrMu666/dsh-app
把 MrMu666/dsh-app 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-app
⭐ 搭配 dsh-LAN 体验最佳
本项目与 dsh-LAN 结合使用可获得最佳体验,建议搭配部署使用。
DeepSeek Harness 客户端:在 App 内打开局域网内指定地址的 DeepSeek Harness 页面。
基于 Tauri 2 + React 19 + TypeScript + Vite。
打包完全依赖 GitHub Actions,本机不进行打包(本机只用于编写和调试代码)。
功能
- 欢迎页:提示"请选择或输入您的 DeepSeek Harness 地址,如 192.168.1.1:3080"; 下方列出所有输入过的地址(按钮),列表下方输入框可添加新地址;无历史地址时不显示按钮区; 底部红字提示"考虑到页面刷新重新加载对话会消耗较多流量,除非点击右上角刷新按钮主动刷新,否则页面不会自动重载"。
- 浏览页:顶栏(左:返回按钮;中:地址下拉,默认当前地址,点击可切换任意历史地址; 右:强制刷新按钮)+ 页面内容。
- Cookie 与存储:远程页面(DeepSeek Harness)的 Cookie / localStorage / sessionStorage 由系统 WebView 原生管理并持久化(Windows WebView2、Android WebView、iOS WKWebView), 与普通浏览器行为一致:不同地址(源)的存储相互独立,重启 App 后保留,与系统浏览器数据隔离。
- 页面实例缓存:页面实例永久保留(页面实例池保留隐藏 iframe,SPA 状态/滚动位置不丢), 不会因时间自动重载;只有点击顶栏右上角强制刷新按钮才会重新加载。
- Android 状态栏:App 内容不侵占状态栏(CI 构建时自动配置 edge-to-edge opt-out)。
目录结构
├── src/ # 前端(React)
│ ├── lib/addresses.ts # 地址规范化 + 地址历史持久化(localStorage)
│ ├── components/
│ │ ├── Welcome.tsx # 欢迎页:地址按钮列表 + 新地址输入
│ │ └── BrowserView.tsx # 浏览页:顶栏(返回/下拉/刷新)+ iframe
│ └── App.tsx # 视图状态机(欢迎页 ⇄ 浏览页)+ 浏览历史
├── src-tauri/ # Tauri 壳(Rust)
│ ├── src/ # Rust 代码
│ └── tauri.conf.json # 应用配置(名称 / 标识符 / 窗口 / 图标)
└── .github/workflows/
└── mobile-build.yml # Android(APK/AAB) + iOS(IPA) 打包工作流
本地开发(仅写代码,不打包)
npm install # 安装依赖
npm run tauri dev # 启动桌面开发模式(本机已具备 Rust + MSVC + WebView2)
移动端明文 HTTP(内网地址)说明
DeepSeek Harness 通常部署在局域网、以 http://192.168.1.1:3080 明文访问,而移动系统默认禁止:
- Android:使用
--debug构建,Tauri Android 模板的 debug 构建自动放行明文流量 (usesCleartextTraffic=true),无需额外配置。 - iOS:CI 构建时自动注入
NSAppTransportSecurity > NSAllowsArbitraryLoads豁免 (见 workflow 的 "Allow cleartext HTTP (ATS) for LAN addresses" 步骤)。
CI 打包(GitHub Actions)
推送到 GitHub 后:
- 手动触发:仓库 Actions 页面 →
mobile-build→ Run workflow,可选both / android / ios; 构建完成后默认自动发布 GitHub Release(可取消勾选publish_release,也可自定义release_tag); - 打 tag 自动触发:
git tag v0.1.0 && git push origin v0.1.0,同时构建 Android 和 iOS; Android 产物自动发布到 GitHub Release,iOS 产物在 Actions artifacts 中下载。
Android 工程与 iOS 工程(gen/apple)均在 CI 内自动生成(iOS 需要 macOS runner 执行
tauri ios init),无需在本地生成或提交。
说明:tauri-action 的移动端支持从未发布(仅 dev 分支),因此 workflow 直接调用
tauriCLI 构建(android build --debug --apk --aab/ios build)。
需要配置的 Secrets(仓库 Settings → Secrets and variables → Actions)
| Secret | 必填 | 说明 |
|---|---|---|
GITHUB_TOKEN |
✅(自动存在) | 发布 GitHub Release 用,无需手动配置 |
ANDROID_KEYSTORE_BASE64 |
Android 正式包必填 | keystore 文件的 base64(certutil -encode / base64 生成);配置后构建正式签名 release 包(按 ABI 拆分,单包 20–35MB) |
ANDROID_KEYSTORE_PASSWORD / ANDROID_KEY_PASSWORD |
同上 | keystore 与密钥密码(建议只用字母数字) |
ANDROID_KEY_ALIAS |
同上 | 密钥别名(如 upload) |
APPLE_CERTIFICATE / APPLE_CERTIFICATE_PASSWORD / APPLE_SIGNING_IDENTITY / APPLE_ID / APPLE_PASSWORD / APPLE_TEAM_ID |
iOS 真机包必填 | iOS 签名,需要 Apple Developer Program 付费账号;不配则 iOS 构建失败(预期行为) |
Android 未配置签名 Secrets 时,回退构建 debug 签名包(可安装测试,但体积大,约 400MB); 配置后构建正式签名 release 包(APK/AAB,
--split-per-abi按架构拆分,单包约 20–35MB)。 keystore 生成命令:keytool -genkey -v -keystore upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload(JDK 自带 keytool)。
iOS 注意事项
- iOS 的 Xcode 工程(
src-tauri/gen/apple)只能由 macOS 生成,CI 的 macos-14 runner 会自动执行tauri ios init完成,Windows 本机无法交叉编译 iOS。 - 免费 Apple 账号无法在 CI 上长期签名分发;未配置签名 Secrets 时真机构建会失败。
应用标识
- bundle identifier:
com.dsh.app(在src-tauri/tauri.conf.json中修改) - productName:
dsh-app(即安装包/可执行文件名)
nexu-io/open-design
freestylefly/awesome-gpt-image-2
anywhere-labs/dsh-desktop
walkinglabs/learn-harness-engineering
awesome-dsh-plugin/awesome-dsh-plugin
MemTensor/MemOS