dsh-opencode-acp:在 DSH 里把 opencode 当 ACP 子智能体委派

前言

在 DeepSeek Harness(DSH)里跑主智能体时,常见需求是:把一块独立任务交给另一套工具链完成,又不想把对方的工具调用、推理过程整段塞进当前对话上下文,也不希望主会话的 token 账单被拖长。社区里已有通过 ACP(Agent Client Protocol)挂接外部智能体的做法;opencode 自带模型、工具与免费档,且 v2 提供 acp 子命令。插件 dsh-opencode-acp(维护者 wangqingdhuo,分类:客户端)把 opencode 以 ACP 子进程形式接到 DSH:主智能体保留自己的模型与上下文,委派工具只把任务文本和工作目录交给 opencode,最终答案再回传,并附带设置页与运行记录。

这是什么

dsh-opencode-acp 是 DSH 插件(npm 包名 dsh-opencode-acp,当前资料版本 0.1.1,MIT 许可证)。它在指定 profile 下为每个 agent 注册委派工具 subagent_opencode,并在客户端提供 Settings → OpenCode 委派 配置页。子进程通过 opencode acp 与插件用 stdio 上的 NDJSON JSON-RPC 说话;opencode 使用自己的模型、工具与登录态,主会话只收到助手文本形式的最终结果。

核心功能

委派工具 subagent_opencode

调用后立即返回子任务 id;完成通知里携带 opencode 的最终回答。子进程只拿到任务描述与工作目录,不接收主对话历史。

设置页与持久化

每次委派开始前读取设置,保存的修改作用于下一次运行,无需重启 DSH。配置写在 $DSH_HOME/opencode-acp/settings.json;最近 100 次运行记录在同目录 runs.json,包含 opencode 会话 id、模型、耗时、工具调用次数与 token 用量。

可配置项(摘要)

分组 项 含义
Model main model 从 opencode 已用模型列表选择,或可填模型 id
Model small model 标题与小任务用模型(留空由 opencode 决定)
Model health check 执行 opencode --version,检查可执行文件是否可用
Execution permission allow 自动应答权限请求,reject 拒绝
Execution working directory 跟随调用会话,或固定路径
Advanced command / args opencode 可执行文件及 acp 参数
Advanced grace 进程收尾等待时间(毫秒)
Advanced env 额外环境变量(JSON 对象)

模型在 opencode 侧决定:ACP 协议不传模型参数,插件通过向子进程注入 OPENCODE_CONFIG_CONTENT 传递配置(资料注明 v2 的 opencode acp 会忽略 OPENCODE_CONFIG 文件路径)。

运行方式与限制

  • 每次委派启动新进程,有数秒级冷启动;外部 ACP 子智能体不能续聊,多轮委派应使用 DSH 内置 subagent。
  • 仅返回助手文本;opencode 的工具流量、推理与计划在其子会话内,不回灌主上下文。
  • 子进程以当前用户身份运行,不受 DSH 沙箱约束,与 @deepseek-ai/dsh-subagent-acp 同类——应视为「opencode 能做你本机用户能做的事」。

环境与依赖

组件 要求
DeepSeek Harness >=0.2.1-rc.1 <0.3.0(engines.dsh 声明,不匹配版本时安装会拒绝)
opencode v2,且具备 acp 子命令(opencode --version、opencode acp --help)
opencode 登录 已执行 opencode auth login;子进程复用登录与免费模型

支持 Windows、macOS、Linux。默认命令:Windows 为 npm 全局安装的 opencode 路径,其他系统为 PATH 上的 opencode;安装位置不同时在 Advanced → command 覆盖。

安装与启用

可从 DSH 插件目录页安装,或在终端执行(命令来自项目 README):

# from npm (prebuilt, no build step)
dsh plugin --profile default add dsh-opencode-acp

# or from a tarball
dsh plugin --profile default add ./dsh-opencode-acp-0.1.1.tgz

安装后重启或刷新 DSH。profile 内每个 agent 会出现工具 subagent_opencode,设置里出现 OpenCode 委派 页面。

卸载:

dsh plugin --profile default remove dsh-opencode-acp

移除插件包会去掉工具与设置页;$DSH_HOME/opencode-acp 目录需自行删除才会清空本地配置与历史。

典型用法

在对话中说明委派意图,或直接让模型调用工具。README 示例:

Delegate to subagent_opencode: in this repo, add a unit test for parseDuration and report what you changed.

主智能体仍用 DSH 配置的模型;opencode 在独立进程里完成实现与测试相关操作,最后把变更说明作为完成结果返回。

工作原理(简图)

DSH agent ── subagent_opencode ──► ctx.subagents ──► dsh-opencode-acp (provider "opencode")
                                                        │ spawn: opencode acp
                                                        ▼
                                              ACP over stdio (NDJSON JSON-RPC)
                                       initialize → session/new → session/prompt
                                                        │
                                     ◄── agent_message_chunk, usage_update

Host 侧为 index.js(ACP 客户端、provider、存储、/.dsh-opencode-acp 路由);浏览器侧为 client.js(通过 client 模块表注册 settings.section)。二者由 cordis.patch.yml 注入 Cordis。

适用场景与注意

适合希望在 DSH 对话中「外包」一整块仓库内任务给 opencode、且需要可查会话 id 与 token 用量的开发者。不适合需要与同一 opencode 会话多轮追问的场景(应改用内置 subagent)。

安装前建议阅读 GitHub 仓库 源码与 MIT 许可证;委派会以本机用户权限执行外部进程,权限策略请在设置里按环境选择 allow 或 reject。

DSH 生态强调「一切皆插件」;SkillHub 插件目录 为社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-opencode-acp 把 opencode 以 ACP 子智能体接入 DSH:主会话保持轻量,委派有工具、有设置、有运行记录。进一步了解可访问目录页 wangqingdhuo/dsh-opencode-acp 与源码 github.com/wangqingdhuo/dsh-opencode-acp。

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

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

小夜