DeepSeek Harness 装进口袋。不碰云端。
36.5/100
综合分
2
GitHub 星标
187
npm 周下载
—/5
用户评分
数据截至 2026/10/6 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-phone-bridgenpm 源 · dsh-phone-bridge 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · ui
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 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🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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 张 · 点击查看大图功能亮点
- 本地节点连接
- 零云端
最近更新
在 GitHub 查看全部 →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——随便用,留个版权声明就行。 ◆ 秩序 · 荣誉 · 协议
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Swwag666/DSH_Phone_Swag
DeepSeek Harness 装进口袋。不碰云端。
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这是你的仓库?认领条目