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 / 幻方无官方从属关系。