前言¶
DeepSeek Harness(dsh)把模型、工具、会话、循环都做成插件,官方仓库的口号就是「Everything is a Plugin」。单实例用起来很顺:一个进程、一组 session、一套工具。真要同时跑两台机器、两个 web 服务,或者让一个 agent 把结果交给另一台机器上的 session,默认能力就不够了——实例之间没有现成的消息通道,也没有探活和事件同步。
dsh-interconnect 就是补这块的社区插件。它给 host 挂上跨实例的 HTTP / WebSocket 服务,再给模型暴露 interconnect_send、interconnect_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/linkWebSocket,对内负责投递消息、探活、事件 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 端点都是 POST,Content-Type 必须是 application/json,路径前缀为 /interconnect:
| 端点 | 作用 |
|---|---|
/interconnect/ping |
探活,成功则返回 pong: true 和本实例 instanceId |
/interconnect/send |
向本实例一个仍存活的 session 投递文本 |
/interconnect/event |
接收对端推来的生命周期事件 |
请求体复用 DSH host API 的 client-request 信封:type、rpcId、method、payload。method 必须和路径最后一段一致,否则返回 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/created、agent/disposed、agent/status(idle/running)session/created、session/disposedsubagent/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:3080或http://peer-host:9001sessionId:对端要投递的 session idtext:消息正文
成功时返回 { delivered, instance }。
interconnect_ping
baseUrl:对端 origin
可达时返回 { reachable: true, instance };传输或鉴权失败时 { reachable: false }。
两个插件都挂在 host composition。interconnect 是进程级服务,必须 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 列表,缺省为空delivery:followup或inject,缺省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-teams、dsh_workflow)。那些管的是一个 Harness 里怎么组团队、怎么跑工作流;dsh-interconnect 管的是实例与实例之间的通道。
使用前注意:
- 权限。插件以当前 dsh 进程的权限运行,安装时可能执行代码。装之前先看 GitHub 源码和 MIT 许可证;生产环境优先固定 commit 哈希。
- 密钥。
DSH_INTERCONNECT_TOKEN未配置则入站 fail-closed;配置了就要当共享密钥保护。谁持有 token,谁就能向对端活 session 投递文本。 - 网络暴露面。服务挂在 host webserver 的
/interconnect上。如果 web 端口对不可信网络开放,等于把这条通道一起暴露出去。 - 只投递给活 session。对端 agent 不在,
delivered为 false,不会自动拉起。 - host 级挂载。不要指望把它丢进 isolate 的 agent preset 就能用;当前架构要求两个插件都在 host。
- 运行依赖。
ws由宿主node_modules提供(构建时 external),不是这个包单独再装一份。 - 版本字段。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