ACP 协议集成
ACP (Agent Client Protocol) 是 Zed 编辑器推出的一种通用智能体协议,使智能体的核心功能(服务端)和用户界面(客户端)解耦,允许用户自由选择不同的智能体服务端和客户端进行搭配使用。
CodeBuddy Code 原生支持 ACP 协议,可以作为智能体服务端与支持 ACP 的编辑器无缝集成。
快速开始
启动 ACP 模式
使用 --acp 参数启动 CodeBuddy Code 的 ACP 服务器:
bash
codebuddy --acpZed 编辑器集成
配置步骤
打开 Zed 配置文件(~/.config/zed/settings.json),添加以下配置:
json
{
"agent_servers": {
"CodeBuddy Code": {
"command": "codebuddy",
"args": ["--acp"],
"env": {}
}
}
}随后即可在 Zed 侧边栏创建 CodeBuddy Code Thread,开始使用。
配置说明
command:指定 CodeBuddy Code 的命令路径(确保
codebuddy在 PATH 中可用)args:使用
["--acp"]启用 ACP 协议模式env:可选的环境变量配置,例如:
json{ "env": { "CODEBUDDY_API_KEY": "your-api-key", "CODEBUDDY_INTERNET_ENVIRONMENT": "internal" } }注意:使用
CODEBUDDY_API_KEY时,必须根据版本正确配置CODEBUDDY_INTERNET_ENVIRONMENT:- 海外版:不设置(默认)
- 中国版:
internal - iOA 版:
ioa
详见 身份和访问管理文档。
ACP 协议特性
认证信息扩展
CodeBuddy Code 在 authenticate 响应的 _meta 字段中返回用户信息:
json
{
"_meta": {
"codebuddy.ai/userinfo": {
"userId": "用户 ID",
"userName": "用户名",
"userNickname": "用户昵称"
}
}
}客户端可以利用这些信息提供更好的用户体验,例如显示当前登录用户、个性化界面等。
工具代理机制
ACP 协议支持客户端代理部分工具操作,提升性能和安全性:
- 文件操作代理:基于客户端的
fs.readTextFile和fs.writeTextFile能力 - 终端操作代理:基于客户端的
terminal能力
当客户端声明支持这些能力时,CodeBuddy Code 会自动将相关工具调用代理给客户端执行。
命令列表推送
CodeBuddy Code 会在创建新会话时自动向客户端推送可用的 Slash 命令列表(available_commands_update),让客户端能够:
- 提供命令自动补全功能
- 显示命令提示和帮助信息
- 动态更新可用命令
命令列表会自动过滤掉本地命令(如 /clear、/exit)和客户端专属命令(如 /theme、/config),只推送适用于 ACP 模式的命令。
上下文窗口档位配置
CodeBuddy Code 通过 getConfigOptions / setSessionConfigOption 的 context_window 配置项支持会话级上下文预算档位选择(如 200K / 1M):
- 下发条件:仅当当前模型配置了多档上下文预算(
contextWindow.supportedLengths不少于 2 档)时,getConfigOptions才返回该配置项;单档或无配置的模型不会出现选择器。 - 档位校验:
setSessionConfigOption('context_window', value)只接受当前模型已声明的档位,非法值会被拒绝。 - 生效范围:档位是会话级临时配置,进程内有效;切换会话时保持,重启进程后回落模型默认档。
- 分母联动:选择档位后,上下文环(
usage_update.size)与压缩阈值均按该档位计算。
Agent Teams 协议扩展
CodeBuddy Code 通过 session_info_update 的 _meta 字段扩展 ACP 协议,支持 Agent Teams 多智能体协作的实时状态推送。
Team 状态事件
通过 _meta['codebuddy.ai/teamUpdate'] 推送以下事件类型:
成员状态变化 (member_status_change):
json
{
"sessionUpdate": "session_info_update",
"_meta": {
"codebuddy.ai/teamUpdate": {
"type": "member_status_change",
"teamName": "my-team",
"isAutoTeam": false,
"members": [
{
"name": "ux-designer",
"color": "blue",
"description": "用户体验设计分析",
"status": "running",
"taskId": "agent-abc123",
"sessionId": "session-xyz",
"tokenUsage": { "inputTokens": 1000, "outputTokens": 500, "lastContextWindow": 42000 },
"toolCallCount": 5
}
]
}
}
}Team 创建 (team_created) / 删除 (team_deleted):
json
{
"sessionUpdate": "session_info_update",
"_meta": {
"codebuddy.ai/teamUpdate": {
"type": "team_created",
"teamName": "my-team"
}
}
}成员流式消息
成员的实时消息(文本、工具调用)通过标准 ACP 事件推送,附加 _meta['codebuddy.ai/memberEvent'] 标记来标识消息来源:
json
{
"sessionUpdate": "agent_message_chunk",
"content": { "type": "text", "text": "正在分析架构方案..." },
"_meta": {
"codebuddy.ai/memberEvent": "tech-architect"
}
}客户端收到带 memberEvent 标记的事件后,应将其路由到对应成员的对话时间线,而非主对话区。
页面刷新恢复
页面刷新后,loadSession 的 replayHistory 完成后会自动推送当前 Team 状态(member_status_change 事件),客户端无需单独请求。AcpTeamBridge 在订阅成员 session 时会自动重放其完整历史,因此成员的对话数据也通过 ACP SSE 完整恢复,无需额外 HTTP API。
其他编辑器支持
ACP 是开放协议,理论上任何支持 ACP 的编辑器都可以集成 CodeBuddy Code。配置方式与 Zed 类似:
json
{
"agent_servers": {
"CodeBuddy": {
"command": "codebuddy",
"args": ["--acp"]
}
}
}Multitask 协调器(session/set_multitask)
ACP / --serve 不要加 --agent multitask 或 --multitask(入口守卫会拒,进程非 0)。会话内用扩展方法开关协调器,与 mainAgentSupport / session/set_agent 解耦。
能力位
initialize 回包看 agentCapabilities.multitaskSupport。CODEBUDDY_CODE_DISABLE_BACKGROUND_TASKS 为真时为 false。不必为 Multitask 打开站立 picker。
方法
| 方法名 | session/set_multitask(ACP_METHOD_SESSION_SET_MULTITASK) |
| 参数 | { sessionId, enabled?: boolean }:true 进入,false 退出,省略 toggle |
| 响应 | { ok, on, already, agentName, message } |
| 约束 | 非空白可切;不要求 mainAgentSupport;worker / 子会话 / 后台禁用返回 ok: false |
| 归属 | --serve 多连接只比 session.meta.acpConnectionId 与当前连接。无 owner 戳时 fail-open(兼容非 serve 会话)。不走 isSessionVisibleToMainAgentRpc(unopted 宿主正是调用方) |
| 校验 | enabled 出现但不是布尔 → invalidParams("true" / null 不会静默 toggle) |
ts
import {
ACP_METHOD_SESSION_SET_MULTITASK,
buildSetMultitaskParams,
isMultitaskSupportAdvertised,
} from '@genie/agent-client-protocol';
if (isMultitaskSupportAdvertised(init.agentCapabilities)) {
await conn.extMethod(ACP_METHOD_SESSION_SET_MULTITASK, buildSetMultitaskParams(sessionId, true));
}常量与 builder 在 @genie/agent-client-protocol。TUI 斜杠 /multitask 走同一套盖章函数。Worker 审批依赖子会话继承协调器的 acpConnectionId;非 bypass 模式下缺这条会无人认领。
假模型端到端:packages/agent-cli/src/e2e/multitask-wakeup.spec.ts(需先 pnpm run bundle)。
故障排除
连接失败
问题: Zed 无法连接到 CodeBuddy
解决方法:
确认
codebuddy命令可用:bashwhich codebuddy测试 ACP 模式启动:
bashcodebuddy --acp检查配置文件 JSON 格式是否正确
工具调用失败
问题:文件操作或命令执行报错
解决方法:
- 检查工作目录权限
- 查看 CodeBuddy 日志
相关链接
通过 ACP 协议,让 CodeBuddy Code 融入您喜爱的编辑器 🚀