DeepSeek Harness 代理桥接插件

前言

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,记录版本、服务状态和生效工具姿态,便于排查部分失败情况。

安装与启用

在两台机器上都执行以下步骤。

  1. 将插件包放入 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"
  1. 在 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
  1. 提供预共享密钥

为启动 DSH 的用户设置相同的环境变量:

[Environment]::SetEnvironmentVariable('DSH_BRIDGE_PSK', '<至少16个字符>', 'User')

然后重启 DeepSeek Harness。插件是宿主侧代码,页面刷新不足以生效。

  1. 验证运行状态
  • 侧边栏在「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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye