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"
工作原理¶
消息流轉分爲三步:
- 落盤:本插件把消息落進本地日誌(默認
<workspace>/.agent-chat/chat.log.jsonl)。 - 輪詢:後臺輪詢對端的
/agent-chat/messages,把新消息拉進本地日誌(帶游標,不重複)。 - 注入:每次 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 取值的優先級爲:
cfg.token- 環境變量
DSH_AGENT_CHAT_TOKEN tokenFile
三者都空時退回舊行爲(開放),但啓動日誌會告警 auth=open。
請求需帶 x-agent-chat-token: <token> 或 Authorization: Bearer <token>。
注意事項¶
- 僅依賴 Node 內置模塊,無需額外安裝依賴。
- 自用插件:插件作者已在兩臺機器(Windows 筆記本 ↔ NAS)上跑通,但未提供廣泛的生產級測試數據。
- 生態背景:本插件基於 DSH 生態,DSH 理念是「一切皆插件」,社區目錄與 DeepSeek / 幻方無官方從屬關係。