前言¶
在 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