通信模型
该协议遵循 JSON-RPC 2.0 规范,包含两种类型的消息:- 方法:期望返回结果或错误的请求-响应对
- 通知:单向消息,不期望响应
消息流
典型的流程遵循以下模式:1
初始化阶段
- 客户端 → 代理:
initialize建立连接 - 客户端 → 代理:
authenticate(如果代理需要)
2
会话设置 - 以下任一:
- 客户端 → 代理:
session/new创建新会话 - 客户端 → 代理:
session/load恢复现有会话(如果支持)
3
提示轮次
- 客户端 → 代理:
session/prompt发送用户消息 - 代理 → 客户端:
session/update通知进度更新 - 代理 → 客户端:根据需要执行文件操作或权限请求
- 客户端 → 代理:
session/cancel中断处理(如需要) - 轮次结束,代理发送包含停止原因的
session/prompt响应
代理
代理是使用生成式 AI 自主修改代码的程序。它们通常作为客户端的子进程运行。基线方法
initialize
authenticate
与代理进行身份验证(如果需要)。
可选方法
session/set_mode
通知
客户端
客户端提供用户与代理之间的接口。它们通常是代码编辑器(IDE、文本编辑器),但也可以是用于与代理交互的其他 UI。客户端管理环境、处理用户交互并控制对资源的访问。基线方法
可选方法
terminal/output
获取终端输出和退出状态(需要
terminal 功能)。terminal/release
释放终端(需要
terminal 功能)。terminal/wait_for_exit
等待终端命令退出(需要
terminal 功能)。terminal/kill
在不释放的情况下终止终端命令(需要
terminal 功能)。通知
参数要求
- 协议中的所有文件路径必须是绝对路径。
- 行号从 1 开始
错误处理
所有方法都遵循标准 JSON-RPC 2.0 错误处理:- 成功响应包含
result字段 - 错误包含带有
code和message的error对象 - 通知永远不会收到响应(成功或错误)
可扩展性
协议提供了内置机制来添加自定义功能,同时保持兼容性:- 使用
_meta字段添加自定义数据 - 通过在名称前加下划线(
_)创建自定义方法 - 在初始化期间宣告自定义功能