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

手机远程操控 renger185/dsh-phone-remote

DeepSeek Harness
renger18513 天前有提交已提供中文文档扫描:含敏感能力

手机远程操控 DSH:手机浏览器原生页面 + 限时门 + 企微机器人长连接

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add renger185/dsh-phone-remote
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →

可信度证据

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 29 处,展示前 25 条)
  • 写入本地文件
    index.js:65
    mkdirSync(dirname(pluginLogFile), { recursive: true })
  • 写入本地文件
    index.js:66
    appendFileSync(pluginLogFile, `[${new Date().toISOString()}] ${line}\n`, 'utf8')
  • 读取本地文件
    index.js:97
    const map = JSON.parse(readFileSync(channelsFile, 'utf8'))
  • 读取本地文件
    index.js:121
    return JSON.parse(readFileSync(doorStateFile, 'utf8'))
  • 执行外部命令来自配置/变量
    index.js:185
    const child = spawn(process.execPath, [doorScript, '--minutes', String(doorMinutes), '--quiet'], {
  • 发起网络请求
    index.js:279
    const response = await fetch(wecomWebhook, {
  • 发起网络请求
    index.js:313
    const response = await fetch(ntfyUrl, {
  • 写入本地文件
    index.js:356
    await mkdir(dirname(linkFile), { recursive: true })
  • 写入本地文件
    index.js:357
    await writeFile(linkFile, link + '\n', 'utf8')
  • 写入本地文件
    index.js:361
    await writeFile(
  • 读取本地文件
    index.js:487
    const s = JSON.parse(readFileSync(SETUP_FILE, 'utf8'))
  • 写入本地文件
    index.js:501
    writeFileSync(SETUP_FILE, JSON.stringify(next, null, 2) + '\n', 'utf8')
  • 读取本地文件
    index.js:531
    const s = JSON.parse(readFileSync(BOT_SESSION_FILE, 'utf8'))
  • 删除本地文件
    index.js:614
    try { unlinkSync(SETUP_FILE + '.selftest') } catch { }
  • 读取本地文件
    index.js:716
    if (!existsSync(p)) continue
  • 读取本地文件
    index.js:717
    const raw = JSON.parse(readFileSync(p, 'utf8'))
  • 发起网络请求
    client.js:27
    const res = await fetch(API + '/bot-setup', { cache: 'no-store' });
  • 发起网络请求
    client.js:45
    const res = await fetch(API + '/bot-setup', {
  • 执行外部命令来自配置/变量
    companion/phone-proxy-supervisor.mjs:53
    child = spawn(process.execPath, [PROXY], { stdio: 'inherit', cwd: HERE, windowsHide: true })
  • 发起网络请求
    companion/phone-proxy.mjs:401
    const proxyReq = http.request(
  • 发起网络请求
    companion/phone-proxy.mjs:469
    const proxyReq = http.request({
  • 发起网络请求
    companion/temp-door.mjs:116
    const response = await fetch(url, {
  • 执行外部命令来自配置/变量
    companion/temp-door.mjs:175
    const child = spawn(cloudflared, ['tunnel', '--url', `http://127.0.0.1:${PROXY_PORT}`, '--no-autoupdate'], {
  • 发起网络请求
    companion/temp-door.mjs:217
    const response = await fetch(publicUrl, { redirect: 'manual', signal: controller.signal })
  • 执行外部命令来自配置/变量
    companion/wecom-bot.mjs:55
    const child = spawn(process.execPath, [path.join(HERE, 'temp-door.mjs'), '--minutes', String(minutes)], {
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-llm
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
Phone Remote · 手机远程操控 DSH 界面 让你在外面用安卓/iPhone 手机的浏览器原生页面打开本机的 DeepSeek Harness(DSH),接收「任务跑完」提醒,并在手机上给电脑发一句话就能召唤远程入口。 一套最小可用方案,由插件 + 三个配套小服务组成。不用买域名、不用改路由器、不用租服务器。 语言:中文 · English 它解决什么问题 DSH 的 Web 界面默认只监听 127.0.0.1,手机碰不到。本方案做四件事: | # | 能力 | 走什么 | | 1 | 同 WiFi 用手机浏览器直接开 DSH | 本机反向代理(传达室)+ 自动续登录钥匙 | | 2 | 出门用流量也想用浏览器原生页面 | 临时限时门(到点自动关,链接作废) | | 3 | 任务跑完/出错主动提醒到手机 | 任意 Webhook 推送通道(企微群机器人等) | | 4 | 手机发一句话就能召唤(在外面也能开门) | 机器人长连接(Bot ID + Secret,主动连出去) |
展开完整文档(README 剩余 1 节)
Phone Remote · 手机远程操控 DSH 界面

让你在外面用安卓/iPhone 手机的浏览器原生页面打开本机的 DeepSeek Harness(DSH),接收「任务跑完」提醒,并在手机上给电脑发一句话就能召唤远程入口。

一套最小可用方案,由插件 + 三个配套小服务组成。不用买域名、不用改路由器、不用租服务器。

语言:中文 · English

它解决什么问题

DSH 的 Web 界面默认只监听 127.0.0.1,手机碰不到。本方案做四件事:

| # | 能力 | 走什么 |
| 1 | 同 WiFi 用手机浏览器直接开 DSH | 本机反向代理(传达室)+ 自动续登录钥匙 |
| 2 | 出门用流量也想用浏览器原生页面 | 临时限时门(到点自动关,链接作废) |
| 3 | 任务跑完/出错主动提醒到手机 | 任意 Webhook 推送通道(企微群机器人等) |
| 4 | 手机发一句话就能召唤(在外面也能开门) | 机器人长连接(Bot ID + Secret,主动连出去) |

通知里的链接一律走公网(v0.3.0 起):发通知前,插件先看有没有还活着的临时门(doorMinRemainingMs 默认 0:只要没到期就复用,不重开门;复用时通知里只说明「门没关」、不重复给链接);没有才自动开一扇(doorMinutes 默认 480 = 8 小时)再把公网地址放进通知;门到点自动关、链接随即失效。
进门要带门钥匙(?gate=<gateKey>,32 字符随机串,跟门同生共死):只拿到域名打不开(401),但拿到完整链接的人在门关之前都能进——这条边界详见 docs/SECURITY.md 第 2 节。
门没开成时宁可不带链接(附一句说明),也绝不推一条点不开的死链接。
为什么改:以前通知里放的是「手机可达地址前缀」(mobileBaseUrl,家里局域网 IP),一出门在公网上根本不存在这个地址,点开必然打不开——这是 10-19 boss 反馈的根因。

目录结构

plugin/ # DSH 的 Cordis 插件(Host 半 + Client 半),本目录 ├─ index.js # Host 半:生成手机入口链接、写 upstream、任务完成/出错推送 ├─ client.js # Client 半:「手机远程」窄屏面板(工作区分区 + 忙闲 + 派活) ├─ cordis.patch.yml# 插件行配置(上传前请替换为 config.example.yml 的占位符写法) ├─ config.example.yml # 脱敏配置模板 ├─ bot.example.json # 机器人凭据模板(脱敏) ├─ docs/ # 文档:踩坑 / 引导 / 架构 / 安全 └─ .gitignore # 排除真实凭据、日志、二进制

../phone-proxy.mjs # 传达室:51130 → 127.0.0.1:<DSH端口>(改写 Host/Origin) ../temp-door.mjs # 临时限时门:cloudflared 快速隧道,到点自动关 ../bot/wecom-bot.mjs # 机器人长连接(示例实现:企业微信智能机器人)

三个配套服务各自独立、可单独使用。只用插件也能跑通第 1、3 条;第 2 条要 temp-door.mjs,第 4 条要 bot/。

快速开始(最短路径)

1. 装插件:用 DSH 的插件管理器装载 plugin/ 目录(install_bundle,目标指向本目录)。
2. 配两项(见 config.example.yml):
- pushWebhook:任意接受 POST JSON 的推送地址(企微群机器人 / 飞书自定义机器人 / 钉钉 / ntfy…);
- linkFile / mobileBaseUrl:入口链接落盘位置、手机可达的地址前缀。
3. 起传达室(同 WiFi 直接用):node phone-proxy.mjs,建议用系统计划任务托管(见 docs/GUIDE.md)。
4. (可选)起机器人长连接:填 botId/secret 后 node bot/wecom-bot.mjs,手机发「开门」即召唤。

细节步骤、分平台适配、验证清单见 docs/GUIDE.md。

文档索引

| 文档 | 内容 |
| docs/TUTORIAL-WECOM.md | 企业微信部署教程:照着做就能跑通(含智能机器人长连接 + 群机器人推送 + 计划任务托管 + 排障表);英文版 TUTORIAL-WECOM.en.md |
| docs/GUIDE.md | 通用引导:从零到跑通、平台适配表、验证清单、排障 |
| docs/PITFALLS.md | 踩坑总结:我们实际踩过的每一个坑(现象 → 根因 → 对策) |
| docs/ARCHITECTURE.md | 架构与数据流、平台无关抽象(出口 Webhook / 入口 Bot) |
| docs/SECURITY.md | 安全须知、凭据管理、上传公开仓库前的脱敏清单 |

打包分享清单(要带走哪些文件)

仓库里只放:

plugin/
├─ index.js client.js package.json icon.svg
├─ locale/{en,zh}.json
├─ config.example.yml # 配置模板(占位符) ├─ bot.example.json # 机器人凭据模板(占位符) ├─ README.md docs/.md .gitignore └─ companion/ # ← 上传前从上一级目录移入并脱敏(见下) ├─ phone-proxy.mjs phone-proxy-supervisor.mjs ├─ temp-door.mjs └─ wecom-bot.mjs

上传前必须处理的三件事:

1. 不要提交 cordis.patch.yml(含真实工作路径 / 内网 IP / 推送频道)→ 用 config.example.yml 代替;
2. 不要提交 任何 .json 真实配置(机器人 botId/secret、推送通道表)→ 用 bot.example.json 代替;
3. companion/ 里的三个配套脚本已经是脱敏副本(推送出口改读 push.json 或环境变量 PUSH_WEBHOOK;机器人脚本的相对路径已按同目录改好),直接带上即可。

更省事的做法:跑一键打包脚本,它自动剔除全部敏感文件与产物: powershell pwsh -File .\publish.ps1 -Target ..\..\dsh-phone-remote-publish

生成目录即为可直接 git push 的仓库内容。
提交前请逐条跑 docs/SECURITY.md 第 5.3 节的自检命令,全部应为"无匹配"。

平台无关性

本方案刻意不绑定某个 IM 平台,只要满足下面两条就能适配:

- 出口(发通知):给一个 Webhook 协议地址,能 POST 一段 JSON。
企微群机器人、飞书自定义机器人、钉钉机器人、ntfy、Slack…均可。
- 入口(收消息):给一个 Bot ID + Secret,且该平台支持长连接(客户端主动连出去收消息)。
企业微信「智能机器人」、飞书自建应用、QQ 机器人均属此类。

关键取舍:收消息一定要走长连接,不要走"平台把消息推到一个公网回调地址"。
后者要求一个固定不变的公网 HTTPS 地址——家庭宽带几乎做不到(详见 docs/PITFALLS.md 第 1、3 条)。

演示视频

手机远程实机演示(开门 → 手机浏览器原生页面进入 → 远程派活):media/phone-remote-demo.mp4

版本

当前 v0.3.0(2026-10-19)。改了什么、每个版本修了哪些坑,见 CHANGELOG.md。

许可与出处

示例实现以企业微信为基准(官方 SDK @wecom/aibot-node-sdk)。
欢迎按 docs/ARCHITECTURE.md 的适配接口补其他平台。
预览分享卡片长什么样 ↓renger185/dsh-phone-remote
分享 · DeepSeek Harness Hub
renger185/dsh-phone-remote

手机远程操控 DSH:手机浏览器原生页面 + 限时门 + 企微机器人长连接

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