前言¶
在 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、socket0600),通过 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 发话。
典型用法流程¶
经过上面的步骤,日常使用可以概括为:
- 在 DSH 中保持目标 DS Bot 会话可用(插件不负责创建会话)。
- 启动 DSH,确保 openbot-artist-bridge 的 host 半监听配置的
socketPath。 - 在 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。