dsh-openbot-artist-bridge: Connecting OpenBot Conversations to the Existing DS Bot in DSH

前言

在 DeepSeek Harness(DSH)里跑 DS Bot 时,工作区、记忆和 Bot 身份都绑在 DSH 会话上。若同时在 OpenBot Desktop 里用 Agent Client Protocol(ACP)和另一个前端对话,默认会是两套进程、两套上下文,很难让两边共用同一个 Bot。

维护者 shiyoungwoo 的客户端插件 dsh-openbot-artist-bridge 做的是中间适配:OpenBot 仍走 ACP,DSH 侧仍是你已经配置好的 DS Bot;插件只转发提示并把回复流式回传,不另起 Bot、不单独占一套 DSH 进程。下面介绍它的定位、架构和可复现的安装步骤。

这是什么

一句话:Connect OpenBot ACP conversations to an existing DS Bot inside DeepSeek Harness(仓库 README 原文)。

  • 分类:客户端(社区目录 skillhub.cn)。
  • 许可证:MIT(package.json 与 README 一致)。
  • 当前包版本:0.1.0(@local/dsh-openbot-artist-bridge)。

它是前端适配层;不是 Bot 创建器,不会启动独立 DSH,也不会接管已有会话。目标 Bot 必须已在 DSH 中通过 DS Bot 插件存在,且至少有一个 Bot 会话。

架构概览

数据路径如下(与 README 一致):

OpenBot Desktop
   │  ACP over stdin/stdout (newline-delimited JSON-RPC)
   ▼
acp_bridge.py  ──┐
                 │  AF_UNIX socket, newline-delimited JSON
                 ▼
runtime.mjs  (host half inside DSH)
   │  shared fetch /api/bot  +  sessionController.prompt
   ▼
DS Bot session in DSH
  • runtime.mjs(DSH 内 host 半):创建仅属主可访问的 AF_UNIX socket(父目录 0700、socket 0600),通过 DSH 共享连接解析配置的 Bot,以 mode: 'queue' 投递提示,并按 rpcId 将 session/event 关联到对应请求。
  • acp_bridge.py(OpenBot 启动的独立进程):在 stdin/stdout 上实现 ACP,作为客户端连接上述 socket;仅声明支持文本与 resource_link 类提示;取消某条提示时关闭该提示自己的连接,而非全局 cancel,避免打断 Bot 上无关任务。

环境与依赖

使用前请对照 README 与 package.json 的 engines 字段:

  • DSH:>=0.2.1-rc.3 且 <0.3.0,并已安装 DS Bot 插件且至少有一个 Bot 会话。
  • Node:>=22.19(package.json 写为 >=22.19.0)。
  • Python:3.9+(运行 ACP 前端 acp_bridge.py)。
  • 操作系统:macOS 或 Linux(依赖 AF_UNIX socket)。

安装与配置

1、把 host 半装进 DSH profile

官方 README 给出的安装方式如下(路径请换成你本机 clone 或下载后的目录):

pnpm add link:/path/to/dsh-openbot-artist-bridge
# or: pnpm add github:shiyoungwoo/dsh-openbot-artist-bridge

说明:这是通过 pnpm 把插件包链入 profile,不是 dsh plugin add 形式的命令;以 README 原文为准。

2、写入 bundle 配置

将仓库中的 cordis.patch.yml 复制进 profile 的 bundle 列表,或在自有 profile 补丁里覆盖对应行。示例(占位值需替换):

- id: local-openbot-artist-bridge
  name: '@local/dsh-openbot-artist-bridge'
  config:
    botId: session-your-bot-session-id
    socketPath: /absolute/path/to/dsh-openbot-artist-bridge/runtime/bridge.sock
    timeZone: Asia/Shanghai

配置项含义(README 中文说明与 Security notes 一致):

字段 说明
botId 必填,指向 DSH 里已有 Bot 会话
socketPath 必填,acp_bridge.py 与 runtime.mjs 共用的 socket 绝对路径
timeZone 默认 Asia/Shanghai
lookupTimeoutMs 可选,默认 15000
promptTimeoutMs 可选,默认 3600000

真实 botId、socketPath 应写在 profile 覆盖里,不要提交到共享仓库。

3、在 OpenBot 注册 ACP 前端

在 OpenBot 中添加自定义 Agent,通过 stdin/stdout 启动 Python 桥接脚本。示例(路径改为本机绝对路径):

{
  "id": "dsh",
  "name": "DeepSeek Harness",
  "command": "/usr/bin/python3",
  "args": ["/absolute/path/to/dsh-openbot-artist-bridge/acp_bridge.py"]
}

若修改了 socketPath,需给 acp_bridge.py 传入 --socket <path>;否则默认使用脚本同目录下 runtime/bridge.sock。

4、重启或启用插件

重启 DSH,或在 Plugins 页面切换对应 bundle,即可从 OpenBot 向该 DS Bot 发话。

典型用法流程

经过上面的步骤,日常使用可以概括为:

  1. 在 DSH 中保持目标 DS Bot 会话可用(插件不负责创建会话)。
  2. 启动 DSH,确保 openbot-artist-bridge 的 host 半监听配置的 socketPath。
  3. 在 OpenBot Desktop 中选择注册的「DeepSeek Harness」类 Agent,正常发起对话;ACP 经 acp_bridge.py 进入 socket,再由 runtime.mjs 进入 DS Bot 的 queue 模式提示链路。

插件对 prompt 类型的支持以 ACP 前端声明为准:文本与 resource_link;其它能力未在 README 中承诺。

安全与运行权限

  • Socket 仅属主可访问;若同一 turn 中有其它 DSH 用户的 prompt 被检测到,会拒绝并给出可读说明,而不是静默合并。
  • 单帧大小上限 8 MiB。
  • 插件在当前 DSH 进程权限下运行;安装前应阅读仓库源码与 MIT 许可证,确认 botId 指向的会话与工作区符合你的预期。

社区插件目录站点与 DeepSeek / 幻方无官方从属关系;本插件同样属于 DSH「一切皆插件」生态中的第三方客户端扩展。

仓库结构与自测

主要文件(README Files 节):

  • index.js — 插件入口,声明配置并在 effect 中启动 bridge。
  • runtime.mjs — host 半:socket 服务、Bot 解析、提示 relay。
  • acp_bridge.py — OpenBot 用的独立 ACP 前端。
  • cordis.patch.yml — 带占位配置的 bundle 补丁。

维护者提供的测试命令:

npm test        # host half: real AF_UNIX socket, queueing, rpcId correlation, security cases
npm run test:acp  # ACP frontend: real stdin/stdout against a fake socket server

结尾

dsh-openbot-artist-bridge 解决的是「OpenBot ACP 前端 + DSH 内已有 DS Bot」之间的协议与进程边界问题:一条 socket、同一 botId,让 OpenBot 与 DSH 共用 Bot 身份、记忆与工作区,而不重复造 Bot。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye