用 dsh-interconnect 打通多個 DeepSeek Harness 實例

前言

DeepSeek Harness(dsh)把模型、工具、會話、循環都做成插件,官方倉庫的口號就是「Everything is a Plugin」。單實例用起來很順:一個進程、一組 session、一套工具。真要同時跑兩臺機器、兩個 web 服務,或者讓一個 agent 把結果交給另一臺機器上的 session,默認能力就不夠了——實例之間沒有現成的消息通道,也沒有探活和事件同步。

dsh-interconnect 就是補這塊的社區插件。它給 host 掛上跨實例的 HTTP / WebSocket 服務,再給模型暴露 interconnect_sendinterconnect_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/link WebSocket,對內負責投遞消息、探活、事件 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 端點都是 POSTContent-Type 必須是 application/json,路徑前綴爲 /interconnect

端點 作用
/interconnect/ping 探活,成功則返回 pong: true 和本實例 instanceId
/interconnect/send 向本實例一個仍存活的 session 投遞文本
/interconnect/event 接收對端推來的生命週期事件

請求體複用 DSH host API 的 client-request 信封:typerpcIdmethodpayloadmethod 必須和路徑最後一段一致,否則返回 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/createdagent/disposedagent/statusidle / running
  • session/createdsession/disposed
  • subagent/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:3080http://peer-host:9001
  • sessionId:對端要投遞的 session id
  • text:消息正文

成功時返回 { delivered, instance }

interconnect_ping

  • baseUrl:對端 origin

可達時返回 { reachable: true, instance };傳輸或鑑權失敗時 { reachable: false }

兩個插件都掛在 host compositioninterconnect 是進程級服務,必須 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 列表,缺省爲空
  • deliveryfollowupinject,缺省 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-teamsdsh_workflow)。那些管的是一個 Harness 裏怎麼組團隊、怎麼跑工作流;dsh-interconnect 管的是實例與實例之間的通道。

使用前注意:

  1. 權限。插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。裝之前先看 GitHub 源碼和 MIT 許可證;生產環境優先固定 commit 哈希。
  2. 密鑰DSH_INTERCONNECT_TOKEN 未配置則入站 fail-closed;配置了就要當共享密鑰保護。誰持有 token,誰就能向對端活 session 投遞文本。
  3. 網絡暴露面。服務掛在 host webserver 的 /interconnect 上。如果 web 端口對不可信網絡開放,等於把這條通道一起暴露出去。
  4. 只投遞給活 session。對端 agent 不在,delivered 爲 false,不會自動拉起。
  5. host 級掛載。不要指望把它丟進 isolate 的 agent preset 就能用;當前架構要求兩個插件都在 host。
  6. 運行依賴ws 由宿主 node_modules 提供(構建時 external),不是這個包單獨再裝一份。
  7. 版本字段。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

羽毛球分组比赛记分
小程序二维码

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

小夜