🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI
广告☁️ 云服务器特惠阿里云首购 8 折 · 腾讯云合作特惠
DeepSeek Harness Hub
← 返回列表

MrMu666/dsh-app

DeepSeek Harnessspec-screened扫描:低风险在 GitHub 查看 ↗
需源码安装

用于连接deepseek harness的移动端app

暂不能直接安装(需源码编译或环境不满足):缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。 · 最近上游提交 2026/9/17 · 已提供中文文档
综合分
31
GitHub 分
31
用户评分
—
★ Stars
2
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add MrMu666/dsh-app
缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装,改用 GitHub 源安装
信任档位:已验证本站已于 2 天前真实安装成功(L4 · 真实安装)
是什么
dsh 原生插件 · market
装得上吗
本站已真实安装成功(L4 · 真实安装,非静态推断)
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
活跃:最近一次提交在 8 天前

档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →

🟢实装验证通过· 2026/9/23
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/22(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查需源码安装

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

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

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/22 13:27:30

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

README

由 DeepSeek 最新模型翻译生成
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”;
下方列出所有输入过的地址(按钮,可单个移除,已打开的地址带「已打开」标记),
列表下方输入框可添加新地址;无历史地址时不显示按钮区。
- 桌面端:每个地址一个独立顶层窗口:点击地址在新的顶层窗口中打开该 DeepSeek Harness 页面
(同一地址再次点击只聚焦已打开的窗口,不重复打开、不重载页面)。
- 不使用 iframe:iframe 里页面属于「第三方上下文」,DSH 的登录状态会被
WebView 的跟踪防护拦截,dsh-LAN 的局域网口令页会反复闪烁、无法输入口令。
桌面端改用独立顶层窗口、移动端改用本窗口顶层导航后,口令只需输入一次,行为与系统浏览器一致。
- Cookie 与存储:由系统 WebView 原生管理并持久化
(Windows WebView2、Android WebView、iOS WKWebView):重启 App 后保留,与系统浏览器数据隔离;
桌面端每个地址窗口(源)各自独立。
- 页面实例常驻:桌面端窗口存活期间页面不会自动重载(SPA 状态/滚动位置不丢);
需要重新加载时关闭该地址窗口再打开即可。
- Android(移动端):系统不支持在一个 App 内开多个窗口,点击地址直接在本应用内
打开该页面(本窗口内顶层导航,Cookie / 登录状态同样是第一方,行为与系统浏览器一致);
页面顶部有原生工具条(← 返回地址中枢、⟳ 刷新、点中间地址可切换历史地址),
按系统返回键同样回到地址中枢。
- Android 状态栏:App 内容不侵占状态栏(CI 构建时自动配置 edge-to-edge opt-out)。

目录结构

├── src/                          # 前端(React)
│   ├── lib/
│   │   ├── addresses.ts          # 地址规范化 + 地址历史持久化(localStorage)
│   │   └── windows.ts            # 打开地址(桌面:顶层窗口 / 移动:本窗口导航)
│   ├── components/
│   │   ├── Welcome.tsx           # 地址中枢:地址按钮列表 + 新地址输入 + 移除
│   │   └── AddressHub.tsx        # 中枢逻辑:打开窗口、跟踪已打开地址
│   └── App.tsx                   # 主窗口 = 地址中枢
├── src-tauri/                    # Tauri 壳(Rust)
│   ├── src/                      # Rust 代码
│   ├── capabilities/default.json # 窗口能力(创建/显示/聚焦窗口所需权限)
│   └── tauri.conf.json           # 应用配置(名称 / 标识符 / 窗口 / 图标)
└── .github/
├── android/MainActivity.kt   # 安卓原生顶部工具条(CI 覆盖模板生成的 MainActivity)
├── scripts/bump-version.mjs  # CI 版本递增(patch +1)
└── workflows/
└── build-android.yml     # 推送自动:递增版本 → 各架构 APK → GitHub Release

安卓顶部工具条(应用内,原生实现)

安卓上每个 Activity 只有一个 WebView,远程 DeepSeek Harness 页面又不能放进 iframe
(第三方上下文会让登录 Cookie 被丢弃、局域网口令页反复闪烁),所以「页面顶部的功能栏」
只能由原生 Android View 实现:

- 外观沿用旧版顶栏:浅灰底 + 居中的地址胶囊 + 底部分隔线;左侧 ← 返回地址中枢,
右侧 ⟳ 刷新,点地址可下拉切换历史地址;深色模式跟随系统;
- 占位式布局:页面从工具条下沿开始渲染、高度自动让出,顶部内容不会被遮挡;
- 系统返回键在浏览页面时同样回到地址中枢(不会直接退出 App);
- 工具条与页面都避让状态栏(构建时已配置 edge-to-edge opt-out,工具条自身也按 insets 兜底);
- 实现文件是 .github/android/MainActivity.kt,由 CI 在 tauri android init 之后覆盖模板生成的那份;
模板每次构建都会重新生成,所以改动请改仓库里这份,不要改 src-tauri/gen/。

本地开发(仅写代码,不打包)

npm install        # 安装依赖
npm run tauri dev  # 启动桌面开发模式(本机已具备 Rust + MSVC + WebView2)

移动端明文 HTTP(内网地址)说明

DeepSeek Harness 通常部署在局域网、以 http://192.168.1.1:3080 明文访问,而移动系统默认禁止:

- Android:CI 构建时把模板 Manifest 的 usesCleartextTraffic 占位符改写为 true(debug / release 均生效),
局域网明文地址(http://192.168.1.1:3080)可直接访问。
- iOS:当前 CI 只打包 Android(见下),iOS 工作流已移除。

CI 打包(GitHub Actions)

推送到 GitHub 后全自动(无需手动打 tag):

1. 推送 main / master 自动触发:先递增小版本号(patch +1,.github/scripts/bump-version.mjs)
并把改动提交回仓库(package.json / package-lock.json / src-tauri/tauri.conf.json);
2. 初始化 Android 工程(tauri android init)→ 覆盖应用图标 → 放行局域网明文 HTTP → 状态栏 opt-out;
3. 构建按 CPU 架构拆分的签名 APK(--apk --split-per-abi,4 个 ABI 各一个包);
4. 打 tag v 并创建 GitHub Release,资产为各架构 APK
(文件名 dsh-app--v.apk,直接从 Release 页下载 .apk 文件,不用 Artifact,避免 zip 压缩包)。

- 手动触发:仓库 Actions 页面 → build-android → Run workflow(同样递增版本并发布)。
- 版本号唯一来源是 package.json;src-tauri/tauri.conf.json 的 version 指向 ../package.json,
Android 的 versionCode 由 Tauri 按 major1000000 + minor1000 + patch 推导,随 patch 递增,新包可直接覆盖安装。

Android 工程(src-tauri/gen/android)由 CI 自动生成,无需在本地生成或提交。

说明:tauri-action 的移动端支持从未发布(仅 dev 分支),因此 workflow 直接调用
tauri CLI 构建(android build --apk --split-per-abi)。

需要配置的 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) |

Android 未配置签名 Secrets 时,回退构建 debug 签名包(可安装测试,但体积大,约 400MB);
配置后构建正式签名 release 包(--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 打包已移除(本 workflow 只出 Android 包);如需恢复,可从 git 历史取回原 mobile-build.yml
(macOS runner + tauri ios init + IPA 产物)。

应用标识

- bundle identifier:com.dsh.app(在 src-tauri/tauri.conf.json 中修改)
- productName:dsh-app(即安装包/可执行文件名)

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

同作者(MrMu666)的其他插件

💬 加入社群

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

DPharness QQ 群二维码,QQ 扫码进群
QQ 扫码进群
DPharness 飞书群二维码,飞书扫码进群
飞书扫码进群