DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

FxRayHughes /

FxRayHughes/dsh-peer-link

Verified

Link DeepSeek Harness (DSH) instances on the LAN: delegate subagents to another machine's DSH, continue its sessions, with signed auto-discovery and a visual settings page

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@0cb69056

DSH 互联(@local/dsh-peer-link)

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

提供什么

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

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

子代理续接

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

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

打开对端的网页界面

同一局域网里,可以直接打开另一台机器的 DSH 网页,看它的全部会话,也可以在里面直接对话:

  • 侧边栏底部「对端设备」:只配对一台时按钮直接显示对端名称,点一下就打开;配对多台时弹出列表,显示每台的在线状态,离线、未开启共享或版本过旧的会注明原因。
  • 设置页:「已配对的对端」里每个在线且开启共享的对端旁有「打开网页」。
  • 子代理会话标题栏「在 <对端> 上查看」:subagent_peer 子代理的会话里出现,打开对端网页并直接定位到这个子代理对应的那个对端会话,能看到对端的工具调用和完整过程。

浏览器版里在新标签页打开;桌面版交给系统默认浏览器打开。

工作方式,与 FRP 插件的端口映射类似,但只在局域网内、只对已配对的设备开放:

  1. 点击按钮后,本机用签名协议向对端要一张一次性入场票(webTicket),60 秒内有效,用一次就作废。
  2. 浏览器打开 http://<对端局域网地址>:<对端 peer-link 端口>/__peer-link/enter?ticket=…。对端核对票据后,在服务端用自己 DSH 的启动令牌登录,给浏览器发两个 Cookie:DSH 自己的登录 Cookie,和 peer-link 的门禁 Cookie。
  3. 之后所有请求(页面、接口、WebSocket)都经对端的 peer-link 端口转发到它本机回环地址上的 DSH,转发时把 Host/Origin/Referer 改成回环地址,所以不用改 DSH 的监听地址或 trustedHosts。

安全上:

  • 没有门禁 Cookie 的请求在转发前就被拒绝,局域网里其他人扫到端口也进不来。门禁 Cookie 绑定浏览器的 IP,HttpOnly、SameSite=Strict,12 小时过期,并以本机配对密钥派生的密钥签名;重新生成密钥后旧 Cookie 全部失效。
  • DSH 的启动令牌只在对端机器内部使用,不会出现在浏览器地址栏或历史记录里。
  • 跨站请求(Origin 不是这个地址)会被拒绝。
  • 受 allowCidrs 限制。
  • 不想让别的设备打开本机页面:在设置页关掉「共享网页界面」(shareWeb)。关掉后不再发票据,已经打开的页面也立即失效。

两台都要装 0.4.0 或更高版本:打开网页的一方需要新版按钮,被打开的一方需要新版才能发票据和转发页面。

配套 skill

skills/dsh-peer-link/SKILL.md 教 agent 什么时候、怎么用这两个工具:选哪个工具,怎么写委派任务,怎么续接、回答对端提问,以及常见错误怎么处理。插件本身不加载它;把整个 dsh-peer-link 目录放进 skill 目录即可,例如 ~/.agents/skills/(多个 agent 共用)或 ~/.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 机的同一页面,把码粘贴到「对端配对码」,点「配对」。也可以对 agent 说「用 peer_dsh 配对,code 用文件 <绝对路径>」。传文件路径可以让密钥不进入对话记录。
  4. 插件会把自己的配对码回传给对端,双方因此互相配对。配对码里含密钥,不要贴到公共场合。

密钥和对端列表保存在 ~/.dsh/peer-link/state.json(权限 0600),不进 profile 的 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 里让 agent 用 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 的设置服务写入 profile。

字段 默认 说明
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 在委派任务前加一段"无人值守、自行决策、最后汇报"的说明
shareWeb true 允许已配对的设备在局域网内打开本机的 DSH 网页界面

限制

  • 只传文本,不传图片和附件。
  • 子代理的回复是对端每一轮的最终文本;对端的中间过程(工具调用等)留在对端会话里,可用 peer_dsh action=read 查看。
  • 回答对端提问时,同一段文字作为该次提问里每个问题的自定义回答。
  • 传输是明文 HTTP,内容可被同一局域网的人看到(密钥不会)。打开的对端网页同样走明文 HTTP,页面内容和 Cookie 可被同一局域网的人截获(门禁 Cookie 绑定了 IP,换一台机器用不了)。不要跨不可信网络使用。
  • 打开对端网页需要浏览器能直接访问对端的局域网地址;对端地址取的是本机最近一次连上它的地址。
  • 两台机器的时钟偏差需要在 5 分钟以内。
  • 发现协议只在局域网内有效(组播 TTL=1)。跨网段需要能路由到对端 IP。
—/ 5

No ratings yet

Verified DSH bundle

Commit 0cb6905623bf

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout