用 dsh-interconnect 打通多个 DeepSeek Harness 实例

前言

DeepSeek Harness(dsh)把模型、工具、会话、循环都做成插件,官方仓库的口号就是「Everything is a Plugin」。单实例用起来很顺:一个进程、一组 session、一套工具。真要同时跑两台机器、两个 web 服务,或者让一个 agent 把结果交给另一台机器上的 session,默认能力就不够了——实例之间没有现成的消息通道,也没有探活和事件同步。

dsh-interconnect 就是补这块的社区插件。它给 host 挂上跨实例的 HTTP / WebSocket 服务,再给模型暴露 interconnect_sendinterconnect_ping 两个工具,让一个 DSH 实例能向本机、另一台机器、或另一台机器上的别的 DSH 实例发消息、探测活性,并双向推送生命周期事件。

本文按社区插件目录页、GitHub 仓库 README、源码与 npm 页面核对后整理。社区目录 deepseek-harness-plugin.com 是独立站点,不是 DeepSeek / 幻方的官方应用商店;插件本身由 GitHub 用户 Chinesezjc 维护,MIT 许可。

这是什么

dsh-interconnect 是一款工作流与自动化插件,当前 npm 版本为 0.2.0,主要语言是 TypeScript。仓库创建于 2026-08-13,最近一次推送是 2026-08-14 的 Release 0.2.0。社区目录 2026-08-15 收录时显示 26 星;2026-08-17 查询 GitHub 仓库为 30 星。

它解决的是跨实例交接,而不是单进程里的多智能体编排。仓库把能力拆成两个 Cordis 插件,一次安装会作为 profile bundle 一起挂上:

  • interconnect:host 级服务,注册为 ctx.interconnect。对外提供 /interconnect/* HTTP 端点和 /interconnect/link WebSocket,对内负责投递消息、探活、事件 fan-out。
  • tool-interconnect:模型可见工具。interconnect_send 向对端指定 session 投递一条文本;interconnect_ping 探测对端是否可达以及它自称的实例身份。

两端要用同一把共享密钥 DSH_INTERCONNECT_TOKEN 做 Bearer 鉴权。token 未配置时入站直接拒绝(fail-closed),比较按 timing-safe 方式进行。

核心功能

host 服务:HTTP 投递与探活

interconnect 在 host webserver 上自管路由,不走 Connection RPC 通道。源码注释写明原因:RPC 处理器看不到 Authorization 头,而这套服务的信任边界就是 Bearer token。

HTTP 端点都是 POSTContent-Type 必须是 application/json,路径前缀为 /interconnect

端点 作用
/interconnect/ping 探活,成功则返回 pong: true 和本实例 instanceId
/interconnect/send 向本实例一个仍存活的 session 投递文本
/interconnect/event 接收对端推来的生命周期事件

请求体复用 DSH host API 的 client-request 信封:typerpcIdmethodpayloadmethod 必须和路径最后一段一致,否则返回 bad-request。请求体上限 1MB。

send 只投递给当前仍在跑的 agent。对端 session 不存在或已经销毁时,返回 delivered: false,不会凭空创建会话。投递进 inbox 的消息 source 是:

{ kind: 'plugin', plugin: 'dsh-interconnect' }

不是 { kind: 'user' }。接收方据此区分「跨实例交接」和「本地用户输入」。这是 0.2.0 相对 0.1.0 的行为变更,仓库用 minor 版本号标出。

投递方式由配置项 delivery 决定,默认 followup

  • followup:唤醒目标 agent,开一轮新 turn 处理这条消息
  • inject:只写入模型可见上下文,不立刻唤醒;要等下一次 step 边界才可能被取到,已经 claimed 的 step 可能错过

WebSocket 链路与事件 fan-out

/interconnect/link 是持久 WebSocket。鉴权同样看 Bearer。链路上的应用帧只有两种:hello(拨号方报上自己的 sender)和 event(推一条通知)。心跳用 WebSocket 协议层 ping/pong,间隔 30 秒,不另做应用层 keepalive。链路断开后按指数退避重连。

本地会监听一批 host 事件,再 fan-out 给已订阅的对端。源码里序列化的 kind 包括:

  • agent/createdagent/disposedagent/statusidle / running
  • session/createdsession/disposed
  • subagent/end(仅本地 in-process 子智能体)

对端收到后,本实例发出 interconnect/event。HTTP 订阅和 WebSocket 推流两条路都有:启动时可在配置里写 peers 列表;运行时也可以 subscribe / unsubscribe,或调用 link(peer) 建立长连接。

模型工具:让 agent 自己交接

tool-interconnect 把服务能力暴露给模型,不自己发 HTTP。工具参数来自源码注册表:

interconnect_send

  • baseUrl:对端 origin,例如 http://127.0.0.1:3080http://peer-host:9001
  • sessionId:对端要投递的 session id
  • text:消息正文

成功时返回 { delivered, instance }

interconnect_ping

  • baseUrl:对端 origin

可达时返回 { reachable: true, instance };传输或鉴权失败时 { reachable: false }

两个插件都挂在 host compositioninterconnect 是进程级服务,必须 host 级;tool-interconnect 也放 host,因为当前没有做 TypeRT @Remote / Gateway 绑定,放进 agent preset 的 isolate realm 后,工具行注入不到这个服务。

安装与启用

社区目录页给出的安装命令是(以页面原文为准):

dsh plugin add github:Chinesezjc/dsh-interconnect

需要可复现安装时,把 commit 哈希钉死。当前 main 最新提交是 2026-08-14 的 75488fbc4cbfef180e3f36a24438b42f00f43c5c(Release 0.2.0):

dsh plugin add github:Chinesezjc/dsh-interconnect#75488fbc4cbfef180e3f36a24438b42f00f43c5c

仓库 README 还写了从 npm 或本地路径安装的方式。包名是 dsh-interconnect,registry 上的 tarball 自带 lib/*.js 和类型声明,安装时不跑构建:

dsh plugin --profile <name> add dsh-interconnect

dsh plugin --profile <name> add file:/path/to/dsh-interconnect

dsh plugin add 会把仓库识别为 bundle,按根目录 cordis.patch.yml 插入两行插件,并追加进 profile 的 dsh.profile.bundles。补丁里的默认配置是:

- insert:
  - id: interconnect
    name: dsh-interconnect/interconnect
    config:
      instanceId: dsh
      requestTimeoutMs: 10000

  - id: tool-interconnect
    name: dsh-interconnect/tool-interconnect

instanceId 会回显在 ping / send 结果里,只作诊断,不参与路由。多实例并存时,应改成能区分彼此的值。requestTimeoutMs 默认 10000,上限 60000。还可以按需加上:

  • peers:启动时就要 fan-out 的对端 origin 列表,缺省为空
  • deliveryfollowupinject,缺省 followup

装完需要重启 web 服务,host 侧才会生效。然后在两端实例的 .credentials.yaml(或等价凭据源)里配置相同DSH_INTERCONNECT_TOKEN。token 是共享密钥,谁拿到谁就能往对端活 session 里塞消息,不要提交进仓库,也不要在多组互不信任的实例之间复用。

典型用法

下面参数与信封格式来自仓库源码和单测,可以按原样理解,不要把示例里的地址、session id、token 直接抄到生产环境。

1. 先探活,再投递

agent 侧先对对端 origin 做 interconnect_ping,再 interconnect_send。单测里的调用形状是:

interconnect_ping
  baseUrl: http://127.0.0.1:3080

interconnect_send
  baseUrl: http://127.0.0.1:3080
  sessionId: sess-1
  text: 构建已完成,产物在 /tmp/out

对端 session 必须已经存在并且 agent 仍活着。本插件不负责在对端「新建一个对话」。

2. 用 HTTP 直接探活

不经过模型工具时,也可以对 host 发 POST。源码里出站请求的信封如下(rpcId 换成你自己的 UUID,token 换成凭据里的值):

curl -X POST http://127.0.0.1:3080/interconnect/ping \
  -H 'content-type: application/json' \
  -H 'Authorization: Bearer <DSH_INTERCONNECT_TOKEN>' \
  -d '{"type":"client-request","rpcId":"00000000-0000-0000-0000-000000000001","method":"ping","payload":{}}'

未配置 token、token 不匹配、或 Content-Type 不是 JSON,请求会被拒绝。这是设计如此,不是安装失败。

3. 多机双向事件

两台机器都装同一 bundle、配同一 token 之后,把对端 origin 写入 peers,或在运行时 link 到对端。本机 agent 状态变化会推到对端,对端入站事件以 interconnect/event 发出。仓库 README 写明:维护者已在两台机器之间实测过消息投递、WebSocket 事件推流,以及 agent 经 interconnect_send 反向回发。这是仓库自述,不是第三方评测。

README 同时写明当前 22/22 条单测通过(服务 17 + 工具 5),CI 会 clone 公开的 deepseek-ai/deepseek-harness 作为 sibling checkout 再跑 pnpm run check

适用场景与注意事项

比较适合这些情况:

  • 本机两个 DSH web 实例要互相交接任务结果
  • 开发机与构建机、或两台服务器上的 DSH 需要探活和消息投递
  • 希望把 agent / session / 本地 subagent 的生命周期同步给另一侧,而不是自己轮询日志

它不替代多智能体编排类插件(例如目录里的 dsh-agent-teamsdsh_workflow)。那些管的是一个 Harness 里怎么组团队、怎么跑工作流;dsh-interconnect 管的是实例与实例之间的通道。

使用前注意:

  1. 权限。插件以当前 dsh 进程的权限运行,安装时可能执行代码。装之前先看 GitHub 源码和 MIT 许可证;生产环境优先固定 commit 哈希。
  2. 密钥DSH_INTERCONNECT_TOKEN 未配置则入站 fail-closed;配置了就要当共享密钥保护。谁持有 token,谁就能向对端活 session 投递文本。
  3. 网络暴露面。服务挂在 host webserver 的 /interconnect 上。如果 web 端口对不可信网络开放,等于把这条通道一起暴露出去。
  4. 只投递给活 session。对端 agent 不在,delivered 为 false,不会自动拉起。
  5. host 级挂载。不要指望把它丢进 isolate 的 agent preset 就能用;当前架构要求两个插件都在 host。
  6. 运行依赖ws 由宿主 node_modules 提供(构建时 external),不是这个包单独再装一份。
  7. 版本字段。npm / package.json 为 0.2.0;仓库里的 dsh.plugin.json 仍写着 0.1.0,以 npm 版本为准。

小结

dsh-interconnect 给 DeepSeek Harness 补上了跨实例的消息、探活和事件通道:host 侧是带共享密钥的 HTTP / WebSocket 服务,模型侧是两个可调用的工具。它体量不大,边界清楚,适合已经在多实例或多机器上跑 DSH、需要把结果交出去而不是只在一个进程里编排的人。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-interconnect/

GitHub:https://github.com/Chinesezjc/dsh-interconnect

npm:https://www.npmjs.com/package/dsh-interconnect

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜