dsh-agent-chat:兩臺機器上的 DSH Agent 跨機消息與上下文注入

DSH 的 agent 不是常駐進程,只在收到消息時才運行。這導致在多臺機器間傳遞上下文比較麻煩。dsh-agent-chat 插件通過 HTTP 提供了一個基於回合注入的跨機消息通道,讓兩臺機器上的 DSH agent 能夠互相留言,並在回合開始時將未讀消息拼入上下文。

插件介紹

這是一個 DSH host plugin(web profile),無客戶端半邊,僅依賴 Node 內置模塊。插件的狀態爲自用,已在兩臺機器(Windows 筆記本 ↔ NAS)上跑通。

安裝與啓用

使用官方安裝命令添加插件到 web profile:

dsh plugin --profile web add github:harmless0819-dev/dsh-agent-chat

安裝後重啓 dsh web 即可生效。

配置

在 profile 的 cordis.patch.yml 中配置該行,整行替換該條目,不是深合併。配置項包括:

  • selfLabel:本機在對話裏的名字。
  • peerBase:對端基礎地址;空則只收不發。
  • enabled:是否啓用後臺輪詢。
  • pollMs:輪詢間隔(最小 1000)。
  • maxInject:每次注入最多幾條。
  • logFile:消息日誌路徑。
  • tokenFile:密鑰文件,每條請求重讀,支持熱輪換。

示例配置:

- id: dsh-agent-chat
  name: dsh-agent-chat
  config:
    selfLabel: "laptop"
    peerBase: "http://192.168.1.100:6061"
    enabled: true
    pollMs: 3000
    maxInject: 5
    logFile: "D:/deepseek/logs/agent-chat.jsonl"
    tokenFile: "C:/Users/<you>/.agent-chat/token"

工作原理

消息流轉分爲三步:

  1. 落盤:本插件把消息落進本地日誌(默認 <workspace>/.agent-chat/chat.log.jsonl)。
  2. 輪詢:後臺輪詢對端的 /agent-chat/messages,把新消息拉進本地日誌(帶游標,不重複)。
  3. 注入:每次 agent 要開新步時(agent/pre-step),把尚未注入過的消息拼成一塊上下文追加進本次對話。

自己發出的消息同時會 POST 給對端的 /agent-chat/send。

HTTP 接口

插件在 DSH 的 webServer 上提供了以下路由:

  • GET /agent-chat/health.json:探針,返回游標、待注入數、對端可達性。
  • GET /agent-chat/messages?since=<id>:自 since 之後的消息(對端輪詢用)。
  • POST /agent-chat/send:投入一條消息 {from,text,ts}。
  • GET /agent-chat/log?limit=50:查看最近的消息。

安全

/agent-chat/send 會把任意文本注入 agent 的下一回合。如果部署把 HTTP 面暴露到 LAN(甚至疊了路由器端口轉發),必須配置 token。

Token 取值的優先級爲:

  1. cfg.token
  2. 環境變量 DSH_AGENT_CHAT_TOKEN
  3. tokenFile

三者都空時退回舊行爲(開放),但啓動日誌會告警 auth=open。

請求需帶 x-agent-chat-token: <token> 或 Authorization: Bearer <token>。

注意事項

  • 僅依賴 Node 內置模塊,無需額外安裝依賴。
  • 自用插件:插件作者已在兩臺機器(Windows 筆記本 ↔ NAS)上跑通,但未提供廣泛的生產級測試數據。
  • 生態背景:本插件基於 DSH 生態,DSH 理念是「一切皆插件」,社區目錄與 DeepSeek / 幻方無官方從屬關係。
羽毛球分组比赛记分
小程序二维码

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

小夜