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

局域网互联 FxRayHughes/dsh-peer-link

DeepSeek 客户端
FxRayHughes13 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

把局域网另一台电脑的智能体当作子代理派活并续接会话

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

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

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/FxRayHughes/dsh-peer-link.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 13 天前
档位由哪些信号合成

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

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

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

读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 25 处,展示前 24 条)
  • 读取本地文件
    index.js:211
    if (!existsSync(code)) throw new PeerError('BAD_INPUT', `file not found: ${code}`);
  • 读取本地文件
    index.js:212
    code = readFileSync(code, 'utf8').trim();
  • 发起网络请求
    client.js:298
    return fetch('peer-link/rpc', {
  • 写入剪贴板
    client.js:653
    navigator.clipboard?.writeText(own.code).then(() => {
  • 发起网络请求
    peer-client.js:52
    response = await fetch(`http://${addr}${path}`, { method: 'POST', headers, body, signal: controller.signal });
  • 读取本地文件
    links.js:30
    const parsed = JSON.parse(readFileSync(this.file, 'utf8'));
  • 读取本地文件
    server.js:134
    if (!existsSync(value) || !statSync(value).isDirectory()) throw new PeerError('BAD_INPUT', `directory not found on ${hostname()}: ${value}`);
  • 读取本地文件
    server.js:134
    if (!existsSync(value) || !statSync(value).isDirectory()) throw new PeerError('BAD_INPUT', `directory not found on ${hostname()}: ${value}`);
  • 写入本地文件
    state.js:29
    mkdirSync(STATE_DIR, { recursive: true });
  • 写入本地文件
    state.js:31
    writeFileSync(tmp, text, { mode: 0o600 });
  • 写入本地文件
    state.js:32
    renameSync(tmp, path);
  • 写入本地文件
    state.js:34
    chmodSync(path, 0o600);
  • 读取本地文件
    state.js:112
    mtime = statSync(STATE_FILE).mtimeMs;
  • 读取本地文件
    state.js:120
    const parsed = JSON.parse(readFileSync(STATE_FILE, 'utf8'));
  • 读取本地文件
    state.js:144
    this.mtime = statSync(STATE_FILE).mtimeMs;
  • 发起网络请求
    web-share.js:167
    const request = http.request(
  • 发起网络请求
    web-share.js:277
    const proxyReq = http.request(
  • 发起网络请求
    test-protocol.mjs:345
    const get = (path, headers = {}) => fetch(base + path, { headers, redirect: 'manual' });
  • 发起网络请求
    test-protocol.mjs:373
    r = await fetch(base + '/api/echo', { method: 'POST', headers: { cookie: jar, origin: base, 'content-type': 'application/json' }, body: '{}' });
  • 请求外部主机evil.example
    test-protocol.mjs:380
    r = await fetch(base + '/api/echo', { method: 'POST', headers: { cookie: jar, origin: 'http://evil.example', 'content-type': 'application/json' }, bod
  • 发起网络请求
    test-protocol.mjs:380
    r = await fetch(base + '/api/echo', { method: 'POST', headers: { cookie: jar, origin: 'http://evil.example', 'content-type': 'application/json' }, bod
  • 发起网络请求
    test-protocol.mjs:417
    r = await fetch(base + '/peer/v1/info', { method: 'POST', body: '{}' });
  • 发起网络请求
    test-protocol.mjs:434
    const loop = await fetch(`http://127.0.0.1:${wide.port}${t2.path}`, { redirect: 'manual' });
  • 发起网络请求
    test-protocol.mjs:436
    assert.equal((await fetch(`http://127.0.0.1:${wide.port}/api/echo`, { headers: { cookie: loopJar } })).status, 200);
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
涉及外部主机:evil.example

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

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

把局域网里的 DeepSeek Harness(DSH)实例连起来:把子代理派到另一台机器的 DSH 上,接着跑它的会话,带签名自动发现和可视化设置页

README

由 DeepSeek 最新模型翻译生成
DSH 互联(@local/dsh-peer-link) 把局域网里另一台电脑上的 DeepSeek Harness 当作子代理使用。对端会话是一个完整的智能体,有它那台机器自己的 shell、文件和工具。 提供什么 | 能力 | 说明 | | subagent_peer 工具 | 标准委派工具(dsh-tool-subagent),挂在 peer 服务商上。任务在对端 DSH 新开会话执行,完成后以通常的子代理完成通知把最终回复送回来。子代理可以续接:用 send_message 继续追问、补充指示或回答对端的提问,见下文。 | | peer_dsh 工具 | peers 列出对端及在线状态;pair 用配对码配对;unpair 删除对端;run 新开或续接对端会话并等待回复(对端有待回答的提问时,内容作为回答交给它);sessions 列出对端会话;read 读最近消息;cancel 中止对端当前回合。 | | peer-link 模型通道 | subagent_peer 子代理专用的模型通道,把子代理的每一轮交给对端会话执行。模型 auto 用默认对端,也可以直接选某个对端名。 | | 局域网端点 | HTTP 监听随机空闲端口(优先沿用上次的端口),对端通过下面的发现协议自动找到,不会和其他程序抢端口。只接受带 HMAC 签名的请求,响应也带签名;密钥不在网络上传输。
展开完整文档(README 剩余 1 节)
DSH 互联(@local/dsh-peer-link)

把局域网里另一台电脑上的 DeepSeek Harness 当作子代理使用。对端会话是一个完整的智能体,有它那台机器自己的 shell、文件和工具。

提供什么

| 能力 | 说明 |
| subagent_peer 工具 | 标准委派工具(dsh-tool-subagent),挂在 peer 服务商上。任务在对端 DSH 新开会话执行,完成后以通常的子代理完成通知把最终回复送回来。子代理可以续接:用 send_message 继续追问、补充指示或回答对端的提问,见下文。 |
| peer_dsh 工具 | peers 列出对端及在线状态;pair 用配对码配对;unpair 删除对端;run 新开或续接对端会话并等待回复(对端有待回答的提问时,内容作为回答交给它);sessions 列出对端会话;read 读最近消息;cancel 中止对端当前回合。 |
| peer-link 模型通道 | subagent_peer 子代理专用的模型通道,把子代理的每一轮交给对端会话执行。模型 auto 用默认对端,也可以直接选某个对端名。 |
| 局域网端点 | HTTP 监听随机空闲端口(优先沿用上次的端口),对端通过下面的发现协议自动找到,不会和其他程序抢端口。只接受带 HMAC 签名的请求,响应也带签名;密钥不在网络上传输。带时间戳和一次性随机串,防重放;有 IP 白名单和失败限流。 |

对端会话的标题以 [发起方名称] 开头,在对端界面里一眼能看出是谁派的任务。

子代理续接

subagent_peer 的子代理是本机的普通可续接子代理,只是它的"模型"是对端 DSH:

- 每个子代理对应对端的一个会话。第一轮新建会话,之后每一轮都发到同一个会话,对端保留完整上下文。
- 子代理结束后,父代理用 send_message 发消息,子代理会被唤醒,消息发到同一个对端会话继续处理,回复照常以完成通知送回。
- 对端还在处理时发来的消息,会立即转给对端正在运行的那一轮(steer),不用等它结束。
- 对端调用 ask_user_question 而无人回答时,回复里会列出问题;下一条 send_message 会作为回答交给对端,对端随即继续。
- 停止子代理会同时中止对端当前回合。DSH 关闭或重载插件时不取消对端,重启恢复后继续等待同一回合。
- 子代理与对端会话的对应关系保存在 ~/.dsh/peer-link/links.json,重启后仍能续接。
- 在本机界面里可以打开子代理会话查看往来记录,也可以直接在里面输入,输入的内容同样转给对端。

配套技能

skills/dsh-peer-link/SKILL.md 教智能体什么时候、怎么用这两个工具:选哪个工具,怎么写委派任务,怎么续接、回答对端提问,以及常见错误怎么处理。插件本身不加载它;把整个 dsh-peer-link 目录放进技能目录即可,例如 ~/.agents/skills/(多个智能体共用)或 ~/.dsh/skills/(只给 DSH 用)。

mkdir -p ~/.agents/skills
cp -R skills/dsh-peer-link ~/.agents/skills/

怎么找到对端(发现协议)

HTTP 端口每次启动都可能变化,所以对端地址只是缓存。调用对端时依次尝试:

1. 缓存地址。先用 2 秒的 TCP 探测,连不上就跳过。必须拿到用对端密钥签名的响应才算找到;旧端口被别的程序占用时,那个程序给不出签名,会被跳过。
2. 局域网发现。在 UDP 47788 上发查询,用组播(239.255.77.88)、各网卡广播,再向对端已知 IP 单播。查询里只带由密钥派生的短 ID 和 HMAC,只有持有同一密钥的对端会回复自己当前的端口,回复同样带签名。UDP 端口用共享方式绑定(SO_REUSEADDR),不会独占,也不会因为被占用而启动失败。
3. 配对码里的地址,作为最后手段。

此外,对端启动时和每 60 秒会广播一次签名公告,已配对的一方收到后直接更新缓存。

两台机器只要在同一局域网里,换端口、换 IP(DHCP)、重启后都能自动重新找到对方。跨网段时组播和广播不通,就靠向已知 IP 单播。

安装后的授权

启用插件后,界面会弹窗询问:是否允许对端会话完全访问本机。

对端发来的任务在本机新开会话、无人值守地执行。默认沙箱下,需要审批的操作会让任务卡住;在 Windows 上,默认沙箱甚至无法启动 PowerShell(退出码 0xC0000142)。

- 允许完全访问:把 permissionPreset 设为 danger-full-access。这些会话不受沙箱限制、不经审批,可以读写任意文件、执行任意命令,所以只与自己信任的设备配对。
- 暂不:保持本机默认权限。

无论选哪个,选择都会记在 ~/.dsh/peer-link/state.json,不会再弹窗。之后可以在设置页的「对端会话的权限预设」里修改。只影响对端发来的新会话,不影响本机自己的会话。

配对(一次性)

1. 两台机器都安装本插件。
2. 在 A 机:设置 → 插件 → DSH 互联 → 配置,在「配对」里点「显示配对码」→「复制」。码也写在 ~/.dsh/peer-link/pairing-code.txt(Windows:%USERPROFILE%\.dsh\peer-link\pairing-code.txt)。
3. 在 B 机的同一页面,把码粘贴到「对端配对码」,点「配对」。也可以对智能体说「用 peer_dsh 配对,code 用文件 <绝对路径>」。传文件路径可以让密钥不进入对话记录。
4. 插件会把自己的配对码回传给对端,双方因此互相配对。配对码里含密钥,不要贴到公共场合。

密钥和对端列表保存在 ~/.dsh/peer-link/state.json(权限 0600),不进配置档的 cordis.patch.yml。

Windows 安装

1. 安装 DSH:https://download.deepseek.com/dsh-desk/bin/win-x64/deepseek-harness-0.2.1-rc.2-win-x64.exe。
2. 把本目录拷到 Windows,例如 C:\dsh-plugins\dsh-peer-link。在 DSH 里让智能体用 plugin_manager install_bundle 安装,target 填这个绝对路径。
3. 放行防火墙。端口是随机的,所以按程序放行,不按端口。在 DSH 运行时打开管理员 PowerShell:

$exe = (Get-Process | Where-Object { $_.Path -like 'DeepSeek Harness' } | Select-Object -First 1).Path
$exe # 确认路径 New-NetFirewallRule -DisplayName "DSH peer-link" -Direction Inbound -Program $exe -RemoteAddress LocalSubnet -Action Allow

这条规则同时覆盖 TCP(随机端口)和 UDP 47788(发现)。如果 Windows 首次监听时弹出了「允许访问」对话框,勾选「专用网络」也行。

4. 在弹出的授权窗口里选择「允许完全访问」(见「安装后的授权」)。
5. 按上面的步骤配对。

设置页

设置 → 插件 → DSH 互联 → 配置 打开设置页。页面分为以下几块:

- 本机:显示名称、监听地址、发现端口的当前状态。
- 已配对的对端:在线状态、地址、系统。可以刷新;解除配对要点两次确认。
- 配对:粘贴对端配对码完成配对,或者显示并复制本机的配对码。
- 网络 / 委派 / 对端权限:编辑下表中的全部配置。点「保存」后立即生效,不用重启;改了端口或监听设置,监听器会自动重建。

页面的实时数据走本插件注册的 POST /peer-link/rpc。这个接口受 Web 连接的鉴权和 Origin 校验保护,执行的操作与 peer_dsh 工具相同。配置本身通过 DSH 的设置服务写入配置档。

| 字段 | 默认 | 说明 |
| displayName | 主机名 | 本机在对端显示的名称 |
| listen | true | 是否接收对端请求 |
| host | 0.0.0.0 | 监听地址 |
| port | 0 | HTTP 端口;0 表示随机空闲端口,优先沿用上次的。填固定值时,如果被占用会自动退回随机端口 |
| discoveryPort | 47788 | 发现用的 UDP 端口(共享绑定)。两侧必须一致 |
| allowCidrs | 私网地址段 | 允许连入的地址 |
| allowedRoots | 空 | 对端可用的工作目录根;空为不限制 |
| remoteCwd | 空 | 委派到对端时的默认目录(对端路径)。为空时,若本机当前目录在对端也存在就用它,否则用对端默认目录 |
| subagentPeer | 空 | 有多个对端时 subagent_peer 用哪一个 |
| permissionPreset | 空 | 对端发来的新会话用的权限预设,例如 danger-full-access。无人值守时审批弹窗会让任务卡住 |
| delegationNote | true | 在委派任务前加一段"无人值守、自行决策、最后汇报"的说明 |

限制

- 只传文本,不传图片和附件。
- 子代理的回复是对端每一轮的最终文本;对端的中间过程(工具调用等)留在对端会话里,可用 peer_dsh action=read 查看。
- 回答对端提问时,同一段文字作为该次提问里每个问题的自定义回答。
- 传输是明文 HTTP,内容可被同一局域网的人看到(密钥不会)。不要跨不可信网络使用。
- 两台机器的时钟偏差需要在 5 分钟以内。
- 发现协议只在局域网内有效(组播 TTL=1)。跨网段需要能路由到对端 IP。
预览分享卡片长什么样 ↓FxRayHughes/dsh-peer-link
分享 · DeepSeek Harness Hub
FxRayHughes/dsh-peer-link

把局域网另一台电脑的智能体当作子代理派活并续接会话

这是你的仓库?认领条目

回到顶部