前言¶
DeepSeek Harness(DSH)在本地运行多个智能体时,如果需要让不同机器上的两个代理互相提问、共享工具能力并保持多轮对话,当前没有现成的原生方案。传统做法要么绕开 DSH,要么在应用层自行实现网络通信,维护成本高且难以与 DSH 的会话和工具体系集成。下面介绍一个社区插件,它通过一条经过 PSK 认证的 TCP 链接,在两个 DSH 主机之间建立双向代理桥接。
这是什么¶
dsh-plugin-agent-bridge 是一个运行在 DSH profile 内的社区插件(非 DeepSeek 官方),由 zshqzcn 维护。它的核心价值是在不暴露 DSH 界面的前提下,让两个 DSH 主机上的代理可以跨网络对话,共享对方的工具集和上下文。默认情况下,桥接端只能读取和搜索,不会执行写操作或命令。
核心功能¶
- 双向链路:任意一方发起对话,双方共享同一个 socket。
- GUI 操作页:侧边栏「Automation tasks」下方出现「Bridge」入口,打开全宽聊天页,显示连接状态、对话记录、Markdown 渲染和代码块复制按钮。
- 代理工具:提供
bridge_ask(单问)和bridge_dialog(有界多轮对话)两个工具。 - 认证传输:NDJSON over TCP,使用 HMAC-SHA256 的挑战-响应证明 PSK,每一帧携带序列号 HMAC,拒绝重放与乱序。
- 独立会话:每个对端保持一个独立会话,不会混入操作员自身的对话。
- 默认只读:通过工具名称过滤和工具类型栅栏,禁止写操作和命令执行。
- 循环防护:默认跳数上限 8、每分钟最多 30 轮;桥接子代理不能反向调用
bridge_ask。 - 回复语言:按配置语言(默认
zh)返回答案,对话记录保留实际输入文本。 - 持久记录:每个事件和轮次写入 profile 旁的
bridge-transcript.jsonl,刷新后仍可查看。 - 自检:加载时写入
bridge-boot.json,记录版本、服务状态和生效工具姿态,便于排查部分失败情况。
安装与启用¶
在两台机器上都执行以下步骤。
- 将插件包放入 profile 的 node_modules 目录
Windows 路径示例:C:\Users\<you>\.dsh\profiles\desktop
$profileDir = "$env:USERPROFILE\.dsh\profiles\desktop"
New-Item -ItemType Directory -Force "$profileDir\node_modules" | Out-Null
Copy-Item -Recurse .\dsh-plugin-agent-bridge "$profileDir\node_modules\dsh-plugin-agent-bridge"
- 在 cordis.patch.yml 中注册插件行
两台机器的配置仅 nodeId 与 peer 不同。
机器 A(监听方,接受连接):
- insert:
- id: agent-bridge
name: dsh-plugin-agent-bridge
config:
nodeId: machine-a
psk: !!js process.env.DSH_BRIDGE_PSK
listen: true
port: 19388
cwd: C:\Users\<you>\.dsh\bridge-workspace
tools:
preset: readonly
deny:
- ask_user_question
机器 B(拨号方,连接到 A,带退避重试最多 30 秒):
- insert:
- id: agent-bridge
name: dsh-plugin-agent-bridge
config:
nodeId: machine-b
psk: !!js process.env.DSH_BRIDGE_PSK
peer:
host: 100.64.0.2 # A 在私有网络上的地址
port: 19388
cwd: C:\Users\<you>\.dsh\bridge-workspace
tools:
preset: readonly
deny:
- ask_user_question
- 提供预共享密钥
为启动 DSH 的用户设置相同的环境变量:
[Environment]::SetEnvironmentVariable('DSH_BRIDGE_PSK', '<至少16个字符>', 'User')
然后重启 DeepSeek Harness。插件是宿主侧代码,页面刷新不足以生效。
- 验证运行状态
- 侧边栏在「Automation tasks」下方显示「Bridge」,打开后显示
machine-a ⇄ machine-b。 - profile 目录下生成
bridge-boot.json,包含"phase": "complete"和已安装版本。 - 拨号端在监听端可达后约 30 秒内
peers变为非空。
配置项说明¶
| 配置项 | 默认值 | 说明 |
|---|---|---|
nodeId |
必填 | 本机标识,对端通过此名称寻址 |
psk |
必填 | 预共享密钥,≥16 字符,可由 DSH_BRIDGE_PSK 环境变量提供 |
bridgeId |
dsh-agent-bridge |
桥接作用域,不同桥可共用 PSK |
listen |
当未设置 peer.host 时为 true |
绑定监听器 |
host |
0.0.0.0 |
监听器绑定地址 |
port |
19388 |
监听端口(非 DSH 自身 Web 端口) |
peer.host / peer.port |
— / 19388 |
设置后进入拨号模式 |
tools.preset |
readonly |
可选 none、readonly、full |
tools.allow / tools.deny |
preset / ['ask_user_question'] |
名称级允许列表与拒绝列表(后者优先减) |
tools.allowKinds |
只读类型 | 粗粒度栅栏:read、search、fetch、other |
exposeTool |
true |
注册 bridge_ask / bridge_dialog 工具 |
chat |
true |
提供 GUI 路由 (/bridge-chat、/state、/send) |
replyLanguage |
zh |
对端回答应返回的语言,空字符串禁用 |
maxHops |
8 |
中继消息的递归跳数上限 |
maxTurnsPerMinute |
30 |
每分钟每对端的轮次预算,滑动 60 秒窗口 |
maxDialogRounds / dialogMaxMs |
50 / 600000 |
单次 bridge_dialog 的轮次与时长上限 |
sessionIdPrefix |
bridge- |
桥接会话 ID 前缀,会话 ID 为 <prefix><peerId> |
agentOptions |
宿主默认模型 | { provider, model, reasoningEffort, maxTokens } |
cwd |
宿主工作目录 | 桥接会话的工作目录,建议显式设置 |
reconnectBaseMs / reconnectMaxMs |
1000 / 30000 |
拨号退避区间(带抖动) |
transcriptPath |
<profile>/bridge-transcript.jsonl |
对话记录持久化路径 |
transcriptMaxEntryBytes / transcriptMaxFileBytes |
65536 / 8388608 |
单条与单文件记录大小上限,超限时截断与压缩 |
trustedHosts |
[] |
除本地回环外额外允许的主机名,仅 GUI 通过 LAN 主机名打开时需要 |
maxPeerSessions |
32 |
每个对端活跃会话数量上限,最少最近最少使用(LRU)驱逐 |
maxConnections / maxConcurrentPerIp |
64 / 4 |
监听器准入限制,拒绝源地址会被记录 |
duplicateTurnWindowMs |
10000 |
同一 peer 在此窗口内发送相同文本会被当作循环拒绝 |
典型用法¶
- 操作员页面:侧边栏 → Bridge,输入后按回车(Shift+Enter 换行)。本地侧消息有边框,对端回答为正文。悬停可复制消息,代码块头部有复制按钮。
- 从代理调用:
bridge_ask向对端提一个单问题;bridge_dialog运行有界多轮对话。两种工具在桥接子代理内部均被拒绝,防止无限递归。 - 从宿主代码调用:
ctx.bridge.prompt(peer?, text, options)发起单次;ctx.bridge.converse(...)运行有界多轮。
适用场景与注意¶
- 适合需要跨机协作的 DSH 用户,例如两台开发机、一台开发机 + 一台测试机,共享工具集和上下文。
- 插件以当前 DSH 进程权限运行,部署前建议检查源码与许可证,确认无安全风险后再在生产环境使用。
- 依赖两台机器在同一私有网络可达(Tailscale、WireGuard、LAN + 防火墙规则等)。
- Node.js 版本要求 ≥22。
小结¶
该插件为 DSH 提供了一条经过认证的双向代理桥接路径,让两个 DSH 主机上的智能体可以在不暴露操作员界面的情况下互相提问、共享工具能力并保持多轮对话。它默认只读、支持循环防护与持久记录,适合需要跨机协作的场景。
- 目录页:https://www.skillhub.cn/plugins/zshqzcn/dsh-plugin-agent-bridge
- 源码仓库:https://github.com/zshqzcn/dsh-plugin-agent-bridge