DSH 手机端(DeepSeek Harness Mobile?
把本机的 DeepSeek Harness WebUI 接到手机上用:局域网扫码即用,需要时再通过任意 frp 隧道从外网接入?
> Bring your local DeepSeek Harness WebUI to your phone ?over LAN by QR code, over WAN through any frp tunnel.
截图
| 深色(跟随系统) | 浅色 | 会话界面 |
|---|---|---|
界面右侧的圆球是*实时网络往返延?(绿 <150ms / ?<400ms / 红更慢);点一下进 App 设置,长按刷新页面,可拖到任意位置并吸附边缘?深色 / 浅色既支持「跟随系统」(系统切深浅时实时跟着变),也支持按设备单独指定?
App 设置与文件浏?
| 首次打开就是这一页(App 设置? | 文件浏览(DSH 自身的「文件」页? |
|---|---|
还没填地址?App 直接停在设置页:扫码连接?从相册里的二维码图片连接*、保持屏幕常亮、快捷操作(展开/收起会话列表、刷新页面、在系统浏览器中打开),底部是版本号与当前服务器地址。填好一次即长期使用,之后打开直达界面?右侧?DSH 自带的文件浏览在手机上的样子——翻目录、看文件、改分辨率都不用换设备?
它做了什?
| 能力 | 说明 |
|---|---|
| 手机接入? | 一个零依赖?Node 反向代理(默?0.0.0.0:8099 ?127.0.0.1:3080),替手机侧签发 harness 认证 cookie,并把请?Host/Origin 归一化成受信任来? |
| 移动端适配 | 往页面注入移动端适配(☰ 抽屉、宽度门控、悬浮球),不改产品源码 |
| 「手机端」设置面? | 二维码(局域网/外网)、App 下载、设备管理(允许/拒绝/踢出/完全信任)、接入口? |
| 设备身份与认? | 粗粒度机型特征码? 安卓 App ?Android ID)→ 随机 ID;新设备在本机点 ?才放行;口令?7 天自动轮换,「完全信任」设备免口令 |
| 按设备隔离的设置 | 外观 / 字号 / 语言按设备生效,不影响电? |
| 传输优化 | 压缩透传 + 桥侧 brotli,首屏字节约为原来的 1/3 |
| 外网接入 | 任何 frp / 内网穿透都行;自带 Let's Encrypt 证书自动续期脚本(HTTP-01,无需服务?API 密钥? |
| 下载到手? | 「文件」面板每个文件行?⤓;预览里长按也能下载当前文件(含从会话点开的)。经桥的 /__file 以附件形式落到手机「下载」目? |
| 预览手势缩放 | 只对图片生效:预览默认适宽(一屏看全),双指捏合缩放,范围 10%–2000%,页面里不放任何常驻控件(不会挡输入框),长按菜单可切「适宽 / 1:1」。PDF 保持产品排版:分页与滚动原样,捏合不会再去改页面尺寸。 |
| 下载进度 | 悬浮球边缘一圈细环显示下载进度(原生实现,需 App ?1.3.5? |
| 延迟探测不再被挡 | 悬浮球的 /__ping 是原生请求,1.3.5 起会?WebView ?cookie 一起带上——走隧道时不再每 5 秒被口令闸门拦下一次(日志不再刷屏? |
| 返回键先关浮? | 打开抽屉 / 右栏预览 / 插件面板 / 长按菜单时,按安卓返回键?收起它们*,不会后退重载页面(页面位置不丢);都没有打开时才按「再按一次退出」处理。页面侧契约 window.__dshmBack(),由 App?.3.5 ?onBackPressed 调用,纯浏览器里不生? |
| 网络 / 隧道监视? | 配套 DSH 插件(netmon/):会话头部一个「网络」芯片,点开看接入桥健康、内网入口?外网隧道真实可达?、证书剩余天数、设备在线情? |
| 抗更新退? | 注入前清单自检 + /__selftest + 桌面启动器自检不过就回退官方端口 |
目录
bridge/ 手机接入桥(Node,零依赖? 手机端面?+ 移动端适配注入 + 证书脚本
app/ 安卓 App(原?WebView 壳,?Gradle/AndroidX,用 build-tools 直接构建?netmon/ 配套 DSH 插件:会话头部的「网?/ 隧道」监视器(含安装说明?docs/ 部署清单(换一台机器怎么装)
快速开?
前提:本机已能跑 dsh web(默?127.0.0.1:3080),Node ?18?
# 1) 电脑:启动桥
node bridge/bridge.cjs # 默认 0.0.0.0:8099 ?127.0.0.1:3080
node bridge/bridge.cjs --port 8099 --target http://127.0.0.1:3080
# 2) 电脑:放行防火墙(Windows 管理员运行一次)
powershell -ExecutionPolicy Bypass -File bridge/allow-firewall.ps1
# 3) 打开 http://127.0.0.1:8099/ ——「设??手机端」里有二维码
手机与电脑同一 Wi-Fi ?浏览器扫码即用;页面里可直接下载安卓 App(也可以?App 内「扫一扫」直接连上)?
外网接入?docs/SETUP.md(隧??域名 ?证书 ?二维码)?
安卓 App
app/dist/dsh-mobile-1.3.9.apk 是可直接安装的构建产物(自签名,仅供自用);也可以从 Releases 直接下载。装好后应用?DeepSeek Harness(桌面图标是一只虎鲸,左右各留?8% 空白)。自己改代码后重新构建:
cd app
powershell -ExecutionPolicy Bypass -File build.ps1 -VersionCode 10 -VersionName 1.4.0
需要本机有 Android SDK ?build-tools(aapt2 / d8 / zipalign / apksigner)?签名密钥请自行生?(keystore/ 不入库)?
> 版本号以 AndroidManifest.xml 里的 versionCode/versionName 为准:实?build.ps1 -VersionCode/-VersionName 只影响输?文件?,aapt2 ?--version-code 盖不住清单里的值。改版本请直接改清单,否则会出现「文件名 1.3.4、装上去还是 1.3.3」?
安全模型(请务必读)
- 桥端?等价于本?shell 权限:能打开它的人即可读写文件、执行命令?只暴露桥端口,绝不要暴露 3080**?- 三道闸门:接入口令(外网必须带)+ 设备认证(本机点 ✓)+ 可选「完全信任」(免口令,可随时撤销);
- 自签证书(App v1.3.7 起):连到证书不被系统信任的服务器时,App ?SHA-256 指纹摊给你核对,确认后只认这一张(TOFU)?没有「信任所有证书」这个开?——中间人换一张证书会立刻被拒?- 桥不给页面注入任何远程代码:面板/适配脚本都是本地文件?- 建议:只用在家用网络 + 自己的隧道;不要把端口映射到公网裸奔?
已知边界
- 依赖 DSH 的页面结构与启动清单;DSH 大版本更新后若结构变化,最坏情况是*少个面板、页面照?(不会白屏)?-
/api/settings/describe在新?DSH 上已不存在,因此「按设备隔离」改走页面注入(?bridge/README.md); - 语言切换在页面加载时解析,改完需刷新一次?
提个醒:两处设置别混?
- 设置 ?通用设置 里的 语言 / 外观 / 字号?全局的:在任何设备上改,所有设备(含电脑)一起变?- 设置 ?手机?→「仅本设备的显示? 只作用于当前这台设备:电脑不受影响,按设备保存(换浏览器、重装后仍沿用)。语言在页面加载时解析,改完刷新一次?
| 设置 ?通用设置(全局?| 设置 ?手机端(只影响这一台) |
| --- | --- |
| | |
宣传?
分享用(矢量源文件在 docs/,PNG 版同目录):
| 横版 1280×640 | 竖版 1080×1920 |
|---|---|
banner.png 可直接用?GitHub 社交预览图;poster.png 底部的二维码指向本仓库(已用 ZXing 实测可扫)?
许可
本项目自己的代码?MIT(见 LICENSE)?仓库里另有两个第三方文件(ZXing ?Apache-2.0 jar、qrcode-generator ?MIT 源码),逐项声明与许可全文见 THIRD-PARTY.md*?