中文EN

@zyfgood/dsh-mobile

remote已测通过npmMIT

DSH 手机端 Web UI:带令牌认证的局域网服务,手机可浏览全部会话、通过 SSE 实时查看回复并继续对话;桌面 GUI 提供二维码入口,配合 dsh-whale-girl 0.3.0+ 现在还可以点桌宠鳍里的小手机打开面板。

下载量 / Downloads
822
依赖体积 / node_modules
25.1 MB
测试时间 / Tested
2026-11-07
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add @zyfgood/dsh-mobile

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

@zyfgood/dsh-mobile 📱

![npm](https://www.npmjs.com/package/@zyfgood/dsh-mobile)

![license](LICENSE)

![GitHub](https://github.com/zyfgood/dsh-mobile)

![dsh](https://github.com/deepseek-ai/deepseek-harness)

DeepSeek Harness(DSH)插件:手机端 Web UI。在同一个局域网里,用手机浏览全部 DSH 会话、实时查看回复、继续对话;桌面端左下角提供一个带二维码的入口。

这不是把桌面 Web GUI 简单缩小的响应式页面,而是一个独立的、为手机重写的轻量客户端:会话列表、聊天记录、流式输出、工具调用折叠、历史翻页、新建会话和停止回复都针对触屏重新设计。宿主端直接复用 DSH 的 ctx.sessionController,不直接读写 session JSONL,也不修改会话内容。

界面

会话列表 · 继续对话

![手机端会话列表](docs/mobile-list.png) · ![手机端对话](docs/mobile-chat.png)

Markdown / 表格 · 登录页

![手机端 Markdown](docs/mobile-markdown.png) · ![手机端登录](docs/login.png)

桌宠联动

本节的 0.2.0 / 0.3.0 为联动开发分支,尚未发布到 npm;npm 上的 0.1.0 不包含 dshMobile 服务。

配合 @zyfgood/dsh-whale-girl 0.3.0+:

  • 鲸鱼右侧鳍里拿着一部小手机;点击手机打开/关闭手机端面板,面板锚定在桌宠上方;
  • 右键菜单新增 📱 手机访问(兜底入口);
  • 手机首次连上时,桌宠挥手说“手机连上啦~”,手机出现呼吸光环;
  • 桌宠隐藏时,手机面板入口自动回退到左下角按钮;单击桌宠仍然是戳戳,双击/拖拽不变;
  • 没装桌宠或桌宠版本过旧时,手机端保持原来的独立按钮,不会报错。

客户端服务契约(ctx.provide('dshMobile', ...)):

{
  version: 1,
  open(anchor?), close(), toggle(anchor?),
  getSnapshot(),   // { open, anchor, status, error, externalLauncher }
  subscribe(fn),
  setExternalLauncher(enabled)  // 桌宠接管入口时隐藏左下角按钮
}

其他桌宠也可以按同一契约接入;服务只负责 UI 开关和状态,不接触手机端令牌。


为什么需要它

调研结论:DSH 桌面版目前不能直接把 Web GUI 暴露给手机。

现状 · 影响

桌面宿主固定以 --host 127.0.0.1 --port 0 启动 Web Host(dsh-desktop-host) · 手机无法访问;也没有桌面 UI 可改这个绑定

Web GUI 的登录令牌只接受在 GET / 上兑换,Cookie 绑定 hostname + port · 即使把服务绑到局域网 IP,也要重新走令牌/端口绑定,且默认没有移动端布局

dsh web --host 0.0.0.0 明确不支持;Host/Origin 信任只接受 loopback、绑定 IP 或 trustedHosts · 反向代理现有 GUI 会被 Cookie authority 与请求信任拦住

现有 GUI 是桌面优先的聊天布局 · 手机上可用性差,不适合“快速看一眼、回一句”的场景

因此本插件采用独立手机端 HTTP 服务的方案:

┌────────────────────────── DSH 宿主进程 ──────────────────────────┐
│                                                                  │
│  桌面 Web GUI (127.0.0.1:35788)                                 │
│    └─ /dsh-mobile/status, /dsh-mobile/qr.svg  ← 已登录桌面才能看  │
│                                                                  │
│  ctx.sessionController  ── list / page / follow / prompt / ...   │
│         ▲                                                        │
│         │ 直接调用                                                │
│  dsh-mobile 宿主端(本插件)                                      │
│    └─ 手机端 HTTP(S) 服务  0.0.0.0:35888                         │
│         ├─ 访问令牌 + 签名 HttpOnly Cookie                        │
│         ├─ REST:会话列表、历史分页、新建、继续、停止              │
│         └─ SSE:snapshot / record / assistant-stream             │
└──────────────────────────────────────────────────────────────────┘
                          ▲
                          │ 同一 Wi-Fi / 局域网
                    📱 手机浏览器

关键点:

  • 不碰桌面 Web Host 的绑定和登录态,不改 profile 的 host,也不需要重启桌面应用。
  • 手机端有自己的访问令牌,持久化在 ~/.dsh/dsh-mobile/state.json;二维码里带的是这个令牌,不是桌面登录令牌。
  • 会话读写全部走 sessionController,与桌面 GUI、飞书机器人共享同一套会话记录。
  • SSE 直接转发 sessionController.follow() 的 snapshot / durable event / assistant-stream 帧,所以手机能看到模型的流式输出和工具调用过程。

安装

从 npm 安装(web / 非桌面 profile)

dsh plugin --profile web add @zyfgood/dsh-mobile

从 GitHub Release / tgz 安装

# 预构建 tgz(版本固定)
dsh plugin --profile web add https://github.com/zyfgood/dsh-mobile/releases/download/v0.1.0/zyfgood-dsh-mobile-0.1.0.tgz
⚠️ 桌面版不能用 dsh plugin --profile desktop add:desktop profile 由 Electron 应用独占管理,CLI 会直接拒绝(profile "desktop" is managed exclusively by the Electron application)。桌面版请用下面的 GUI 或本地脚本。

桌面版(推荐:插件页)

1. 打开 DSH 桌面 Web GUI。

2. 左侧 插件 → 安装插件 / 从本地安装。

3. 填入 @zyfgood/dsh-mobile、D:\DSHProjects\dsh-mobile 或 tgz 路径,启用插件。

4. 如果页面提示需要重启,完全退出并重新启动 DeepSeek Harness。

5. 启动后左下角出现 📱 按钮。

桌面版(本地脚本,等价的手动安装)

如果插件页没有“本地路径”入口,可以使用仓库里的脚本。它会备份 profile 文件、创建 node_modules 链接、把包加入 dependencies 与 dsh.profile.bundles,并写入一条 dsh-mobile 配置:

powershell -ExecutionPolicy Bypass -File D:\DSHProjects\dsh-mobile\scripts\install-desktop.ps1

完成后完全退出并重新启动 DeepSeek Harness。脚本只改 ~/.dsh/profiles/desktop 下的 package.json、cordis.patch.yml 和 node_modules 链接,不会执行 pnpm,也不会动会话数据。

Web / 非桌面 profile

非 desktop 的普通 profile 可以用 CLI:

# 例如 web profile
dsh plugin --profile web add D:\DSHProjects\dsh-mobile
# 或从 tgz
dsh plugin --profile web add D:\DSHProjects\zyfgood-dsh-mobile-0.1.0.tgz

卸载

桌面版在 插件 页禁用/移除;或手动删除 profile 中的依赖、bundle 行和 node_modules\@zyfgood\dsh-mobile 链接。cordis.patch.yml 里的 dsh-mobile 行可以保留(禁用状态)或删除。

插件市场

本插件按 DSH 生态的公开约定发布:

  • npm 包声明了 dsh 清单、dsh-plugin / deepseek-harness 关键词和 dsh.catalog 元数据,供自动索引的市场收录;
  • GitHub 仓库带有 dsh-plugin topic;
  • 精选目录 awesome-dsh-plugin 通过 data/plugins/zyfgood__dsh-mobile.yml 提交,dshmarket 和目录站会按日同步。
市场收录由目录维护者审核,不等同于安全审计;安装第三方插件前请自行确认来源。

使用

1. 确认手机和电脑在同一个局域网(同一 Wi-Fi,或手机能访问电脑的局域网 IP)。

2. 在桌面 Web GUI 左下角点 📱。

3. 用手机相机/浏览器扫描二维码,或复制链接发到手机打开。

4. 首次打开会自动用二维码里的令牌登录;之后 30 天内免登录。

5. 在会话列表点任意会话 → 查看历史 → 在底部输入框继续对话。

6. 如果当前回复正在运行,输入框右下角会显示停止按钮;新消息默认排队,当前轮结束后自动处理。

二维码链接形如 http://192.168.1.23:35888/#token=...。令牌放在 URL fragment 里,不会随 HTTP 请求发送到服务器;页面加载后由 JS 读取并 POST /api/login 换取 HttpOnly Cookie,然后从地址栏清掉。

首次手机打不开?

最常见的原因是 Windows 防火墙。桌面宿主进程是 DeepSeek Harness.exe;如果它没有允许入站,手机就连不上 35888 端口。

  • 在 Windows 安全中心 → 防火墙和网络保护 → 允许应用通过防火墙,勾选 DeepSeek Harness(或 Node.js)的专用网络;
  • 或者给端口 35888 添加入站规则(需要管理员);
  • 确认手机连的是电脑同一个网段,而不是访客 Wi-Fi / 开了 AP 隔离;
  • 关掉 VPN/代理后重试(有些 VPN 会把局域网路由劫持)。

配置

在 profile 的 cordis.patch.yml 中给插件加 `confi

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:3,最后更新 2026-10-22

链接

GitHub · Homepage · npm

同类插件