前言¶
在 DSH 里做智能体协作时,常见的麻烦是「它说它改了」,但没有证据:一个 agent 去执行,对话里只有它的自述,实际改动、改了哪些文件、有没有跑偏,都要人去看工作区。排查成本主要花在「事实核对」上,而不是任务本身。
这篇文章介绍的插件 dsh-codebuddy-bridge(包名 lunatic-eclipse/dsh-codebuddy-bridge)就是针对这一步:把本机已装的 CodeBuddy CLI 接进 DeepSeek Harness,DSH 派活、引擎干活、结论回注对话,再用 CLI 自己留下的改前备份做内容 diff,给出 PASS/FAIL 和证据。维护者是 lunatic-eclipse,版本 0.3.2,MIT 许可。该项目来自社区,与 DeepSeek / 幻方没有官方从属关系。
它是什么¶
一句话:一个 DSH 插件,把本机的 CodeBuddy CLI(WorkBuddy 桌面版内置的同一套引擎)接进来,形成「派活 → 执行 → 结论回注 → 逐轮核对」的闭环。WorkBuddy 桌面版里内置的就是这套引擎,装了 WorkBuddy 就能直接用。
它要补的是协作的最后一环。多数「两个 agent 协作」目前停在产出自述;这个插件把核对建立在文件事实和 CLI 的会话记录上,而不是产出文字上。
核心功能¶
插件提供一组 workbuddy_* 工具。工具名沿用 workbuddy_* 是因为对接的一直是本机的 WorkBuddy/CodeBuddy 引擎,改包名时没有跟着改,避免老文档与习惯失效。
| 工具 | 作用 |
| — | — |
| workbuddy_relay(prompt, edit?, mode?) | 代敲 /codebuddy,结论回注对话;需要 dsh-connect-workbuddy 插件;mode="plan" 是只读规划 |
| workbuddy_review(path, focus?, maxFindings?) | 只读审查一个文件:固定模板 + 自动核对它读没读、有没有写 |
| workbuddy_verify(run?, session?) | 核对某轮改没改:PASS/FAIL/WARN + 证据;不花额度 |
| workbuddy_usage(days?) | 只读用量报表:近 N 天轮数、耗时(按天/按模式)、每轮 token;不花额度 |
| workbuddy_read(turns?, session?) | 读 WorkBuddy 桌面版自己的会话记录 |
| workbuddy_status() / workbuddy_close() | 状态与会话管理 |
| workbuddy_dispatch(task) + /dsh-handoff | 老的文件交接兜底通道 |
两种模式值得单独说明:
- 审计(
workbuddy_review):查错,输出「位置—问题—改法」,最多 N 条、每条 200 字内。 - 计划(
workbuddy_relay(mode="plan")):想清楚,输出结论 / 约束 / 假设 / 候选路线 / 每条的反例 / 建议,只读、不限字数,结论存到交换目录的plans\<时间戳>.md。
额度策略:relay 与 review 共用每会话每小时 6 轮,超限直接返回 { rejected: true, retryAfterSec },不调用 CLI、不花额度;verify / read / status 只本地读文件,不占额度。
安装与启用¶
在 DSH 里执行官方安装命令:
dsh plugin --profile web add dsh-codebuddy-bridge
如果尚未发布到 npm,从仓库装:
dsh plugin --profile web add github:<owner>/<repo>
安装后重启 DSH,输入框下方会出现「CodeBuddy 协作」胶囊。
前置条件:Windows(引擎路径按 WorkBuddy 的安装位置自动探测,其它平台未测);已安装 WorkBuddy 桌面版(自带 CodeBuddy CLI),或自己装的 @tencent-ai/codebuddy-code。dsh-connect-workbuddy 是可选插件:relay 路线(/codebuddy)由它提供,没有它时其余功能照常。
声明的总依赖一并列出,便于先确认环境:
peerDependencies:
dsh-connect-workbuddy >=5.0.0(optional:/codebuddy relay 路线由它提供,缺失时仅其余功能可用)
react ^18.2.0
engines:
node ^22.19.0 || >=24.0.0
dsh >=0.2.0-rc.1 <0.3.0-0
典型用法¶
安装后,插件内置的流程可以照下面走。
1、点开输入框下方的胶囊。它按会话独立;关着时工具会从该会话的 agent 作用域里收走。
2、对模型说「让 CodeBuddy 把 X 改了」,模型会调 workbuddy_relay(prompt, edit: true)。
3、结论以消息回注到对话,输入框上方的面板列出每一步(读取 / 修改 / 执行)。
4、说「验一下」,模型调 workbuddy_verify(),得到 PASS/FAIL + 证据。
核对这一步之所以不花额度,是因为它读的是 CLI 自己留下的会话记录和改前备份,做内容 diff,不额外调用引擎。
配置在 cordis.patch.yml 或插件设置里:
| 字段 | 默认 | 说明 |
| — | — | — |
| collabDir | ~/.dsh/codebuddy-bridge | 交换目录:轮次记录、模式开关、报告 |
| permissionMode | dontAsk | 透传到引擎:读放行、写拒绝、永不等人;改文件要显式开(workbuddy_task 传 acceptEdits,relay 加 --edit);bypassPermissions 为完全放行 |
| cliPath | 自动探测 | CodeBuddy CLI 入口,仅 Windows 默认路径 |
| productConfig | 自动探测 | 让入口以 WorkBuddy 身份工作 |
| model | 引擎默认 | 透传 --model |
| timeoutMs | 900000 | 单轮超时 |
| watchMs | 3000 | 兜底通道的轮询间隔 |
| roundLimit | 6 | 每会话每窗口最多几轮(relay + review 共用) |
| roundWindowMs | 3600000 | 窗口长度;从第一次计入的轮次起算,不滑动 |
权限与隐私¶
插件声明的读写范围如下,使用前最好对照自己的工作区确认。
- 读:
~/.codebuddy/projects/<slug>/<session>.jsonl(CLI 自己的会话记录,用来生成面板和核对证据),以及~/.workbuddy/projects(只有workbuddy_read读它)。 - 写:
collabDir下的几个 jsonl/md(含limits.json额度账本、plans\下的计划结论);引擎本身按permissionMode写工作区文件。 - 不碰:账号 token、登录态文件、任何网络请求(网络只发生在 CodeBuddy CLI 内部)。
需要注意:面板要显示明细,所以会话记录的「工具调用参数摘要」会进入 DSH 的对话上下文。敏感工作区应自行评估是否适用。
插件以当前 DSH 进程的权限运行,因此授权前应先检查源码与许可证(MIT)。
适用场景与注意¶
适合以下情况:
- DSH 里需要调用本机 CodeBuddy CLI / WorkBuddy 引擎,并希望把改动结果以证据形式回注对话。
- 想用「一个 agent 干活、另一个 agent 验收」的流程,人只负责拍板和最后一眼。
- 想限制每会话的执行轮次,避免失败重试把额度吃掉。
同时这些限制要知道:
- 同一时刻一个 CodeBuddy 会话只能跑一轮。
- 面板不在右侧边栏(第三方插件开不了那个位置),放在输入框上方。
- 没有「运行中」的实时进度,只有跑完后的明细。
workbuddy_verify只能核对动作 + 文件事实;它说得对但没做的、或者做了没说的,都会标出来,判断仍要人做。- 节流按 DSH 会话计数:重启不会清零,开新会话会;固定窗口在两个窗口交界处,理论上一小时内可过接近 2 倍名义值。
- 计划模式的结论只保证「落盘完整」;建议对不对仍要人判断。
开发与自测:
node --check index.js
node --check client.js
npm test # node:test,覆盖 verify 的判定分支
改 index.js 只需在插件管理里关开一次;改 client.js 必须重启 DSH,客户端模块只在启动时扫描。
结尾¶
dsh-codebuddy-bridge 的价值在于把「它说它改了」换成「有 diff、有证据、能给 PASS/FAIL」。它不接管认证,也不额外花额度,适合想在 DSH 里保留一条可核对的 CodeBuddy 协作通道的开发者;但它只核对动作和文件事实,最终判断仍在人身上。
目录页:https://www.skillhub.cn/plugins/lunatic-eclipse/dsh-codebuddy-bridge
仓库:https://github.com/lunatic-eclipse/dsh-codebuddy-bridge