Skip to content

ACP

开始吧

sh
omp acp           # equivalent to: omp --mode acp

其他模式参数请参阅 CLI 参考。ACP 以 JSON-RPC 框架通过 stdio 通信:将 omp 作为子进程启动,再把它的 stdin 和 stdout 分别连接到 ACP Client 即可。

规范: zed-industries/Agent Client Protocol。 Zed 提供第一方 ACP 支持;其他实现该协议的编辑器可以以相同的方式驱动 omp。

初始化

ACP 启动时无需预先指定模型。Client 依次调用 initializeauthenticate,随后再选择模型。若 Client 声明 clientCapabilities.auth.terminal,omp 会提供 terminal 认证方式,并启动 omp TUI 完成登录;否则只提供 agent 方式,复用 ~/.omp 中已配置的 Provider 密钥与 OAuth 状态。

客户看到什么

当 Client 在 initialize 时声明文件系统和终端能力,omp 会经由 Client 路由内置工具的 I/O。这样 read 能读取尚未保存的编辑器缓冲区,而写入则由编辑器负责落盘。

操作工具ACP方法
readfs/read_text_file
writefs/write_text_file
bashterminal/create + terminal/output(每次调用使用 Client 提供的终端)

当 Client 支持 session/request_permission 时,bash 调用以及会删除或移动文件的破坏性 edit 操作都会经过权限请求。omp 会在会话生命周期内按工具缓存 allow_alwaysreject_always,一次授权即可覆盖后续同类操作。Client 还可以公开计划模式,让用户从编辑器 UI 切换到“仅提出方案”;工具更新中的 tool_call_update.locations 则可用于实时定位多文件修改。

斜杠命令

大多数斜杠命令都会出现在 ACP 的命令列表中,因此可直接在编辑器内使用 /plan/model/compact 等命令。没有文本处理器、仅服务于 TUI 的命令会被过滤;/login/quit 也不会出现,因为认证由 ACP 的 authenticate 步骤处理,而退出由 Client 负责。

文件引用(@path)和工具调用卡与 TUI 中的语义一致;编辑器通过 ACP 的内容块类型进行呈现。

模式和 config 更新

session/set_modesession/set_session_config_option("mode", …) 都会发出 current_mode_update,使编辑器状态保持同步。/model 切换后会发出 config_option_update

扩展方法

除标准 ACP 方法外,omp 还提供少量 _omp/* 扩展方法;前导下划线表示这些方法不属于协议规范:

方法返回内容
_omp/sessions/listAll跨工作目录的分页会话索引。
_omp/projects/list已发现的项目工作目录及其会话数量。
_omp/chats/byCwd按工作目录筛选的会话。
_omp/usage活动会话的令牌和成本汇总。
_omp/extensions列出发现的扩展。
_omp/extensions/toggle启用或禁用扩展。

借助这些方法,ACP Client 无需自行实现会话发现,即可浏览和重新打开历史会话。底层会话树的存储方式请参阅会话

调试协议流

ACP 与 RPC 一样采用“stdio 上每行一个 JSON 对象”的格式,因此可用同样的 tee 方法记录双向协议流:

sh
mkfifo in out
tee acp.in.log < in | omp acp | tee acp.out.log > out &
# point your ACP client at the named pipes
#   stdin  -> in
#   stdout -> out

如只需排查一次问题,可通过 omp acp 2>acp.stderr.log 启动。omp 会把启动和传输错误写入 stderr,不会混入 ACP 数据流。