> ## Documentation Index
> Fetch the complete documentation index at: https://acp-docs.cxykevin.top/llms.txt
> Use this file to discover all available pages before exploring further.

# Schema

> 代理客户端协议的Schema定义

## Agent

定义所有符合ACP的代理必须实现的接口。

代理是使用生成式AI自主修改代码的程序。它们处理来自客户端的请求，并使用语言模型和工具执行任务。

### <span class="font-mono">authenticate</span>

使用指定的认证方法对客户端进行认证。

当代理在允许创建会话之前需要认证时调用。客户端提供在初始化期间广告的认证方法ID。

成功认证后，客户端可以继续使用`new_session`创建会话，而不会收到`auth_required`错误。

查看协议文档：[Initialization](/protocol/initialization)

#### <span class="font-mono">AuthenticateRequest</span>

authenticate方法的请求参数。

指定要使用的认证方法。

**类型:** Object

**属性:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="methodId" type={"string"} required>
  要使用的认证方法的ID。
  必须是初始化响应中广告的方法之一。
</ResponseField>

#### <span class="font-mono">AuthenticateResponse</span>

对 `authenticate` 方法的响应。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

### <span class="font-mono">initialize</span>

与客户端建立连接并协商协议能力。

此方法在连接开始时调用一次，用于：

* 协商要使用的协议版本
* 在客户端和代理之间交换能力信息
* 确定可用的认证方法

代理应使用其支持的协议版本和能力进行响应。

查看协议文档：[Initialization](/protocol/initialization)

#### <span class="font-mono">InitializeRequest</span>

初始化方法的请求参数。

由客户端发送以建立连接和协商能力。

查看协议文档：[Initialization](/protocol/initialization)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="clientCapabilities" type={<a href="#clientcapabilities">ClientCapabilities</a>}>
  客户端支持的能力。

  * Default: `{"fs":{"readTextFile":false,"writeTextFile":false},"terminal":false}`
</ResponseField>

<ResponseField name="clientInfo" type={<><span><a href="#implementation">Implementation</a></span><span> | null</span></>}>
  发送给代理的客户端名称和版本信息。

  Note: in future versions of the protocol, this will be required.
</ResponseField>

<ResponseField name="protocolVersion" type={<a href="#protocolversion">ProtocolVersion</a>} required>
  客户端支持的最新协议版本。
</ResponseField>

#### <span class="font-mono">InitializeResponse</span>

Response to the `initialize`

包含协商的协议版本和代理能力。

查看协议文档：[Initialization](/protocol/initialization)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="agentCapabilities" type={<a href="#agentcapabilities">AgentCapabilities</a>}>
  代理支持的能力。

  * Default: `{"loadSession":false,"mcpCapabilities":{"http":false,"sse":false},"promptCapabilities":{"audio":false,"embeddedContext":false,"image":false},"sessionCapabilities":{}}`
</ResponseField>

<ResponseField name="agentInfo" type={<><span><a href="#implementation">Implementation</a></span><span> | null</span></>}>
  发送给客户端的代理名称和版本信息。

  Note: in future versions of the protocol, this will be required.
</ResponseField>

<ResponseField name="authMethods" type={<a href="#authmethod">AuthMethod[]</a>}>
  代理支持的认证方法。

  * Default: `[]`
</ResponseField>

<ResponseField name="protocolVersion" type={<a href="#protocolversion">ProtocolVersion</a>} required>
  如果代理支持，则为客户端指定的协议版本，
  或代理支持的最新协议版本。

  如果客户端不支持此版本，应断开连接。
</ResponseField>

<a id="session-cancel" />

### <span class="font-mono">session/cancel</span>

取消会话的正在进行操作。

这是客户端发送的通知，用于取消正在进行的提示轮次。

收到此通知后，代理应该：

* 尽快停止所有语言模型请求
* 中止所有正在进行的工具调用
* 发送所有待处理的 `session/update` 通知
* 使用 `StopReason::Cancelled` 响应原始的 `session/prompt` 请求

查看协议文档：[Cancellation](/protocol/prompt-turn#cancellation)

#### <span class="font-mono">CancelNotification</span>

取消会话正在进行操作的通知。

查看协议文档：[Cancellation](/protocol/prompt-turn#cancellation)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  要取消操作的会话ID。
</ResponseField>

<a id="session-load" />

### <span class="font-mono">session/load</span>

加载现有会话以恢复之前的对话。

此方法仅在代理声明了 `loadSession` 能力时可用。

代理应该：

* 恢复会话上下文和对话历史
* 连接到指定的MCP服务器
* 通过通知将整个对话历史流式传输回客户端

查看协议文档：[Loading Sessions](/protocol/session-setup#loading-sessions)

#### <span class="font-mono">LoadSessionRequest</span>

加载现有会话的请求参数。

仅在代理支持 `loadSession` 能力时可用。

查看协议文档：[Loading Sessions](/protocol/session-setup#loading-sessions)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="cwd" type={"string"} required>
  此会话的工作目录。
</ResponseField>

<ResponseField name="mcpServers" type={<a href="#mcpserver">McpServer[]</a>} required>
  此会话要连接的MCP服务器列表。
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  要加载的会话ID。
</ResponseField>

#### <span class="font-mono">LoadSessionResponse</span>

加载现有会话的响应。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="modes" type={<><span><a href="#sessionmodestate">SessionModeState</a></span><span> | null</span></>}>
  如果代理支持，则为初始模式状态

  查看协议文档：[Session Modes](/protocol/session-modes)
</ResponseField>

<a id="session-new" />

### <span class="font-mono">session/new</span>

与代理创建新的对话会话。

会话表示具有自己历史和状态的独立对话上下文。

代理应该：

* 创建新的会话上下文
* 连接到任何指定的MCP服务器
* 返回唯一的会话ID用于后续请求

如果代理需要身份验证，可能会返回 `auth_required` 错误。

查看协议文档：[Session Setup](/protocol/session-setup)

#### <span class="font-mono">NewSessionRequest</span>

创建新会话的请求参数。

查看协议文档：[Creating a Session](/protocol/session-setup#creating-a-session)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="cwd" type={"string"} required>
  此会话的工作目录。 Must be an absolute path.
</ResponseField>

<ResponseField name="mcpServers" type={<a href="#mcpserver">McpServer[]</a>} required>
  代理应连接的MCP（Model Context Protocol）服务器列表。
</ResponseField>

#### <span class="font-mono">NewSessionResponse</span>

创建新会话的响应。

查看协议文档：[Creating a Session](/protocol/session-setup#creating-a-session)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="modes" type={<><span><a href="#sessionmodestate">SessionModeState</a></span><span> | null</span></>}>
  如果代理支持，则为初始模式状态

  查看协议文档：[Session Modes](/protocol/session-modes)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  创建会话的唯一标识符。

  用于此对话的所有后续请求。
</ResponseField>

<a id="session-prompt" />

### <span class="font-mono">session/prompt</span>

在会话中处理用户提示。

此方法处理提示的整个生命周期：

* 接收用户消息及可选的上下文（文件、图像等）
* 使用语言模型处理提示
* 向客户端报告语言模型内容和工具调用
* 请求运行工具的权限
* 执行任何请求的工具调用
* 当轮次完成时返回停止原因

查看协议文档：[Prompt Turn](/protocol/prompt-turn)

#### <span class="font-mono">PromptRequest</span>

向代理发送用户提示的请求参数。

包含用户的消息和任何附加上下文。

查看协议文档：[User Message](/protocol/prompt-turn#1-user-message)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="prompt" type={<a href="#contentblock">ContentBlock[]</a>} required>
  组成用户消息的内容块。

  作为基线，代理必须支持 `ContentBlock::Text` 和 `ContentBlock::ResourceLink`，
  而其他变体可以通过 `PromptCapabilities` 可选启用。

  客户端必须根据 `PromptCapabilities` 调整其界面。

  客户端可以选择包含引用的上下文片段为
  `ContentBlock::Resource` 或 `ContentBlock::ResourceLink`。

  当可用时，首选 `ContentBlock::Resource`
  因为它避免了额外的往返，并允许消息包含
  来自代理可能无法访问的源的上下文片段。
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  发送此用户消息的会话ID
</ResponseField>

#### <span class="font-mono">PromptResponse</span>

处理用户提示的响应。

查看协议文档：[Check for Completion](/protocol/prompt-turn#4-check-for-completion)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="stopReason" type={<a href="#stopreason">StopReason</a>} required>
  指示代理停止处理轮次的原因。
</ResponseField>

<a id="session-set_mode" />

### <span class="font-mono">session/set\_mode</span>

设置会话的当前模式。

允许在不同的代理模式之间切换（例如，"ask"、"architect"、"code"）
这些模式会影响系统提示、工具可用性和权限行为。

该模式必须是会话创建或加载期间在 `availableModes` 中声明的模式之一
。代理也可以自主更改模式并通过
`current_mode_update` 通知通知客户端。

此方法可以在会话期间的任何时候调用，无论代理是
空闲还是正在主动生成响应。

查看协议文档：[Session Modes](/protocol/session-modes)

#### <span class="font-mono">SetSessionModeRequest</span>

设置会话模式的请求参数。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="modeId" type={<a href="#sessionmodeid">SessionModeId</a>} required>
  要设置的模式ID。
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  要设置模式的会话ID。
</ResponseField>

#### <span class="font-mono">SetSessionModeResponse</span>

对 `session/set_mode` 方法的响应。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"} />

## Client

定义符合ACP的客户端必须实现的接口。

客户端通常是代码编辑器（IDE、文本编辑器），提供
用户和AI代理之间的接口。它们管理环境、处理用户交互，
并控制对资源的访问。

<a id="fs-read_text_file" />

### <span class="font-mono">fs/read\_text\_file</span>

从客户端文件系统中的文本文件读取内容。

仅在客户端声明了 `fs.readTextFile` 能力时可用。
允许代理访问客户端环境中的文件内容。

查看协议文档：[Client](/protocol/overview#client)

#### <span class="font-mono">ReadTextFileRequest</span>

从文本文件读取内容的请求。

仅在客户端支持 `fs.readTextFile` 能力时可用。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="limit" type={"integer | null"}>
  要读取的最大行数。

  * Minimum: `0`
</ResponseField>

<ResponseField name="line" type={"integer | null"}>
  开始读取的行号（从1开始）。

  * Minimum: `0`
</ResponseField>

<ResponseField name="path" type={"string"} required>
  要读取文件的绝对路径。
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  此请求的会话ID。
</ResponseField>

#### <span class="font-mono">ReadTextFileResponse</span>

包含文本文件内容的响应。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="content" type={"string"} required />

<a id="fs-write_text_file" />

### <span class="font-mono">fs/write\_text\_file</span>

将内容写入客户端文件系统中的文本文件。

仅在客户端声明了 `fs.writeTextFile` 能力时可用。
允许代理在客户端环境中创建或修改文件。

查看协议文档：[Client](/protocol/overview#client)

#### <span class="font-mono">WriteTextFileRequest</span>

将内容写入文本文件的请求。

仅在客户端支持 `fs.writeTextFile` 能力时可用。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="content" type={"string"} required>
  要写入文件的文本内容。
</ResponseField>

<ResponseField name="path" type={"string"} required>
  要写入文件的绝对路径。
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  此请求的会话ID。
</ResponseField>

#### <span class="font-mono">WriteTextFileResponse</span>

对 `fs/write_text_file` 的响应

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<a id="session-request_permission" />

### <span class="font-mono">session/request\_permission</span>

请求用户对工具调用操作的权限。

当代理在执行可能敏感的操作之前需要用户授权时调用。
客户端应向用户展示选项
并返回他们的决定。

如果客户端通过 `session/cancel` 取消提示轮次，它必须
使用 `RequestPermissionOutcome::Cancelled` 响应此请求。

查看协议文档：[Requesting Permission](/protocol/tool-calls#requesting-permission)

#### <span class="font-mono">RequestPermissionRequest</span>

执行工具调用的用户权限请求。

当代理在执行敏感操作之前需要授权时发送。

查看协议文档：[Requesting Permission](/protocol/tool-calls#requesting-permission)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="options" type={<a href="#permissionoption">PermissionOption[]</a>} required>
  用户可选择的可用权限选项。
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  此请求的会话ID。
</ResponseField>

<ResponseField name="toolCall" type={<a href="#toolcallupdate">ToolCallUpdate</a>} required>
  需要权限的工具调用的详细信息。
</ResponseField>

#### <span class="font-mono">RequestPermissionResponse</span>

权限请求的响应。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="outcome" type={<a href="#requestpermissionoutcome">RequestPermissionOutcome</a>} required>
  用户对权限请求的决定。
</ResponseField>

<a id="session-update" />

### <span class="font-mono">session/update</span>

处理来自代理的会话更新通知。

这是一个通知端点（不需要响应），接收
关于会话进度的实时更新，包括消息块、
工具调用和执行计划。

注意：客户端应在发送 `session/cancel` 通知后继续接受工具调用更新，
因为代理可能会在以取消的停止原因响应之前发送最终
更新。

查看协议文档：[Agent Reports Output](/protocol/prompt-turn#3-agent-reports-output)

#### <span class="font-mono">SessionNotification</span>

包含代理会话更新的通知。

用于在提示处理期间流式传输实时进度和结果。

查看协议文档：[Agent Reports Output](/protocol/prompt-turn#3-agent-reports-output)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  此更新相关的会话ID。
</ResponseField>

<ResponseField name="update" type={<a href="#sessionupdate">SessionUpdate</a>} required>
  实际的更新内容。
</ResponseField>

<a id="terminal-create" />

### <span class="font-mono">terminal/create</span>

在新终端中执行命令

仅在 `terminal` 客户端能力设置为 `true` 时可用。

返回一个 `TerminalId`，可用于其他终端方法
以获取当前输出、等待退出和终止命令。

`TerminalId` 也可以用于通过 `ToolCallContent::Terminal` 变体
在工具调用中嵌入终端。

代理负责使用 `terminal/release` 方法释放终端。

查看协议文档：[Terminals](/protocol/terminals)

#### <span class="font-mono">CreateTerminalRequest</span>

创建新终端并执行命令的请求。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="args" type={<><span>"string"</span><span>[]</span></>}>
  命令参数数组。
</ResponseField>

<ResponseField name="command" type={"string"} required>
  要执行的命令。
</ResponseField>

<ResponseField name="cwd" type={"string | null"}>
  命令的工作目录（绝对路径）。
</ResponseField>

<ResponseField name="env" type={<a href="#envvariable">EnvVariable[]</a>}>
  命令的环境变量。
</ResponseField>

<ResponseField name="outputByteLimit" type={"integer | null"}>
  要保留的最大输出字节数。

  当超出限制时，客户端从输出开头进行截断，以保持在限制范围内。

  客户端必须确保截断发生在字符边界，以保证输出字符串有效，即使这意味着保留的内容略少于指定限制。

  * Minimum: `0`
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  此请求的会话ID。
</ResponseField>

#### <span class="font-mono">CreateTerminalResponse</span>

包含创建的终端ID的响应。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="terminalId" type={"string"} required>
  创建的终端的唯一标识符。
</ResponseField>

<a id="terminal-kill" />

### <span class="font-mono">terminal/kill</span>

终止终端命令而不释放终端

虽然 `terminal/release` 也会终止命令，但此方法将保持
`TerminalId` 有效，以便可以与其他方法一起使用。

此方法在实现命令超时时很有用，它会立即终止命令，
然后获取最终输出以便发送给模型。

注意：当不再需要 `TerminalId` 时，使用 `terminal/release`。

查看协议文档：[Terminals](/protocol/terminals)

#### <span class="font-mono">KillTerminalCommandRequest</span>

终止终端命令而不释放终端的请求。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  此请求的会话ID。
</ResponseField>

<ResponseField name="terminalId" type={"string"} required>
  要终止的终端ID。
</ResponseField>

#### <span class="font-mono">KillTerminalCommandResponse</span>

对terminal/kill命令方法的响应

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<a id="terminal-output" />

### <span class="font-mono">terminal/output</span>

获取终端输出和退出状态

返回终端中的当前内容而不等待命令退出。
如果命令已退出，则包含退出状态。

查看协议文档：[Terminals](/protocol/terminals)

#### <span class="font-mono">TerminalOutputRequest</span>

获取终端当前输出和状态的请求。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  此请求的会话ID。
</ResponseField>

<ResponseField name="terminalId" type={"string"} required>
  要获取输出的终端ID。
</ResponseField>

#### <span class="font-mono">TerminalOutputResponse</span>

包含终端输出和退出状态的响应。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="exitStatus" type={<><span><a href="#terminalexitstatus">TerminalExitStatus</a></span><span> | null</span></>}>
  命令完成时的退出状态。
</ResponseField>

<ResponseField name="output" type={"string"} required>
  到目前为止捕获的终端输出。
</ResponseField>

<ResponseField name="truncated" type={"boolean"} required>
  输出是否因字节限制而被截断。
</ResponseField>

<a id="terminal-release" />

### <span class="font-mono">terminal/release</span>

释放终端

如果命令尚未退出，则将其终止。使用 terminal/wait\_for\_exit
在释放终端之前等待命令退出。

释放后，TerminalId不能再与其他 terminal/\* 方法一起使用，
但已经包含它的工具调用将继续显示其输出。

terminal/kill方法可用于终止命令而不释放终端，
从而允许代理调用 terminal/output 和其他方法。

查看协议文档：[Terminals](/protocol/terminals)

#### <span class="font-mono">ReleaseTerminalRequest</span>

请求释放终端并释放其资源。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  此请求的会话ID。
</ResponseField>

<ResponseField name="terminalId" type={"string"} required>
  要释放的终端ID。
</ResponseField>

#### <span class="font-mono">ReleaseTerminalResponse</span>

对 terminal/release 方法的响应。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<a id="terminal-wait_for_exit" />

### <span class="font-mono">terminal/wait\_for\_exit</span>

等待终端命令退出并返回其退出状态

查看协议文档：[Terminals](/protocol/terminals)

#### <span class="font-mono">WaitForTerminalExitRequest</span>

等待终端命令退出的请求。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
  此请求的会话ID。
</ResponseField>

<ResponseField name="terminalId" type={"string"} required>
  要等待的终端ID。
</ResponseField>

#### <span class="font-mono">WaitForTerminalExitResponse</span>

包含终端命令退出状态的响应。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="exitCode" type={"integer | null"}>
  进程退出代码（如果被信号终止可能为null）。

  * Minimum: `0`
</ResponseField>

<ResponseField name="signal" type={"string | null"}>
  终止进程的信号（如果正常退出可能为null）。
</ResponseField>

## <span class="font-mono">AgentCapabilities</span>

代理支持的能力。

在初始化期间广播，以告知客户端可用的功能和内容类型。

查看协议文档：[Agent Capabilities](/protocol/initialization#agent-capabilities)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="loadSession" type={"boolean"}>
  代理是否支持 session/load。

  * Default: `false`
</ResponseField>

<ResponseField name="mcpCapabilities" type={<a href="#mcpcapabilities">McpCapabilities</a>}>
  代理支持的MCP能力。

  * Default: `{"http":false,"sse":false}`
</ResponseField>

<ResponseField name="promptCapabilities" type={<a href="#promptcapabilities">PromptCapabilities</a>}>
  代理支持的提示能力。

  * Default: `{"audio":false,"embeddedContext":false,"image":false}`
</ResponseField>

<ResponseField name="sessionCapabilities" type={<a href="#sessioncapabilities">SessionCapabilities</a>}>
  * Default: `{}`
</ResponseField>

## <span class="font-mono">Annotations</span>

客户端的可选注释。客户端可以使用注释来告知对象如何使用或显示。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="audience" type={<><span><a href="#role">Role[]</a></span><span> | null</span></>} />

<ResponseField name="lastModified" type={"string | null"} />

<ResponseField name="priority" type={"number | null"} />

## <span class="font-mono">AudioContent</span>

提供给或来自 LLM 的音频。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="annotations" type={<><span><a href="#annotations">Annotations</a></span><span> | null</span></>} />

<ResponseField name="data" type={"string"} required />

<ResponseField name="mimeType" type={"string"} required />

## <span class="font-mono">AuthMethod</span>

描述可用的认证方法。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="description" type={"string | null"}>
  可选描述，提供关于此认证方法的更多详细信息。
</ResponseField>

<ResponseField name="id" type={"string"} required>
  此认证方法的唯一标识符。
</ResponseField>

<ResponseField name="name" type={"string"} required>
  认证方法的人类可读名称。
</ResponseField>

## <span class="font-mono">AvailableCommand</span>

命令的信息。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="description" type={"string"} required>
  命令功能的人类可读描述。
</ResponseField>

<ResponseField name="input" type={<><span><a href="#availablecommandinput">AvailableCommandInput</a></span><span> | null</span></>}>
  命令的输入（如需要）
</ResponseField>

<ResponseField name="name" type={"string"} required>
  命令名称（例如create\_plan、research\_codebase）。
</ResponseField>

## <span class="font-mono">AvailableCommandInput</span>

命令的输入规范。

**Type:** Union

<ResponseField name="unstructured">
  命令名称后输入的所有文本都作为输入提供。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="hint" type={"string"} required>
      当输入尚未提供时显示的提示
    </ResponseField>
  </Expandable>
</ResponseField>

## <span class="font-mono">AvailableCommandsUpdate</span>

可用命令已准备就绪或已更改

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="availableCommands" type={<a href="#availablecommand">AvailableCommand[]</a>} required>
  代理可以执行的命令
</ResponseField>

## <span class="font-mono">BlobResourceContents</span>

二进制资源内容。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="blob" type={"string"} required />

<ResponseField name="mimeType" type={"string | null"} />

<ResponseField name="uri" type={"string"} required />

## <span class="font-mono">ClientCapabilities</span>

客户端支持的能力。

在初始化期间广告，以告知代理可用的功能和方法。

查看协议文档：[Client Capabilities](/protocol/initialization#client-capabilities)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="fs" type={<a href="#filesystemcapability">FileSystemCapability</a>}>
  客户端支持的文件系统能力。决定代理可以请求哪些文件操作。

  * Default: `{"readTextFile":false,"writeTextFile":false}`
</ResponseField>

<ResponseField name="terminal" type={"boolean"}>
  客户端是否支持所有 terminal/\* 方法。

  * Default: `false`
</ResponseField>

## <span class="font-mono">Content</span>

标准内容块（文本、图像、资源）。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="content" type={<a href="#contentblock">ContentBlock</a>} required>
  实际的内容块。
</ResponseField>

## <span class="font-mono">ContentBlock</span>

内容块用于在代理客户端协议中表示可展示的信息。

它们为处理各种面向用户的内容类型提供了结构化方式——无论是来自语言模型的文本、用于分析的图片，还是用于上下文的嵌入式资源。

内容块出现在以下场景：

* 通过 `session/prompt` 发送的用户提示
* 通过 `session/update` 通知流式传输的语言模型输出
* 工具调用的进度更新和结果

该结构与模型上下文协议（MCP）兼容，使代理能够无需转换即可无缝转发来自 MCP 工具输出的内容。

查看协议文档：[Content](/protocol/content)

**Type:** Union

<ResponseField name="text" type="object">
  文本内容。可以是纯文本或Markdown格式。

  所有代理必须在提示中支持文本内容块。
  客户端应以 Markdown 格式渲染此文本。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="annotations" type={<><span><a href="#annotations">Annotations</a></span><span> | null</span></>} />

    <ResponseField name="text" type={"string"} required />

    <ResponseField name="type" type={"string"} required />
  </Expandable>
</ResponseField>

<ResponseField name="image" type="object">
  用于视觉上下文或分析的图像。

  在提示中包含时需要 image 提示能力。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="annotations" type={<><span><a href="#annotations">Annotations</a></span><span> | null</span></>} />

    <ResponseField name="data" type={"string"} required />

    <ResponseField name="mimeType" type={"string"} required />

    <ResponseField name="type" type={"string"} required />

    <ResponseField name="uri" type={"string | null"} />
  </Expandable>
</ResponseField>

<ResponseField name="audio" type="object">
  用于转录或分析的音频数据。

  在提示中包含时需要 audio 提示能力。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="annotations" type={<><span><a href="#annotations">Annotations</a></span><span> | null</span></>} />

    <ResponseField name="data" type={"string"} required />

    <ResponseField name="mimeType" type={"string"} required />

    <ResponseField name="type" type={"string"} required />
  </Expandable>
</ResponseField>

<ResponseField name="resource_link" type="object">
  代理可以访问的资源的引用。

  所有代理必须在提示中支持资源链接。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="annotations" type={<><span><a href="#annotations">Annotations</a></span><span> | null</span></>} />

    <ResponseField name="description" type={"string | null"} />

    <ResponseField name="mimeType" type={"string | null"} />

    <ResponseField name="name" type={"string"} required />

    <ResponseField name="size" type={"integer | null"} />

    <ResponseField name="title" type={"string | null"} />

    <ResponseField name="type" type={"string"} required />

    <ResponseField name="uri" type={"string"} required />
  </Expandable>
</ResponseField>

<ResponseField name="resource" type="object">
  直接嵌入消息中的完整资源内容。

  首选用于包含上下文，因为它避免了额外的往返。

  在提示中包含时需要 embeddedContext 提示能力。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="annotations" type={<><span><a href="#annotations">Annotations</a></span><span> | null</span></>} />

    <ResponseField name="resource" type={<a href="#embeddedresourceresource">EmbeddedResourceResource</a>} required />

    <ResponseField name="type" type={"string"} required />
  </Expandable>
</ResponseField>

## <span class="font-mono">ContentChunk</span>

流式内容项

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="content" type={<a href="#contentblock">ContentBlock</a>} required>
  单个内容项
</ResponseField>

## <span class="font-mono">CurrentModeUpdate</span>

会话的当前模式已更改

查看协议文档：[Session Modes](/protocol/session-modes)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="currentModeId" type={<a href="#sessionmodeid">SessionModeId</a>} required>
  当前模式的ID
</ResponseField>

## <span class="font-mono">Diff</span>

表示文件修改的差异。

以适合客户端UI显示的格式显示文件的更改。

查看协议文档：[Content](/protocol/tool-calls#content)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="newText" type={"string"} required>
  修改后的新内容。
</ResponseField>

<ResponseField name="oldText" type={"string | null"}>
  原始内容（新文件为None）。
</ResponseField>

<ResponseField name="path" type={"string"} required>
  正在修改的文件路径。
</ResponseField>

## <span class="font-mono">EmbeddedResource</span>

资源的内容，嵌入到提示或工具调用结果中。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="annotations" type={<><span><a href="#annotations">Annotations</a></span><span> | null</span></>} />

<ResponseField name="resource" type={<a href="#embeddedresourceresource">EmbeddedResourceResource</a>} required />

## <span class="font-mono">EmbeddedResourceResource</span>

可以嵌入到消息中的资源内容。

**Type:** Union

<ResponseField name="TextResourceContents">
  {""}

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="mimeType" type={"string | null"} />

    <ResponseField name="text" type={"string"} required />

    <ResponseField name="uri" type={"string"} required />
  </Expandable>
</ResponseField>

<ResponseField name="BlobResourceContents">
  {""}

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="blob" type={"string"} required />

    <ResponseField name="mimeType" type={"string | null"} />

    <ResponseField name="uri" type={"string"} required />
  </Expandable>
</ResponseField>

## <span class="font-mono">EnvVariable</span>

启动MCP服务器时设置的环境变量。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="name" type={"string"} required>
  环境变量名称。
</ResponseField>

<ResponseField name="value" type={"string"} required>
  环境变量的值。
</ResponseField>

## <span class="font-mono">Error</span>

JSON-RPC错误对象。

表示方法执行期间发生的错误，遵循
JSON-RPC 2.0 错误对象规范，并带有可选的附加数据。

查看协议文档：[JSON-RPC Error Object](https://www.jsonrpc.org/specification#error_object)

**Type:** Object

**Properties:**

<ResponseField name="code" type={<a href="#errorcode">ErrorCode</a>} required>
  表示发生的错误类型的数字。该值必须是 JSON-RPC 规范中定义的整数。
</ResponseField>

<ResponseField name="data" type={"object"}>
  可选的原始值或结构化值，包含有关错误的附加信息。可包括调试信息或上下文相关的细节。
</ResponseField>

<ResponseField name="message" type={"string"} required>
  提供错误简短描述的字符串。消息应限制为一句简洁的话。
</ResponseField>

## <span class="font-mono">ErrorCode</span>

常见JSON-RPC和ACP特定错误的预定义错误代码。

这些代码遵循JSON-RPC 2.0规范中标准错误的定义
并使用保留范围（-32000到-32099）表示协议特定错误。

**Type:** Union

<ResponseField name="-32700" type="int32">
  解析错误：服务器收到无效 JSON。在服务器解析 JSON 文本时发生错误。
</ResponseField>

<ResponseField name="-32600" type="int32">
  无效请求：发送的JSON不是有效的请求对象。
</ResponseField>

<ResponseField name="-32601" type="int32">
  方法未找到：方法不存在或不可用。
</ResponseField>

<ResponseField name="-32602" type="int32">
  无效参数：无效的方法参数。
</ResponseField>

<ResponseField name="-32603" type="int32">
  内部错误：内部 JSON-RPC 错误。保留用于实现定义的服务器错误。
</ResponseField>

<ResponseField name="-32000" type="int32">
  内部错误：内部 JSON-RPC 错误。保留用于实现定义的服务器错误。
</ResponseField>

<ResponseField name="-32002" type="int32">
  资源未找到：未找到指定资源（如文件）。
</ResponseField>

<ResponseField name="Other" type="int32">
  其他未定义的错误代码。
</ResponseField>

## <span class="font-mono">ExtNotification</span>

允许代理发送不属于ACP规范的任意通知。
扩展通知提供了一种发送自定义功能单向消息的方式
同时保持协议兼容性。

查看协议文档：[Extensibility](/protocol/extensibility)

## <span class="font-mono">ExtRequest</span>

允许发送不属于ACP规范的任意请求。
扩展方法提供了一种添加自定义功能的方式，同时
保持协议兼容性。

查看协议文档：[Extensibility](/protocol/extensibility)

## <span class="font-mono">ExtResponse</span>

允许向不属于ACP规范的 `ExtRequest` 发送任意响应。
扩展方法提供了一种添加自定义功能的方式，同时
保持协议兼容性。

查看协议文档：[Extensibility](/protocol/extensibility)

## <span class="font-mono">FileSystemCapability</span>

客户端支持的文件系统能力。

查看协议文档：[FileSystem](/protocol/initialization#filesystem)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="readTextFile" type={"boolean"}>
  客户端是否支持 fs/read\_text\_file 请求。

  * Default: `false`
</ResponseField>

<ResponseField name="writeTextFile" type={"boolean"}>
  客户端是否支持 fs/write\_text\_file 请求。

  * Default: `false`
</ResponseField>

## <span class="font-mono">HttpHeader</span>

向MCP服务器发出请求时要设置的HTTP头。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="name" type={"string"} required>
  HTTP头名称。
</ResponseField>

<ResponseField name="value" type={"string"} required>
  HTTP头的值。
</ResponseField>

## <span class="font-mono">ImageContent</span>

提供给LLM或从LLM获取的图像。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="annotations" type={<><span><a href="#annotations">Annotations</a></span><span> | null</span></>} />

<ResponseField name="data" type={"string"} required />

<ResponseField name="mimeType" type={"string"} required />

<ResponseField name="uri" type={"string | null"} />

## <span class="font-mono">Implementation</span>

关于客户端或代理实现的信息。
描述MCP实现的名称和版本，可选
带有UI表示的标题。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="name" type={"string"} required>
  供编程或逻辑使用；若未提供 title，也可作为显示名称的备选。
</ResponseField>

<ResponseField name="title" type={"string | null"}>
  面向 UI 和最终用户场景——专为人类可读、易于理解而优化。

  如果未提供，名称应用于显示。
</ResponseField>

<ResponseField name="version" type={"string"} required>
  实现版本号。可展示给用户，或用于调试、指标统计等目的（例如 "1.0.0"）。
</ResponseField>

## <span class="font-mono">McpCapabilities</span>

代理支持的MCP能力

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="http" type={"boolean"}>
  代理支持 McpServer::Http。

  * Default: `false`
</ResponseField>

<ResponseField name="sse" type={"boolean"}>
  代理支持 McpServer::Sse。

  * Default: `false`
</ResponseField>

## <span class="font-mono">McpServer</span>

连接到MCP（模型上下文协议）服务器的配置。

MCP服务器提供代理在处理提示时可以使用的
工具和上下文。

查看协议文档：[MCP Servers](/protocol/session-setup#mcp-servers)

**Type:** Union

<ResponseField name="http" type="object">
  HTTP传输配置

  仅在代理能力指示 `mcp_capabilities.http` 为 `true` 时可用。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="headers" type={<a href="#httpheader">HttpHeader[]</a>} required>
      向MCP服务器发出请求时要设置的HTTP头。
    </ResponseField>

    <ResponseField name="name" type={"string"} required>
      标识此MCP服务器的人类可读名称。
    </ResponseField>

    <ResponseField name="type" type={"string"} required />

    <ResponseField name="url" type={"string"} required>
      MCP服务器的URL。
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="sse" type="object">
  SSE传输配置

  仅在代理能力指示 `mcp_capabilities.sse` 为 `true` 时可用。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="headers" type={<a href="#httpheader">HttpHeader[]</a>} required>
      向MCP服务器发出请求时要设置的HTTP头。
    </ResponseField>

    <ResponseField name="name" type={"string"} required>
      标识此MCP服务器的人类可读名称。
    </ResponseField>

    <ResponseField name="type" type={"string"} required />

    <ResponseField name="url" type={"string"} required>
      MCP服务器的URL。
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="stdio">
  Stdio传输配置

  所有代理必须支持此传输。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="args" type={<><span>"string"</span><span>[]</span></>} required>
      传递给MCP服务器的命令行参数。
    </ResponseField>

    <ResponseField name="command" type={"string"} required>
      MCP服务器可执行文件的路径。
    </ResponseField>

    <ResponseField name="env" type={<a href="#envvariable">EnvVariable[]</a>} required>
      启动MCP服务器时设置的环境变量。
    </ResponseField>

    <ResponseField name="name" type={"string"} required>
      标识此MCP服务器的人类可读名称。
    </ResponseField>
  </Expandable>
</ResponseField>

## <span class="font-mono">McpServerHttp</span>

HTTP传输配置 for MCP.

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="headers" type={<a href="#httpheader">HttpHeader[]</a>} required>
  向MCP服务器发出请求时要设置的HTTP头。
</ResponseField>

<ResponseField name="name" type={"string"} required>
  标识此MCP服务器的人类可读名称。
</ResponseField>

<ResponseField name="url" type={"string"} required>
  MCP服务器的URL。
</ResponseField>

## <span class="font-mono">McpServerSse</span>

SSE传输配置 for MCP.

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="headers" type={<a href="#httpheader">HttpHeader[]</a>} required>
  向MCP服务器发出请求时要设置的HTTP头。
</ResponseField>

<ResponseField name="name" type={"string"} required>
  标识此MCP服务器的人类可读名称。
</ResponseField>

<ResponseField name="url" type={"string"} required>
  MCP服务器的URL。
</ResponseField>

## <span class="font-mono">McpServerStdio</span>

Stdio传输配置 for MCP.

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="args" type={<><span>"string"</span><span>[]</span></>} required>
  传递给MCP服务器的命令行参数。
</ResponseField>

<ResponseField name="command" type={"string"} required>
  MCP服务器可执行文件的路径。
</ResponseField>

<ResponseField name="env" type={<a href="#envvariable">EnvVariable[]</a>} required>
  启动MCP服务器时设置的环境变量。
</ResponseField>

<ResponseField name="name" type={"string"} required>
  标识此MCP服务器的人类可读名称。
</ResponseField>

## <span class="font-mono">PermissionOption</span>

请求权限时向用户展示的选项。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="kind" type={<a href="#permissionoptionkind">PermissionOptionKind</a>} required>
  关于此权限选项性质的提示。
</ResponseField>

<ResponseField name="name" type={"string"} required>
  向用户显示的人类可读标签。
</ResponseField>

<ResponseField name="optionId" type={<a href="#permissionoptionid">PermissionOptionId</a>} required>
  此权限选项的唯一标识符。
</ResponseField>

## <span class="font-mono">PermissionOptionId</span>

权限选项的唯一标识符。

**Type:** `string`

## <span class="font-mono">PermissionOptionKind</span>

呈现给用户的权限选项类型。

帮助客户端选择适当的图标和UI处理方式。

**Type:** Union

<ResponseField name="allow_once" type="string">
  仅此次允许此操作。
</ResponseField>

<ResponseField name="allow_always" type="string">
  允许此操作并记住选择。
</ResponseField>

<ResponseField name="reject_once" type="string">
  仅此次拒绝此操作。
</ResponseField>

<ResponseField name="reject_always" type="string">
  拒绝此操作并记住选择。
</ResponseField>

## <span class="font-mono">Plan</span>

完成复杂任务的执行计划。

计划由多个表示单个任务或目标的条目组成。
Agents report plans to clients to provide visibility into their execution strategy.
Plans can evolve during execution as the agent discovers new requirements or completes tasks.

查看协议文档：[Agent Plan](/protocol/agent-plan)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="entries" type={<a href="#planentry">PlanEntry[]</a>} required>
  要完成的任务列表。

  更新计划时，代理必须发送所有条目的完整列表
  with their current status. 客户端在每次更新时替换整个计划。
</ResponseField>

## <span class="font-mono">PlanEntry</span>

执行计划中的单个条目。

代表助手为完成用户请求而计划达成的一项任务或目标。

查看协议文档：[Plan Entries](/protocol/agent-plan#plan-entries)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="content" type={"string"} required>
  此任务旨在完成的人类可读描述。
</ResponseField>

<ResponseField name="priority" type={<a href="#planentrypriority">PlanEntryPriority</a>} required>
  此任务的相对重要性。
  Used to indicate which tasks are most critical to the overall goal.
</ResponseField>

<ResponseField name="status" type={<a href="#planentrystatus">PlanEntryStatus</a>} required>
  此任务的当前执行状态。
</ResponseField>

## <span class="font-mono">PlanEntryPriority</span>

计划条目的优先级级别。

Used to indicate the relative importance or urgency of different
tasks in the execution plan.
查看协议文档：[Plan Entries](/protocol/agent-plan#plan-entries)

**Type:** Union

<ResponseField name="high" type="string">
  高优先级任务——对整体目标至关重要。
</ResponseField>

<ResponseField name="medium" type="string">
  中优先级任务——重要但非关键。
</ResponseField>

<ResponseField name="low" type="string">
  低优先级任务——锦上添花但非必需。
</ResponseField>

## <span class="font-mono">PlanEntryStatus</span>

执行流程中计划条目的状态。

跟踪每个任务从规划到完成的生命周期。
查看协议文档：[Plan Entries](/protocol/agent-plan#plan-entries)

**Type:** Union

<ResponseField name="pending" type="string">
  任务尚未开始。
</ResponseField>

<ResponseField name="in_progress" type="string">
  任务当前正在处理中。
</ResponseField>

<ResponseField name="completed" type="string">
  任务已成功完成。
</ResponseField>

## <span class="font-mono">PromptCapabilities</span>

代理在 session/prompt 请求中支持的提示能力。

主代理功能要求在提示请求中支持 `ContentBlock::Text` 和 `ContentBlock::ResourceLink`。

其他变体必须明确选择加入。
提示请求中不同类型内容的能力。

指示代理除基线（文本与资源链接）外还能处理哪些内容类型。

查看协议文档：[Prompt Capabilities](/protocol/initialization#prompt-capabilities)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="audio" type={"boolean"}>
  代理支持 ContentBlock::Audio。

  * Default: `false`
</ResponseField>

<ResponseField name="embeddedContext" type={"boolean"}>
  代理支持在 session/prompt 请求中嵌入上下文。

  When enabled, the Client is allowed to include `ContentBlock::Resource`
  in prompt requests for pieces of context that are referenced in the message.

  * Default: `false`
</ResponseField>

<ResponseField name="image" type={"boolean"}>
  代理支持 ContentBlock::Image。

  * Default: `false`
</ResponseField>

## <span class="font-mono">ProtocolVersion</span>

协议版本标识符。

此版本仅在重大更改时才会更新。
非重大更改应通过能力引入。

**Type:** `integer (uint16)`

| Constraint | Value   |
| ---------- | ------- |
| Minimum    | `0`     |
| Maximum    | `65535` |

## <span class="font-mono">RequestId</span>

JSON RPC请求ID

由客户端建立的标识符，如果包含必须包含字符串、数字或NULL值。 如果不包含，则假定为通知。 该值通常不应为Null \[1] 数字不应包含小数部分 \[2]

如果包含，服务器必须在响应对象中以相同的值回复。 此成员用于关联两个对象之间的上下文。

\[1] 不建议在请求对象中将Null用作id成员的值， 因为此规范对未知id的响应使用Null值。 另外，由于JSON-RPC 1.0对通知使用Null作为id值，这可能导致处理时混淆。

\[2] 小数部分可能有问题，因为许多十进制小数无法精确表示为二进制小数。

**Type:** Union

<ResponseField name="null" type="null">
  {""}
</ResponseField>

<ResponseField name="Number" type="int64">
  {""}
</ResponseField>

<ResponseField name="Str" type="string">
  {""}
</ResponseField>

## <span class="font-mono">RequestPermissionOutcome</span>

权限请求的结果。

**Type:** Union

<ResponseField name="cancelled" type="object">
  在用户响应之前提示轮次已被取消。

  当客户端发送 `session/cancel` 通知取消正在进行的
  提示轮次时，它必须响应所有待处理的 `session/request_permission`
  请求，并使用此 `Cancelled` 结果。

  查看协议文档：[Cancellation](/protocol/prompt-turn#cancellation)

  <Expandable title="Properties">
    <ResponseField name="outcome" type={"string"} required />
  </Expandable>
</ResponseField>

<ResponseField name="selected" type="object">
  用户选择了提供的选项之一。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="optionId" type={<a href="#permissionoptionid">PermissionOptionId</a>} required>
      用户选择的选项的ID。
    </ResponseField>

    <ResponseField name="outcome" type={"string"} required />
  </Expandable>
</ResponseField>

## <span class="font-mono">ResourceLink</span>

服务器能够读取的资源，包含在提示或工具调用结果中。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="annotations" type={<><span><a href="#annotations">Annotations</a></span><span> | null</span></>} />

<ResponseField name="description" type={"string | null"} />

<ResponseField name="mimeType" type={"string | null"} />

<ResponseField name="name" type={"string"} required />

<ResponseField name="size" type={"integer | null"} />

<ResponseField name="title" type={"string | null"} />

<ResponseField name="uri" type={"string"} required />

## <span class="font-mono">Role</span>

对话中消息和数据的发送者或接收者。

**Type:** Enumeration

| Value         |
| ------------- |
| `"assistant"` |
| `"user"`      |

## <span class="font-mono">SelectedPermissionOutcome</span>

用户选择了提供的选项之一。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="optionId" type={<a href="#permissionoptionid">PermissionOptionId</a>} required>
  用户选择的选项的ID。
</ResponseField>

## <span class="font-mono">SessionCapabilities</span>

代理支持的会话能力。

作为基线，所有代理必须支持 `session/new`、`session/prompt`、`session/cancel` 和 `session/update`。

此外，它们可以通过声明额外能力，选择性地支持其他会话方法与通知。

注意：`session/load` 仍由顶层 `load_session` 能力处理，未来协议版本将统一这一机制。

查看协议文档：[Session Capabilities](/protocol/initialization#session-capabilities)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

## <span class="font-mono">SessionId</span>

客户端和代理之间对话会话的唯一标识符。

会话维护自己的上下文、对话历史和状态，
允许与同一个代理进行多次独立交互。

查看协议文档：[Session ID](/protocol/session-setup#session-id)

**Type:** `string`

## <span class="font-mono">SessionMode</span>

代理可以操作的模式。

查看协议文档：[Session Modes](/protocol/session-modes)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="description" type={"string | null"} />

<ResponseField name="id" type={<a href="#sessionmodeid">SessionModeId</a>} required />

<ResponseField name="name" type={"string"} required />

## <span class="font-mono">SessionModeId</span>

会话模式的唯一标识符。

**Type:** `string`

## <span class="font-mono">SessionModeState</span>

模式集和当前活动的模式。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="availableModes" type={<a href="#sessionmode">SessionMode[]</a>} required>
  代理可以操作的模式集
</ResponseField>

<ResponseField name="currentModeId" type={<a href="#sessionmodeid">SessionModeId</a>} required>
  代理当前的模式。
</ResponseField>

## <span class="font-mono">SessionUpdate</span>

会话处理期间可以发送的不同类型的更新。

这些更新提供关于代理进度的实时反馈。

查看协议文档：[Agent Reports Output](/protocol/prompt-turn#3-agent-reports-output)

**Type:** Union

<ResponseField name="user_message_chunk" type="object">
  正在流式传输的用户消息块。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="content" type={<a href="#contentblock">ContentBlock</a>} required>
      单个内容项
    </ResponseField>

    <ResponseField name="sessionUpdate" type={"string"} required />
  </Expandable>
</ResponseField>

<ResponseField name="agent_message_chunk" type="object">
  正在流式传输的代理响应块。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="content" type={<a href="#contentblock">ContentBlock</a>} required>
      单个内容项
    </ResponseField>

    <ResponseField name="sessionUpdate" type={"string"} required />
  </Expandable>
</ResponseField>

<ResponseField name="agent_thought_chunk" type="object">
  正在流式传输的代理内部推理块。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="content" type={<a href="#contentblock">ContentBlock</a>} required>
      单个内容项
    </ResponseField>

    <ResponseField name="sessionUpdate" type={"string"} required />
  </Expandable>
</ResponseField>

<ResponseField name="tool_call" type="object">
  已启动新工具调用的通知。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="content" type={<a href="#toolcallcontent">ToolCallContent[]</a>}>
      工具调用产生的内容。
    </ResponseField>

    <ResponseField name="kind" type={<a href="#toolkind">ToolKind</a>}>
      被调用工具的类别。
      帮助客户端选择适当的图标和UI处理方式。
    </ResponseField>

    <ResponseField name="locations" type={<a href="#toolcalllocation">ToolCallLocation[]</a>}>
      此工具调用影响的文件位置。
      在客户端启用"跟随"功能。
    </ResponseField>

    <ResponseField name="rawInput" type={"object"}>
      发送给工具的原始输入参数。
    </ResponseField>

    <ResponseField name="rawOutput" type={"object"}>
      工具返回的原始输出。
    </ResponseField>

    <ResponseField name="sessionUpdate" type={"string"} required />

    <ResponseField name="status" type={<a href="#toolcallstatus">ToolCallStatus</a>}>
      工具调用的当前执行状态。
    </ResponseField>

    <ResponseField name="title" type={"string"} required>
      描述工具正在做什么的人类可读标题。
    </ResponseField>

    <ResponseField name="toolCallId" type={<a href="#toolcallid">ToolCallId</a>} required>
      会话中此工具调用的唯一标识符。
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="tool_call_update" type="object">
  工具调用状态或结果的更新。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="content" type={<><span><a href="#toolcallcontent">ToolCallContent[]</a></span><span> | null</span></>}>
      替换内容集合。
    </ResponseField>

    <ResponseField name="kind" type={<><span><a href="#toolkind">ToolKind</a></span><span> | null</span></>}>
      更新工具类型。
    </ResponseField>

    <ResponseField name="locations" type={<><span><a href="#toolcalllocation">ToolCallLocation[]</a></span><span> | null</span></>}>
      替换位置集合。
    </ResponseField>

    <ResponseField name="rawInput" type={"object"}>
      更新原始输入。
    </ResponseField>

    <ResponseField name="rawOutput" type={"object"}>
      更新原始输出。
    </ResponseField>

    <ResponseField name="sessionUpdate" type={"string"} required />

    <ResponseField name="status" type={<><span><a href="#toolcallstatus">ToolCallStatus</a></span><span> | null</span></>}>
      更新执行状态。
    </ResponseField>

    <ResponseField name="title" type={"string | null"}>
      更新人类可读标题。
    </ResponseField>

    <ResponseField name="toolCallId" type={<a href="#toolcallid">ToolCallId</a>} required>
      被更新的工具调用的ID。
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="plan" type="object">
  代理完成复杂任务的执行计划。
  查看协议文档：[Agent Plan](/protocol/agent-plan)

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="entries" type={<a href="#planentry">PlanEntry[]</a>} required>
      要完成的任务列表。

      更新计划时，代理必须发送所有条目的完整列表
      with their current status. 客户端在每次更新时替换整个计划。
    </ResponseField>

    <ResponseField name="sessionUpdate" type={"string"} required />
  </Expandable>
</ResponseField>

<ResponseField name="available_commands_update" type="object">
  可用命令已准备就绪或已更改

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="availableCommands" type={<a href="#availablecommand">AvailableCommand[]</a>} required>
      代理可以执行的命令
    </ResponseField>

    <ResponseField name="sessionUpdate" type={"string"} required />
  </Expandable>
</ResponseField>

<ResponseField name="current_mode_update" type="object">
  会话的当前模式已更改

  查看协议文档：[Session Modes](/protocol/session-modes)

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="currentModeId" type={<a href="#sessionmodeid">SessionModeId</a>} required>
      当前模式的ID
    </ResponseField>

    <ResponseField name="sessionUpdate" type={"string"} required />
  </Expandable>
</ResponseField>

## <span class="font-mono">StopReason</span>

代理停止处理提示轮次的原因。

查看协议文档：[Stop Reasons](/protocol/prompt-turn#stop-reasons)

**Type:** Union

<ResponseField name="end_turn" type="string">
  轮次成功结束。
</ResponseField>

<ResponseField name="max_tokens" type="string">
  轮次因代理达到最大token数而结束。
</ResponseField>

<ResponseField name="max_turn_requests" type="string">
  轮次因代理达到允许的最大代理请求数而结束
  在用户轮次之间。
</ResponseField>

<ResponseField name="refusal" type="string">
  轮次因代理拒绝继续而结束。 用户提示及其后的内容不会被包含在下一个提示中，
  因此应在UI中反映这一点。
</ResponseField>

<ResponseField name="cancelled" type="string">
  轮次被客户端通过 `session/cancel` 取消。

  当客户端发送 `session/cancel` 通知时，必须返回此停止原因，
  即使取消导致底层操作出现异常。
  代理应该捕获这些异常并返回这个语义上有意义的
  响应以确认成功取消。
</ResponseField>

## <span class="font-mono">Terminal</span>

通过ID嵌入使用 `terminal/create` 创建的终端。

必须在调用 `terminal/release` 之前添加终端。

查看协议文档：[Terminal](/protocol/terminals)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="terminalId" type={"string"} required />

## <span class="font-mono">TerminalExitStatus</span>

终端命令的退出状态。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="exitCode" type={"integer | null"}>
  进程退出代码（如果被信号终止可能为null）。

  * Minimum: `0`
</ResponseField>

<ResponseField name="signal" type={"string | null"}>
  终止进程的信号（如果正常退出可能为null）。
</ResponseField>

## <span class="font-mono">TextContent</span>

提供给LLM或从LLM获取的文本。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="annotations" type={<><span><a href="#annotations">Annotations</a></span><span> | null</span></>} />

<ResponseField name="text" type={"string"} required />

## <span class="font-mono">TextResourceContents</span>

基于文本的资源内容。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="mimeType" type={"string | null"} />

<ResponseField name="text" type={"string"} required />

<ResponseField name="uri" type={"string"} required />

## <span class="font-mono">ToolCall</span>

表示语言模型请求的工具调用。

工具调用是代理代表语言模型执行的操作，
如读取文件、执行代码或从外部来源获取数据。

查看协议文档：[Tool Calls](/protocol/tool-calls)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="content" type={<a href="#toolcallcontent">ToolCallContent[]</a>}>
  工具调用产生的内容。
</ResponseField>

<ResponseField name="kind" type={<a href="#toolkind">ToolKind</a>}>
  被调用工具的类别。
  帮助客户端选择适当的图标和UI处理方式。
</ResponseField>

<ResponseField name="locations" type={<a href="#toolcalllocation">ToolCallLocation[]</a>}>
  此工具调用影响的文件位置。
  在客户端启用"跟随"功能。
</ResponseField>

<ResponseField name="rawInput" type={"object"}>
  发送给工具的原始输入参数。
</ResponseField>

<ResponseField name="rawOutput" type={"object"}>
  工具返回的原始输出。
</ResponseField>

<ResponseField name="status" type={<a href="#toolcallstatus">ToolCallStatus</a>}>
  工具调用的当前执行状态。
</ResponseField>

<ResponseField name="title" type={"string"} required>
  描述工具正在做什么的人类可读标题。
</ResponseField>

<ResponseField name="toolCallId" type={<a href="#toolcallid">ToolCallId</a>} required>
  会话中此工具调用的唯一标识符。
</ResponseField>

## <span class="font-mono">ToolCallContent</span>

工具调用产生的内容。

工具调用可以产生不同类型的内容，包括
标准内容块（文本、图像）或文件差异。

查看协议文档：[Content](/protocol/tool-calls#content)

**Type:** Union

<ResponseField name="content" type="object">
  标准内容块（文本、图像、资源）。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="content" type={<a href="#contentblock">ContentBlock</a>} required>
      实际的内容块。
    </ResponseField>

    <ResponseField name="type" type={"string"} required />
  </Expandable>
</ResponseField>

<ResponseField name="diff" type="object">
  显示为差异的文件修改。

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="newText" type={"string"} required>
      修改后的新内容。
    </ResponseField>

    <ResponseField name="oldText" type={"string | null"}>
      原始内容（新文件为None）。
    </ResponseField>

    <ResponseField name="path" type={"string"} required>
      正在修改的文件路径。
    </ResponseField>

    <ResponseField name="type" type={"string"} required />
  </Expandable>
</ResponseField>

<ResponseField name="terminal" type="object">
  通过ID嵌入使用 `terminal/create` 创建的终端。

  必须在调用 `terminal/release` 之前添加终端。

  查看协议文档：[Terminal](/protocol/terminals)

  <Expandable title="Properties">
    <ResponseField name="_meta" type={"object | null"}>
      \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

      查看协议文档：[Extensibility](/protocol/extensibility)
    </ResponseField>

    <ResponseField name="terminalId" type={"string"} required />

    <ResponseField name="type" type={"string"} required />
  </Expandable>
</ResponseField>

## <span class="font-mono">ToolCallId</span>

会话中工具调用的唯一标识符。

**Type:** `string`

## <span class="font-mono">ToolCallLocation</span>

被工具访问或修改的文件位置。

使客户端能够实现"跟随"功能，跟踪
代理正在实时处理的文件。

查看协议文档：[Following the Agent](/protocol/tool-calls#following-the-agent)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="line" type={"integer | null"}>
  文件中的可选行号。

  * Minimum: `0`
</ResponseField>

<ResponseField name="path" type={"string"} required>
  正在访问或修改的文件路径。
</ResponseField>

## <span class="font-mono">ToolCallStatus</span>

工具调用的执行状态。

工具调用在其生命周期中经历不同的状态。

查看协议文档：[Status](/protocol/tool-calls#status)

**Type:** Union

<ResponseField name="pending" type="string">
  工具调用尚未开始运行，因为输入正在流式传输
  或我们正在等待批准。
</ResponseField>

<ResponseField name="in_progress" type="string">
  工具调用当前正在运行。
</ResponseField>

<ResponseField name="completed" type="string">
  工具调用成功完成。
</ResponseField>

<ResponseField name="failed" type="string">
  工具调用失败并出现错误。
</ResponseField>

## <span class="font-mono">ToolCallUpdate</span>

对现有工具调用的更新。

用于在工具执行时报告进度和结果。 All fields except
the tool call ID are optional - only changed fields need to be included.

查看协议文档：[Updating](/protocol/tool-calls#updating)

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="content" type={<><span><a href="#toolcallcontent">ToolCallContent[]</a></span><span> | null</span></>}>
  替换内容集合。
</ResponseField>

<ResponseField name="kind" type={<><span><a href="#toolkind">ToolKind</a></span><span> | null</span></>}>
  更新工具类型。
</ResponseField>

<ResponseField name="locations" type={<><span><a href="#toolcalllocation">ToolCallLocation[]</a></span><span> | null</span></>}>
  替换位置集合。
</ResponseField>

<ResponseField name="rawInput" type={"object"}>
  更新原始输入。
</ResponseField>

<ResponseField name="rawOutput" type={"object"}>
  更新原始输出。
</ResponseField>

<ResponseField name="status" type={<><span><a href="#toolcallstatus">ToolCallStatus</a></span><span> | null</span></>}>
  更新执行状态。
</ResponseField>

<ResponseField name="title" type={"string | null"}>
  更新人类可读标题。
</ResponseField>

<ResponseField name="toolCallId" type={<a href="#toolcallid">ToolCallId</a>} required>
  被更新的工具调用的ID。
</ResponseField>

## <span class="font-mono">ToolKind</span>

可以调用的工具类别。

工具类别帮助客户端选择适当的图标并优化
显示工具执行进度的方式。

查看协议文档：[Creating](/protocol/tool-calls#creating)

**Type:** Union

<ResponseField name="read" type="string">
  读取文件或数据。
</ResponseField>

<ResponseField name="edit" type="string">
  修改文件或内容。
</ResponseField>

<ResponseField name="delete" type="string">
  删除文件或数据。
</ResponseField>

<ResponseField name="move" type="string">
  移动或重命名文件。
</ResponseField>

<ResponseField name="search" type="string">
  搜索信息。
</ResponseField>

<ResponseField name="execute" type="string">
  运行命令或代码。
</ResponseField>

<ResponseField name="think" type="string">
  内部推理或规划。
</ResponseField>

<ResponseField name="fetch" type="string">
  检索外部数据。
</ResponseField>

<ResponseField name="switch_mode" type="string">
  切换当前会话模式。
</ResponseField>

<ResponseField name="other" type="string">
  其他工具类型（默认）。
</ResponseField>

## <span class="font-mono">UnstructuredCommandInput</span>

命令名称后输入的所有文本都作为输入提供。

**Type:** Object

**Properties:**

<ResponseField name="_meta" type={"object | null"}>
  \_meta属性由ACP保留，允许客户端和代理在交互中附加额外的元数据。实现不得对这些键的值做出假设。

  查看协议文档：[Extensibility](/protocol/extensibility)
</ResponseField>

<ResponseField name="hint" type={"string"} required>
  当输入尚未提供时显示的提示
</ResponseField>
