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

手机电脑互联 Chiyang001/DSHAN_Plugin_P2P

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

DeepSeek Harness 与 DSHAN 手机的双向工具配对插件,支持 WebRTC…

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

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

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Chiyang001/DSHAN_Plugin_P2P
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

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

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

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

✗npm 包dsh-peer(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 04:56:37

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

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

读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 29 处,展示前 27 条)
  • 读取密钥环境变量
    index.js:44
    label: process.env.DSH_ANDROID_BRIDGE_TOKEN ? 'Android 手机' : '电脑',
  • 发起网络请求
    index.js:260
    register('peer_tools', 'Discover tools and parameter schemas on the other connected device. Linked conversations automatically provide its local tools
  • 发起网络请求
    index.js:267
    const result = await requirePeer(exec).request(chat ? 'messages.tool' : 'call', { name: args.name, arguments: argumentsValue, ...(chat ? { id: chat.id
  • 发起网络请求
    peer.js:289
    return this.current.request(...args);
  • 发起网络请求
    peer.js:294
    await this.current.request('$peer.disconnect', {}, AbortSignal.timeout(1000)).catch(() => {});
  • 发起网络请求
    protocol.js:65
    if (!address) return await fetch(url, options);
  • 发起网络请求
    protocol.js:69
    const request = (target.protocol === 'https:' ? https : http).request(target, {
  • 读取密钥环境变量
    network.js:3
    export async function androidHostAddresses(signal, token = process.env.DSH_ANDROID_BRIDGE_TOKEN, fetcher = fetch) {
  • 读取本地文件
    messages.js:30
    try { data = JSON.parse(await readFile(this.file, 'utf8')); }
  • 写入本地文件
    messages.js:49
    await mkdir(dirname(this.file), { recursive: true, mode: 0o700 });
  • 写入本地文件
    messages.js:51
    await writeFile(temp, value, { mode: 0o600 }); await rename(temp, this.file);
  • 写入本地文件
    messages.js:51
    await writeFile(temp, value, { mode: 0o600 }); await rename(temp, this.file);
  • 发起网络请求
    messages.js:98
    return this.peer().request('messages.native', { deviceId: this.data.deviceId, id: chat.id, method, request }, signal);
  • 发起网络请求
    messages.js:219
    const hello = await peer.request('messages.hello', { deviceId: this.data.deviceId, label: this.label });
  • 发起网络请求
    messages.js:229
    const rows = await peer.request('messages.index', { deviceId: this.data.deviceId });
  • 发起网络请求
    messages.js:245
    const result = await peer.request('messages.read', { id: row.id, deviceId: this.data.deviceId, after: replaceHistory ? -1 : chat?.through ?? -1 });
  • 发起网络请求
    messages.js:337
    else await this.peer().request('messages.send', { deviceId: this.data.deviceId, id: chat.id, requestId: item.requestId, text: item.text, content: item
  • 发起网络请求
    messages.js:452
    const receipt = chat.owner === this.data.deviceId ? this.data.receipts[item.requestId] : await this.peer().request('messages.receipt', { deviceId: thi
  • 读取密钥环境变量
    linked-access.js:15
    export async function enableAndroidLinkedControl(fetcher = fetch, token = process.env.DSH_ANDROID_BRIDGE_TOKEN) {
  • 读取密钥环境变量
    linked-access.js:28
    export function installLinkedAccess(ctx, linked, android = !!process.env.DSH_ANDROID_BRIDGE_TOKEN) {
  • 读取本地文件
    lifecycle.js:111
    const root = await realpath(resolve(persistence.config.root)), target = dirname(location.path), actual = await realpath(target);
  • 读取本地文件
    lifecycle.js:114
    if (!offset || offset.startsWith('..') || isAbsolute(offset) || actual !== resolve(await realpath(dirname(target)), encoded) || basename(actual) !== e
  • 读取本地文件
    lifecycle.js:114
    if (!offset || offset.startsWith('..') || isAbsolute(offset) || actual !== resolve(await realpath(dirname(target)), encoded) || basename(actual) !== e
  • 读取本地文件
    lifecycle.js:127
    if (await realpath(target) !== actual || (await lstat(target)).isSymbolicLink()) throw Error('会话存储路径已变化');
  • 读取本地文件
    lifecycle.js:127
    if (await realpath(target) !== actual || (await lstat(target)).isSymbolicLink()) throw Error('会话存储路径已变化');
  • 写入本地文件
    lifecycle.js:137
    await rename(actual, tomb);
  • 删除本地文件递归
    lifecycle.js:138
    await rm(tomb, { recursive: true, force: false });
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-app-boot@deepseek-ai/cordis@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-scope@deepseek-ai/dsh-tools@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-session-persistence-jsonl@deepseek-ai/dsh-api-session-controller
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
展开完整介绍(64 字)↓

DeepSeek Harness 与 DSHAN 手机的双向工具配对插件,支持 WebRTC 直连、二维码配对和端到端加密中继。

README

由 DeepSeek 最新模型翻译生成
DSHAN Plugin P2P 连接手机与电脑,让两端的工具协同工作。 DeepSeek Harness × DSHAN · 8 位配对码 · 二维码配对 · WebRTC · 加密中继快速开始 · 配对与使用 · 工具一览 · 网络配置开发者:炽阳001 · Bilibili · GitHub 两台设备,一个连接 在电脑上调用手机的截图、点击与输入工具,也可以在手机上调用电脑共享的文件和终端工具。两端使用同一套配对协议,在「设置 → 连接」中即可完成配对。 | 轻松配对 | 双向协作 | 自适应连接 | | 扫描二维码,或输入 8 位配对码 | 调用另一端明确共享的工具 | 优先 WebRTC 直连,必要时加密中继 | | 输入框保持单行,支持完整粘贴 | 远端操作经过本机权限检查 | 连接页显示实时状态与共享工具 | 快速开始 需要 Node.js 22 或更新版本与 DeepSeek Harness,当前开发测试使用 Harness 0.2.0-rc.2。手机使用 DSHAN 1.2.8 内置插件。 在电脑的 Harness 插件管理页面安装 GitHub 仓库: https://github.com/Chiyang001/DSHAN_Plugin_P2P 启用后默认使用 DSHAN 配对服务器,无需手动填写地址。
展开完整文档(README 剩余 1 节)
DSHAN Plugin P2P
连接手机与电脑,让两端的工具协同工作。
DeepSeek Harness × DSHAN · 8 位配对码 · 二维码配对 · WebRTC · 加密中继快速开始 · 配对与使用 · 工具一览 · 网络配置开发者:炽阳001 · Bilibili · GitHub

两台设备,一个连接

在电脑上调用手机的截图、点击与输入工具,也可以在手机上调用电脑共享的文件和终端工具。两端使用同一套配对协议,在「设置 → 连接」中即可完成配对。

| 轻松配对 | 双向协作 | 自适应连接 |
| 扫描二维码,或输入 8 位配对码 | 调用另一端明确共享的工具 | 优先 WebRTC 直连,必要时加密中继 |
| 输入框保持单行,支持完整粘贴 | 远端操作经过本机权限检查 | 连接页显示实时状态与共享工具 |

快速开始

需要 Node.js 22 或更新版本与 DeepSeek Harness,当前开发测试使用 Harness 0.2.0-rc.2。手机使用 DSHAN 1.2.8 内置插件。

在电脑的 Harness 插件管理页面安装 GitHub 仓库:

https://github.com/Chiyang001/DSHAN_Plugin_P2P

启用后默认使用 DSHAN 配对服务器,无需手动填写地址。切换 profile 或配置为空时仍会使用默认地址;自定义服务器配置优先。电脑和手机需要使用同一个服务器。下面的配置仅用于自定义部署。

- id: dsh-peer
config:
signalingServer: 'wss://your-domain/peer'
connectionMode: auto

配置文件是 Harness profile 的 cordis.patch.yml,Windows 通常位于 %USERPROFILE%\.dsh\profiles\desktop\cordis.patch.yml。已有配置时修改同一组件,避免重复插入。

手动安装方式

git clone https://github.com/Chiyang001/DSHAN_Plugin_P2P.git
cd DSHAN_Plugin_P2P
npm ci --omit=dev --ignore-scripts

通过 Harness 配置添加本地 index.js 路径并设置 signalingServer。使用 native 或 both 工具模式。

配对与使用

1. 两端打开应用,在「设置 → 连接」配对;配对不要求先创建会话。
2. 在「设置 → 连接」创建配对码,另一端扫码或输入 8 位码。配对码两分钟内有效;输入框保持单行,支持完整粘贴。
3. 连接成功后即可调用对方共享的工具。设备连接独立于会话:删除、关闭或切换会话不会断开连接。设备当前可用工具默认共享,断开连接会撤销共享。
4. 手机工具依赖 DSHAN 内置的 ADB/Shizuku 桥接和相应控制权限,电脑不用另外安装 ADB。

连接页会根据手机或桌面显示对应文案,提供状态、二维码、连接方式和共享工具信息。

0.1.21 更新

- 同步 DSHAN 1.2.8 内置的连接插件,支持连接断开后的自动恢复和已认证设备接替旧连接。
- 消息历史中提供“联动消息”分类,两端可在原生对话界面继续同一段共享对话,同步流式回复、工具结果和历史记录。
- 联动对话支持置顶、重命名、归档及确认删除;离线操作保存在本机,重连后继续同步,发送结果不明时先核对而不重复执行。
- 联动对话自动准备执行工作区并使用完整工具权限;手机仍需满足 Android 系统授权。普通私人对话不会自动共享,远端调用仍经过本机权限流程。
- 复用原生输入框、附件、模型和思考强度控件,修复联动对话正文与工具记录补齐,并统一手机与电脑上的会话菜单。

升级后重新加载插件或重启 Harness。电脑插件和手机内置插件应一并升级;自动重连还需要支持恢复令牌的新版配对服务器。0.1.7 用户可以通过同一个 GitHub 安装地址更新。

工具一览

| 工具 | 用途 |
| peer_host | 创建配对码和二维码 |
| peer_join | 输入配对码加入连接 |
| peer_status | 查看连接状态 |
| peer_tools | 列出对方共享的工具 |
| peer_call | 调用对方工具 |
| peer_disconnect | 断开连接并撤销共享 |

tools 是逗号分隔的工具名称;空字符串表示不接受远端工具调用。禁止共享 peer_*、通配符和 run_code,远端调用仍经过本机权限检查。

网络与服务器

| 连接模式 | 行为 |
| auto · 默认 | 优先直连,未成功时回退到加密中继 |
| relay | 使用加密 WebSocket 中继 |
| p2p | 仅使用 WebRTC 直连 |

可另外配置 STUN/TURN。已有连接中的操作失败不会自动切换通道重试,避免重复执行。

默认使用域名解析,不要将特定网络下的 IP 写为通用默认值。已有安装若配置过 signalingAddress,请确认该 IP 在当前网络中可用;域名正常但固定 IP 连接重置或超时时,移除这一项并重启 Harness。signalingAddress 可用于明确需要的固定 IP 场景,保留域名 Host 和 HTTPS 证书验证。HTTP 注册和查询也支持该配置。

公网推荐 wss://;用户明确使用 HTTP/FRP 时可配置 ws://,工具调用需显式设置 allow_http_signaling: true。信令可见连接元数据,工具数据使用端到端加密。

服务端部署见 DSHAN Server。本仓库的 signal-server.js 用于本地开发和协议测试:

npm run signal

开发与验证

npm ci --ignore-scripts
npm test

0.1.21 的 71 项自动测试通过,覆盖插件加载、原生会话界面、联动消息、会话管理、真实 WebRTC、加密中继、断线重连、连接撤销及权限检查。此前 Android 真机验收中,连续创建配对码 5 次成功,二维码与信令检查通过;这条历史记录不代表本次完整真机复验。

由 炽阳001 开发 · 与 DSHAN Android 配合使用

设备级连接(0.1.5)

配对、保持连接、列出远端工具与调用远端工具不再绑定某一个会话。删除全部会话时设备连接仍保持;没有可用执行上下文的工具暂时不可用。打开启用了工具的会话后可自动恢复,无需重新配对。每次执行仍使用当前有效上下文的本机权限流程;显式工具白名单仍生效,失败的操作不会自动重试。

默认配对服务器(0.1.6)

安装包与运行时均提供默认服务器 ws://dshanp2p.chiyang001.top/peer。未填写地址或地址为空白时自动使用默认值,显式工具参数和自定义 profile 地址优先。创建配对、加入配对与状态页使用一致的地址选择规则。

自动重连与网络恢复(0.1.7)

切换 Wi-Fi、移动流量或临时断网后,两端应用保持运行即可自动恢复,无需重新扫码。连接页显示“正在重连”;心跳每 15 秒检查信令和端到端通信,重试采用约 1、2、4、8、16、30 秒的退避并加入随机抖动。

每轮重建会刷新手机当前网络地址,重新协商 WebRTC 或端到端加密中继,并验证双方新的随机数。服务端为已配对设备保留最长 24 小时的离线恢复资格,恢复需要各端原有的独立随机令牌。8 位配对码仍为两分钟有效。

断线中的工具调用会报错,不会自动重放,避免重复点击或执行命令。手动断开会撤销共享并通知对端停止重连;客户端进程退出后需要重新配对。首次连接的自动重试等待期限为两分钟。

升级时需同时更新电脑插件、手机内置插件和 DSHAN Server,并重启 Python 服务加载新协议。

2026-10-21 已使用 OPPO PKQ110、Android 16 的正式 Release APK 与真实电脑 Harness,通过公网完成 auto/relay 两轮切网验收。Wi-Fi 与移动流量切换、完全断网 45 秒后的自动恢复、双向工具调用及手动断开停止重连均通过。完全断线后恢复 Wi-Fi,本次约 21–30 秒恢复,包含轮询及双向调用校验;不同网络耗时会变化。
预览分享卡片长什么样 ↓Chiyang001/DSHAN_Plugin_P2P
分享 · DeepSeek Harness Hub
Chiyang001/DSHAN_Plugin_P2P

DeepSeek Harness 与 DSHAN 手机的双向工具配对插件,支持 WebRTC…

回到顶部