🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

手机遥控台 SunWay0573/dsh-mobile

DeepSeek Harnessv0.3.5
SunWay057333 天前有提交已提供中文文档扫描:含敏感能力

用手机遥控家里那台电脑上运行的 DeepSeek Harness 智能体。

30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查有告警:npm 同名包「dsh-mobile-bridge」归属 dshapp/dsh-mobile-bridge,装到的可能不是本插件;安装清单取自 plugins/mobile-bridge/package.json。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add SunWay0573/dsh-mobile
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
数据截至 2026/11/02·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 33 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(unknown · 2026/11/2) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安装兼容性检查⚠ 装前注意

npm 同名包「dsh-mobile-bridge」归属 dshapp/dsh-mobile-bridge,装到的可能不是本插件;安装清单取自 plugins/mobile-bridge/package.json

展开查看检查明细 ↓

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

✓npm 包dsh-mobile-bridge @ 0.3.5
✓Node 引擎要求 >=22.18 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/11 22:21:46

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令发起外部网络请求
查看扫描证据(共 6 处,展示前 6 条)
  • 执行外部命令来自配置/变量
    plugins/mobile-bridge/src/curtain.ts:88
    spawn(command, [...args], { stdio: 'ignore' }))
  • 执行外部命令来自配置/变量
    plugins/mobile-bridge/src/curtain.ts:116
    child = this.#spawn(resolved.command, resolved.args)
  • 发起网络请求
    plugins/mobile-bridge/src/notify.ts:95
    const response = await this.#fetch(this.#url, {
  • 发起网络请求
    plugins/mobile-bridge/src/wake.ts:75
    const response = await this.#fetch(`${this.#url}/wake`, {
  • 执行外部命令来自配置/变量
    plugins/sleep-guard/src/assertion.ts:53
    spawn(command, [...args], { stdio: 'ignore' })
  • 执行外部命令来自配置/变量
    plugins/sleep-guard/src/assertion.ts:157
    child = this.#spawn(this.#command, this.#args)
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 远程唤醒电脑代理
  • 工作感知休眠
  • 推送通知

从手机控制你家中的 DeepSeek Harness 代理:Android 应用 + DSH 插件,实现远程唤醒、工作感知休眠、推送通知和隐私帘。

README

由 DeepSeek 最新模型翻译生成
dsh-mobile 用手机遥控家里那台电脑上运行的 DeepSeek Harness 智能体。 一个 Android 应用 + 一组 DSH 宿主插件,把一台跑着 DSH 的电脑变成 7×24 可远程遥控的智能体:与桌面端同一份对话数据、同一套 Web 界面,再加上手机真正需要的那几件事——远程唤醒、有活时才不睡的睡眠策略、智能体需要你时推送到手机、以及一块让家里没人能偷看你屏幕的防窥屏。 非官方项目。 这是社区作品,与 DeepSeek 无隶属、无背书、无赞助关系。DSH 本身是 MIT 许可,这正是本项目得以存在的前提——见 LICENSE。 为什么需要它 DSH 的桌面端,剥开看就是一个本机 HTTP 服务加一个浏览器界面。这意味着手机可以和桌面端对话同一个宿主进程、看到同一份会话文件——没有同步层、没有冲突解决、没有复制。
展开完整文档(README 剩余 1 节)
dsh-mobile

用手机遥控家里那台电脑上运行的 DeepSeek Harness 智能体。

一个 Android 应用 + 一组 DSH 宿主插件,把一台跑着 DSH 的电脑变成 7×24 可远程遥控的智能体:与桌面端同一份对话数据、同一套 Web 界面,再加上手机真正需要的那几件事——远程唤醒、有活时才不睡的睡眠策略、智能体需要你时推送到手机、以及一块让家里没人能偷看你屏幕的防窥屏。

非官方项目。 这是社区作品,与 DeepSeek 无隶属、无背书、无赞助关系。DSH 本身是 MIT 许可,这正是本项目得以存在的前提——见 LICENSE。

为什么需要它

DSH 的桌面端,剥开看就是一个本机 HTTP 服务加一个浏览器界面。这意味着手机可以和桌面端对话同一个宿主进程、看到同一份会话文件——没有同步层、没有冲突解决、没有复制。

但真拿来远程用,缺四样东西,本项目补上它们:

| 缺口 | dsh-mobile 补什么 |
| 宿主只绑 127.0.0.1,且 CLI 明确拒绝 --host 0.0.0.0 | 隧道方案 + 一行 profile 补丁 |
| 没有任何机制阻止机器在干活中途睡着,或让它在空闲时保持睡眠 | sleep-guard:工作感知的睡眠抑制 |
| 没有任何办法从外面唤醒一台睡着的机器 | 唤醒栈:RTC 定时自醒 + 局域网唤醒中继 |
| DSH 完全没有出站通知通道 | mobile-bridge:推送、防窥屏、唤醒触发 |

架构

┌──────────────────────────────────────────────┐
│ Android 应用(Kotlin + Compose) │ │ · 原生外壳:设置、唤醒、生物识别锁 │ │ · WebView:对话界面 │ │ (就是 DSH 自己的 Web 客户端) │ └───────────────┬──────────────────────────────┘ │ WireGuard 隧道 / frp ▼ ┌──────────────────────────────────────────────┐ │ 家里的电脑 —— 唯一的 DSH 宿主 │ │ │ │ dsh --profile web --port 3080 │ │ ├─ HTTP /api/* (RPC) │ │ ├─ WS /api/remote.mux (流式) │ │ └─ 静态界面 │ │ │ │ plugins/sleep-guard 工作感知睡眠抑制 │ │ plugins/mobile-bridge 推送 + 防窥 │ │ │ │ ~/.dsh/sessions/<项目>/<会话ID>/ │ │ session.lock ← 排他写锁 │ │ session.v4.jsonl.zstd ← 对话数据 │ └──────────────────────────────────────────────┘ ▲ │ magic packet(仅限同一子网) wol-bridge(树莓派 / NAS / 路由器)

唯一的架构硬约束

DSH 的会话文件由一把内核排他锁守护(flock,无超时、无抢占)。同一时刻只有一个宿主进程能写一个会话。

所以手机和桌面端必须是同一个宿主进程的两个客户端,而不是两个 DSH 实例。这也正是"同步"是伪需求的原因:数据从头到尾只有一份。

组件

android/ —— 应用

原生 Kotlin + Jetpack Compose 外壳,包着一个 WebView。

原则是:来自宿主的一切交给 WebView,宿主做不到的才用原生。

对话界面加载的是DSH 自己的 Web 客户端。这是刻意的——转录、工具调用卡片、审批面板、输入框因此与桌面端完全一致,而且DSH 升级时它们自动跟着走,没有任何需要维护的重实现。

原生负责:宿主地址与设置、唤醒、生物识别锁、进程级重连。

原本计划里有一个原生会话列表,后来撤回了。原生渲染它意味着要重新实现 DSH 的 RPC 信封和一次性令牌换 Cookie 的流程,只为了画一个 web 客户端已经画对的界面——等于把认证路径实现两遍。加载后的客户端里的侧栏就是会话列表。

plugins/sleep-guard/ —— 跟着工作走的睡眠

大家真正想要的行为:

| 状态 | 行为 |
| 空闲,没有任务 | 睡。 省电、安静。 |
| 有回合或后台任务在跑 | 保持唤醒。 绝不在任务中途睡着。 |
| 有定时任务待触发 | 到点自醒(RTC 唤醒)。 |
| 你想用它了 | 从手机唤醒。 |

DSH 已经发出了恰好需要的事件,插件因此很小:

const busy = () =>
ctx.agents.list().some(a => a.status === 'running') ||
collectJobs(ctx).some(j => j.status === 'running' || j.status === 'stopping')

三个容易写错、而这里都处理了的细节:

- status === 'idle' 不等于"没活干":空闲只表示没有 driver 在调度,而后台 bash 任务会比启动它的那个回合活得更久。只看 agent 会得到一台"构建到一半就睡着"的机器。
- ctx.jobs.list() 不带参数只返回 unowned 任务:必须再对每个活跃 agent(含子 agent)按会话 id 查一遍,否则会漏掉每一个普通的后台任务。
- 'stopping' 仍然占用机器:活还没干完。

busy() 翻真就 spawn 一个 caffeinate -i,翻假就 kill 掉。用子进程而不是原生断言 API 是刻意的:断言的寿命因此绑定在一个进程上,插件崩溃或卡死都不可能让机器永久无法睡眠。

plugins/mobile-bridge/ —— 推送、防窥、唤醒

- 推送 —— DSH 没有出站通知通道。这个插件订阅 approval/request 和回合结束,POST 到一个 webhook(默认 ntfy)。没有它,无人值守的智能体在需要审批时会静默失败——DSH 的审批策略无超时且 fail-closed。
- 防窥屏 —— 远程操作时锁屏。注意这比像素级远程桌面工具能做的方式更强:它们必须用遮罩假装黑屏,因为真锁屏会让它们自己瞎掉;而 DSH 通过 HTTP 驱动机器,根本不在乎显示器,所以可以直接锁屏。
- 唤醒触发 —— 手机 App 里对 wol-bridge 发起请求的按钮。

wol-bridge/ —— 唤醒一台睡着的机器

Wake-on-LAN 是广播包,跨不了路由器,所以从外面唤醒必须靠同一子网里一台已经醒着的设备。

这是一段纯标准库的 Python 服务,跑在树莓派、NAS 或局域网上任何常开的机器上,外加一个供手机经隧道访问的 HTTP 端点。

如果你不想额外跑东西,先去路由器管理页看看有没有内置的网络唤醒功能——很多都有。

快速开始

详细文档在 docs/。这里只是轮廓。

1. 让宿主可达。 跑一个独立的 DSH 宿主,前面放隧道:

dsh --profile web --no-open --port 3080

然后接 WireGuard/Tailscale,或 frp 转发到一台小 VPS。完整做法(包括 DSH 接受非 loopback Host 头之前必须打的信任围栏补丁)见 docs/setup-tunnel.md。

2. 安装插件到你的 DSH profile,重启宿主。

3. 配置唤醒栈。 在接电源时开启 Wake-on-LAN,并且——这条坑所有人——关掉随机化的 Wi-Fi MAC 地址,否则你的 magic packet 会发给一个机器早已不再使用的地址:

networksetup -getMACAddress Wi-Fi # 硬件 MAC ifconfig en0 | grep ether # 实际在用的 MAC

两者不一致就先关掉该网络的「私有 Wi-Fi 地址」。见 docs/setup-power.md。

4. 装 App。 v0.1.0-pre 有可直接侧载的 APK:

adb install app-debug.apk

也可以自己构建——见 android/。发布签名密钥属于项目维护者的决定,而且是个秘密,所以这个预发布版是 debug 签名的,并且在文档里明说了。

验证这一切用 CI 调用的同一个脚本:

scripts/verify.sh # 全部,含启动真实宿主 scripts/verify.sh --strict # CI 跑的;缺工具链算失败 scripts/verify.sh --without-integration # 跳过最慢的那项

一个全新的 git clone 用这一条命令就能全绿,无需任何额外配置。 它会自己装插件依赖、构建、跑全部测试、构建 Android APK,并启动一个真实 DSH 宿主把两个插件装上。

最后那项不是装饰:它是唯一能发现"插件安装干净、类型检查通过、每个单元测试都过、但就是从不运行"的检查——这个问题在本项目里发生过三次。

状态

早期项目。设计已经稳定,建立在对手写 DSH 源码和一款商用远程桌面工具的实机审计之上。

| 组件 | 状态 | 测试 |
| 设计与架构 | ✅ 设计文档(英文)、完整审计(中文) | — |
| plugins/sleep-guard | ✅ 工作感知睡眠抑制 | 54 |
| plugins/mobile-bridge | ✅ 推送、防窥屏、唤醒触发 | 68 |
| wol-bridge | ✅ magic packet + HTTP 端点 | 73 |
| Android 应用 | ✅ 可构建;APK + 55 个单元测试已验证 | 55 |
| 发布 | ✅ v0.1.0-pre,debug 签名 APK | — |
| CI | ⏸ 已写好,在 ci-workflow 分支;运行 scripts/enable-ci.sh | — |

共 250 个测试,外加对真实 DSH 宿主的集成验证。

集成检查会做两件别的检查做不到的事:确认插件真的被加载,以及确认 sleep-guard 真的在工作时持有睡眠断言——夹具开一个后台任务,脚本从进程外用 pmset -g assertions(Linux 上是 systemd-inhibit)观察断言的出现与消失。从进程外面观察,因为插件报告自己的状态证明不了任何事。

那个"装上了但从不运行"的问题有三种不同的成因,且都通过了全部自动化检查。现在两种方式都在拦:源码层面由 scripts/check-plugins.mjs 检查,真实宿主层面由 scripts/verify-integration.sh 检查。

CI

工作流已经写好并在 ci-workflow 分支上,但 GitHub 不允许任何 OAuth App 在没有 workflow token scope 的情况下创建或更新 .github/workflows/——这道控制是为了防止被盗的 token 悄悄植入会窃取密钥的 CI。所以要把它装上去,需要你在浏览器里授权一次:

scripts/enable-ci.sh --check # 会精确报告缺什么 gh auth refresh -h github.com -s workflow # 你在这步于浏览器中授权 scripts/enable-ci.sh # 装好并推送

五个 job:hygiene、plugins、wol-bridge、integration、android。

出问题的时候

docs/troubleshooting.md(英文)按症状组织,并且说明如何确认每个成因,而不只是"可能是"。几条值得在踩到之前就知道的:

- 插件装了,但什么也没发生。 三种截然不同的原因,表现完全一样,而且全部能通过自动化检查。
- 403 与 401 的区别。 403 是 Host/Origin 问题,和认证毫无关系。分清这两个能省下最多时间。
- 机器唤不醒。 通常是随机化的 Wi-Fi MAC 地址——而你配的硬件 MAC 是错的那个。
- 定时任务没跑。 机器睡着了它就不会跑——那些定时器是进程内的。

参与贡献

欢迎 issue 和 PR,见 CONTRIBUTING.md。

动手前有两件事值得知道:

- 绝不要提交凭据。 隧道配置、~/.dsh/.credentials.yaml、ntfy topic、写死了地址的 WoL 脚本,都很容易泄漏。
- 如果你全局的 git 身份是公司邮箱,请为本仓库单独设置。 一旦推送,邮箱就永久写进公开历史:
git config user.email "<id>+<username>@users.noreply.github.com"

安全

本项目把一个能执行任意代码的智能体暴露出来。放到网络上之前请先读 SECURITY.md。简短版:用隧道,绝不做公网端口转发;把隧道 ACL 限制到你自己的设备;把手机当作你电脑的钥匙。

许可证

MIT —— 见 LICENSE。

DSH 本身是 MIT 许可(Copyright (c) 2026 DeepSeek);本项目基于其公开插件 API 构建,不分发它的任何代码。细节与「非官方」声明见 THIRD_PARTY_NOTICES.md。
预览分享卡片长什么样 ↓SunWay0573/dsh-mobile
分享 · DeepSeek Harness Hub
SunWay0573/dsh-mobile

用手机遥控家里那台电脑上运行的 DeepSeek Harness 智能体。

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部