Skip to content

Agent Client Protocol(ACP)是一个基于 JSON-RPC 的、用于与 agent 运行时对话的协议。dsh 随附一个自动化专用 ACP 服务器packages/acp/acp),跑在 JSON-RPC stdio 上:编程式客户端创建全新的 harness agent、发送文本提示、收集已提交的 assistant 文本、按策略解析一次性权限请求,并取消工作。仓库内的主要客户端是 dsh-subagent-acp(见 子代理)。

角色
@deepseek-ai/dsh-acp基于 JSON-RPC stdio 的 ACP 服务器插件
@deepseek-ai/dsh-subagent-acpACP 支撑的子代理传输

这个包是什么(以及不是什么)

来自 packages/acp/acp/README.md:这个包是一个传输适配器,不是 UI 集成,也不是能力接缝。它暴露编辑器导航、转录重放、命令、模式、配置选择器、elicitation、推理、计划、标题或工具呈现——交互式渲染与人类提问属于 Web host 与 client 模块。服务器的界面刻意保持小巧:只有自动化契约。

插件与配置

apply(ctx, config) 在 stdin/stdout 上打开一个 AgentSideConnection 并驱动 ctx.agents。stdout 保留给协议帧。

配置默认含义
provider每个创建 agent 的初始 provider 路由
model每个创建 agent 的初始模型

两个字段都是可选的,以便另一个 agent/请求监听者提供目标;可运行的 ACP 组合两者都需要。

协议契约

方法行为
initialize协商支持的版本并宣告仅基线提示(无图片、音频或嵌入式上下文能力)。不宣告任何 session、editor、terminal、filesystem 或 MCP 能力。
authenticate空操作,因为服务器不宣告任何认证方法。
(任务方法)每个任务全新 agent、文本提示进、已提交 assistant 文本出、一次性权限请求按策略解析、支持取消。

实现位于 packages/acp/acp/src/——index.ts(插件、连接循环、方法派发)、codec.ts(stdio 上的 JSON-RPC 帧编解码)与 invariant.ts(其不变量伴侣,遵循仓库的每包不变量约定)。

消费者:dsh-subagent-acp

ACP 服务器不是独立的产品界面;在 dsh 内部它是 acp 子代理传输的后端。当 agent 通过 ctx.subagents 以 ACP 传输 spawn 子代理时,dsh-subagent-acp 启动 ACP 服务器(子进程中通过 stdio 讲 ACP 的全新 harness agent)并通过它代理委派——给子代理一个隔离的进程边界,同时保持统一的子代理 API(传输矩阵见 子代理spawnforkacpcodex/claude-code/dsh-sdk)。

可运行的示例

两个可运行示例演示服务端表面:

  • examples/acp-agentacp-agent-example)——基于 JSON-RPC stdio 的 ACP 服务器组合:启动 dsh-acp bundle、接受客户端会话、运行 agent 循环、把文本流回。
  • packages/examples/acp-demo@deepseek-ai/dsh-acp-demo)——树内演示插件:examples/acp-agentcordis.yml 把它接进服务器,提供展示服务器运行的 provider/model 配置。

关键源文件

仓库相对路径提供什么
packages/acp/acp/src/index.ts插件、AgentSideConnection、方法派发
packages/acp/acp/src/codec.tsJSON-RPC 帧编解码
packages/subagent/subagent-acp/src/ACP 子代理传输
examples/acp-agent/服务端侧可运行示例
packages/examples/acp-demo/示例所启动的演示插件

延伸阅读

  • 子代理——传输矩阵与 dsh-subagent-acp
  • SDK 协议——dsh 的另一条 JSON-RPC 线路,供对比。
  • 示例与演示——如何运行 acp-agentacp-demo
  • 仓库:packages/acp/acp/README.mdpackages/subagent/subagent-acp/README.md