ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenClaw-CN ACP 桥接实战指南:用 Agent Client Protocol 让 IDE 驱动 Gateway 会话

OpenClaw-CN ACP 桥接实战指南:用 Agent Client Protocol 让 IDE 驱动 Gateway 会话 人工智能AI Agent即时通讯后端本地部署语音【免费下载链接】openclaw-cn中文社区版OpenClaw同原版保持定期更新已内置钉钉、企业微信、飞书、QQ、微信以及国内网络环境优化。你的专属个人AI助手。支持所有操作系统和平台。项目地址https://gitcode.com/gh_mirrors/op/openclaw-cn点击查看免费下载Clawdbot ACPAgent Client Protocol桥接是 OpenClaw-CN中文社区版 OpenClaw提供的一项面向 IDE 集成的关键能力它以标准输入输出stdio NDJSON 方式对外暴露一个 ACP Agent并将收到的 Prompt 通过 WebSocket 转发给正在运行的 Gateway同时在 ACP 会话 ID 与 Gateway 会话 Key 之间建立稳定映射使 Zed 等支持 ACP 的编辑器可以无缝接入、断线重连并管理同一个 Agent 会话。读完本文你将掌握 ACP 桥接的完整配置方法、会话映射规则、Prompt/事件翻译原理以及如何用内置 ACP 客户端在无 IDE 环境下调试整套链路。ACP 桥接是什么架构与设计目标clawdbot acp的本质是一个翻译层它一边说 ACPAgent Client Protocol一边说 Gateway 的 WebSocket 协议。整体数据流如下ACP 客户端如 IDE通过 stdio 以 NDJSON 消息与桥接进程通信桥接进程复用现有的 Gateway 认证配置或命令行参数连上 GatewayACP 的prompt请求被翻译成 Gateway 的chat.send调用Gateway 的流式事件被翻译回 ACP 的message/tool_call流式更新ACP 的cancel请求映射为 Gateway 的chat.abort用于终止当前运行。从 桥接服务端实现 可以看到这条链路是如何落地的serveAcpGateway加载配置loadConfig、通过buildGatewayConnectionDetails计算 Gateway 连接地址、用resolveGatewayAuth解析认证信息随后创建GatewayClient以客户端名 ACP 注册并通过ndJsonStream(input, output)将进程的 stdin/stdout 包装成 ACP 的流最后用AgentSideConnection挂载翻译器AcpGatewayAgent见 翻译器实现。设计上它坚持四个关键目标最小 ACP 表面积只依赖 stdio 与 NDJSON不引入额外端口或常驻服务稳定的会话映射跨重连保持 ACP session 与 Gateway session key 的对应关系复用现有 Gateway 会话存储直接使用 Gateway 的 list/resolve/reset 能力安全的默认值默认使用隔离的acp:uuid会话 Key避免污染主会话。快速上手三步启用 ACP 桥接使用 ACP 的前提是你的 IDE 或工具支持 Agent Client Protocol并且希望由它来驱动一个 Clawdbot Gateway 会话。只需三步启动 Gateway本地或远程均可配置 Gateway 目标写入gateway.remote.url 认证信息或直接传命令行参数让 IDE 通过 stdio 运行clawdbot acp。推荐先持久化配置避免每次重复传参clawdbot config set gateway.remote.url wss://gateway-host:18789 clawdbot config set gateway.remote.token token也可以不写配置、直接命令行运行clawdbot acp --url wss://gateway-host:18789 --token token命令行选项速查桥接服务端的参数解析实现在 server.ts 中完整选项如下选项说明--url url/--gateway-urlGateway WebSocket 地址默认回落到gateway.remote.url--token token/--gateway-tokenGateway 认证 Token--password password/--gateway-passwordGateway 认证密码--session key默认会话 Key例如agent:main:main--session-label label默认会话标签按标签解析已存在的会话--require-existing会话 Key/标签不存在时报错失败--reset-session首次使用前重置会话 Key同 Key 换新 transcript--no-prefix-cwd不在 Prompt 前拼接工作目录前缀--verbose, -v将 ACP/Gateway 桥接事件日志输出到 stderr绝不写 stdout--help, -h打印帮助信息选择 Agent按 Gateway 会话 Key 路由而非直接挑选ACP 协议本身不直接挑选 Agent桥接器按 Gateway 的会话 Key 进行路由。要锁定某个具体 Agent只需使用 Agent 作用域的会话 Keyclawdbot acp --session agent:main:main clawdbot acp --session agent:design:main clawdbot acp --session agent:qa:bug-123每个 ACP 会话只映射到一个Gateway 会话 Key同一个 Agent 可以拥有多个会话。若不做任何覆盖桥接默认给每个 ACP 会话分配一个隔离的acp:uuidKey。从 translator.ts 的newSession实现可以看到每次新建 ACP 会话都会生成randomUUID()作为 sessionId然后调用resolveSessionKey决定 Gateway 会话 Key未指定时回落到acp:uuid并可通过resetSessionIfNeeded在首次使用前重置会话最后在内存会话存储中登记sessionId - sessionKey - cwd的映射。会话映射默认隔离支持两种覆盖方式默认情况下每个 ACP 会话映射到独立 Gateway 会话 Keyacp:uuid除非被覆盖。你可以用两种方式复用或覆盖会话方式一CLI 默认值# 直接复用已知会话 Key clawdbot acp --session agent:main:main # 按标签解析已存在的会话 clawdbot acp --session-label support inbox # 同 Key 换新 transcript clawdbot acp --reset-session方式二ACP 每会话元数据_meta{ _meta: { sessionKey: agent:main:main, sessionLabel: support inbox, resetSession: true, requireExisting: false } }四个字段的语义规则sessionKey直接指定 Gateway 会话 KeysessionLabel按标签解析一个已存在的会话resetSession首次使用前为该 Key 生成全新 transcriptrequireExisting若 Key/标签不存在则直接失败。在源码层session-mapper.ts 完整实现了这套规则parseSessionMeta从_meta中按别名兼容读取字段例如sessionKey/session/key、sessionLabel/label、resetSession/reset、requireExistingSession/requireExistingresolveSessionKey的优先级是元数据中的标签/Key CLI 默认标签/Key acp:uuid兜底标签解析与requireExisting校验都通过 Gateway 的sessions.resolveRPC 完成resetSessionIfNeeded则调用sessions.reset重置会话。这些字段的可选性也解释了为什么_meta中requireExisting缺省为false——默认行为是宽容的Key 不存在就自动创建。会话列表listSessions与 IDE 会话选择器ACP 的listSessions直接映射到 Gateway 的sessions.list返回经过筛选的摘要信息供 IDE 的会话选择器使用。_meta.limit可以限制返回的会话数量默认上限 100见 translator.ts。每条结果会带上sessionKey、kind、channel等元数据方便 IDE 展示会话类型与来源渠道。Prompt 翻译从 ACP 内容块到 Gateway chat.sendACP Prompt 的输入会被翻译成一次 Gatewaychat.send调用转换规则如下text与resource内容块合并为 Prompt 文本带图片 MIME 类型的resource_linkimage 内容块转换为附件attachment工作目录可以拼接到 Prompt 最前面作为上下文默认开启可用--no-prefix-cwd关闭。具体的抽取逻辑在 event-mapper.ts 中extractTextFromPrompt遍历text/resource/resource_link三类内容块并拼装为文本extractAttachmentsFromPrompt只提取image类型块产出{ type, mimeType, content }结构的 Gateway 附件。在prompt()处理中translator.tsprefixCwd默认开启最终消息形如[Working directory: /path/to/project] 用户输入同时chat.send还会透传idempotencyKey每次运行生成随机 runId、可选的thinking/deliver/timeoutMs从_meta读取见 meta.ts 的readString/readBool/readNumber。事件流反向翻译与停止原因Gateway 的流式事件被翻译为 ACP 的message与tool_call更新chat事件的delta状态会增量发送agent_message_chunk文本块基于已发送长度做增量切片避免重复推送agent事件的tool流在start阶段发出tool_call状态in_progress在result阶段发出tool_call_update成功completed/ 失败failed工具标题由formatToolTitle格式化参数过长时截断到 100 字符工具类型由inferToolKind根据名称关键词推断为read/edit/delete/move/search/execute/fetch/other。Gateway 的终结状态映射为 ACP 的done停止原因Gateway 状态ACP stopReasoncompletefinalstop实现中为end_turnabortedcancel实现中为cancellederrorerror实现中为refusal另外会话创建后桥接器还会通过available_commands_update推送一份可用斜杠命令清单如/help、/model、/compact、/reset等见 commands.ts让 IDE 能向用户展示可用的会话命令。Zed 编辑器接入修改 settings.json 即可在~/.config/zed/settings.json或用 Zed 的设置界面添加自定义 ACP Agent{ agent_servers: { Clawdbot ACP: { type: custom, command: clawdbot, args: [acp], env: {} } } }若要指定远程 Gateway 或某个 Agent{ agent_servers: { Clawdbot ACP: { type: custom, command: clawdbot, args: [ acp, --url, wss://gateway-host:18789, --token, token, --session, agent:design:main ], env: {} } } }配置完成后在 Zed 中打开 Agent 面板并选择 Clawdbot ACP 即可开启新会话线程。认证与 Gateway 发现参数优先级clawdbot acp解析 Gateway 地址与认证信息的优先级如下CLI 参数--url/--token/--password优先否则使用配置中的gateway.remote.*设置。从 server.ts 的实现看Token/密码的完整解析链是CLI 参数 → 远程模式下的gateway.remote.token/.password→ 环境变量OPENCLAW_GATEWAY_TOKEN/OPENCLAW_GATEWAY_PASSWORD→ 配置文件中的gateway.auth由resolveGatewayAuth解析。这意味着即使不传任何参数只要 Gateway 以mode: remote运行并配置了认证桥接也能自动发现并连接。执行模型与运行生命周期ACP 客户端 spawnclawdbot acp通过 stdio 讲 ACP NDJSON 消息桥接进程用现有认证配置或 CLI 参数连接 GatewayACPprompt→ Gatewaychat.send携带expectFinal等待最终状态Gateway 流式事件 → ACP 流式事件ACPcancel→ Gatewaychat.abort终止当前运行。每次运行的 runId 会按会话登记见 session.ts 的内存会话存储setActiveRun记录sessionId - runId AbortController与反向索引runId - sessionIdcancelActiveRun触发 AbortController 并清理索引当 Gateway 断开时所有待处理的 Prompt 都会被拒绝并清理translator.ts避免悬挂请求。操作层面的要点ACP 会话状态只存在桥接进程的内存中进程生命周期结束即释放Gateway 会话状态由Gateway 自身持久化重启桥接进程不影响已有会话记录--verbose的桥接日志只写 stderr绝不写 stdoutstdout 专用于 ACP 协议避免污染协议流每个会话跟踪当前活跃 runId运行可被取消。内置 ACP 客户端无 IDE 环境下的调试利器桥接器还自带一个 ACP 客户端实现见 client.ts用于在没有 IDE 时验证整条链路——它会 spawn 一个桥接进程然后让你交互式输入 Promptclawdbot acp client # 让被 spawn 的桥接进程指向远程 Gateway clawdbot acp client --server-args --url wss://gateway-host:18789 --token token # 覆盖服务端命令默认是 clawdbot clawdbot acp client --server node --server-args dist/entry.js acp --url ws://127.0.0.1:19001acp client的选项选项说明--cwd dirACP 会话的工作目录--server commandACP 服务端命令默认clawdbot--server-args args...传给 ACP 服务端的额外参数--server-verbose开启 ACP 服务端的 verbose 日志--verbose, -v开启客户端 verbose 日志客户端实现里还有一个值得注意的安全细节危险工具审批。DANGEROUS_ACP_TOOLS集合exec、spawn、shell、fs_write、fs_delete、fs_move、apply_patch等内的工具会触发交互式权限确认y/N30 秒超时默认拒绝非危险工具自动放行在非 TTY 环境下一律拒绝并提示。这让命令行调试场景也能保持与 IDE 一致的安全边界。兼容性与测试保障桥接基于agentclientprotocol/sdk文档标注当前为 0.13.x并声明支持loadSession、图片 Prompt、嵌入上下文与listSessions会话列表能力见 translator.ts 的initialize响应兼容实现了initialize、newSession、loadSession、prompt、cancel、listSessions等核心方法的 ACP 客户端单元测试src/acp/session.test.ts覆盖 runId 生命周期活跃运行登记、取消、清理完整质量门禁pnpm lint pnpm build pnpm test pnpm docs:build。相关文档导航CLI 用法docs/cli/acp.md会话模型docs/concepts/session.md会话管理内部机制docs/reference/session-management-compaction.md以上三份文档与本文互为补充前者提供acp/acp client的完整命令手册后两者帮助理解 Gateway 侧会话 Key、标签解析与会话压缩compaction的底层机制。赞分享人工智能AI Agent即时通讯后端本地部署语音【免费下载链接】openclaw-cn中文社区版OpenClaw同原版保持定期更新已内置钉钉、企业微信、飞书、QQ、微信以及国内网络环境优化。你的专属个人AI助手。支持所有操作系统和平台。项目地址https://gitcode.com/gh_mirrors/op/openclaw-cn点击查看免费下载相关推荐OpenClaw 中文版 acp 命令完全指南用 Agent Client Protocol 把 IDE 接入 Clawdbot GatewayOpenClaw 中文版 acp 命令完全指南用 Agent Client Protocol 把 IDE 接入 Clawdbot Gateway clawdb人工智能AI Agent即时通讯后端本地部署语音Gemini CLI ACP 模式详解通过 Agent Client Protocol 将 Agent 接入 IDE 的架构与实践Gemini CLI ACP 模式详解通过 Agent Client Protocol 将 Agent 接入 IDE 的架构与实践 ACPAgent Cli人工智能AI Agent交互助手CLIMCP Clientswvp-GB28181-pro 部署实战从空服务器到接上第一路摄像头wvp GB28181 pro 部署实战从空服务器到接上第一路摄像头 wvp GB28181 pro 是一个基于 GB28181 2016、部标 808 和部AI 技能AI 插件人工智能工作流自动化上一篇Prisma 入门实战从安装 CLI 到为数据库生成并调用 GraphQL API下一篇机器翻译质量评估实战指南COMET神经评估框架核心原理与深度剖析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表