packages/dsh-remote-web-ui
zhu1090093659/dsh-web手机/PC 远程操控 dsh web 工作区:扫码配对、令牌门控通道、SSE 实时同步,提供移动端与完整桌面 GUI 两种远程形态。
DSH 手机远程访问的开箱即用修复套件:把 PWA manifest 的 start_url 改到 /pair-app,解决 iOS「添加到主屏幕」后打开停在 401 的问题;附常驻/守护脚本、自动登录与电源设置说明、中文排错手册。需安装 @linxin666/dsh-remote-web-ui(/pair-app 由它提供);守护脚本仅 Windows。
把 DeepSeek Harness 装进手机:iPhone 主屏一个全屏 App,随时查看和指挥电脑上正在跑的 AI Agent / 长跑计算任务。
手机和电脑是同一个会话:手机发的指令电脑执行,电脑的进度手机实时看。
本项目是对第三方开源插件 @linxin666/dsh-remote-web-ui(Apache-2.0)的一套开箱即用封装 + iOS 修复 + 7×24 常驻脚本,一次性解决三个实际痛点:
| 痛点 | 本仓库的解法 |
|---|---|
iOS「添加到主屏幕」后点开停在 401 authentication required | dsh-phone-home 插件接管 manifest.webmanifest,把 start_url 指到 /pair-app,不再依赖 Service Worker |
| 想“电脑开着就随时能用” | 登录自启 + 托盘常驻 + 每 1 分钟守护自愈 + 关闭睡眠/休眠 |
| 不想每天扫码 | 固定域名 + 设备 Cookie,配对一次长期有效;电脑重启/更新也不用重配 |

┌────────────── 手机 (iPhone) ──────────────┐
│ 主屏 App (PWA, 官方 Web GUI, 全屏) │
│ start_url = /pair-app ← 本仓库修复 │
└───────────────────┬────────────────────────┘
│ HTTPS(固定域名)
┌───────────────────▼────────────────────────┐
│ Cloudflare 快速隧道 → 固定域名中继 │
│ https://<id>.dsh-market.com │
├────────────────────────────────────────────┤
│ DSH 宿主(桌面版 或 `dsh web`) │
│ └ @linxin666/dsh-remote-web-ui │
│ · 设备配对 / 门控 /remote 通道 │
│ · /pair-app 只凭设备 cookie 放行 │
│ └ dsh-phone-home(本仓库) │
│ · 覆盖 /manifest.webmanifest │
│ · 主屏图标资源 │
└────────────────────────────────────────────┘
dsh web,均需 ≥ 0.2.1-rc.2(与 dsh-remote-web-ui 0.4.7 的要求一致)dsh web 独立常驻(最省心,推荐 24h 在线)# 1) 安装远程访问插件(官方 CLI)
dsh plugin --profile web add @linxin666/dsh-remote-web-ui@latest
# 2) 安装本仓库的 iOS 修复插件(仓库根就是插件包,可直接从 GitHub 安装;国内网络也可先 clone 再用 link:)
dsh plugin --profile web add github:David060323/dsh-phone-remote
# 离线/内网:git clone 后 → dsh plugin --profile web add link:<clone路径>
# 3) 编辑 %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml,追加:
# - id: remote-web-ui
# name: "@linxin666/dsh-remote-web-ui"
# config:
# autoTunnel: true # 自动 Cloudflare 快速隧道
# relay: true # 固定域名中继(重启不变域名)
# idleExpireMs: 315360000000
# maxDevices: 8
# 4) 启动
dsh web
电脑 GUI 侧栏底部出现手机图标 → 点开 → 二维码 → iPhone 用「相机」扫码(不要用微信扫一扫)→ 自动配对进入界面 → Safari 分享 → 添加到主屏幕。
再用 scripts/register-web-guardian.ps1 注册登录自启 + 崩溃自愈的计划任务。
桌面版 profile 由 Electron 管理,不能用
dsh pluginCLI 直接装;以下步骤需要能调用plugin_manager的 Agent 协助(或手动编辑 profile)。
@linxin666/dsh-remote-web-ui 和本仓库的插件包(仓库根,包名 dsh-phone-home)装进 profile desktop(bundle 列表里追加,dependencies 用 link: 指向 clone 下来的仓库根);~/.dsh/profiles/desktop/cordis.patch.yml 追加与方案 A 相同的配置块;scripts/register-desktop-watchdog.ps1 注册桌面版守护任务(登录自启 + 1 分钟自愈);这样手机看到的就是电脑上正在用的那个会话,而不是另一个 DSH 实例。
scripts/keep-desktop-alive.ps1 / .vbs:隐藏窗口检查桌面版进程,缺失则拉起scripts/register-desktop-watchdog.ps1:注册计划任务(登录触发 + 每 1 分钟)scripts/keep-web-alive.ps1 + register-web-guardian.ps1:dsh web 守护循环powercfg /change standby-timeout-ac 0),合盖行为按需iOS 主屏 Web App 按页面所链 manifest 的 start_url 启动。官方 manifest 的 start_url 是 "./"(= 根地址 /),而根地址由 harness 兜底、需要 harness 的 browser-auth cookie → 401。
dsh-phone-home 把 manifest 的 start_url 改成 /pair-app。/pair-app 只凭设备 cookie 就放行(实测:禁用 Service Worker 也返回 200 并正常渲染),因此主屏 App 不再依赖“重开 Service Worker 接管 / 导航”这条路径。
装好修复后必须删掉旧主屏图标、重新添加一次(旧图标用的是旧 manifest 的 start_url)。
| 现象 | 原因 / 解法 |
|---|---|
| 微信里打开显示 401 | 微信/App 内置浏览器不支持 Service Worker;用相机扫码或把链接复制到 Safari |
| 主屏图标打开 401 | 旧 manifest;安装 dsh-phone-home 后删除图标重装 |
| 应急入口 | https://<你的域名>/pair-app:无 Service Worker 也能进(已配对设备) |
cloudflared 下载失败(GitHub ETIMEDOUT,国内常见) | 用 pnpm add cloudflared(已带二进制缓存)或把其它 profile 里现成的 bin/cloudflared.exe 拷到目标 profile 的 node_modules/cloudflared/bin/ |
隧道 Error 1033 | Cloudflare 快速隧道边缘掉线;插件会看门狗重连,域名不变,等 1~2 分钟 |
| 页面显示实例离线 | 电脑关机或宿主没跑;开机后约 30 秒自动恢复,免重配 |
@linxin666/dsh-remote-web-ui 作者运营的 Cloudflare Worker;配对校验与应用层检查留在本机。想完全避开:关 relay(域名每次重启会变),或使用自带域名的命名隧道。package.json / cordis.patch.yml / lib/ / assets/ iOS 主屏修复插件(仓库根即插件包:manifest start_url + 图标)
scripts/ 常驻/守护脚本(Windows PowerShell)
docs/ARCHITECTURE.md 架构与实现细节
docs/TROUBLESHOOTING.md 排错手册
publish/ 发文章/挂闲鱼/出处用的现成文案
screenshots/ 手机端效果截图
@linxin666/dsh-remote-web-ui(Apache-2.0),版权归其作者。本仓库在 DSH 0.2.1-rc.2 + dsh-remote-web-ui 0.4.7 上实测通过。