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

手机远程网关 Gao-Yee/dsh-mobile-gateway

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

用手机密码登录,随时查看对话并审批工具调用

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · ui
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 78 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 19 处,展示前 19 条)
  • 写入本地文件
    gateway.js:30
    try { fs.appendFileSync(LOG_PATH, line + '\n'); } catch (_) {}
  • 读取本地文件
    gateway.js:55
    if (fs.existsSync(CONFIG_PATH)) {
  • 读取本地文件
    gateway.js:57
    config = JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf8'));
  • 写入本地文件
    gateway.js:83
    fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + '\n');
  • 读取本地文件
    gateway.js:93
    const config = fs.existsSync(CONFIG_PATH)
  • 读取本地文件
    gateway.js:94
    ? JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf8'))
  • 写入本地文件
    gateway.js:97
    fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + '\n');
  • 发起网络请求
    gateway.js:321
    const preq = http.request(
  • 发起网络请求
    gateway.js:352
    const preq = http.request(
  • 读取本地文件
    gateway.js:413
    if (fs.existsSync(pagePath)) {
  • 读取本地文件
    gateway.js:415
    fs.createReadStream(pagePath).pipe(res);
  • 读取密钥环境变量
    test-model.js:8
    const PASSWORD = process.env.DSH_GW_PASSWORD || process.argv[2];
  • 读取本地文件
    test-model.js:14
    const html = fs.readFileSync(path.join(__dirname, 'mobile.html'), 'utf8');
  • 发起网络请求
    test-model.js:27
    const loginResp = await fetch(BASE + '/login', {
  • 读取密钥环境变量
    ui-test-controls.js:7
    const PASSWORD = process.env.DSH_GW_PASSWORD || process.argv[2];
  • 写入本地文件
    ui-test-controls.js:16
    fs.mkdirSync(SHOTS, { recursive: true });
  • 读取密钥环境变量
    ui-test.js:6
    const PASSWORD = process.env.DSH_GW_PASSWORD || process.argv[2];
  • 写入本地文件
    ui-test.js:15
    fs.mkdirSync(SHOTS, { recursive: true });
  • 发起网络请求
    ui-test.js:191
    await page.evaluate((bid) => { fetch('/api/session.cancel', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 密码登录访问
  • 手机查看对话
  • 审批工具调用

让手机(同一 Wi-Fi / Tailscale)通过密码登录安全访问本机 DeepSeek Harness Web GUI 的零依赖 Node 反向代理网关,附手机专用 SPA 界面

README

由 DeepSeek 最新模型翻译生成
dsh-mobile-gateway 让 iPhone(或任何手机/平板)通过密码登录安全访问电脑上的 DeepSeek Harness,并附带一个手机专用轻量界面(看对话/发消息、审批工具调用、回答提问、查看任务)。 架构 iPhone Safari(同一 Wi-Fi / Tailscale 虚拟网) │ http://:3081 │ 密码登录 → 签发 HttpOnly 会话 Cookie ▼ dsh-mobile-gateway(Node,零依赖,监听 0.0.0.0:3081) │ 校验 Cookie → 透传 HTTP / SSE / WebSocket │ ├─ /m 手机专用界面(同源 SPA) │ ├─ /login 登录页 │ └─ /api/* 与 WS 透传给 DSH ▼ DSH Web GUI 127.0.0.1:3080(保持原样,只监听本机,永不对外暴露) 手机界面(推荐入口) 登录后(或登录页点「📱 手机版界面」)打开 http://:3081/m,功能: - 会话列表按工作区分组(一级=工作区,二级=会话;组头+号可一键在该工作区新建会话),会话带运行状态、一键停止、待处理审批/提问徽标 - 会话卡片「⋯」菜单:重命名 / 归档(归档二次确认,电脑端可恢复) - 对话:流式显示消息与思考过程、工具调用/结果折叠卡片、加载更早消息
展开完整文档(README 剩余 1 节)
dsh-mobile-gateway

让 iPhone(或任何手机/平板)通过密码登录安全访问电脑上的 DeepSeek Harness,并附带一个手机专用轻量界面(看对话/发消息、审批工具调用、回答提问、查看任务)。

架构

iPhone Safari(同一 Wi-Fi / Tailscale 虚拟网) │ http://:3081 │ 密码登录 → 签发 HttpOnly 会话 Cookie ▼ dsh-mobile-gateway(Node,零依赖,监听 0.0.0.0:3081) │ 校验 Cookie → 透传 HTTP / SSE / WebSocket │ ├─ /m 手机专用界面(同源 SPA) │ ├─ /login 登录页 │ └─ /api/* 与 WS 透传给 DSH ▼ DSH Web GUI 127.0.0.1:3080(保持原样,只监听本机,永不对外暴露)

手机界面(推荐入口)

登录后(或登录页点「📱 手机版界面」)打开 http://:3081/m,功能:

- 会话列表按工作区分组(一级=工作区,二级=会话;组头+号可一键在该工作区新建会话),会话带运行状态、一键停止、待处理审批/提问徽标
- 会话卡片「⋯」菜单:重命名 / 归档(归档二次确认,电脑端可恢复)
- 对话:流式显示消息与思考过程、工具调用/结果折叠卡片、加载更早消息
- 审批工具调用:实时弹出「允许一次 / 拒绝」卡片
- 回答提问:选项 / 自定义输入 / 取消(实时流不打断输入焦点)
- 任务面板:当前会话的 jobs 实时状态;agent 出错有提示
- 选择对话模式:新会话发送首条消息前,可在输入框上方切换 Agent 预设(标准 / PTC / 极简 / 创造模式及自定义预设);会话开始后模式固定,chip 变为只读(电脑端切换会实时同步到手机)
- 选择模型与思考强度:输入框上方 chip 实时显示当前模型与强度档位,点开底部弹层按提供商分组切换模型、单独调整思考强度(off / high / max 等,随模型目录而定)
- 移植 Web 端原有 UI:/m 直接复用 DSH Web 客户端的原始 CSS 变量、侧栏会话行、消息气泡、思考/工具行与输入卡视觉(仅做手机尺寸适配),不再使用自创的玻璃拟态风格
- 深色 / 浅色主题切换:列表页底部与对话页头部均有切换按钮,选择持久化(localStorage),刷新保持
- 断线自动补漏:手机锁屏/切 App 导致 WS 断开后,重连自动重放历史尾页(按 seq 去重)
- iOS 安全区适配、PWA manifest,可「添加到主屏幕」当 App 用

桌面端完整界面仍在 http://:3081/(与原来一致)。

界面预览

ipad版会话列表(浅色模式,部分本地路径已模糊处理)

手机版对话界面(新建会话)

文件说明

| 文件 | 作用 |
| gateway.js | 网关主程序(登录、限速、会话、反向代理、/m 路由) |
| mobile.html | 手机专用 SPA(零构建单文件,对接 DSH /api RPC 与 WS 事件流) |
| config.example.json | 配置模板(可复制为 config.json 使用,空字段会在首次启动时自动生成) |
| config.json | 运行时配置(端口、密码哈希、会话密钥)——首次运行自动生成,已被 .gitignore 排除 |
| gateway.log | 运行日志——已被 .gitignore 排除 |
| package.json | npm 脚本与可选开发依赖(playwright-core,仅 UI 测试使用) |
| 启动网关.bat / 停止网关.bat | 双击即用的开关(推荐日常使用,无需开 PowerShell) |
| start-gateway.ps1 | 后台启动网关(自动读取 config.json 中的端口) |
| stop-gateway.ps1 | 停止网关(自动读取 config.json 中的端口) |
| register-autostart.ps1 | 注册/取消开机自启(当前未启用,手动开关模式) |
| probe-ws.js | 诊断工具:WebSocket 握手探针 |
| probe-frames.js | 诊断工具:读取 mux/host 实时帧 |
| test-model.js | 模型逻辑回归测试(真实登录 + 真实 API + 合成帧,20 项断言) |
| ui-test.js | 浏览器 UI 回归测试(iPhone 15 Pro Max 视口,需 npm i playwright-core 与本机 Chrome) |
| ui-test-controls.js | 新功能 UI 测试:主题切换 / 对话模式选择 / 模型与思考强度弹层(同上依赖) |

快速开始(PC 端)

1. 确认 DSH 正在运行:浏览器能打开 http://127.0.0.1:3080
2. 双击 启动网关.bat(或在 PowerShell 中运行 .\start-gateway.ps1)
3. 查看 gateway.log,里面会列出本机局域网地址,如 http://192.168.x.x:3081

手机接入

方式一:同一 Wi-Fi 直连(最简单)

1. iPhone 与电脑连同一个 Wi-Fi
2. Safari 打开 http://:3081/healthz —— 显示 ok 说明网络通
3. 打开 http://:3081 → 输入访问密码 → 进入 DSH
4. 建议:分享按钮 →「添加到主屏幕」,像 App 一样使用

电脑 IP 可从 gateway.log 查看,或在电脑上运行 ipconfig 查看 WLAN 的 IPv4 地址。

方式二:Tailscale(推荐:全程加密,出门在外也能用)

1. 电脑安装 Tailscale(https://tailscale.com/download),登录你的账号
2. iPhone App Store 安装 Tailscale,登录同一个账号
3. 电脑上获取 Tailscale IP(托盘图标菜单中显示,或命令行 tailscale ip -4,形如 100.x.y.z)
4. iPhone Safari 打开 http://:3081 → 登录使用

首次使用注意(防火墙)

如果手机打不开 /healthz,是 Windows 防火墙拦截了 3081 端口。在管理员 PowerShell 中运行一次:

netsh advfirewall firewall add rule name="dsh-mobile-gateway" dir=in action=allow protocol=TCP localport=3081 profile=private

如果你的 Wi-Fi 被 Windows 识别为「公用网络」,请把命令中的 private 换成 any。
Tailscale 访问若被拦,也建议使用 profile=any 的规则。

密码管理

- 首次运行:自动生成随机密码,只在启动日志中显示一次
- 修改密码:node gateway.js --set-password ,然后重启网关生效(stop-gateway.ps1 → start-gateway.ps1)
- 忘记密码:同样用上面的命令直接设置新密码
- 密码只以 SHA-256 哈希保存在 config.json,不存明文
- 改密码不影响已登录设备的会话(Cookie 签名制);如需强制重新登录,在设备上访问 /logout

常用操作

| 操作 | 命令 |
| 启动 | 双击 启动网关.bat(或 .\start-gateway.ps1) |
| 停止 | 双击 停止网关.bat(或 .\stop-gateway.ps1) |
| 开机自启 | 需要时再启用:.\register-autostart.ps1(取消:.\register-autostart.ps1 -Remove) |
| 修改密码 | node gateway.js --set-password (需重启网关生效) |
| 退出登录 | 手机浏览器访问 http://:3081/logout |
| 诊断 WS | node probe-ws.js |

当前为手动开关模式:开机不会自动启动网关,用手机前先双击「启动网关.bat」。

开发与测试

运行测试前请先启动网关,并确保 DSH 后端(http://127.0.0.1:3080)可用。

UI 测试依赖 playwright-core 与本机 Chrome/Edge:

npm install

模型逻辑回归测试(需要访问密码,二选一)
node test-model.js
DSH_GW_PASSWORD= node test-model.js

浏览器 UI 测试(需本机 Chrome)
DSH_GW_PASSWORD= node ui-test.js
DSH_GW_PASSWORD= node ui-test-controls.js

非 Windows 或 Chrome 不在默认路径时,通过环境变量指定浏览器
DSH_CHROME_PATH="C:\Program Files\Google\Chrome\Application\chrome.exe" node ui-test.js

测试脚本不会读取或保存明文密码;请通过环境变量 DSH_GW_PASSWORD 或第一个命令行参数传入访问密码,不要硬编码到代码中。

开源协议

MIT。gateway.js 与 mobile.html 为零依赖实现,仅使用 Node.js 内置模块;UI 测试使用 playwright-core 作为可选开发依赖。

安全说明

- 鉴权:所有请求(含 WebSocket 升级)都必须携带有效会话 Cookie,否则 401/跳转登录页
- 限速:同一 IP 连续 5 次密码错误锁定 10 分钟
- 会话:HMAC 签名 + 有效期(默认 30 天,config.json 中 sessionDays 可调),HttpOnly 防脚本窃取
- 隔离:DSH 本体(3080)始终只监听 127.0.0.1;网关 3081 是唯一网络入口
- 传输加密:直连模式下为 HTTP 明文(依赖家庭 Wi-Fi 的 WPA 加密);Tailscale 模式下全程 WireGuard 端到端加密,外出使用请务必走 Tailscale

常见问题

| 现象 | 原因与解决 |
| /healthz 打不开 | 防火墙未放行 3081,见上文管理员命令;或电脑/手机不在同一网络 |
| 登录后页面 502 | dsh web 未运行,先在电脑上启动 DSH |
| 手机登录页正常但会话频繁失效 | 手机时间与电脑偏差过大,校准时间 |
| 忘记密码 | node gateway.js --set-password |
| 想改端口 | 编辑 config.json 的 port,重启网关(同时更新防火墙规则) |
预览分享卡片长什么样 ↓Gao-Yee/dsh-mobile-gateway
分享 · DeepSeek Harness Hub
Gao-Yee/dsh-mobile-gateway

用手机密码登录,随时查看对话并审批工具调用

这是你的仓库?认领条目

回到顶部