前言¶
在 DSH 里做多智能体协作时,常见的 agent-to-agent 消息往往是「发一条、等一条」的请求/响应模式:适合一次性任务,却不太适合需要连续对话、知道「谁在问、在回哪件事、要不要答复」的协同。若每个接收方再单独挂一个插件、单独占一个端口,部署和运维成本也会上去。
下面介绍社区插件 dsh-fleet-mesh(维护者 emiltsoi,目录分类 admin-security):在 DSH 侧提供 Session-aware 的 mesh 中继——入站信封经 Ed25519 验签后按投递策略变成对目标智能体的 prompt,而不是单纯通知;同一套插件配置里的 agents: 映射与 单一监听端口,按信封里的 [to:] 分发,第二个 DSH 智能体不必再装第二份插件、再开第二个 listener。
这是什么¶
dsh-fleet-mesh 的定位是:Session-aware mesh relay for DSH agents——带 Ed25519 签名的接收路由与投递策略,以及出站发送、对等目录与 registry 客户端(见 GitHub README 与 package.json 描述)。
与「只转发 JSON、不保留会话语义」的做法相比,它强调:收件方知道发送方、关联的会话与 thread,以及 action / reply 所表达的意图;发送侧 mesh_send 在共享的 10 秒投递预算内完成签名与 POST,并返回 delivered 或带原因的错误,不在背后静默排队。
当前 package 版本为 0.2.5,许可证 MIT,要求 Node.js >= 20、dsh >= 0.1.5-rc.2。README 写明接收与发送两半均已完成测试(四套测试、170 个断言)。社区目录页:skillhub.cn/plugins/emiltsoi/dsh-fleet-mesh。
核心功能¶
独立 listener 与 HTTP 路由¶
插件自行绑定 listener,只暴露 /mesh/*,而不是挂在 harness 默认仅监听 127.0.0.1 的 Web 服务上——后者会导致对端 POST 无法完成 TCP 连接;若把整个 Web 面改绑 0.0.0.0,又会连带 GUI、API 与其它插件路由,暴露面过大。
| 路由 | 作用 |
|---|---|
POST /mesh/receive |
验证 Ed25519 签名信封,再按策略投递为 prompt |
GET /mesh/health |
判断投递是否可能成功,而非进程是否 merely alive |
源地址 allow 列表(先于一切重逻辑)¶
Node 不能按子网 bind,因此网络边界在请求路径里、JSON 解析与验签之前检查 allow(如 192.168.0.0/23 覆盖 192.168.0. 与 192.168.1.)。回环地址始终放行;IPv4-mapped IPv6 会先规范化;非回环 IPv6 直接拒绝。
信封格式与发送流程¶
Bracket 头 + 自由正文,例如:
[mesh][v:1][from:<sender>][to:<recipient>][id:<uuid>][session:?][from_session:?][action:do|info][reply:yes|no|end][ref:?]
发送侧典型调用(README 示例):
mesh_send(agent="ada", message="Review this plan", action="do", reply="yes")
步骤概括:从 peer 目录解析 Ada 的身份 → 填充信封 → 用发送方 PKCS8 Ed25519 私钥对 "{timestamp}\n{body}" 签名 → 在 10 s 预算内 POST 到 Ada 的 mesh 端点。
接收时 action / reply 可缺省(默认 info / no);发送时必须显式给出,否则 tolerant 接收端可能把请求降级为确认。to: '*' 为广播,广播不会 wake 任何人。
投递矩阵(与 harness 语义对齐)¶
| 情况 | 调用 | 效果 |
|---|---|---|
| 空闲,或 busy 且新 thread | agent.followup(msg) |
next-turn + wake |
busy 且同 thread(ref),或来自 wake 列表对等方的 action: do |
agent.steer(msg) |
next-step + wake |
| 不在 wake 列表,或广播 | agent.inject(msg) |
next-step,不 wake |
收件箱是对 session 事件的持久投影,重启后排队消息仍可恢复;插件内存里的 spool 做不到这一点。
五个工具(命名与 hermes-mesh 对齐)¶
| 工具 | 用途 |
|---|---|
mesh_list |
从本地 identity store 列出 peer(只读、无网络) |
mesh_send |
签名并投递一封;state 为 delivered 或 error(如 unreachable、unauthorized、unknown-peer、not-configured) |
mesh_sync |
从 registry 拉取 peer 身份到本部署缓存 |
mesh_register |
向 registry 发布本智能体行(名称、接收 URL、公钥) |
mesh_deregister |
从 registry 撤回本智能体行 |
安全与防重放¶
- 认证依赖对原始请求字节的签名,而非重序列化 JSON;签名形式为
"{X-Mesh-Timestamp}\n{body}"(无 timestamp 时回退为 body alone)。 - 无 CSRF 守卫(server-to-server webhook 场景)。
- 默认 300 s replay 窗口 + 进程内 dedupe,避免重复信封触发第二轮。
- 另有每轮注入上限、wake 预算、runaway breaker 等防护;breaker 仅由会话事件流中的真实用户消息释放,不由 mesh 流量自证。
刻意不做的事(README 明确)¶
- 无 outbound spool:发送要么落地要么明确失败,避免「报告成功但对端不在」误导发送方。
- 无
session.cancel:中断工作由人决定,不由 peer 决定。 - 尚无 thread ledger;无 fleet 级 wake 策略——wake 列表是控制「话痨 peer」与成本的关键门。
安装与启用¶
官方安装命令(来自 README):
pnpm add dsh-fleet-mesh
安装后将其加入 profile 的 bundles。插件自带中性默认:无配置时不打开 listener、不服务任何智能体。
在 profile 的 patch 层用 id 覆盖配置,例如:
- id: dsh-fleet-mesh
config:
host: '0.0.0.0' # 默认仅 loopback
port: 8760
allow: # 第一道门,先于其它逻辑
- 192.168.0.0/23
durableRoute: '...' # unreachable 时告知发送方应写入的持久路径
agents:
<agent-name>:
preset: <preset> # 会话由 PRESET 解析,非 pinned id
sessionId: null # 可选覆盖
keyPath: '...' # 本智能体 Ed25519 私钥(PKCS8 PEM)
wake: [] # 谁可以 START 一轮;默认可为空
插件不内置子网与智能体名称;谁可以连 listener、谁可以 wake,由部署方决定。
典型用法¶
- 为每个要参与 mesh 的智能体配置
agents.<name>、keyPath,并按需设置wake。 - 用
mesh_register把名称、接收 URL、公钥发布到 registry;其它节点用mesh_sync更新本地 peer 目录。 - 发送方用
mesh_list确认本地目录,再mesh_send指定agent、message、action、reply。 - 对端在
allow与签名、replay、dedupe 通过后,按投递矩阵调用followup/steer/inject。 - 发送失败时根据返回原因处理(例如
unreachable时 README 提到会指向durableRoute,避免向空地址重试)。
适用场景与注意¶
适合:同一 DSH 部署或受控内网中,多个智能体需要保留会话与 thread 语义的互发消息;需要 Ed25519 身份、registry 发现、以及「失败即报错、不虚假成功」的出站语义;希望工具命名与 hermes-mesh 接近、便于跨 substrate 迁移习惯。
注意:
- 插件以当前 dsh 进程权限运行;安装与启用前请自行审阅 源码与 LICENSE,确认
allow、wake、keyPath与网络暴露符合你的安全基线。 - DSH 生态强调「一切皆插件」;SkillHub 目录 为社区站点,与 DeepSeek / 幻方无官方从属关系。
- 若 harness 主 Web 仅监听本机,不要指望把 mesh receive 挂上去替代独立 listener——README 用实测说明此路不通。
结尾¶
dsh-fleet-mesh 把「验签入站 + 会话感知投递 + 显式成败的发送 + registry/目录」收进一个 admin-security 向的 DSH 插件:一个端口、一份 agents 配置服务整份 substrate 上的多智能体 mesh。
- 目录页:https://www.skillhub.cn/plugins/emiltsoi/dsh-fleet-mesh
- 源码与文档:https://github.com/emiltsoi/dsh-fleet-mesh