dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
⭐ 搭配 dsh-LAN 体验最佳
本项目与 dsh-LAN 结合使用可获得最佳体验,建议搭配部署使用。
DeepSeek Harness 客户端:在 App 内打开局域网内指定地址的 DeepSeek Harness 页面。
基于 Tauri 2 + React 19 + TypeScript + Vite。
打包完全依赖 GitHub Actions,本机不进行打包(本机只用于编写和调试代码)。
adjustResize,原生层再按键盘 insets 让位,
Android 15+ 强制 edge-to-edge 的机型同样生效)。├── 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 实现:
← 返回地址中枢,
右侧 ⟳ 刷新,点地址可下拉切换历史地址;深色模式跟随系统;.github/android/MainActivity.kt,由 CI 在 tauri android init 之后覆盖模板生成的那份;
模板每次构建都会重新生成,所以改动请改仓库里这份,不要改 src-tauri/gen/。npm install # 安装依赖
npm run tauri dev # 启动桌面开发模式(本机已具备 Rust + MSVC + WebView2)
DeepSeek Harness 通常部署在局域网、以 http://192.168.1.1:3080 明文访问,而移动系统默认禁止:
usesCleartextTraffic 占位符改写为 true(debug / release 均生效),
局域网明文地址(http://192.168.1.1:3080)可直接访问。推送到 GitHub 后全自动(无需手动打 tag):
main / master 自动触发:先递增小版本号(patch +1,.github/scripts/bump-version.mjs)
并把改动提交回仓库(package.json / package-lock.json / src-tauri/tauri.conf.json);tauri android init)→ 覆盖应用图标 → 放行局域网明文 HTTP → 状态栏 opt-out;--apk --split-per-abi,4 个 ABI 各一个包);v<版本> 并创建 GitHub Release,资产为各架构 APK
(文件名 dsh-app-<abi>-v<版本>.apk,直接从 Release 页下载 .apk 文件,不用 Artifact,避免 zip 压缩包)。build-android → Run workflow(同样递增版本并发布)。package.json;src-tauri/tauri.conf.json 的 version 指向 ../package.json,
Android 的 versionCode 由 Tauri 按 major*1000000 + minor*1000 + patch 推导,随 patch 递增,新包可直接覆盖安装。Android 工程(src-tauri/gen/android)由 CI 自动生成,无需在本地生成或提交。
说明:tauri-action 的移动端支持从未发布(仅 dev 分支),因此 workflow 直接调用
tauriCLI 构建(android build --apk --split-per-abi)。
| 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 产物)。
com.dsh.app(在 src-tauri/tauri.conf.json 中修改)dsh-app(即安装包/可执行文件名)