dsh-fleet-mesh:面向 DSH 智能体的会话感知 Mesh 中继

前言

在 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,由部署方决定。

典型用法

  1. 为每个要参与 mesh 的智能体配置 agents.<name>、keyPath,并按需设置 wake。
  2. 用 mesh_register 把名称、接收 URL、公钥发布到 registry;其它节点用 mesh_sync 更新本地 peer 目录。
  3. 发送方用 mesh_list 确认本地目录,再 mesh_send 指定 agent、message、action、reply。
  4. 对端在 allow 与签名、replay、dedupe 通过后,按投递矩阵调用 followup / steer / inject。
  5. 发送失败时根据返回原因处理(例如 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
羽毛球分组比赛记分
小程序二维码

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

小夜