前言¶
在 DeepSeek Harness(DSH)里跑 agent,常见需求是跨 session、跨机器协作:一台机器上的 agent 需要给另一台机器上的 session 发消息,或者探测对端是否在线、列出可投递的目标。单靠本机 API 或手工拼 HTTP 请求,既要维护地址映射,又要处理连接保活和失败重试,成本不低。
dsh-interconnect 是社区维护者 Chinesezjc 发布的工作流类插件,当前在 GitHub 上有 34 stars。它把跨实例消息投递、活性探测、事件推流和模型侧工具封装成一套 host 服务,让多个 DSH 实例通过持久 WebSocket 链路互相通信。
这是什么¶
dsh-interconnect(npm 包名 dsh-interconnect,当前版本 0.10.0,MIT 许可)是面向 DeepSeek Harness 的跨实例消息互通与事件通知插件。一句话定位:让一个 DSH 实例能向本机、另一台机器、或另一台机器上的其他 DSH 实例发送消息、探测活性,并在实例之间双向推送事件。
插件以 bundle 形式提供三个组件:
| 组件 | 作用 |
|---|---|
interconnect |
host 服务(ctx.interconnect),提供 /interconnect/link WebSocket 端点 |
tool-interconnect |
模型可见工具:interconnect_send、interconnect_list、interconnect_ping、interconnect_reply |
skill-interconnect |
配套 skill,向模型说明上述工具的用法与失败处理 |
核心功能¶
下面按传输层、工具层和配套 skill 分开说明。
持久 WebSocket 链路¶
从 0.9 起,传输只走 WebSocket 持久链接,不再有 HTTP 端点。send、reply、ping、list 全部经 /interconnect/link 上的 msg / query 帧完成。激活时插件会按 peers 映射自动对每个对端建链,带心跳与指数退避重连。
寻址参数是 instanceId,不再是 baseUrl。instanceId 是配置里 peers 映射的键;真正用来拨号的 origin 由映射值给出(例如隧道端点 http://127.0.0.1:13080)。到未配置或未联通的对端,send / ping / list 返回 unreachable,没有 HTTP 回退。
鉴权使用共享密钥 DSH_INTERCONNECT_TOKEN(bearer,fail-closed,timing-safe 比较),配置在凭据源而非插件 config 里。
模型可见工具¶
tool-interconnect 暴露四个工具:
interconnect_send:向对端实例的指定 session 投递消息;可选delivery选投递模式、resume唤醒离线 session。发送时会自动注入本机instanceId和sessionId。interconnect_list:列出对端当前 live 的 session(id、标题、状态),用于不知道 session id 时寻址。interconnect_ping:探测对端实例活性与身份。interconnect_reply:向记录过的发送方回传消息,只需本机 session id 和文本,无需再次寻址。
interconnect_list 只返回当前有运行中 agent 的 session——send 能到达的正是这些。subagent 拥有的 session 不会出现在列表里,也不能直接投递。
双向回复¶
收到带 sender(instanceId + sessionId)的 send 后,接收方会记下「本地 session id → sender」的映射。之后该 session 可用 interconnect_reply 回信,目标从记录的 sender 解析,走本机到对端的持久链接。sender 用于 reply 归因,不是路由或鉴权依据;也不进模型上下文。
投递模式与唤醒¶
delivery 有三个取值,发送方可按消息覆盖接收方默认值:
| 模式 | 行为 |
|---|---|
followup |
排队成独立一轮,等接收方当前轮结束 |
steer |
插进运行中那轮的最近 step 边界 |
inject |
只写入上下文,不唤醒 idle 的 agent |
resume 默认关闭。设为 true 可唤醒已持久化但没有运行 agent 的 session,但会触发完整 agent 回合(含模型调用),发送方需显式请求,接收方可用 allowResume: false 拒绝。
投递失败时,SendResult.reason 会指明原因,例如 session-not-live、unreachable、resume-refused、session-owned-by-subagent、no-sender-known 等,便于调用方决定重试还是换目标。
配套 skill¶
skill-interconnect 向模型注册 dsh-interconnect skill,说明 list / ping / send / reply 的完整用法、投递模式、resume 唤醒语义与失败处理。它依赖 interconnect 服务,只有传输层存在时才注册进 ctx.skills。
安装与启用¶
本包已发布到 npm。仓库是一个 DSH profile bundle,根 package.json 声明 dsh.bundle.patch 指向 cordis.patch.yml,后者会插入三个插件行。
从 npm 安装:
dsh plugin --profile <name> add dsh-interconnect
或从本地路径安装(开发调试时):
dsh plugin --profile <name> add file:/path/to/dsh-interconnect
dsh plugin add 会把仓库识别为 bundle 并追加进 profile 的 dsh.profile.bundles。重启 web 服务使 host 侧生效。两端实例的 .credentials.yaml(或等价凭据源)需设置相同的 DSH_INTERCONNECT_TOKEN 作为共享密钥。
配置示例(interconnect 行的 config,字段均可选):
- id: interconnect
config:
instanceId: my-box
peers:
peer-a: http://127.0.0.1:13080
peer-b: http://127.0.0.1:13081
delivery: followup
allowResume: false
典型用法¶
寻址与投递¶
先用 interconnect_list 查看对端 live session,再向指定 session 发消息:
interconnect_list(instanceId="peer")
interconnect_send(instanceId="peer", sessionId="session-264d37b0-…", text="…")
interconnect_ping(instanceId="peer")
interconnect_list 返回示例:
session-264d37b0-… 重构 interconnect 插件 [idle]
session-b07326da-… [running]
双向回复¶
实例 A 向实例 B 的 session 发消息,B 凭本地 session id 回信,无需再次给出对端地址:
# A 发往 B
interconnect_send(instanceId="b", sessionId=B-sess, text="…")
# B 回传
interconnect_reply(sessionId=B-sess, text="reply")
唤醒离线 session¶
唤醒并让对方实际处理(会起一个计费回合):
interconnect_send(instanceId="peer", sessionId, text, resume=true, delivery="followup")
唤醒但不起回合,只写入上下文:
interconnect_send(instanceId="peer", sessionId, text, resume=true, delivery="inject")
适用场景与注意¶
适合谁:
- 需要在多台机器或多个 DSH 实例之间做 agent 协作的开发者
- 希望模型能通过工具主动发现对端 session、投递消息、收回复的场景
- 需要跨实例事件推流(生命周期事件经
interconnect/event发出)的集成
使用前注意:
- 插件以当前 DSH 进程的权限运行,安装前应检查 源码 与 MIT 许可证。
- 0.9 起传输只走 WebSocket,到未联通对端无 HTTP 回退;部署时需保证
peers映射中的 origin 可达,且两端DSH_INTERCONNECT_TOKEN一致。 resume会触发完整 agent 回合并产生模型调用费用,默认关闭;接收方可设allowResume: false拒绝。- 不能直接投递 subagent 拥有的 session,需通过父 agent 触达。
- 没有 Host
agentlookup 的部署(headless、无 api-proxy)无法唤醒离线 session,会降级为session-not-live。
结尾¶
dsh-interconnect 把跨实例消息投递、活性探测、事件推流和模型工具收进一个 bundle,用 instanceId + 持久 WebSocket 链路替代手工维护 HTTP 端点。如果你需要在多个 DSH 实例之间让 agent 互相发消息、列 session、探测在线状态,dsh-interconnect 是目前社区里较完整的工作流方案。
- 社区目录页:https://www.skillhub.cn/plugins/Chinesezjc/dsh-interconnect
- GitHub:https://github.com/Chinesezjc/dsh-interconnect
- npm:https://www.npmjs.com/package/dsh-interconnect