{"meta":{"title":"流式处理会话事件","intro":"Copilot 代理执行的每个操作——思考、编写代码、运行工具——都会以 session 事件 的形式发出，供你订阅。 本指南是每个事件类型的字段级参考，因此你确切地知道在未读取 SDK 源的情况下预期的数据。","product":"GitHub Copilot","breadcrumbs":[{"href":"/zh/enterprise-cloud@latest/copilot","title":"GitHub Copilot"},{"href":"/zh/enterprise-cloud@latest/copilot/how-tos","title":"操作方法"},{"href":"/zh/enterprise-cloud@latest/copilot/how-tos/copilot-sdk","title":"Copilot SDK"},{"href":"/zh/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features","title":"功能"},{"href":"/zh/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/streaming-events","title":"流式处理事件"}],"documentType":"article"},"body":"# 流式处理会话事件\n\nCopilot 代理执行的每个操作——思考、编写代码、运行工具——都会以 session 事件 的形式发出，供你订阅。 本指南是每个事件类型的字段级参考，因此你确切地知道在未读取 SDK 源的情况下预期的数据。\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n## 概述\n\n对会话设置 `streaming: true` 时，SDK 会实时发出**临时**事件（增量、进度更新）以及**持久**事件（完整的消息、工具结果）。 所有事件共享一个公用信封，并携带一个载荷，其形状取决于事件 `data`。\n\n![关系图：显示描述的过程的序列图。](/assets/images/help/copilot/copilot-sdk/features-streaming-events-diagram-0.png)\n\n| 概念               | Description                              |\n| ---------------- | ---------------------------------------- |\n| **临时事件**         | 瞬时; 实时流传，但不持久保存到会话日志。 会话恢复时未重播。          |\n| **持久化事件**        | 保存到磁盘上的会话事件日志。 恢复会话时重播。                  |\n| **Delta 事件**     | 临时流式处理块（文本或推理）。 累积增量以生成完整内容。             |\n| **`parentId` 链** | 每个事件的 `parentId` 都指向上一个事件，形成一个可以遍历的链接列表。 |\n\n## 事件封装\n\n无论类型如何，每个会话事件都包含以下字段：\n\n| 领域                                    | 类型               | Description                         |\n| ------------------------------------- | ---------------- | ----------------------------------- |\n| `id`                                  |                  |                                     |\n| `string` （UUID v4）                    | 唯一事件标识符          |                                     |\n| `timestamp`                           |                  |                                     |\n| `string` （ISO 8601）                   | 创建事件时            |                                     |\n| `parentId`                            | `string \\| null` | 链中上一个事件的 ID；对于第一个事件使用 `null`        |\n| `agentId`                             | `string?`        | 由子代理发起的事件的子代理实例 ID；在根/主代理和会话级事件中不存在 |\n| `ephemeral`                           | `boolean?`       |                                     |\n| `true`（适用于临时事件）；缺失或 `false`（适用于持久化事件） |                  |                                     |\n| `type`                                | `string`         | 事件类型鉴别器（请参阅下表）                      |\n| `data`                                | `object`         | 特定于事件的有效负载                          |\n\n## 订阅事件\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\n// All events\nsession.on((event) => {\n    console.log(event.type, event.data);\n});\n\n// Specific event type — data is narrowed automatically\nsession.on(\"assistant.message_delta\", (event) => {\n    process.stdout.write(event.data.deltaContent);\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nfrom copilot.session_events import SessionEventType\n\ndef handle(event):\n    if event.type == SessionEventType.ASSISTANT_MESSAGE_DELTA:\n        print(event.data.delta_content, end=\"\", flush=True)\n\nsession.on(handle)\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n```golang\nsession.On(func(event copilot.SessionEvent) {\n    if d, ok := event.Data.(*copilot.AssistantMessageDeltaData); ok {\n        fmt.Print(d.DeltaContent)\n    }\n})\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nsession.On<SessionEvent>(evt =>\n{\n    if (evt is AssistantMessageDeltaEvent delta)\n    {\n        Console.Write(delta.Data.DeltaContent);\n    }\n});\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"java\" data-label=\"Java\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Java</div>\n\n<!-- docs-validate: skip -->\n\n```java\n// All events\nsession.on(event -> System.out.println(event.getType()));\n\n// Specific event type — data is narrowed to the matching class\nsession.on(AssistantMessageDeltaEvent.class, event ->\n    System.out.print(event.getData().deltaContent())\n);\n```\n\n</div>\n\n</div>\n\n> \\[!TIP]\n> **（Python/Go）** 这些 SDK 使用单独的每个事件数据类型（例如`AssistantMessageDeltaData`），因此每个类型上仅存在相关字段。\n>\n> \\[!TIP]\n> **（.NET）** .NET SDK 为每个事件使用单独的强类型数据类（例如，`AssistantMessageDeltaData`），因此每个类型上仅存在相关字段。\n>\n> \\[!TIP]\n> **(TypeScript)** TypeScript SDK 使用可区分的联合 - 当你根据 `event.type` 匹配时，`data` 有效负载会自动缩小到正确的形状。\n\n## 仅显示父代理响应\n\n子代理事件共享父会话流，并包括信封级别的 `agentId`。 根代理/主代理事件和会话级事件会省略 `agentId`，因此主聊天渲染器可以忽略已设置 `agentId` 的助手事件，并将这些事件转而路由到跟踪界面或进度界面。\n\n<div class=\"ghd-codetabs\">\n<div class=\"ghd-codetab\" data-lang=\"typescript\" data-label=\"TypeScript\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">TypeScript</div>\n\n```typescript\nimport type { CopilotSession } from \"@github/copilot-sdk\";\n\nexport function subscribeParentResponse(session: CopilotSession): void {\n    session.on(\"assistant.message_delta\", (event) => {\n        if (!event.agentId) {\n            process.stdout.write(event.data.deltaContent);\n        }\n    });\n}\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"python\" data-label=\"Python\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Python</div>\n\n```python\nfrom copilot import CopilotSession, SessionEvent, SessionEventType\nfrom copilot.session_events import AssistantMessageDeltaData\n\ndef subscribe_parent_response(session: CopilotSession) -> None:\n    def handle(event: SessionEvent) -> None:\n        if event.type == SessionEventType.ASSISTANT_MESSAGE_DELTA and event.agent_id is None:\n            data = event.data\n            if isinstance(data, AssistantMessageDeltaData):\n                print(data.delta_content, end=\"\", flush=True)\n\n    session.on(handle)\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"go\" data-label=\"Go\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Go</div>\n\n```golang\npackage example\n\nimport (\n    \"fmt\"\n\n    copilot \"github.com/github/copilot-sdk/go\"\n)\n\nfunc subscribeParentResponse(session *copilot.Session) {\n    session.On(func(event copilot.SessionEvent) {\n        if event.AgentID != nil {\n            return\n        }\n\n        if d, ok := event.Data.(*copilot.AssistantMessageDeltaData); ok {\n            fmt.Print(d.DeltaContent)\n        }\n    })\n}\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"dotnet\" data-label=\".NET\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">.NET</div>\n\n```csharp\nusing System;\nusing GitHub.Copilot;\n\nstatic class ParentAgentResponseExample\n{\n    public static void SubscribeParentResponse(CopilotSession session)\n    {\n        session.On<AssistantMessageDeltaEvent>(evt =>\n        {\n            if (evt.AgentId is null)\n            {\n                Console.Write(evt.Data.DeltaContent);\n            }\n        });\n    }\n}\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"java\" data-label=\"Java\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Java</div>\n\n```java\nimport com.github.copilot.CopilotSession;\nimport com.github.copilot.generated.AssistantMessageDeltaEvent;\n\nfinal class ParentAgentResponseExample {\n    static void subscribeParentResponse(CopilotSession session) {\n        session.on(AssistantMessageDeltaEvent.class, event -> {\n            if (event.getAgentId() == null) {\n                System.out.print(event.getData().deltaContent());\n            }\n        });\n    }\n}\n```\n\n</div>\n\n<div class=\"ghd-codetab\" data-lang=\"rust\" data-label=\"Rust\"><div class=\"ghd-codetab-fallback-label\" role=\"heading\" aria-level=\"3\">Rust</div>\n\n```rust\nuse github_copilot_sdk::session::Session;\n\nasync fn subscribe_parent_response(session: &Session) {\n    let mut events = session.subscribe();\n\n    while let Ok(event) = events.recv().await {\n        if event.event_type == \"assistant.message_delta\" && event.agent_id.is_none() {\n            if let Some(delta) = event.data.get(\"deltaContent\").and_then(|v| v.as_str()) {\n                print!(\"{delta}\");\n            }\n        }\n    }\n}\n```\n\n</div>\n\n</div>\n\n## 助理活动\n\n这些事件会跟踪代理的响应生命周期 - 从轮次开始，经过流式处理块，直到最终消息。\n\n### `assistant.turn_start`\n\n代理开始处理轮次时已发出。\n\n| 数据字段               | 类型       | 必需 | Description         |\n| ------------------ | -------- | -- | ------------------- |\n| `turnId`           | `string` | ✅  | 轮次标识符（通常是字符串化的轮次编号） |\n| `interactionId`    | `string` |    |                     |\n| 用于遥测关联的 CAPI 交互 ID |          |    |                     |\n\n### `assistant.intent`\n\n短暂。 代理当前正在执行的操作的简短描述，随着其工作的进行而更新。\n\n| 数据字段     | 类型       | 必需 | Description        |\n| -------- | -------- | -- | ------------------ |\n| `intent` | `string` | ✅  | 人类可读的意图（例如“浏览代码库”） |\n\n### `assistant.reasoning`\n\n从模型中得出完整的扩展思维定式。 推理完成后发出。\n\n| 数据字段          | 类型       | 必需 | Description |\n| ------------- | -------- | -- | ----------- |\n| `reasoningId` | `string` | ✅  | 此推理块的唯一标识符  |\n| `content`     | `string` | ✅  | 完整的扩展思维文本   |\n\n### `assistant.reasoning_delta`\n\n短暂。 实时流式处理的模型扩展思维增量区块。\n\n| 数据字段           | 类型       | 必需 | Description                    |\n| -------------- | -------- | -- | ------------------------------ |\n| `reasoningId`  | `string` | ✅  | 匹配相应的 `assistant.reasoning` 事件 |\n| `deltaContent` | `string` | ✅  | 要附加到推理内容的文本区块                  |\n\n### `assistant.message`\n\n此 LLM 调用的助手完整响应。 可能包括工具调用请求。\n\n| 数据字段                                   | 类型              | 必需 | Description |\n| -------------------------------------- | --------------- | -- | ----------- |\n| `messageId`                            | `string`        | ✅  | 此消息的唯一标识符   |\n| `content`                              | `string`        | ✅  | 助手的文本响应     |\n| `toolRequests`                         | `ToolRequest[]` |    |             |\n| 助理拟进行的工具调用（请参阅下文）                      |                 |    |             |\n| `reasoningOpaque`                      | `string`        |    |             |\n| 加密扩展思维（人类模型）：会话绑定                      |                 |    |             |\n| `reasoningText`                        | `string`        |    |             |\n| 扩展思维中的可读推理文本                           |                 |    |             |\n| `encryptedContent`                     | `string`        |    |             |\n| 加密推理内容（OpenAI 模型）：会话绑定                 |                 |    |             |\n| `phase`                                | `string`        |    |             |\n| 生成阶段（例如， `\"thinking\"` vs `\"response\"`） |                 |    |             |\n| `outputTokens`                         | `number`        |    |             |\n| 来自 API 响应的实际输出令牌计数                     |                 |    |             |\n| `interactionId`                        | `string`        |    |             |\n| 用于遥测的 CAPI 交互 ID                       |                 |    |             |\n| `parentToolCallId`                     | `string`        |    |             |\n| Deprecated. 使用信封层级 `agentId` 进行子代理归因   |                 |    |             |\n\n\\*\\*\n`ToolRequest` 领域：\\*\\*\n\n| 领域                        | 类型                       | 必需 | Description                            |\n| ------------------------- | ------------------------ | -- | -------------------------------------- |\n| `toolCallId`              | `string`                 | ✅  | 此工具调用的唯一 ID                            |\n| `name`                    | `string`                 | ✅  | 工具名称（例如， `\"bash\"`、 `\"edit\"`、 `\"grep\"`） |\n| `arguments`               | `object`                 |    |                                        |\n| 用于工具的解析参数                 |                          |    |                                        |\n| `type`                    | `\"function\" \\| \"custom\"` |    |                                        |\n| 调用类型；如果缺失，默认为`\"function\"` |                          |    |                                        |\n\n### `assistant.message_delta`\n\n短暂。 实时流式处理的助理文本响应的增量区块。\n\n| 数据字段                                 | 类型       | 必需 | Description                  |\n| ------------------------------------ | -------- | -- | ---------------------------- |\n| `messageId`                          | `string` | ✅  | 匹配相应的 `assistant.message` 事件 |\n| `deltaContent`                       | `string` | ✅  | 要追加到消息的文本片段                  |\n| `parentToolCallId`                   | `string` |    |                              |\n| Deprecated. 使用信封层级 `agentId` 进行子代理归因 |          |    |                              |\n\n### `assistant.turn_end`\n\n代理完成轮次时发出（所有工具执行完成，最终响应已传递）。\n\n| 数据字段     | 类型       | 必需 | Description                     |\n| -------- | -------- | -- | ------------------------------- |\n| `turnId` | `string` | ✅  | 匹配相应的 `assistant.turn_start` 事件 |\n\n### `assistant.usage`\n\n短暂。 单个 API 调用的令牌使用情况和成本信息。\n\n| 数据字段                                                             | 类型                                                                         | 必需 | Description           |\n| ---------------------------------------------------------------- | -------------------------------------------------------------------------- | -- | --------------------- |\n| `model`                                                          | `string`                                                                   | ✅  | 模型标识符（例如 `\"gpt-5.4\"`） |\n| `inputTokens`                                                    | `number`                                                                   |    |                       |\n| 消耗的输入令牌                                                          |                                                                            |    |                       |\n| `outputTokens`                                                   | `number`                                                                   |    |                       |\n| 生成的输出令牌                                                          |                                                                            |    |                       |\n| `reasoningTokens`                                                | `number`                                                                   |    |                       |\n| 用于推理/思维链的输出令牌（属于 `outputTokens` 的子集）                             |                                                                            |    |                       |\n| `cacheReadTokens`                                                | `number`                                                                   |    |                       |\n| 从提示缓存中读取的令牌                                                      |                                                                            |    |                       |\n| `cacheWriteTokens`                                               | `number`                                                                   |    |                       |\n| 写入提示缓存的令牌                                                        |                                                                            |    |                       |\n| `cacheExpiresAt`                                                 | `string`                                                                   |    |                       |\n| 此模型调用的提示缓存过期时的 ISO 8601 时间戳                                      |                                                                            |    |                       |\n| `contentFilterTriggered`                                         | `boolean`                                                                  |    |                       |\n| 响应是被内容筛选阻止还是被截断（`finish_reason === 'content_filter'`）            |                                                                            |    |                       |\n| `finishReason`                                                   | `string`                                                                   |    |                       |\n| 模型结束原因（例如：`\"stop\"`、`\"length\"`、`\"tool_calls\"`、`\"content_filter\"`） |                                                                            |    |                       |\n| `cost`                                                           | `number`                                                                   |    |                       |\n| 计费的模型乘数成本                                                        |                                                                            |    |                       |\n| `duration`                                                       | `number`                                                                   |    |                       |\n| API 调用持续时间（以毫秒为单位）                                               |                                                                            |    |                       |\n| `timeToFirstTokenMs`                                             | `number`                                                                   |    |                       |\n| 从请求发出到收到首个令牌的时间（流式延迟）                                            |                                                                            |    |                       |\n| `interTokenLatencyMs`                                            | `number`                                                                   |    |                       |\n| 连续令牌之间的平均延迟（流式处理吞吐量）                                             |                                                                            |    |                       |\n| `reasoningEffort`                                                | `string`                                                                   |    |                       |\n| 此次调用使用的推理工作量级别（例如：`\"low\"`、`\"medium\"`、`\"high\"`）                   |                                                                            |    |                       |\n| `initiator`                                                      | `string`                                                                   |    |                       |\n| 触发此次调用的原因（例如 `\"sub-agent\"`）；如果是用户发起的，则为空                         |                                                                            |    |                       |\n| `apiCallId`                                                      | `string`                                                                   |    |                       |\n| 提供程序的完成 ID（例如 `chatcmpl-abc123`）                                 |                                                                            |    |                       |\n| `serviceRequestId`                                               | `string`                                                                   |    |                       |\n| 用于关联 CAPI 日志的 Copilot 服务请求 ID（`x-copilot-service-request-id`）    |                                                                            |    |                       |\n| `apiEndpoint`                                                    | `\"/chat/completions\" \\| \"/v1/messages\" \\| \"/responses\" \\| \"ws:/responses\"` |    |                       |\n| 用于模型调用的 API 终结点;对于可观测性和成本归因非常有用。                                 |                                                                            |    |                       |\n| `ws:/responses` 是响应 API 的 Websocket 变体                           |                                                                            |    |                       |\n| `providerCallId`                                                 | `string`                                                                   |    |                       |\n| GitHub请求跟踪 ID （`x-github-request-id`）                            |                                                                            |    |                       |\n| `parentToolCallId`                                               | `string`                                                                   |    |                       |\n| Deprecated. 使用信封层级 `agentId` 进行子代理归因                             |                                                                            |    |                       |\n| `quotaSnapshots`                                                 | `Record<string, QuotaSnapshot>`                                            |    |                       |\n| 按配额标识符记录的每个配额的资源使用情况                                             |                                                                            |    |                       |\n| `copilotUsage`                                                   | `CopilotUsage`                                                             |    |                       |\n| API 中的分项令牌成本明细                                                   |                                                                            |    |                       |\n\n### `assistant.streaming_delta`\n\n短暂。 低级别网络进度指示器 - 从流式处理 API 响应接收的总字节数。\n\n| 数据字段                     | 类型       | 必需 | Description   |\n| ------------------------ | -------- | -- | ------------- |\n| `totalResponseSizeBytes` | `number` | ✅  | 到目前为止收到的累积字节数 |\n\n## 工具执行事件\n\n这些事件跟踪每个工具调用的完整生命周期，从模型请求工具调用到执行和结束。\n\n### `tool.execution_start`\n\n当工具开始执行时发出。\n\n| 数据字段                                 | 类型       | 必需 | Description                          |\n| ------------------------------------ | -------- | -- | ------------------------------------ |\n| `toolCallId`                         | `string` | ✅  | 此工具调用的唯一标识符                          |\n| `toolName`                           | `string` | ✅  | 工具的名称（例如，`\"bash\"`， `\"edit\"``\"grep\"`） |\n| `arguments`                          | `object` |    |                                      |\n| 传递给工具的已分析参数                          |          |    |                                      |\n| `mcpServerName`                      | `string` |    |                                      |\n| MCP 服务器名称，当 MCP 服务器提供该工具时            |          |    |                                      |\n| `mcpToolName`                        | `string` |    |                                      |\n| MCP 服务器上的原始工具名称                      |          |    |                                      |\n| `parentToolCallId`                   | `string` |    |                                      |\n| Deprecated. 使用信封层级 `agentId` 进行子代理归因 |          |    |                                      |\n\n### `tool.execution_partial_result`\n\n短暂。 运行中工具的增量输出（例如 bash 的流式输出）。\n\n| 数据字段            | 类型       | 必需 | Description                  |\n| --------------- | -------- | -- | ---------------------------- |\n| `toolCallId`    | `string` | ✅  | 匹配相应的 `tool.execution_start` |\n| `partialOutput` | `string` | ✅  | 增量输出区块                       |\n\n### `tool.execution_progress`\n\n短暂。 由运行中的工具提供的人类可读的进度状态（例如 MCP 服务器进度通知）。\n\n| 数据字段              | 类型       | 必需 | Description                  |\n| ----------------- | -------- | -- | ---------------------------- |\n| `toolCallId`      | `string` | ✅  | 匹配相应的 `tool.execution_start` |\n| `progressMessage` | `string` | ✅  | 进度状态消息                       |\n\n### `tool.execution_complete`\n\n当工具完成执行时发出 — 成功或出错。\n\n| 数据字段                                 | 类型                   | 必需 | Description                  |\n| ------------------------------------ | -------------------- | -- | ---------------------------- |\n| `toolCallId`                         | `string`             | ✅  | 匹配相应的 `tool.execution_start` |\n| `success`                            | `boolean`            | ✅  | 执行是否成功                       |\n| `model`                              | `string`             |    |                              |\n| 生成此工具调用的模型                           |                      |    |                              |\n| `interactionId`                      | `string`             |    |                              |\n| CAPI 交互标识                            |                      |    |                              |\n| `isUserRequested`                    | `boolean`            |    |                              |\n|                                      |                      |    |                              |\n| `true` 当用户显式请求此工具调用时                 |                      |    |                              |\n| `result`                             | `Result`             |    |                              |\n| 成功时显示（请参阅下文）                         |                      |    |                              |\n| `error`                              | `{ message, code? }` |    |                              |\n| 失败时显示                                |                      |    |                              |\n| `toolTelemetry`                      | `object`             |    |                              |\n| 工具特定的遥测数据（例如，CodeQL 检查次数）            |                      |    |                              |\n| `parentToolCallId`                   | `string`             |    |                              |\n| Deprecated. 使用信封层级 `agentId` 进行子代理归因 |                      |    |                              |\n\n\\*\\*\n`Result` 领域：\\*\\*\n\n| 领域                     | 类型               | 必需 | Description              |\n| ---------------------- | ---------------- | -- | ------------------------ |\n| `content`              | `string`         | ✅  | 发送给 LLM 的简明结果（可能为令牌效率截断） |\n| `detailedContent`      | `string`         |    |                          |\n| 显示的完整结果，保留差异等完整内容      |                  |    |                          |\n| `contents`             | `ContentBlock[]` |    |                          |\n| 结构化内容块（文本、终端、图像、音频、资源） |                  |    |                          |\n\n### `tool.user_requested`\n\n当用户显式请求工具调用（而不是由模型选择调用时）发出。\n\n| 数据字段         | 类型       | 必需 | Description |\n| ------------ | -------- | -- | ----------- |\n| `toolCallId` | `string` | ✅  | 此工具调用的唯一标识符 |\n| `toolName`   | `string` | ✅  | 用户要调用的工具的名称 |\n| `arguments`  | `object` |    |             |\n| 函数调用的参数      |          |    |             |\n\n## 会话生命周期事件\n\n### `session.idle`\n\n短暂。 代理已完成所有处理，并已准备好下一条消息。 这是转弯已完全完成的信号。\n\n| 数据字段            | 类型        | 必需 | Description |\n| --------------- | --------- | -- | ----------- |\n| `aborted`       | `boolean` |    |             |\n| 当前一轮通过中止信号取消时为真 |           |    |             |\n\n### `session.error`\n\n会话处理期间出错。\n\n| 数据字段                       | 类型       | 必需 | Description                                           |\n| -------------------------- | -------- | -- | ----------------------------------------------------- |\n| `errorType`                | `string` | ✅  | 错误类别（例如，`\"authentication\"`、、 `\"quota\"``\"rate_limit\"`） |\n| `message`                  | `string` | ✅  | 用户可读的错误消息                                             |\n| `stack`                    | `string` |    |                                                       |\n| 错误堆栈跟踪                     |          |    |                                                       |\n| `statusCode`               | `number` |    |                                                       |\n| 来自上游请求的 HTTP 状态代码          |          |    |                                                       |\n| `providerCallId`           | `string` |    |                                                       |\n| 用于服务器端日志关联的 GitHub 请求跟踪 ID |          |    |                                                       |\n\n### `session.compaction_start`\n\n上下文窗口压缩已经开始。\n**数据有效负载为空 （`{}`）** 。\n\n### `session.compaction_complete`\n\n上下文窗口压缩已完成。\n\n| 数据字段                          | 类型                               | 必需 | Description |\n| ----------------------------- | -------------------------------- | -- | ----------- |\n| `success`                     | `boolean`                        | ✅  | 压缩是否成功      |\n| `error`                       | `string`                         |    |             |\n| 压缩失败时出现错误消息                   |                                  |    |             |\n| `preCompactionTokens`         | `number`                         |    |             |\n| 压缩前的令牌                        |                                  |    |             |\n| `postCompactionTokens`        | `number`                         |    |             |\n| 压缩后的令牌                        |                                  |    |             |\n| `preCompactionMessagesLength` | `number`                         |    |             |\n| 压缩前的消息计数                      |                                  |    |             |\n| `messagesRemoved`             | `number`                         |    |             |\n| 已删除邮件                         |                                  |    |             |\n| `tokensRemoved`               | `number`                         |    |             |\n| 已删除令牌                         |                                  |    |             |\n| `summaryContent`              | `string`                         |    |             |\n| LLM 生成的压缩历史记录摘要               |                                  |    |             |\n| `checkpointNumber`            | `number`                         |    |             |\n| 为恢复创建的检查点快照编号                 |                                  |    |             |\n| `checkpointPath`              | `string`                         |    |             |\n| 存储检查点的文件路径                    |                                  |    |             |\n| `compactionTokensUsed`        | `{ input, output, cachedInput }` |    |             |\n| 压缩LLM调用中的令牌使用情况               |                                  |    |             |\n| `requestId`                   | `string`                         |    |             |\n| GitHub 请求跟踪 ID（用于压缩调用）        |                                  |    |             |\n\n### `session.title_changed`\n\n短暂。 会话自动生成的标题已更新。\n\n| 数据字段    | 类型       | 必需 | Description |\n| ------- | -------- | -- | ----------- |\n| `title` | `string` | ✅  | 新会话标题       |\n\n### `session.context_changed`\n\n会话的工作目录或存储库上下文已更改。\n\n| 数据字段                  | 类型       | 必需 | Description |\n| --------------------- | -------- | -- | ----------- |\n| `cwd`                 | `string` | ✅  | 当前工作目录      |\n| `gitRoot`             | `string` |    |             |\n| Git 存储库根目录            |          |    |             |\n| `repository`          | `string` |    |             |\n|                       |          |    |             |\n| `\"owner/name\"` 格式的存储库 |          |    |             |\n| `branch`              | `string` |    |             |\n| 当前 Git 分支             |          |    |             |\n\n### `session.usage_info`\n\n短暂。 上下文窗口利用率快照。\n\n| 数据字段             | 类型       | 必需 | Description   |\n| ---------------- | -------- | -- | ------------- |\n| `tokenLimit`     | `number` | ✅  | 模型上下文窗口的最大标记数 |\n| `currentTokens`  | `number` | ✅  | 上下文窗口中的当前标记   |\n| `messagesLength` | `number` | ✅  | 对话中的当前消息计数    |\n\n### `session.session_limits_changed`\n\n当前会计窗口的会话限制已更改。 值 `null``sessionLimits` 表示没有活动限制。\n\n| 数据字段                         | 类型                            | 必需 | Description                  |\n| ---------------------------- | ----------------------------- | -- | ---------------------------- |\n| `sessionLimits`              | `SessionLimitsConfig \\| null` | ✅  | 当前会话限制；如果当前没有生效的限制，则为 `null` |\n| `sessionLimits.maxAiCredits` | `number`                      |    |                              |\n| 当前会话计费窗口内允许的最大 AI 积分         |                               |    |                              |\n\n### `session.usage_checkpoint`\n\n用于在会话恢复时重建计费信息的持久累计使用量检查点。\n\n| 数据字段                   | 类型       | 必需 | Description                 |\n| ---------------------- | -------- | -- | --------------------------- |\n| `totalNanoAiu`         | `number` | ✅  | 检查点时整个会话范围内累计的 nano-AI 单位成本 |\n| `totalPremiumRequests` | `number` |    |                             |\n| 检查点时使用的高级 API 请求总数     |          |    |                             |\n\n### `session.task_complete`\n\n代理已完成其分配的任务。\n\n| 数据字段      | 类型       | 必需 | Description |\n| --------- | -------- | -- | ----------- |\n| `summary` | `string` |    |             |\n| 已完成任务的摘要  |          |    |             |\n\n### `session.shutdown`\n\n会话已结束。\n\n| 数据字段                              | 类型                                            | 必需 | Description          |\n| --------------------------------- | --------------------------------------------- | -- | -------------------- |\n| `shutdownType`                    | `\"routine\" \\| \"error\"`                        | ✅  | 正常关闭或崩溃              |\n| `errorReason`                     | `string`                                      |    |                      |\n|                                   |                                               |    |                      |\n| `shutdownType` 为 `\"error\"` 时的错误描述 |                                               |    |                      |\n| `totalPremiumRequests`            | `number`                                      | ✅  | 使用的高级 API 请求总数       |\n| `totalApiDurationMs`              | `number`                                      | ✅  | 累积 API 调用时间（以毫秒为单位）  |\n| `sessionStartTime`                | `number`                                      | ✅  | 会话启动时的 Unix 时间戳 （ms） |\n| `codeChanges`                     | `{ linesAdded, linesRemoved, filesModified }` | ✅  | 代码更改的聚合指标            |\n| `modelMetrics`                    | `Record<string, ModelMetric>`                 | ✅  | 按模型使用情况细分            |\n| `currentModel`                    | `string`                                      |    |                      |\n| 关闭时选择的模型                          |                                               |    |                      |\n\n## 权限和用户输入事件\n\n在继续操作之前，当代理需要用户批准或输入时，将发出这些事件。\n\n### `permission.requested`\n\n代理需要权限才能执行操作（运行命令、写入文件等）。\n\n| 数据字段                | 类型                  | 必需 | Description                                  |\n| ------------------- | ------------------- | -- | -------------------------------------------- |\n| `requestId`         | `string`            | ✅  | 使用该功能通过 `session.respondToPermission()` 进行响应 |\n| `permissionRequest` | `PermissionRequest` | ✅  | 正在请求的权限的详细信息                                 |\n\n`permissionRequest` 是 `kind` 上的可区分联合：\n\n| `kind`                                                       | 关键字段        | Description |\n| ------------------------------------------------------------ | ----------- | ----------- |\n| `\"shell\"`                                                    |             |             |\n| `fullCommandText`、`intention`、`commands[]`、`possiblePaths[]` | 执行 shell 命令 |             |\n| `\"write\"`                                                    |             |             |\n| `fileName`、`diff`、`intention`、`newFileContents?`             | 写入/修改文件     |             |\n| `\"read\"`                                                     |             |             |\n| `path`、`intention`                                           | 读取文件或目录     |             |\n| `\"mcp\"`                                                      |             |             |\n| `serverName`、`toolName`、`toolTitle`、`args?`、`readOnly`       | 调用 MCP 工具   |             |\n| `\"url\"`                                                      |             |             |\n| `url`、`intention`                                            | 获取 URL      |             |\n| `\"memory\"`                                                   |             |             |\n| `subject`、`fact`、`citations`                                 | 存储记忆        |             |\n| `\"custom-tool\"`                                              |             |             |\n| `toolName`、`toolDescription`、`args?`                         | 调用自定义工具     |             |\n\n所有 `kind` 变体均包含一个可选的 `toolCallId` 链接，其指向触发请求的工具调用。\n\n### `permission.completed`\n\n权限请求已解决。\n\n| 数据字段          | 类型       | 必需 | Description                                                                                                                                                               |\n| ------------- | -------- | -- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `requestId`   | `string` | ✅  | 匹配相应的 `permission.requested`                                                                                                                                              |\n| `result.kind` | `string` | ✅  | 其中之一：`\"approved\"`、、`\"denied-by-rules\"``\"denied-interactively-by-user\"`、`\"denied-no-approval-rule-and-could-not-request-from-user\"`、`\"denied-by-content-exclusion-policy\"` |\n\n### `user_input.requested`\n\n短暂。 代理正在向用户提问。\n\n| 数据字段            | 类型         | 必需 | Description                                 |\n| --------------- | ---------- | -- | ------------------------------------------- |\n| `requestId`     | `string`   | ✅  | 使用该功能通过 `session.respondToUserInput()` 进行响应 |\n| `question`      | `string`   | ✅  | 向用户呈现的问题                                    |\n| `choices`       | `string[]` |    |                                             |\n| 用户的预定义选项        |            |    |                                             |\n| `allowFreeform` | `boolean`  |    |                                             |\n| 是否允许自由格式文本输入    |            |    |                                             |\n\n### `user_input.completed`\n\n短暂。 解决了用户输入请求。\n\n| 数据字段        | 类型       | 必需 | Description                  |\n| ----------- | -------- | -- | ---------------------------- |\n| `requestId` | `string` | ✅  | 匹配相应的 `user_input.requested` |\n\n### `elicitation.requested`\n\n短暂。 代理需要用户（MCP 引证协议）的结构化表单输入。\n\n| 数据字段               | 类型                                          | 必需 | Description                                   |\n| ------------------ | ------------------------------------------- | -- | --------------------------------------------- |\n| `requestId`        | `string`                                    | ✅  | 使用该功能通过 `session.respondToElicitation()` 进行响应 |\n| `message`          | `string`                                    | ✅  | 所需信息的说明                                       |\n| `mode`             | `\"form\"`                                    |    |                                               |\n| 启发模式（当前仅 `\"form\"`） |                                             |    |                                               |\n| `requestedSchema`  | `{ type: \"object\", properties, required? }` | ✅  | 描述窗体字段的 JSON 架构                               |\n\n### `elicitation.completed`\n\n短暂。 启发请求已解决。\n\n| 数据字段        | 类型       | 必需 | Description                   |\n| ----------- | -------- | -- | ----------------------------- |\n| `requestId` | `string` | ✅  | 匹配相应的 `elicitation.requested` |\n\n## 子代理和技能事件\n\n### `subagent.started`\n\n自定义代理被调用为子代理。\n\n| 数据字段                | 类型       | 必需 | Description  |\n| ------------------- | -------- | -- | ------------ |\n| `toolCallId`        | `string` | ✅  | 生成此子代理的父工具调用 |\n| `agentName`         | `string` | ✅  | 子代理的内部名称     |\n| `agentDisplayName`  | `string` | ✅  | 人工可读的显示名称    |\n| `agentDescription`  | `string` | ✅  | 子代理的作用说明     |\n| `model`             | `string` |    |              |\n| 如果在开始时已知，子智能体将使用的模型 |          |    |              |\n\n### `subagent.completed`\n\n子代理成功完成。\n\n| 数据字段               | 类型       | 必需 | Description              |\n| ------------------ | -------- | -- | ------------------------ |\n| `toolCallId`       | `string` | ✅  | 匹配相应的 `subagent.started` |\n| `agentName`        | `string` | ✅  | 内部名称                     |\n| `agentDisplayName` | `string` | ✅  | 显示名称                     |\n| `model`            | `string` |    |                          |\n| 子代理使用的模型           |          |    |                          |\n| `durationMs`       | `number` |    |                          |\n| 时钟执行持续时间（以毫秒为单位）   |          |    |                          |\n| `totalTokens`      | `number` |    |                          |\n| 使用的输入和输出令牌总数       |          |    |                          |\n| `totalToolCalls`   | `number` |    |                          |\n| 工具调用总次数            |          |    |                          |\n\n### `subagent.failed`\n\n子代理遇到错误。\n\n| 数据字段               | 类型       | 必需 | Description              |\n| ------------------ | -------- | -- | ------------------------ |\n| `toolCallId`       | `string` | ✅  | 匹配相应的 `subagent.started` |\n| `agentName`        | `string` | ✅  | 内部名称                     |\n| `agentDisplayName` | `string` | ✅  | 显示名称                     |\n| `error`            | `string` | ✅  | 错误消息                     |\n| `model`            | `string` |    |                          |\n| 为子代理选择的模型（如果已知）    |          |    |                          |\n| `durationMs`       | `number` |    |                          |\n| 时钟执行持续时间（以毫秒为单位）   |          |    |                          |\n| `totalTokens`      | `number` |    |                          |\n| 失败前使用的输入和输出令牌总数    |          |    |                          |\n| `totalToolCalls`   | `number` |    |                          |\n| 失败前的工具调用总数         |          |    |                          |\n\n### `subagent.selected`\n\n已选择自定义代理（推断）来处理当前请求。\n\n| 数据字段               | 类型                 | 必需 | Description                |\n| ------------------ | ------------------ | -- | -------------------------- |\n| `agentName`        | `string`           | ✅  | 所选代理的内部名称                  |\n| `agentDisplayName` | `string`           | ✅  | 显示名称                       |\n| `tools`            | `string[] \\| null` | ✅  | 此代理可用的工具名称; `null` 适用于所有工具 |\n\n### `subagent.deselected`\n\n取消了自定义代理的选择，返回到默认代理。\n**数据有效负载为空 （`{}`）** 。\n\n### `skill.invoked`\n\n为当前对话激活了技能。\n\n| 数据字段              | 类型         | 必需 | Description      |\n| ----------------- | ---------- | -- | ---------------- |\n| `name`            | `string`   | ✅  | 技能名称             |\n| `path`            | `string`   | ✅  | SKILL.md 定义的文件路径 |\n| `content`         | `string`   | ✅  | 将完整的技能内容注入到对话中   |\n| `allowedTools`    | `string[]` |    |                  |\n| 此技能处于活动状态时自动批准的工具 |            |    |                  |\n| `pluginName`      | `string`   |    |                  |\n| 技能的来源插件           |            |    |                  |\n| `pluginVersion`   | `string`   |    |                  |\n| 插件版本              |            |    |                  |\n\n## 其他事件\n\n### `abort`\n\n当前轮次已中止。\n\n| 数据字段     | 类型       | 必需 | Description                       |\n| -------- | -------- | -- | --------------------------------- |\n| `reason` | `string` | ✅  | 为什么轮次被中止 （例如， `\"user initiated\"`） |\n\n### `user.message`\n\n用户发送了一条消息。 已针对会话时间线进行记录。\n\n| 数据字段                                                  | 类型             | 必需 | Description |\n| ----------------------------------------------------- | -------------- | -- | ----------- |\n| `content`                                             | `string`       | ✅  | 用户的消息内容     |\n| `transformedContent`                                  | `string`       |    |             |\n| 预处理后的转换版本                                             |                |    |             |\n| `attachments`                                         | `Attachment[]` |    |             |\n| 文件、目录、选定内容、Blob 或 GitHub 引用附件                         |                |    |             |\n| `source`                                              | `string`       |    |             |\n| 消息源标识符                                                |                |    |             |\n| `agentMode`                                           | `string`       |    |             |\n| 代理模式：`\"interactive\"`、、`\"plan\"``\"autopilot\"`或`\"shell\"` |                |    |             |\n| `interactionId`                                       | `string`       |    |             |\n| CAPI 交互标识                                             |                |    |             |\n\n### `system.message`\n\n系统或开发人员提示已注入对话。\n\n| 数据字段       | 类型                               | 必需 | Description |\n| ---------- | -------------------------------- | -- | ----------- |\n| `content`  | `string`                         | ✅  | 提示文本        |\n| `role`     | `\"system\" \\| \"developer\"`        | ✅  | 消息角色        |\n| `name`     | `string`                         |    |             |\n| 源标识符       |                                  |    |             |\n| `metadata` | `{ promptVersion?, variables? }` |    |             |\n| 提示模板元数据    |                                  |    |             |\n\n### `external_tool.requested`\n\n代理想要调用外部工具（由 SDK 使用者提供）。\n\n| 数据字段         | 类型       | 必需 | Description                                    |\n| ------------ | -------- | -- | ---------------------------------------------- |\n| `requestId`  | `string` | ✅  | 使用该功能通过 `session.respondToExternalTool()` 进行响应 |\n| `sessionId`  | `string` | ✅  | 此请求所属的会话                                       |\n| `toolCallId` | `string` | ✅  | 此调用的工具 ID                                      |\n| `toolName`   | `string` | ✅  | 外部工具的名称                                        |\n| `arguments`  | `object` |    |                                                |\n| 工具参数         |          |    |                                                |\n\n### `external_tool.completed`\n\n解决了外部工具请求。\n\n| 数据字段        | 类型       | 必需 | Description                     |\n| ----------- | -------- | -- | ------------------------------- |\n| `requestId` | `string` | ✅  | 匹配相应的 `external_tool.requested` |\n\n### `exit_plan_mode.requested`\n\n短暂。 代理已创建计划并想要退出计划模式。\n\n| 数据字段                | 类型         | 必需 | Description                                    |\n| ------------------- | ---------- | -- | ---------------------------------------------- |\n| `requestId`         | `string`   | ✅  | 使用该功能通过 `session.respondToExitPlanMode()` 进行响应 |\n| `summary`           | `string`   | ✅  | 计划摘要                                           |\n| `planContent`       | `string`   | ✅  | 完整计划文件内容                                       |\n| `actions`           | `string[]` | ✅  | 可用的用户操作（例如批准、编辑、拒绝）                            |\n| `recommendedAction` | `string`   | ✅  | 建议的操作                                          |\n\n### `exit_plan_mode.completed`\n\n短暂。 已解决退出计划模式请求。\n\n| 数据字段        | 类型       | 必需 | Description                      |\n| ----------- | -------- | -- | -------------------------------- |\n| `requestId` | `string` | ✅  | 匹配相应的 `exit_plan_mode.requested` |\n\n### `command.queued`\n\n短暂。 斜杠命令已排队执行。\n\n| 数据字段        | 类型       | 必需 | Description                                     |\n| ----------- | -------- | -- | ----------------------------------------------- |\n| `requestId` | `string` | ✅  | 使用该功能通过 `session.respondToQueuedCommand()` 进行响应 |\n| `command`   | `string` | ✅  | 斜杠命令文本（例如， `/help``/clear`）                     |\n\n### `command.completed`\n\n短暂。 排队的命令已解决。\n\n| 数据字段        | 类型       | 必需 | Description            |\n| ----------- | -------- | -- | ---------------------- |\n| `requestId` | `string` | ✅  | 匹配相应的 `command.queued` |\n\n### `session_limits_exhausted.requested`\n\n短暂。 当前会话预算已用尽，运行时需要在继续之前做出用户决策。\n\n| 数据字段            | 类型       | 必需 | Description            |\n| --------------- | -------- | -- | ---------------------- |\n| `requestId`     | `string` | ✅  | 在响应待处理的限额耗尽请求时，请使用此 ID |\n| `maxAiCredits`  | `number` | ✅  | 为当前会计窗口配置了最大 AI 信用额度   |\n| `usedAiCredits` | `number` | ✅  | 当前计费周期内已消耗的 AI 点数      |\n\n### `session_limits_exhausted.completed`\n\n短暂。 一个待处理的超限请求已解决。\n\n| 数据字段                                            | 类型                                      | 必需 | Description                                   |\n| ----------------------------------------------- | --------------------------------------- | -- | --------------------------------------------- |\n| `requestId`                                     | `string`                                | ✅  | 匹配相应的 `session_limits_exhausted.requested` 事件 |\n| `response.action`                               | `\"add\" \\| \"set\" \\| \"unset\" \\| \"cancel\"` | ✅  | 为已用尽限制请求选择的操作                                 |\n| `response.additionalAiCredits`                  | `number`                                |    |                                               |\n| 要添加到当前最大值的 AI 积分，如果 `response.action` 为 `\"add\"` |                                         |    |                                               |\n| `response.maxAiCredits`                         | `number`                                |    |                                               |\n| 当 `response.action` 为 `\"set\"` 时，AI 积分的绝对最大上限    |                                         |    |                                               |\n\n## 快速参考：智能回合流程\n\n典型的代理行为轮次按以下顺序触发事件：\n\n```text\nassistant.turn_start          → Turn begins\n├── assistant.intent          → What the agent plans to do (ephemeral)\n├── assistant.reasoning_delta → Streaming thinking chunks (ephemeral, repeated)\n├── assistant.reasoning       → Complete thinking block\n├── assistant.message_delta   → Streaming response chunks (ephemeral, repeated)\n├── assistant.message         → Complete response (may include toolRequests)\n├── assistant.usage           → Token usage for this API call (ephemeral)\n│\n├── [If tools were requested:]\n│   ├── permission.requested  → Needs user approval\n│   ├── permission.completed  → Approval result\n│   ├── tool.execution_start  → Tool begins\n│   ├── tool.execution_partial_result  → Streaming tool output (ephemeral, repeated)\n│   ├── tool.execution_progress        → Progress updates (ephemeral, repeated)\n│   ├── tool.execution_complete        → Tool finished\n│   │\n│   └── [Agent loops: more reasoning → message → tool calls...]\n│\nassistant.turn_end            → Turn complete\nsession.idle                  → Ready for next message (ephemeral)\n```\n\n## 所有事件类型一目了然\n\n此表列出了关键 `data` 有效负载字段。 上面记录了常见的信封字段。\n\n| 事件类型                                                                                                | 临时              | 类别      | 关键数据字段                   |\n| --------------------------------------------------------------------------------------------------- | --------------- | ------- | ------------------------ |\n| `assistant.turn_start`                                                                              |                 |         |                          |\n| 助手                                                                                                  |                 |         |                          |\n| `turnId`、`interactionId?`                                                                           |                 |         |                          |\n| `assistant.intent`                                                                                  | ✅               | 助手      | `intent`                 |\n| `assistant.reasoning`                                                                               |                 |         |                          |\n| 助手                                                                                                  |                 |         |                          |\n| `reasoningId`、`content`                                                                             |                 |         |                          |\n| `assistant.reasoning_delta`                                                                         | ✅               | 助手      |                          |\n| `reasoningId`、`deltaContent`                                                                        |                 |         |                          |\n| `assistant.streaming_delta`                                                                         | ✅               | 助手      | `totalResponseSizeBytes` |\n| `assistant.message`                                                                                 |                 |         |                          |\n| 助手                                                                                                  |                 |         |                          |\n| `messageId`、`content`、`toolRequests?`、`outputTokens?`、`phase?`                                      |                 |         |                          |\n| `assistant.message_delta`                                                                           | ✅               | 助手      |                          |\n| `messageId`、`deltaContent`                                                                          |                 |         |                          |\n| `assistant.turn_end`                                                                                |                 |         |                          |\n| 助手                                                                                                  | `turnId`        |         |                          |\n| `assistant.usage`                                                                                   | ✅               | 助手      |                          |\n| `model`、`apiEndpoint?`、`inputTokens?`、`outputTokens?`、`cost?`、`duration?`                           |                 |         |                          |\n| `tool.user_requested`                                                                               |                 |         |                          |\n| 工具                                                                                                  |                 |         |                          |\n| `toolCallId`、`toolName`、`arguments?`                                                                |                 |         |                          |\n| `tool.execution_start`                                                                              |                 |         |                          |\n| 工具                                                                                                  |                 |         |                          |\n| `toolCallId`、`toolName`、`arguments?`、`mcpServerName?`                                               |                 |         |                          |\n| `tool.execution_partial_result`                                                                     | ✅               | 工具      |                          |\n| `toolCallId`、`partialOutput`                                                                        |                 |         |                          |\n| `tool.execution_progress`                                                                           | ✅               | 工具      |                          |\n| `toolCallId`、`progressMessage`                                                                      |                 |         |                          |\n| `tool.execution_complete`                                                                           |                 |         |                          |\n| 工具                                                                                                  |                 |         |                          |\n| `toolCallId`、`success`、`result?`、`error?`                                                           |                 |         |                          |\n| `session.idle`                                                                                      | ✅               | Session | `aborted?`               |\n| `session.error`                                                                                     |                 |         |                          |\n| Session                                                                                             |                 |         |                          |\n| `errorType`、`message`、`statusCode?`                                                                 |                 |         |                          |\n| `session.compaction_start`                                                                          |                 |         |                          |\n| Session                                                                                             |                 |         |                          |\n| *（空）*                                                                                               |                 |         |                          |\n| `session.compaction_complete`                                                                       |                 |         |                          |\n| Session                                                                                             |                 |         |                          |\n| `success`、`preCompactionTokens?`、`summaryContent?`                                                  |                 |         |                          |\n| `session.title_changed`                                                                             | ✅               | Session | `title`                  |\n| `session.context_changed`                                                                           |                 |         |                          |\n| Session                                                                                             |                 |         |                          |\n| `cwd`、`gitRoot?`、`repository?`、`branch?`                                                            |                 |         |                          |\n| `session.usage_info`                                                                                | ✅               | Session |                          |\n| `tokenLimit`、`currentTokens`、`messagesLength`                                                       |                 |         |                          |\n| `session.session_limits_changed`                                                                    |                 |         |                          |\n| Session                                                                                             | `sessionLimits` |         |                          |\n| `session.usage_checkpoint`                                                                          |                 |         |                          |\n| Session                                                                                             |                 |         |                          |\n| `totalNanoAiu`、`totalPremiumRequests?`                                                              |                 |         |                          |\n| `session.task_complete`                                                                             |                 |         |                          |\n| Session                                                                                             | `summary?`      |         |                          |\n| `session.shutdown`                                                                                  |                 |         |                          |\n| Session                                                                                             |                 |         |                          |\n| `shutdownType`、`codeChanges`、`modelMetrics`                                                         |                 |         |                          |\n| `permission.requested`                                                                              |                 |         |                          |\n| 许可                                                                                                  |                 |         |                          |\n| `requestId`、`permissionRequest`                                                                     |                 |         |                          |\n| `permission.completed`                                                                              |                 |         |                          |\n| 许可                                                                                                  |                 |         |                          |\n| `requestId`、`result.kind`                                                                           |                 |         |                          |\n| `user_input.requested`                                                                              | ✅               | 用户输入    |                          |\n| `requestId`、`question`、`choices?`                                                                   |                 |         |                          |\n| `user_input.completed`                                                                              | ✅               | 用户输入    | `requestId`              |\n| `elicitation.requested`                                                                             | ✅               | 用户输入    |                          |\n| `requestId`、`message`、`requestedSchema`                                                             |                 |         |                          |\n| `elicitation.completed`                                                                             | ✅               | 用户输入    | `requestId`              |\n| `subagent.started`                                                                                  |                 |         |                          |\n| 子代理                                                                                                 |                 |         |                          |\n| `toolCallId`、`agentName`、`agentDisplayName`、`model?`                                                |                 |         |                          |\n| `subagent.completed`                                                                                |                 |         |                          |\n| 子代理                                                                                                 |                 |         |                          |\n| `toolCallId`、`agentName`、`agentDisplayName`、`model?`、`durationMs?`、`totalTokens?`、`totalToolCalls?` |                 |         |                          |\n| `subagent.failed`                                                                                   |                 |         |                          |\n| 子代理                                                                                                 |                 |         |                          |\n| `toolCallId`、`agentName`、`error`、`model?`、`durationMs?`、`totalTokens?`、`totalToolCalls?`            |                 |         |                          |\n| `subagent.selected`                                                                                 |                 |         |                          |\n| 子代理                                                                                                 |                 |         |                          |\n| `agentName`、`agentDisplayName`、`tools`                                                              |                 |         |                          |\n| `subagent.deselected`                                                                               |                 |         |                          |\n| 子代理                                                                                                 |                 |         |                          |\n| *（空）*                                                                                               |                 |         |                          |\n| `skill.invoked`                                                                                     |                 |         |                          |\n| 技能                                                                                                  |                 |         |                          |\n| `name`、`path`、`content`、`allowedTools?`                                                             |                 |         |                          |\n| `abort`                                                                                             |                 |         |                          |\n| 控件                                                                                                  | `reason`        |         |                          |\n| `user.message`                                                                                      |                 |         |                          |\n| User                                                                                                |                 |         |                          |\n| `content`、`attachments?`、`agentMode?`                                                               |                 |         |                          |\n| `system.message`                                                                                    |                 |         |                          |\n| 系统                                                                                                  |                 |         |                          |\n| `content`、`role`                                                                                    |                 |         |                          |\n| `external_tool.requested`                                                                           |                 |         |                          |\n| 外部工具                                                                                                |                 |         |                          |\n| `requestId`、`toolName`、`arguments?`                                                                 |                 |         |                          |\n| `external_tool.completed`                                                                           |                 |         |                          |\n| 外部工具                                                                                                | `requestId`     |         |                          |\n| `command.queued`                                                                                    | ✅               | 命令      |                          |\n| `requestId`、`command`                                                                               |                 |         |                          |\n| `command.completed`                                                                                 | ✅               | 命令      | `requestId`              |\n| `session_limits_exhausted.requested`                                                                | ✅               | Session |                          |\n| `requestId`、`maxAiCredits`、`usedAiCredits`                                                          |                 |         |                          |\n| `session_limits_exhausted.completed`                                                                | ✅               | Session |                          |\n| `requestId`、`response.action`                                                                       |                 |         |                          |\n| `exit_plan_mode.requested`                                                                          | ✅               | 计划模式    |                          |\n| `requestId`、`summary`、`planContent`、`actions`                                                       |                 |         |                          |\n| `exit_plan_mode.completed`                                                                          | ✅               | 计划模式    | `requestId`              |"}