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

手机遥控台 Swwag666/DSH_Phone_Swag

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

DeepSeek Harness 装进口袋。不碰云端。

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-phone-bridge
npm 源 · dsh-phone-bridge 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · ui
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 28 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过

安装清单取自 dsh-phone/plugin/dsh-phone-bridge/package.json

展开查看检查明细 ↓

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

✓npm 包dsh-phone-bridge @ 0.2.9
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 11:44:27

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

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

读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 33 处,展示前 18 条)
  • 读取密钥环境变量
    index.js:186
    const expected = process.env.DSH_PHONE_BRIDGE_TOKEN ?? "";
  • 读取本地文件
    index.js:264
    const parsed = JSON.parse(readFileSync(candidate, "utf8"));
  • 读取本地文件
    index.js:277
    if (!existsSync(SESSIONS_ROOT)) return null;
  • 读取本地文件
    index.js:278
    for (const slug of readdirSync(SESSIONS_ROOT)) {
  • 读取本地文件
    index.js:280
    if (existsSync(candidate)) return candidate;
  • 读取本地文件
    index.js:293
    if (!existsSync(SESSIONS_ROOT)) return ids;
  • 读取本地文件
    index.js:294
    for (const slug of readdirSync(SESSIONS_ROOT)) {
  • 写入本地文件
    index.js:373
    mkdirSync(dirname(to), { recursive: true });
  • 写入本地文件
    index.js:374
    renameSync(from, to);
  • 写入本地文件
    index.js:608
    writeFileSync(join(trash, "meta.json"), JSON.stringify({
  • 删除本地文件递归
    index.js:676
    rmSync(join(TRASH_ROOT, name), { recursive: true, force: true });
  • 删除本地文件递归
    index.js:678
    rmSync(TRASH_ROOT, { recursive: true, force: true });
  • 写入本地文件
    index.js:747
    mkdirSync(dirname(meta.originalPath), { recursive: true });
  • 写入本地文件
    index.js:748
    renameSync(join(trashDir, "session"), meta.originalPath);
  • 写入本地文件
    index.js:752
    mkdirSync(dirname(meta.cachePath), { recursive: true });
  • 删除本地文件递归
    index.js:758
    rmSync(trashDir, { recursive: true, force: true });
  • 发起网络请求
    client.js:149
    const response = await fetch(url, {
  • 发起网络请求
    client.js:268
    const response = await fetch(API + "/trash");
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

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

界面预览

3 张 · 点击查看大图

功能亮点

  • 本地节点连接
  • 零云端
v0.4.02026-10-04
· 新内容 功能(PWA): · 把聊天导出为 Markdown 和 JSON(菜单 → 导出聊天) · 快捷提示词模板(菜单 → 快捷命令:解释 / 修复 / 测试 / 提交 / 继续) · 点按推送通知会打开对应会话 改进: · 「清除访问密钥」现在会彻底清空推送订阅、service-worker、缓存、IndexedDB 和所有本地 dsh-* 密钥 · 根目录的 dsh-phone.exe 始终是最新的(build-release 会自动复制它) 稳定性(第二轮审计修复): · TLS 只用 ring(去掉重复的 crypto-provider aws-lc) · 通知走有界通道,事件有字节预算(8 MB),watched-TTL,outbox-cap · 限制 4 个并发 web-push 发送的信号量,重操作走 spawn_blocking · 死节点不再显示为运行中 已验证:cargo test 45+7,clippy 0 警告,node --check,签名冒烟测试(RSS 34 MB)。 自动更新:latest.json + minisign 签名(requireSignedVersion)。
v0.2.02026-10-02
· DSH Phone v0.2.0 - 安全加固与公开发布 · 更新内容 · 安全加固 - 审计发现的 12 个问题全部修复:静态资源路径穿越、请求体与请求头大小限制、Python 网关里带 CIDR 的 IP 白名单、token 常量时间比较(Python + Rust)、PWA 里引号转义与 href 过滤、优雅关闭、确定性保留策略 · Service Worker 已生效 - PWA 的离线外壳现在能真正注册了 · 公开发布 - 统一 README、MIT 许可证、截图、工具 · 下载 | 文件 | 说明 | |------|-----------| | dsh-phone-setup.exe | NSIS 安装包:快捷方式、卸载程序 | | dsh-phone.exe | 便携版:单文件,不安装任何东西 | · 环境要求 · Windows 10/11 x64 · 电脑和手机上都装 Tailscale(同一账号) · 带 Agents Anywhere 插件的 DeepSeek Harness Desktop 秩序 · 荣誉 · 协议
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
◆ DSH PHONE DeepSeek Harness 装进口袋。不碰云端。 你的 PC · 你的手机 · 一把钥匙 · 零中间人 秩序 · 荣誉 · 协议 用手机管理 DeepSeek Harness 会话——躺在沙发上、挤在地铁里、身处千里之外都行。DSH Phone 在你的 PC 上拉起本地节点,手机通过 Tailscale 连上去,然后一切就绪:项目列表、与智能体实时对话、审批回复、摄像头拍照、语音消息。没有别人的云,没有中间服务器,没有数据泄露。数据不会离开你的网络。 分步安装,每一环都有验证和排障——GUIDE.md。 安装 | 文件 | 说明 | | releases/dsh-phone-setup.exe | 安装程序——在开始菜单和桌面创建快捷方式,带卸载器 | | releases/dsh-phone.exe | 便携版——单个文件,解压即用 | 从源码构建——见下文。 4 步完成连接 1. 网络。 在 PC 和手机上装 Tailscale,用同一个账号登录。应用会自动识别 PC 的 IP(100.x.x.x 网段)并显示在仪表盘上。 2. 节点。 启动 DSH Phone——8460 端口上的服务器会自动拉起。托盘旁边有个图标,关窗口就是收进托盘。 3. QR。 仪表盘里有张「QR 连接」卡片。
展开完整文档(README 剩余 1 节)
◆ DSH PHONE

DeepSeek Harness 装进口袋。不碰云端。

你的 PC · 你的手机 · 一把钥匙 · 零中间人

秩序 · 荣誉 · 协议

用手机管理 DeepSeek Harness 会话——躺在沙发上、挤在地铁里、身处千里之外都行。DSH Phone 在你的 PC 上拉起本地节点,手机通过 Tailscale 连上去,然后一切就绪:项目列表、与智能体实时对话、审批回复、摄像头拍照、语音消息。没有别人的云,没有中间服务器,没有数据泄露。数据不会离开你的网络。

分步安装,每一环都有验证和排障——GUIDE.md。

安装

| 文件 | 说明 |
| releases/dsh-phone-setup.exe | 安装程序——在开始菜单和桌面创建快捷方式,带卸载器 |
| releases/dsh-phone.exe | 便携版——单个文件,解压即用 |

从源码构建——见下文。

4 步完成连接

1. 网络。 在 PC 和手机上装 Tailscale,用同一个账号登录。应用会自动识别 PC 的 IP(100.x.x.x 网段)并显示在仪表盘上。
2. 节点。 启动 DSH Phone——8460 端口上的服务器会自动拉起。托盘旁边有个图标,关窗口就是收进托盘。
3. QR。 仪表盘里有张「QR 连接」卡片。用手机摄像头(iPhone)或 Google Lens(Android)对准它,点一下链接——自动登录,不用手动敲 32 位 token。
4. PWA。 点「分享 → 添加到主屏幕」——就得到一个带图标的完整应用。

摄像头扫不出来?同一张卡片上有「复制链接」按钮,常规方法也还在:打开 http://<你的-IP>:8460,粘贴「访问密钥」卡片里的 token。

重要: PC 上必须运行 DeepSeek Harness Desktop。通往智能体的门有两扇:我们的插件 dsh-phone-bridge(装一次,自带 TCP 桥,不需要云也不需要账号),或者 Agents Anywhere 插件(同样不需要登录 AA 账号)。节点优先试我们的桥,AA 作为备用;两个都没起来,就退回插件 web 部分的 HTTP 通道。

能做什么

- 和智能体的完整聊天 - 会话历史、带表格和代码块的 markdown 渲染、语法高亮、回复的 typewriter 流式输出
- 发送回合、停止、重试 - 发往忙碌会话的消息不会丢失:节点维护队列,等智能体空闲后投递
- 审批和智能体提问 - 按钮直接显示在手机上,需要你回答时推送通知
- 切换模型和访问权限 - 模型目录直接在聊天里
- 创建新会话 - 选择工作目录(cwd),带自动补全
- 相机照片和文件 - HEIC 和超大图片在手机上转成 JPEG,每个附件最大 50 MB
- 语音 - 听写(Web Speech)或语音消息发到聊天
- 离线缓存 - 历史和会话列表存在 localStorage,网络差时聊天也能秒开
- 导出 - 对话导出为 Markdown 或 JSON,通过系统分享或文件
- 多设备 - 每部手机有自己的 token、自己的连接器、自己在 DSH 里的智能体窗口
- 共享草稿 - 没写完的消息在手机和 DSH Desktop 输入框之间同步:手机上开始写,电脑上接着写,反过来也行。正在打字的一方优先,自己的回显不生效
- 通知和未读 - 角标、回合完成推送、统计(回合耗时、token、费用估算)
- QR 连接 - 摄像头对准,手机自动登录:token 放在链接的 hash 片段里,不会进入节点日志
- 自动更新 - 仪表盘自己检查 GitHub Releases,安装新版本并显示下载进度
- 不依赖 Agents Anywhere - 自己的插件直接在 DSH Desktop 内部架起桥接;AA 作为备用,如果一个桥接都没起来,手机就通过插件 web 半部分的 HTTP 通道运行。插件只有一个,桥接和草稿同步都在里面

工作原理

┌──────────────────────────── DSH Phone.exe ────────────────────────────┐
│ │
│ ┌──────────────┐ invoke (IPC) ┌─────────────────────────────────┐ │
│ │ 窗口 (WebView)│ <────────────> │ Rust 核心 │ │ │ │ React + TS │ │ 配置 · token · 设备 │ │ │ └──────────────┘ │ 自启动 · tray · tailscale │ │ │ └───────────────┬─────────────────┘ │ │ │ │ │ ┌───────────────▼─────────────────┐ │ │ │ axum 节点 :8460 │ │ │ │ 手机 PWA(打包进 exe) │ │ │ │ API + long-poll 事件 │ │ │ │ whitelist RPC · allowlist IP │ │ │ └───────────────┬─────────────────┘ │ └───────────────────────────────────────────────────┼────────────────────┘ │ JSON-RPC (TCP),备用路径 - HTTP ┌────────────▼────────────┐ │ DeepSeek Harness Desktop │ │ 插件 dsh-phone-bridge │ │ 备用:Agents Anywhere│ └─────────────────────────┘ │ Tailscale (100.x) ┌─────▼─────┐ │ 手机 │ 浏览器里的 PWA └───────────┘

单个 exe 约 13 MB。PWA 客户端在构建时打进二进制文件 - Python 网关和 Rust 节点分发同一个客户端。每台手机 = 单独的桥接连接器,所以 DSH Desktop 为每台手机打开各自的智能体窗口。

安全

- 每台设备一个 token - 加密随机生成,constant-time 比较。换密钥会立刻让旧密钥失效。token 通过 X-Dsh-Token 请求头传递(另外兼容 query 兜底)。
- RPC 白名单 - 手机只能调用 18 个经过验证的方法(16 个桥接方法 + 2 个本地 draft 方法:session.updateDraft / session.getDraft,由节点本身处理,不会进入桥接)。不允许任意调用。(实际列表见 gateway.py 里的 RPC_WHITELIST / server.rs 里的 WHITELIST,测试会锁定数量。)
- 带 CIDR 的 IP 白名单 - 地址白名单,决定 tailnet 里谁能访问到节点。留空 = 全部放行。Loopback 始终可用。
- 节点默认监听 0.0.0.0 - 这是 tailnet 访问所必需的,但也意味着「PC 连接到的每个网络都能访问」。如果 allowed_ips 为空,节点启动时会在控制台/日志里打印警告。填好白名单(比如 100.64.0.0/10),或者把 listenHost 设为具体地址 - 节点会老老实实绑定到它(Rust 版本会读取配置里的 listen_host,而不是忽略它)。
- 可选 TLS - 自签名证书,SAN 为 tailnet IP,并带 sha256 指纹,供手机端做 pinning。
- 请求限制 - 请求体最大 80 MB,请求头最多 100 行 / 64 KB - 一个「超大」cookie 节点不会接受。连续 10 次授权失败 = 断开连接(Python 网关)。
- Staging 自动清理 - 上传的附件不再无限堆积:节点每小时清理一次超过 7 天的文件(stagingRetentionSecs / staging_retention_secs,0 = 只手动清理)。
- tailnet 里用明文 HTTP 是有意为之。 Tailscale 就是 WireGuard:设备之间的流量已经加密。TLS 有开关,给偏执的人用(也给 Safari 里的麦克风用)。

配置

%APPDATA%\dsh-phone\config.json(Python 网关 - 与 gateway.py 同目录):
| 字段 | 含义 |
| token / devices | 设备密钥:主密钥 + 最多 8 台附加手机 |
| listen_port | HTTP 节点端口,默认 8460 |
| tailscale_ip | 自动检测,可手动修改 |
| allowed_ips | IP/CIDR 白名单 |
| staging_retention_secs | 上传文件在 staging 中的存活时间(默认 7 天) |
| tls_enabled | 在 tailnet 之上启用 TLS |
| start_hidden | 启动时最小化到托盘 |
| plugin_bridge_endpoint_path | 我们插件的桥接文件(~/.dsh/dsh-phone/bridge/endpoint.json)——优先尝试 |
| bridge_endpoint_path | AA 的桥接文件(~/.dsh/agents-anywhere/bridge/endpoint.json)——备用 |

Python 网关——轻量方案

不想装 exe?还有纯 Python 节点,只用标准库,零依赖:

cd dsh-phone
run.bat :: 或:python gateway.py

Token 会显示在控制台和 config.json 里。手机连接方式完全相同。适合瘦客户端、服务器和强迫症极简主义者。

故障排查

- 「桥接已断开」/ 空白——DSH Desktop 必须处于运行状态,且至少有一扇门打开:~/.dsh/dsh-phone/bridge/endpoint.json(我们的插件)或 ~/.dsh/agents-anywhere/bridge/endpoint.json(AA)。节点实际看到什么,用 GET /api/health 查看:bridgeChannel(tcp / plugin / none)、bridgeEndpoint(哪个文件生效了)和 pluginBridge(HTTP 通道指标:队列、rtt、最后一次推送的年龄)。
- 手机看不到节点——以管理员身份运行 tools/fix-firewall.bat(为端口 8460 添加规则),确认两台设备在同一个 tailnet 中。
- 开启/关闭 WARP 后连接断开——配置卡片里的「修复连接」按钮:节点会重新绑定 tailscaled 的套接字(debug rebind + restun)。
- 应用更新后——在手机上关闭页面再重新打开。

Roadmap

- [x] 节点:exe + 密钥自动生成 + 深色仪表盘
- [x] HTTP 桥接、实时事件、消息队列
- [x] 手机上的完整聊天:markdown、代码、流式输出、审批
- [x] 附件:相机拍照、文件、语音
- [x] 多设备、TLS、IP 白名单、离线缓存
- [x] 通过 Web Push 推送(+ ntfy 作为备用通道)
- [x] 扫码连接手机,无需手动输入 token
- [x] 从 GitHub Releases 自动更新 + 打 tag 触发 CI
- [x] 原生外壳(Capacitor):项目 dsh-phone/mobile(android/ + ios/)已可构建;构建 APK/IPA 并发布到应用商店需要 Android SDK+JDK / macOS+Xcode 以及开发者账号
- [x] 用自己的 DSH 插件(dsh-phone-bridge)替代 AA 桥接:host 半边启动带 AA 协议的 TCP 桥接(~/.dsh/dsh-phone/bridge/endpoint.json),web 半边维持 HTTP 命令通道(/api/bridge/ingest + /api/bridge/poll);节点优先尝试我们的桥接,AA 作为备用

从源码构建

需要:Node 20+、pnpm、Rust stable(MSVC)、VS Build Tools 2022(C++)。

cd dsh-phone-desktop
pnpm install
npx tauri build # релиз: src-tauri/target/release/dsh-phone.exe + NSIS-сетап
npx tauri dev # дев-режим с hot reload

用 tauri build 打包,别用裸的 cargo build——否则前端不会嵌进二进制文件。

tauri.conf.json 里开了 createUpdaterArtifacts,所以 bundler 会等签名密钥。普通构建就填占位值,或者直接用现成脚本: bash scripts\build-release.cmd # бандл без подписи апдейтера scripts\build-release.cmd -Sign # бандл + подпись (нужен ключ) scripts\build-release.cmd -Sign -Latest # ещё и latest.example.json для локальной проверки

脚本会先关掉正在运行的 dsh-phone.exe(不然链接器会报 os error 5),再构建前端、打包,把产物放进 releases\。

自动更新与发布

应用会检查本仓库的 releases/latest/download/latest.json,发现新版本就提示「更新并重启」——下载进度显示在仪表盘上。

发布是自动完成的:推一个 v* 标签,.github/workflows/release.yml 就会通过 tauri-action 构建 NSIS 安装包、给更新签名、把 latest.json 放进 release 并发布。release 会立即发布(不是草稿)——草稿的 /latest/download/ 地址不生效,自动更新什么都看不到。

首次运行前,要在仓库里加两个 secret(Settings → Secrets and variables → Actions):

| Secret | 从哪里取 |
| TAURI_SIGNING_PRIVATE_KEY | ~/.dsh-phone-updater/dsh-phone-updater.key 的内容 |
| TAURI_SIGNING_PRIVATE_KEY_PASSWORD | ~/.dsh-phone-updater/password.txt 的内容 |

密钥只生成一次,永远不要提交——它放在用户配置档里: bash
npx tauri signer generate -w ~/.dsh-phone-updater/dsh-phone-updater.key

密钥丢了,就没东西给更新签名了,已安装的版本也再也更新不了。在机器之外存一份备份。

发版顺序:把 dsh-phone-desktop/src-tauri/tauri.conf.json、Cargo.toml 和 package.json 里的 version 提上去(还有 dsh-phone/mobile/package.json 和 dsh-phone/plugin/dsh-phone-bridge/package.json),更新 README 开头的徽章,同时重新构建 releases/ 和 latest.json(需要签名密钥),提交,然后 git tag v<版本> && git push origin v<版本>——CI 会自己构建产物。不能把提版本和产物分开做:updater_release 测试会检查 tauri.conf.json 里的版本、releases/latest.example.json 里的版本和签名 trusted-comment 里的版本是否一致,否则手机上的更新器会拒绝更新。

更新签名(minisign)不是代码签名:SmartScreen 照样会因为缺证书而报错。它保护的是另一件事——保证更新是你发出来的,而不是有人在磁盘上或传输途中替换了文件。

测试 bash
cd dsh-phone && python -m unittest -v # Python-гейтвей: HTTP-парсер, auth, интеграция
node dsh-phone/web/test-md.js # PWA 渲染:转义、markdown
node dsh-phone/web/test-items.js # 聊天元素渲染
node dsh-phone/web/test-draft.js # 草稿同步
node dsh-phone/web/test-qr.js # QR 链接解析与自动登录
cd dsh-phone-desktop/src-tauri && cargo test # Rust 内核:whitelist、allow_ip、token_eq、staging、QR、配置抢救
cd dsh-phone/plugin/dsh-phone-bridge && npm test # 插件:host 模块、web 半边、有线协议
node dsh-phone/plugin/dsh-phone-bridge/scripts/smoke-host-bridge.mjs # 桥接集成:协议、读取、同步流
node dsh-phone/plugin/dsh-phone-bridge/scripts/smoke-host-write.mjs # 写入路径:发送、审批、模型
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/smoke-plugin-channel.ps1 # 插件 HTTP 通道,跑在真实节点进程上

CI 每次 push 和 PR 都会跑全部测试集(.github/workflows/ci.yml),release.yml 在发布前再跑一遍——免得自动更新把坏版本推给用户。

releases/ 里的二进制没签名(没有代码签名证书)。SmartScreen 报警是正常的;自己从源码构建就行,命令见上。

许可证

MIT——随便用,留个版权声明就行。

◆

秩序 · 荣誉 · 协议
预览分享卡片长什么样 ↓Swwag666/DSH_Phone_Swag
分享 · DeepSeek Harness Hub
Swwag666/DSH_Phone_Swag

DeepSeek Harness 装进口袋。不碰云端。

这是你的仓库?认领条目

回到顶部