{"meta":{"title":"Eventos de sessão de streaming","intro":"Cada ação que o agente do Copilot realiza — pensar, escrever código e executar ferramentas — é registrada como um evento de sessão que você pode acompanhar. Este guia é uma referência de nível de campo para cada tipo de evento para que você saiba exatamente quais dados esperar sem ler a fonte do SDK.","product":"GitHub Copilot","breadcrumbs":[{"href":"/pt/enterprise-cloud@latest/copilot","title":"GitHub Copilot"},{"href":"/pt/enterprise-cloud@latest/copilot/how-tos","title":"Instruções"},{"href":"/pt/enterprise-cloud@latest/copilot/how-tos/copilot-sdk","title":"SDK do Copilot"},{"href":"/pt/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features","title":"Features"},{"href":"/pt/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/streaming-events","title":"Eventos de streaming"}],"documentType":"article"},"body":"# Eventos de sessão de streaming\n\nCada ação que o agente do Copilot realiza — pensar, escrever código e executar ferramentas — é registrada como um evento de sessão que você pode acompanhar. Este guia é uma referência de nível de campo para cada tipo de evento para que você saiba exatamente quais dados esperar sem ler a fonte do SDK.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n## Overview\n\nQuando `streaming: true` é definido em uma sessão, o SDK emite eventos **efêmeros** em tempo real (deltas, atualizações de progresso) junto com eventos **persistentes** (mensagens completas, resultados da ferramenta). Todos os eventos compartilham um envelope comum e carregam uma `data` carga cuja forma depende do evento `type`.\n\n![Diagrama: diagrama de sequência mostrando o processo descrito.](/assets/images/help/copilot/copilot-sdk/features-streaming-events-diagram-0.png)\n\n| Conceito               | Description                                                                                                             |\n| ---------------------- | ----------------------------------------------------------------------------------------------------------------------- |\n| **Evento efêmero**     | Transitório; transmitido em tempo real, mas **não** persistido no log de sessão. Não reproduzido na retomada da sessão. |\n| **Evento persistente** | Salvo no log de eventos da sessão no disco. Reiniciado ao retomar uma sessão.                                           |\n| **Evento Delta**       | Uma parte efêmera de streaming (texto ou raciocínio). Acumule deltas para construir o conteúdo completo.                |\n| **`parentId` cadeia**  | Cada `parentId` do evento aponta para o evento anterior, formando uma lista encadeada que você pode percorrer.          |\n\n## Envelope de evento\n\nCada evento de sessão, independentemente do tipo, inclui estes campos:\n\n| Campo                                                                          | Tipo                              | Description                                                                                                                                    |\n| ------------------------------------------------------------------------------ | --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |\n| `id`                                                                           |                                   |                                                                                                                                                |\n| `string` (UUID v4)                                                             | Identificador de evento exclusivo |                                                                                                                                                |\n| `timestamp`                                                                    |                                   |                                                                                                                                                |\n| `string` (ISO 8601)                                                            | Quando o evento foi criado        |                                                                                                                                                |\n| `parentId`                                                                     | `string \\| null`                  | ID do evento anterior na cadeia; `null` para o primeiro evento                                                                                 |\n| `agentId`                                                                      | `string?`                         | ID da instância do subagente para eventos originados pelo subagente; ausente para o agente raiz ou principal e para eventos no nível da sessão |\n| `ephemeral`                                                                    | `boolean?`                        |                                                                                                                                                |\n| `true` para eventos transitórios; ausente ou `false` para eventos persistentes |                                   |                                                                                                                                                |\n| `type`                                                                         | `string`                          | Discriminador de tipo de evento (confira tabelas abaixo)                                                                                       |\n| `data`                                                                         | `object`                          | Carga útil específica do evento                                                                                                                |\n\n## Inscrevendo-se para eventos\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)** Esses SDKs usam tipos de dados separados por evento (por exemplo, ), portanto, `AssistantMessageDeltaData`somente os campos relevantes existem em cada tipo.\n>\n> \\[!TIP]\n> **(.NET)** O SDK do .NET usa classes de dados separadas e fortemente tipados por evento (por exemplo, `AssistantMessageDeltaData`), portanto, somente os campos relevantes existem em cada tipo.\n>\n> \\[!TIP]\n> **(TypeScript)** O SDK do TypeScript usa uma união discriminada — quando você faz a correspondência com `event.type`, o payload `data` é automaticamente refinado para o formato correto.\n\n## Renderize somente a resposta do agente principal\n\nOs eventos do subagente compartilham o fluxo da sessão principal e incluem o nível de envelope `agentId`. Os eventos do agente raiz/principal e os eventos de nível de sessão omitem `agentId`, portanto, os renderizadores do chat principal podem ignorar os eventos do assistente onde `agentId` está definido e encaminhar esses eventos para rastreamentos ou para a interface de progresso.\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## Eventos do assistente\n\nEsses eventos acompanham o ciclo de vida de resposta do agente, desde o início da vez, passando pelos fragmentos de streaming até a mensagem final.\n\n### `assistant.turn_start`\n\nEmitido quando o agente começa a processar uma rodada.\n\n| Campo de dados                                     | Tipo     | Obrigatório | Description                                                                     |\n| -------------------------------------------------- | -------- | ----------- | ------------------------------------------------------------------------------- |\n| `turnId`                                           | `string` | ✅           | Identificador de turno (normalmente um número de turno em cadeia de caracteres) |\n| `interactionId`                                    | `string` |             |                                                                                 |\n| ID de interação CAPI para correlação de telemetria |          |             |                                                                                 |\n\n### `assistant.intent`\n\nEfêmero. Breve descrição do que o agente está fazendo no momento, atualizada conforme funciona.\n\n| Campo de dados | Tipo     | Obrigatório | Description                                                               |\n| -------------- | -------- | ----------- | ------------------------------------------------------------------------- |\n| `intent`       | `string` | ✅           | Intenção legível por humanos (por exemplo, \"Explorando a base de código\") |\n\n### `assistant.reasoning`\n\nConclua o bloco de pensamento estendido do modelo. Emitido após a conclusão do raciocínio.\n\n| Campo de dados | Tipo     | Obrigatório | Description                                           |\n| -------------- | -------- | ----------- | ----------------------------------------------------- |\n| `reasoningId`  | `string` | ✅           | Identificador exclusivo para esse bloco de raciocínio |\n| `content`      | `string` | ✅           | O texto de pensamento estendido completo              |\n\n### `assistant.reasoning_delta`\n\nEfêmero. Bloco incremental do pensamento estendido do modelo, transmitido em tempo real.\n\n| Campo de dados | Tipo     | Obrigatório | Description                                                 |\n| -------------- | -------- | ----------- | ----------------------------------------------------------- |\n| `reasoningId`  | `string` | ✅           | Corresponde ao evento correspondente `assistant.reasoning`  |\n| `deltaContent` | `string` | ✅           | Parte de texto a ser acrescentada ao conteúdo de raciocínio |\n\n### `assistant.message`\n\nResposta completa do assistente para esta chamada LLM. Pode incluir solicitações de invocação de ferramentas.\n\n| Campo de dados                                                              | Tipo            | Obrigatório | Description                                |\n| --------------------------------------------------------------------------- | --------------- | ----------- | ------------------------------------------ |\n| `messageId`                                                                 | `string`        | ✅           | Identificador exclusivo para esta mensagem |\n| `content`                                                                   | `string`        | ✅           | Resposta de texto do assistente            |\n| `toolRequests`                                                              | `ToolRequest[]` |             |                                            |\n| Chamadas de ferramenta que o assistente deseja fazer (veja abaixo)          |                 |             |                                            |\n| `reasoningOpaque`                                                           | `string`        |             |                                            |\n| Pensamento estendido criptografado (modelos antrópicos); associado à sessão |                 |             |                                            |\n| `reasoningText`                                                             | `string`        |             |                                            |\n| Texto claro de raciocínio a partir de pensamento aprofundado                |                 |             |                                            |\n| `encryptedContent`                                                          | `string`        |             |                                            |\n| Conteúdo de raciocínio criptografado (modelos OpenAI); associado à sessão   |                 |             |                                            |\n| `phase`                                                                     | `string`        |             |                                            |\n| Fase de geração (por exemplo, `\"thinking\"` vs `\"response\"`)                 |                 |             |                                            |\n| `outputTokens`                                                              | `number`        |             |                                            |\n| Contagem real de tokens de saída na resposta da API                         |                 |             |                                            |\n| `interactionId`                                                             | `string`        |             |                                            |\n| ID de interação CAPI para telemetria                                        |                 |             |                                            |\n| `parentToolCallId`                                                          | `string`        |             |                                            |\n| Preterido. Usar o nível `agentId` do envelope para atribuição de subagente  |                 |             |                                            |\n\n\\*\\*\n`ToolRequest` Campos:\\*\\*\n\n| Campo                                                             | Tipo                     | Obrigatório | Description                                                     |\n| ----------------------------------------------------------------- | ------------------------ | ----------- | --------------------------------------------------------------- |\n| `toolCallId`                                                      | `string`                 | ✅           | Identificação única para esta chamada de método                 |\n| `name`                                                            | `string`                 | ✅           | Nome da ferramenta (por exemplo, , `\"bash\"`, `\"edit\"`) `\"grep\"` |\n| `arguments`                                                       | `object`                 |             |                                                                 |\n| Argumentos analisados para a ferramenta                           |                          |             |                                                                 |\n| `type`                                                            | `\"function\" \\| \"custom\"` |             |                                                                 |\n| Tipo de chamada; é definido como `\"function\"` caso esteja ausente |                          |             |                                                                 |\n\n### `assistant.message_delta`\n\nEfêmero. Porção incremental da resposta de texto do assistente, transmitida em tempo real.\n\n| Campo de dados                                                             | Tipo     | Obrigatório | Description                                              |\n| -------------------------------------------------------------------------- | -------- | ----------- | -------------------------------------------------------- |\n| `messageId`                                                                | `string` | ✅           | Corresponde ao evento correspondente `assistant.message` |\n| `deltaContent`                                                             | `string` | ✅           | Parte de texto a ser acrescentada à mensagem             |\n| `parentToolCallId`                                                         | `string` |             |                                                          |\n| Preterido. Usar o nível `agentId` do envelope para atribuição de subagente |          |             |                                                          |\n\n### `assistant.turn_end`\n\nEmitido quando o agente conclui um turno (todas as execuções de ferramentas são concluídas, resposta final fornecida).\n\n| Campo de dados | Tipo     | Obrigatório | Description                                                 |\n| -------------- | -------- | ----------- | ----------------------------------------------------------- |\n| `turnId`       | `string` | ✅           | Corresponde ao evento correspondente `assistant.turn_start` |\n\n### `assistant.usage`\n\nEfêmero. Informações de uso e custo de token para uma chamada de API individual.\n\n| Campo de dados                                                                                            | Tipo                                                                       | Obrigatório | Description                                        |\n| --------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ----------- | -------------------------------------------------- |\n| `model`                                                                                                   | `string`                                                                   | ✅           | Identificador de modelo (por exemplo, `\"gpt-5.4\"`) |\n| `inputTokens`                                                                                             | `number`                                                                   |             |                                                    |\n| Tokens de entrada consumidos                                                                              |                                                                            |             |                                                    |\n| `outputTokens`                                                                                            | `number`                                                                   |             |                                                    |\n| Tokens de saída produzidos                                                                                |                                                                            |             |                                                    |\n| `reasoningTokens`                                                                                         | `number`                                                                   |             |                                                    |\n| Tokens de saída usados para raciocínio/cadeia de pensamento (subconjunto de `outputTokens`)               |                                                                            |             |                                                    |\n| `cacheReadTokens`                                                                                         | `number`                                                                   |             |                                                    |\n| Tokens lidos do cache de prompt                                                                           |                                                                            |             |                                                    |\n| `cacheWriteTokens`                                                                                        | `number`                                                                   |             |                                                    |\n| Tokens gravados no cache de prompt                                                                        |                                                                            |             |                                                    |\n| `cacheExpiresAt`                                                                                          | `string`                                                                   |             |                                                    |\n| Carimbo de data e hora ISO 8601 em que o cache de prompts para esta chamada de modelo expira              |                                                                            |             |                                                    |\n| `contentFilterTriggered`                                                                                  | `boolean`                                                                  |             |                                                    |\n| Se a resposta foi bloqueada ou truncada pela filtragem de conteúdo (`finish_reason === 'content_filter'`) |                                                                            |             |                                                    |\n| `finishReason`                                                                                            | `string`                                                                   |             |                                                    |\n| Motivo de término do modelo (por exemplo, , `\"stop\"`, `\"length\"`, `\"tool_calls\"`, `\"content_filter\"`)     |                                                                            |             |                                                    |\n| `cost`                                                                                                    | `number`                                                                   |             |                                                    |\n| Custo do multiplicador de modelo para cobrança                                                            |                                                                            |             |                                                    |\n| `duration`                                                                                                | `number`                                                                   |             |                                                    |\n| Duração da chamada à API em milissegundos                                                                 |                                                                            |             |                                                    |\n| `timeToFirstTokenMs`                                                                                      | `number`                                                                   |             |                                                    |\n| Hora da expedição de solicitação para o primeiro token recebido (latência de streaming)                   |                                                                            |             |                                                    |\n| `interTokenLatencyMs`                                                                                     | `number`                                                                   |             |                                                    |\n| Latência média entre tokens consecutivos (taxa de transferência de streaming)                             |                                                                            |             |                                                    |\n| `reasoningEffort`                                                                                         | `string`                                                                   |             |                                                    |\n| Nível de esforço de raciocínio usado para essa chamada (por exemplo, , `\"low\"`, `\"medium\"`) `\"high\"`      |                                                                            |             |                                                    |\n| `initiator`                                                                                               | `string`                                                                   |             |                                                    |\n| O que acionou esta chamada (por exemplo, `\"sub-agent\"`); ausente para chamadas iniciadas pelo usuário     |                                                                            |             |                                                    |\n| `apiCallId`                                                                                               | `string`                                                                   |             |                                                    |\n| ID de conclusão do provedor (por exemplo, `chatcmpl-abc123`)                                              |                                                                            |             |                                                    |\n| `serviceRequestId`                                                                                        | `string`                                                                   |             |                                                    |\n| ID da solicitação de serviço do Copilot (`x-copilot-service-request-id`) para correlação de logs do CAPI  |                                                                            |             |                                                    |\n| `apiEndpoint`                                                                                             | `\"/chat/completions\" \\| \"/v1/messages\" \\| \"/responses\" \\| \"ws:/responses\"` |             |                                                    |\n| Endpoint da API usado para a chamada ao modelo; útil para observabilidade e atribuição de custos.         |                                                                            |             |                                                    |\n| `ws:/responses` é a variante websocket da API de respostas                                                |                                                                            |             |                                                    |\n| `providerCallId`                                                                                          | `string`                                                                   |             |                                                    |\n| ID de rastreamento da solicitação do GitHub (`x-github-request-id`)                                       |                                                                            |             |                                                    |\n| `parentToolCallId`                                                                                        | `string`                                                                   |             |                                                    |\n| Preterido. Usar o nível `agentId` do envelope para atribuição de subagente                                |                                                                            |             |                                                    |\n| `quotaSnapshots`                                                                                          | `Record<string, QuotaSnapshot>`                                            |             |                                                    |\n| Uso de recursos por cota, chaveado pelo identificador de cota                                             |                                                                            |             |                                                    |\n| `copilotUsage`                                                                                            | `CopilotUsage`                                                             |             |                                                    |\n| Detalhamento do custo detalhado do token da API                                                           |                                                                            |             |                                                    |\n\n### `assistant.streaming_delta`\n\nEfêmero. Indicador de progresso de rede de baixo nível – total de bytes recebidos da resposta da API de streaming.\n\n| Campo de dados           | Tipo     | Obrigatório | Description                           |\n| ------------------------ | -------- | ----------- | ------------------------------------- |\n| `totalResponseSizeBytes` | `number` | ✅           | Bytes cumulativos recebidos até agora |\n\n## Eventos de execução de ferramentas\n\nEsses eventos acompanham o ciclo de vida completo de cada invocação de ferramenta, desde o modelo que solicita uma chamada de ferramenta até a execução até a conclusão.\n\n### `tool.execution_start`\n\nEmitido quando uma ferramenta começa a ser executada.\n\n| Campo de dados                                                             | Tipo     | Obrigatório | Description                                                     |\n| -------------------------------------------------------------------------- | -------- | ----------- | --------------------------------------------------------------- |\n| `toolCallId`                                                               | `string` | ✅           | Identificador exclusivo para esta chamada de ferramenta         |\n| `toolName`                                                                 | `string` | ✅           | Nome da ferramenta (por exemplo, , `\"bash\"`, `\"edit\"`) `\"grep\"` |\n| `arguments`                                                                | `object` |             |                                                                 |\n| Argumentos analisados passados para a ferramenta                           |          |             |                                                                 |\n| `mcpServerName`                                                            | `string` |             |                                                                 |\n| Nome do servidor MCP, quando a ferramenta é fornecida por um servidor MCP  |          |             |                                                                 |\n| `mcpToolName`                                                              | `string` |             |                                                                 |\n| Nome da ferramenta original no servidor MCP                                |          |             |                                                                 |\n| `parentToolCallId`                                                         | `string` |             |                                                                 |\n| Preterido. Usar o nível `agentId` do envelope para atribuição de subagente |          |             |                                                                 |\n\n### `tool.execution_partial_result`\n\nEfêmero. Saída incremental de uma ferramenta em execução (por exemplo, saída de bash em streaming).\n\n| Campo de dados  | Tipo     | Obrigatório | Description                                          |\n| --------------- | -------- | ----------- | ---------------------------------------------------- |\n| `toolCallId`    | `string` | ✅           | Corresponde ao correspondente `tool.execution_start` |\n| `partialOutput` | `string` | ✅           | Bloco de saída incremental                           |\n\n### `tool.execution_progress`\n\nEfêmero. Status de progresso legível por humanos de uma ferramenta em execução (por exemplo, notificações de progresso do servidor MCP).\n\n| Campo de dados    | Tipo     | Obrigatório | Description                                          |\n| ----------------- | -------- | ----------- | ---------------------------------------------------- |\n| `toolCallId`      | `string` | ✅           | Corresponde ao correspondente `tool.execution_start` |\n| `progressMessage` | `string` | ✅           | Mensagem de status de progresso                      |\n\n### `tool.execution_complete`\n\nEmitido quando uma ferramenta termina de executar— com êxito ou com um erro.\n\n| Campo de dados                                                                        | Tipo                 | Obrigatório | Description                                          |\n| ------------------------------------------------------------------------------------- | -------------------- | ----------- | ---------------------------------------------------- |\n| `toolCallId`                                                                          | `string`             | ✅           | Corresponde ao correspondente `tool.execution_start` |\n| `success`                                                                             | `boolean`            | ✅           | Se a execução foi bem-sucedida                       |\n| `model`                                                                               | `string`             |             |                                                      |\n| Modelo que gerou essa chamada de ferramenta                                           |                      |             |                                                      |\n| `interactionId`                                                                       | `string`             |             |                                                      |\n| ID de interação CAPI                                                                  |                      |             |                                                      |\n| `isUserRequested`                                                                     | `boolean`            |             |                                                      |\n|                                                                                       |                      |             |                                                      |\n| `true` quando o usuário solicitou explicitamente essa chamada de ferramenta           |                      |             |                                                      |\n| `result`                                                                              | `Result`             |             |                                                      |\n| Apresentar em caso de sucesso (veja abaixo)                                           |                      |             |                                                      |\n| `error`                                                                               | `{ message, code? }` |             |                                                      |\n| Apresentar em caso de falha                                                           |                      |             |                                                      |\n| `toolTelemetry`                                                                       | `object`             |             |                                                      |\n| Telemetria específica da ferramenta (por exemplo, contagem de verificações do CodeQL) |                      |             |                                                      |\n| `parentToolCallId`                                                                    | `string`             |             |                                                      |\n| Preterido. Usar o nível `agentId` do envelope para atribuição de subagente            |                      |             |                                                      |\n\n\\*\\*\n`Result` Campos:\\*\\*\n\n| Campo                                                                      | Tipo             | Obrigatório | Description                                                                       |\n| -------------------------------------------------------------------------- | ---------------- | ----------- | --------------------------------------------------------------------------------- |\n| `content`                                                                  | `string`         | ✅           | Resultado conciso enviado para a LLM (pode ser truncado para eficiência de token) |\n| `detailedContent`                                                          | `string`         |             |                                                                                   |\n| Resultado completo para exibição, preservando conteúdo completo como diffs |                  |             |                                                                                   |\n| `contents`                                                                 | `ContentBlock[]` |             |                                                                                   |\n| Blocos de conteúdo estruturados (texto, terminal, imagem, áudio, recurso)  |                  |             |                                                                                   |\n\n### `tool.user_requested`\n\nEmitido quando o usuário solicita explicitamente uma invocação de ferramenta (em vez do modelo optando por chamar uma).\n\n| Campo de dados              | Tipo     | Obrigatório | Description                                             |\n| --------------------------- | -------- | ----------- | ------------------------------------------------------- |\n| `toolCallId`                | `string` | ✅           | Identificador exclusivo para esta chamada de ferramenta |\n| `toolName`                  | `string` | ✅           | Nome da ferramenta que o usuário deseja invocar         |\n| `arguments`                 | `object` |             |                                                         |\n| Argumentos para a invocação |          |             |                                                         |\n\n## Eventos de ciclo de vida da sessão\n\n### `session.idle`\n\nEfêmero. O agente concluiu todo o processamento e está pronto para a próxima mensagem. Esse é o sinal de que uma curva está totalmente concluída.\n\n| Campo de dados                                                                     | Tipo      | Obrigatório | Description |\n| ---------------------------------------------------------------------------------- | --------- | ----------- | ----------- |\n| `aborted`                                                                          | `boolean` |             |             |\n| Verdadeiro quando a rodada anterior foi cancelada por meio de um sinal de anulação |           |             |             |\n\n### `session.error`\n\nOcorreu um erro durante o processamento da sessão.\n\n| Campo de dados                                                                          | Tipo     | Obrigatório | Description                                                                     |\n| --------------------------------------------------------------------------------------- | -------- | ----------- | ------------------------------------------------------------------------------- |\n| `errorType`                                                                             | `string` | ✅           | Categoria de erro (por exemplo, , `\"authentication\"`, `\"quota\"`) `\"rate_limit\"` |\n| `message`                                                                               | `string` | ✅           | Mensagem de erro legível por humanos                                            |\n| `stack`                                                                                 | `string` |             |                                                                                 |\n| Rastreamento de pilha de erros                                                          |          |             |                                                                                 |\n| `statusCode`                                                                            | `number` |             |                                                                                 |\n| Código de status HTTP da solicitação upstream                                           |          |             |                                                                                 |\n| `providerCallId`                                                                        | `string` |             |                                                                                 |\n| ID de rastreamento da solicitação do GitHub para correlação de logs do lado do servidor |          |             |                                                                                 |\n\n### `session.compaction_start`\n\nA compactação da janela de contexto começou.\n**A carga de dados está vazia (`{}`)**.\n\n### `session.compaction_complete`\n\nCompactação da janela de contexto concluída.\n\n| Campo de dados                                                            | Tipo                             | Obrigatório | Description                       |\n| ------------------------------------------------------------------------- | -------------------------------- | ----------- | --------------------------------- |\n| `success`                                                                 | `boolean`                        | ✅           | Se a compactação foi bem-sucedida |\n| `error`                                                                   | `string`                         |             |                                   |\n| Mensagem de erro se a compactação falhou                                  |                                  |             |                                   |\n| `preCompactionTokens`                                                     | `number`                         |             |                                   |\n| Tokens anteriores à compactação                                           |                                  |             |                                   |\n| `postCompactionTokens`                                                    | `number`                         |             |                                   |\n| Tokens após a compactação                                                 |                                  |             |                                   |\n| `preCompactionMessagesLength`                                             | `number`                         |             |                                   |\n| Contagem de mensagens antes da compactação                                |                                  |             |                                   |\n| `messagesRemoved`                                                         | `number`                         |             |                                   |\n| Mensagens removidas                                                       |                                  |             |                                   |\n| `tokensRemoved`                                                           | `number`                         |             |                                   |\n| Tokens removidos                                                          |                                  |             |                                   |\n| `summaryContent`                                                          | `string`                         |             |                                   |\n| Resumo do histórico compactado gerado por LLM                             |                                  |             |                                   |\n| `checkpointNumber`                                                        | `number`                         |             |                                   |\n| Número de instantâneo de ponto de verificação criado para recuperação     |                                  |             |                                   |\n| `checkpointPath`                                                          | `string`                         |             |                                   |\n| Caminho do arquivo onde o ponto de verificação foi armazenado             |                                  |             |                                   |\n| `compactionTokensUsed`                                                    | `{ input, output, cachedInput }` |             |                                   |\n| Uso de token para a chamada LLM de compactação                            |                                  |             |                                   |\n| `requestId`                                                               | `string`                         |             |                                   |\n| ID de rastreamento da solicitação do GitHub para a chamada de compactação |                                  |             |                                   |\n\n### `session.title_changed`\n\nEfêmero. O título gerado automaticamente da sessão foi atualizado.\n\n| Campo de dados | Tipo     | Obrigatório | Description           |\n| -------------- | -------- | ----------- | --------------------- |\n| `title`        | `string` | ✅           | Novo título da sessão |\n\n### `session.context_changed`\n\nO diretório de trabalho ou o contexto do repositório da sessão foi alterado.\n\n| Campo de dados                        | Tipo     | Obrigatório | Description                 |\n| ------------------------------------- | -------- | ----------- | --------------------------- |\n| `cwd`                                 | `string` | ✅           | Diretório de trabalho atual |\n| `gitRoot`                             | `string` |             |                             |\n| Raiz do repositório Git               |          |             |                             |\n| `repository`                          | `string` |             |                             |\n| Repositório em `\"owner/name\"` formato |          |             |                             |\n| `branch`                              | `string` |             |                             |\n| Branch atual do Git                   |          |             |                             |\n\n### `session.usage_info`\n\nEfêmero. Instantâneo de utilização da janela de contexto.\n\n| Campo de dados   | Tipo     | Obrigatório | Description                                        |\n| ---------------- | -------- | ----------- | -------------------------------------------------- |\n| `tokenLimit`     | `number` | ✅           | Tokens máximos para a janela de contexto do modelo |\n| `currentTokens`  | `number` | ✅           | Tokens atuais na janela de contexto                |\n| `messagesLength` | `number` | ✅           | Contagem de mensagens atual na conversa            |\n\n### `session.session_limits_changed`\n\nOs limites da sessão foram alterados para o período contábil atual. Um `null``sessionLimits` valor significa que nenhum limite está ativo.\n\n| Campo de dados                                                                         | Tipo                          | Obrigatório | Description                                                        |\n| -------------------------------------------------------------------------------------- | ----------------------------- | ----------- | ------------------------------------------------------------------ |\n| `sessionLimits`                                                                        | `SessionLimitsConfig \\| null` | ✅           | Limites de sessão atuais ou `null` quando nenhum limite está ativo |\n| `sessionLimits.maxAiCredits`                                                           | `number`                      |             |                                                                    |\n| Máximo de créditos de IA permitidos durante a janela de contabilização atual da sessão |                               |             |                                                                    |\n\n### `session.usage_checkpoint`\n\nPonto de verificação durável do uso agregado usado para reconstruir a contabilização quando uma sessão é retomada.\n\n| Campo de dados                                                                        | Tipo     | Obrigatório | Description                                                                         |\n| ------------------------------------------------------------------------------------- | -------- | ----------- | ----------------------------------------------------------------------------------- |\n| `totalNanoAiu`                                                                        | `number` | ✅           | Custo das unidades de nano-IA acumuladas ao longo da sessão no ponto de verificação |\n| `totalPremiumRequests`                                                                | `number` |             |                                                                                     |\n| Número total de solicitações de API premium usadas no momento do ponto de verificação |          |             |                                                                                     |\n\n### `session.task_complete`\n\nO agente concluiu sua tarefa atribuída.\n\n| Campo de dados             | Tipo     | Obrigatório | Description |\n| -------------------------- | -------- | ----------- | ----------- |\n| `summary`                  | `string` |             |             |\n| Resumo da tarefa concluída |          |             |             |\n\n### `session.shutdown`\n\nA sessão foi encerrada.\n\n| Campo de dados                                      | Tipo                                          | Obrigatório | Description                                         |\n| --------------------------------------------------- | --------------------------------------------- | ----------- | --------------------------------------------------- |\n| `shutdownType`                                      | `\"routine\" \\| \"error\"`                        | ✅           | Desligamento normal ou falha                        |\n| `errorReason`                                       | `string`                                      |             |                                                     |\n| Descrição do erro quando `shutdownType` é `\"error\"` |                                               |             |                                                     |\n| `totalPremiumRequests`                              | `number`                                      | ✅           | Total de solicitações de API Premium usadas         |\n| `totalApiDurationMs`                                | `number`                                      | ✅           | Tempo de chamada da API cumulativa em milissegundos |\n| `sessionStartTime`                                  | `number`                                      | ✅           | Timestamp Unix (ms) quando a sessão começou         |\n| `codeChanges`                                       | `{ linesAdded, linesRemoved, filesModified }` | ✅           | Métricas agregadas de alteração de código           |\n| `modelMetrics`                                      | `Record<string, ModelMetric>`                 | ✅           | Detalhamento de uso por modelo                      |\n| `currentModel`                                      | `string`                                      |             |                                                     |\n| Modelo selecionado durante o desligamento           |                                               |             |                                                     |\n\n## Eventos de permissão e de interação do usuário\n\nEsses eventos são emitidos quando o agente precisa de aprovação ou entrada do usuário antes de continuar.\n\n### `permission.requested`\n\nO agente precisa de permissão para executar uma ação (executar um comando, gravar um arquivo etc.).\n\n| Campo de dados      | Tipo                | Obrigatório | Description                                                 |\n| ------------------- | ------------------- | ----------- | ----------------------------------------------------------- |\n| `requestId`         | `string`            | ✅           | Use isso para responder via `session.respondToPermission()` |\n| `permissionRequest` | `PermissionRequest` | ✅           | Detalhes da permissão que está sendo solicitada             |\n\nA `permissionRequest` é uma união discriminada de `kind`:\n\n| `kind`                                                          | Campos importantes                  | Description |\n| --------------------------------------------------------------- | ----------------------------------- | ----------- |\n| `\"shell\"`                                                       |                                     |             |\n| `fullCommandText`, `intention`, , `commands[]``possiblePaths[]` | Executar um comando de shell        |             |\n| `\"write\"`                                                       |                                     |             |\n| `fileName`, `diff`, , `intention``newFileContents?`             | Gravar/modificar um arquivo         |             |\n| `\"read\"`                                                        |                                     |             |\n| `path`, `intention`                                             | Ler um arquivo ou diretório         |             |\n| `\"mcp\"`                                                         |                                     |             |\n| `serverName`, `toolName`, `toolTitle`, , `args?``readOnly`      | Chamar uma ferramenta MCP           |             |\n| `\"url\"`                                                         |                                     |             |\n| `url`, `intention`                                              | Recuperar uma URL                   |             |\n| `\"memory\"`                                                      |                                     |             |\n| `subject`, `fact`, `citations`                                  | Armazenar uma memória               |             |\n| `\"custom-tool\"`                                                 |                                     |             |\n| `toolName`, `toolDescription`, `args?`                          | Chamar uma ferramenta personalizada |             |\n\nTodas as variantes `kind` também incluem uma vinculação opcional `toolCallId` de volta à chamada de ferramenta que disparou a solicitação.\n\n### `permission.completed`\n\nUma solicitação de permissão foi resolvida.\n\n| Campo de dados | Tipo     | Obrigatório | Description                                                                                                                                                                     |\n| -------------- | -------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `requestId`    | `string` | ✅           | Corresponde ao correspondente `permission.requested`                                                                                                                            |\n| `result.kind`  | `string` | ✅           | Um de: `\"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\nEfêmero. O agente está fazendo uma pergunta ao usuário.\n\n| Campo de dados                                   | Tipo       | Obrigatório | Description                                                |\n| ------------------------------------------------ | ---------- | ----------- | ---------------------------------------------------------- |\n| `requestId`                                      | `string`   | ✅           | Use isso para responder via `session.respondToUserInput()` |\n| `question`                                       | `string`   | ✅           | A pergunta a ser apresentada ao usuário                    |\n| `choices`                                        | `string[]` |             |                                                            |\n| Opções predefinidas para o usuário               |            |             |                                                            |\n| `allowFreeform`                                  | `boolean`  |             |                                                            |\n| Se a entrada de texto de forma livre é permitida |            |             |                                                            |\n\n### `user_input.completed`\n\nEfêmero. Uma solicitação de entrada do usuário foi resolvida.\n\n| Campo de dados | Tipo     | Obrigatório | Description                                          |\n| -------------- | -------- | ----------- | ---------------------------------------------------- |\n| `requestId`    | `string` | ✅           | Corresponde ao correspondente `user_input.requested` |\n\n### `elicitation.requested`\n\nEfêmero. O agente precisa de entrada estruturada de dados do usuário (protocolo de elicitação MCP).\n\n| Campo de dados                                    | Tipo                                        | Obrigatório | Description                                                  |\n| ------------------------------------------------- | ------------------------------------------- | ----------- | ------------------------------------------------------------ |\n| `requestId`                                       | `string`                                    | ✅           | Use isso para responder via `session.respondToElicitation()` |\n| `message`                                         | `string`                                    | ✅           | Descrição de quais informações são necessárias               |\n| `mode`                                            | `\"form\"`                                    |             |                                                              |\n| Modo de elicitação (no momento, somente `\"form\"`) |                                             |             |                                                              |\n| `requestedSchema`                                 | `{ type: \"object\", properties, required? }` | ✅           | Esquema JSON que descreve os campos de formulário            |\n\n### `elicitation.completed`\n\nEfêmero. Uma solicitação de elicitação foi resolvida.\n\n| Campo de dados | Tipo     | Obrigatório | Description                                           |\n| -------------- | -------- | ----------- | ----------------------------------------------------- |\n| `requestId`    | `string` | ✅           | Corresponde ao correspondente `elicitation.requested` |\n\n## Eventos de subagente e habilidade\n\n### `subagent.started`\n\nUm agente personalizado foi invocado como um subagente.\n\n| Campo de dados                                                                         | Tipo     | Obrigatório | Description                                        |\n| -------------------------------------------------------------------------------------- | -------- | ----------- | -------------------------------------------------- |\n| `toolCallId`                                                                           | `string` | ✅           | Chamada de ferramenta-mãe que gerou este subagente |\n| `agentName`                                                                            | `string` | ✅           | Nome interno do subagente                          |\n| `agentDisplayName`                                                                     | `string` | ✅           | Nome de exibição legível por humanos               |\n| `agentDescription`                                                                     | `string` | ✅           | Descrição do que o subagente faz                   |\n| `model`                                                                                | `string` |             |                                                    |\n| Modelo com o qual o subagente será executado, quando isso for conhecido desde o início |          |             |                                                    |\n\n### `subagent.completed`\n\nUm subagente concluiu com sucesso.\n\n| Campo de dados                                    | Tipo     | Obrigatório | Description                                      |\n| ------------------------------------------------- | -------- | ----------- | ------------------------------------------------ |\n| `toolCallId`                                      | `string` | ✅           | Corresponde ao correspondente `subagent.started` |\n| `agentName`                                       | `string` | ✅           | Nome interno                                     |\n| `agentDisplayName`                                | `string` | ✅           | Nome de exibição                                 |\n| `model`                                           | `string` |             |                                                  |\n| Modelo usado pelo subagente                       |          |             |                                                  |\n| `durationMs`                                      | `number` |             |                                                  |\n| Duração da execução em milissegundos (tempo real) |          |             |                                                  |\n| `totalTokens`                                     | `number` |             |                                                  |\n| Total de tokens de entrada e saída consumidos     |          |             |                                                  |\n| `totalToolCalls`                                  | `number` |             |                                                  |\n| Total de chamadas de ferramenta realizadas        |          |             |                                                  |\n\n### `subagent.failed`\n\nUm subagente encontrou um erro.\n\n| Campo de dados                                               | Tipo     | Obrigatório | Description                                      |\n| ------------------------------------------------------------ | -------- | ----------- | ------------------------------------------------ |\n| `toolCallId`                                                 | `string` | ✅           | Corresponde ao correspondente `subagent.started` |\n| `agentName`                                                  | `string` | ✅           | Nome interno                                     |\n| `agentDisplayName`                                           | `string` | ✅           | Nome de exibição                                 |\n| `error`                                                      | `string` | ✅           | Mensagem de erro                                 |\n| `model`                                                      | `string` |             |                                                  |\n| Modelo selecionado para o subagente, quando conhecido        |          |             |                                                  |\n| `durationMs`                                                 | `number` |             |                                                  |\n| Duração da execução em milissegundos (tempo real)            |          |             |                                                  |\n| `totalTokens`                                                | `number` |             |                                                  |\n| Total de tokens de entrada e saída consumidos antes da falha |          |             |                                                  |\n| `totalToolCalls`                                             | `number` |             |                                                  |\n| Total de chamadas de ferramenta feitas antes da falha        |          |             |                                                  |\n\n### `subagent.selected`\n\nUm agente personalizado foi selecionado (inferido) para lidar com a solicitação atual.\n\n| Campo de dados     | Tipo               | Obrigatório | Description                                                                         |\n| ------------------ | ------------------ | ----------- | ----------------------------------------------------------------------------------- |\n| `agentName`        | `string`           | ✅           | Nome interno do agente selecionado                                                  |\n| `agentDisplayName` | `string`           | ✅           | Nome de exibição                                                                    |\n| `tools`            | `string[] \\| null` | ✅           | Nomes de ferramentas disponíveis para este agente; `null` para todas as ferramentas |\n\n### `subagent.deselected`\n\nUm agente personalizado foi desselecionado, retornando ao agente padrão.\n**A carga de dados está vazia (`{}`)**.\n\n### `skill.invoked`\n\nUma habilidade foi ativada para a conversa atual.\n\n| Campo de dados                                                            | Tipo       | Obrigatório | Description                                          |\n| ------------------------------------------------------------------------- | ---------- | ----------- | ---------------------------------------------------- |\n| `name`                                                                    | `string`   | ✅           | Nome da habilidade                                   |\n| `path`                                                                    | `string`   | ✅           | Caminho do arquivo para a definição de SKILL.md      |\n| `content`                                                                 | `string`   | ✅           | Conteúdo completo da habilidade injetado na conversa |\n| `allowedTools`                                                            | `string[]` |             |                                                      |\n| Ferramentas aprovadas automaticamente enquanto essa habilidade está ativa |            |             |                                                      |\n| `pluginName`                                                              | `string`   |             |                                                      |\n| Plugin da habilidade de origem                                            |            |             |                                                      |\n| `pluginVersion`                                                           | `string`   |             |                                                      |\n| Versão do plug-in                                                         |            |             |                                                      |\n\n## Outros eventos\n\n### `abort`\n\nO turno atual foi abortado.\n\n| Campo de dados | Tipo     | Obrigatório | Description                                                    |\n| -------------- | -------- | ----------- | -------------------------------------------------------------- |\n| `reason`       | `string` | ✅           | Por que o turno foi abortado (por exemplo, `\"user initiated\"`) |\n\n### `user.message`\n\nO usuário enviou uma mensagem. Gravado na linha do tempo da sessão.\n\n| Campo de dados                                                         | Tipo           | Obrigatório | Description                    |\n| ---------------------------------------------------------------------- | -------------- | ----------- | ------------------------------ |\n| `content`                                                              | `string`       | ✅           | O texto da mensagem do usuário |\n| `transformedContent`                                                   | `string`       |             |                                |\n| Versão transformada após o pré-processamento                           |                |             |                                |\n| `attachments`                                                          | `Attachment[]` |             |                                |\n| Anexos de arquivo, diretório, seleção, blob ou referência do GitHub    |                |             |                                |\n| `source`                                                               | `string`       |             |                                |\n| Identificador de origem da mensagem                                    |                |             |                                |\n| `agentMode`                                                            | `string`       |             |                                |\n| Modo de agente: `\"interactive\"`, , `\"plan\"`, `\"autopilot\"`ou `\"shell\"` |                |             |                                |\n| `interactionId`                                                        | `string`       |             |                                |\n| ID de interação CAPI                                                   |                |             |                                |\n\n### `system.message`\n\nUm prompt do sistema ou do desenvolvedor foi injetado na conversa.\n\n| Campo de dados                | Tipo                             | Obrigatório | Description        |\n| ----------------------------- | -------------------------------- | ----------- | ------------------ |\n| `content`                     | `string`                         | ✅           | O texto do prompt  |\n| `role`                        | `\"system\" \\| \"developer\"`        | ✅           | Função de mensagem |\n| `name`                        | `string`                         |             |                    |\n| Identificador de origem       |                                  |             |                    |\n| `metadata`                    | `{ promptVersion?, variables? }` |             |                    |\n| Metadados do modelo de prompt |                                  |             |                    |\n\n### `external_tool.requested`\n\nO agente deseja invocar uma ferramenta externa (uma fornecida pelo consumidor do SDK).\n\n| Campo de dados               | Tipo     | Obrigatório | Description                                                   |\n| ---------------------------- | -------- | ----------- | ------------------------------------------------------------- |\n| `requestId`                  | `string` | ✅           | Use isso para responder via `session.respondToExternalTool()` |\n| `sessionId`                  | `string` | ✅           | Sessão à qual esta solicitação pertence                       |\n| `toolCallId`                 | `string` | ✅           | ID de chamada de ferramenta para essa invocação               |\n| `toolName`                   | `string` | ✅           | Nome da ferramenta externa                                    |\n| `arguments`                  | `object` |             |                                                               |\n| Argumentos para a ferramenta |          |             |                                                               |\n\n### `external_tool.completed`\n\nUma solicitação de ferramenta externa foi resolvida.\n\n| Campo de dados | Tipo     | Obrigatório | Description                                             |\n| -------------- | -------- | ----------- | ------------------------------------------------------- |\n| `requestId`    | `string` | ✅           | Corresponde ao correspondente `external_tool.requested` |\n\n### `exit_plan_mode.requested`\n\nEfêmero. O agente criou um plano e deseja sair do modo de plano.\n\n| Campo de dados      | Tipo       | Obrigatório | Description                                                           |\n| ------------------- | ---------- | ----------- | --------------------------------------------------------------------- |\n| `requestId`         | `string`   | ✅           | Use isso para responder via `session.respondToExitPlanMode()`         |\n| `summary`           | `string`   | ✅           | Resumo do plano                                                       |\n| `planContent`       | `string`   | ✅           | Conteúdo completo do arquivo de plano                                 |\n| `actions`           | `string[]` | ✅           | Ações de usuário disponíveis (por exemplo, aprovar, editar, rejeitar) |\n| `recommendedAction` | `string`   | ✅           | Ação sugerida                                                         |\n\n### `exit_plan_mode.completed`\n\nEfêmero. Uma solicitação de modo de plano de saída foi resolvida.\n\n| Campo de dados | Tipo     | Obrigatório | Description                                              |\n| -------------- | -------- | ----------- | -------------------------------------------------------- |\n| `requestId`    | `string` | ✅           | Corresponde ao correspondente `exit_plan_mode.requested` |\n\n### `command.queued`\n\nEfêmero. Um comando barra \"/\" foi colocado na fila para execução.\n\n| Campo de dados | Tipo     | Obrigatório | Description                                                    |\n| -------------- | -------- | ----------- | -------------------------------------------------------------- |\n| `requestId`    | `string` | ✅           | Use isso para responder via `session.respondToQueuedCommand()` |\n| `command`      | `string` | ✅           | O texto do comando de barra (por exemplo, `/help`, `/clear`)   |\n\n### `command.completed`\n\nEfêmero. Um comando enfileirado foi resolvido.\n\n| Campo de dados | Tipo     | Obrigatório | Description                                    |\n| -------------- | -------- | ----------- | ---------------------------------------------- |\n| `requestId`    | `string` | ✅           | Corresponde ao correspondente `command.queued` |\n\n### `session_limits_exhausted.requested`\n\nEfêmero. O orçamento atual da sessão foi esgotado e o runtime precisa de uma decisão do usuário antes de continuar.\n\n| Campo de dados  | Tipo     | Obrigatório | Description                                                              |\n| --------------- | -------- | ----------- | ------------------------------------------------------------------------ |\n| `requestId`     | `string` | ✅           | Use este ID ao responder à solicitação pendente de limite esgotado       |\n| `maxAiCredits`  | `number` | ✅           | Créditos máximos de IA configurados para a janela de contabilidade atual |\n| `usedAiCredits` | `number` | ✅           | Créditos de IA já consumidos na janela de contabilidade atual            |\n\n### `session_limits_exhausted.completed`\n\nEfêmero. Uma solicitação pendente de limite esgotado foi resolvida.\n\n| Campo de dados                                                                              | Tipo                                    | Obrigatório | Description                                                               |\n| ------------------------------------------------------------------------------------------- | --------------------------------------- | ----------- | ------------------------------------------------------------------------- |\n| `requestId`                                                                                 | `string`                                | ✅           | Corresponde ao evento correspondente `session_limits_exhausted.requested` |\n| `response.action`                                                                           | `\"add\" \\| \"set\" \\| \"unset\" \\| \"cancel\"` | ✅           | Ação selecionada para a solicitação de limite esgotado                    |\n| `response.additionalAiCredits`                                                              | `number`                                |             |                                                                           |\n| Créditos de IA a serem adicionados ao máximo atual quando `response.action` estiver `\"add\"` |                                         |             |                                                                           |\n| `response.maxAiCredits`                                                                     | `number`                                |             |                                                                           |\n| Novos créditos absolutos máximos de IA quando `response.action` é `\"set\"`                   |                                         |             |                                                                           |\n\n## Referência rápida: fluxo de agentes em turnos\n\nUma rodada de agente típica emite eventos nesta ordem:\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## Todos os tipos de evento em um relance\n\nEsta tabela lista os principais `data` campos de conteúdo. Campos de envelope comuns estão documentados acima.\n\n| Tipo de evento                                                                                              | Efêmero         | Categoria          | Campos de dados de chave |\n| ----------------------------------------------------------------------------------------------------------- | --------------- | ------------------ | ------------------------ |\n| `assistant.turn_start`                                                                                      |                 |                    |                          |\n| Assistente                                                                                                  |                 |                    |                          |\n| `turnId`, `interactionId?`                                                                                  |                 |                    |                          |\n| `assistant.intent`                                                                                          | ✅               | Assistente         | `intent`                 |\n| `assistant.reasoning`                                                                                       |                 |                    |                          |\n| Assistente                                                                                                  |                 |                    |                          |\n| `reasoningId`, `content`                                                                                    |                 |                    |                          |\n| `assistant.reasoning_delta`                                                                                 | ✅               | Assistente         |                          |\n| `reasoningId`, `deltaContent`                                                                               |                 |                    |                          |\n| `assistant.streaming_delta`                                                                                 | ✅               | Assistente         | `totalResponseSizeBytes` |\n| `assistant.message`                                                                                         |                 |                    |                          |\n| Assistente                                                                                                  |                 |                    |                          |\n| `messageId`, `content`, `toolRequests?`, , `outputTokens?``phase?`                                          |                 |                    |                          |\n| `assistant.message_delta`                                                                                   | ✅               | Assistente         |                          |\n| `messageId`, `deltaContent`                                                                                 |                 |                    |                          |\n| `assistant.turn_end`                                                                                        |                 |                    |                          |\n| Assistente                                                                                                  | `turnId`        |                    |                          |\n| `assistant.usage`                                                                                           | ✅               | Assistente         |                          |\n| `model`, `apiEndpoint?`, `inputTokens?`, `outputTokens?`, , `cost?``duration?`                              |                 |                    |                          |\n| `tool.user_requested`                                                                                       |                 |                    |                          |\n| Tool                                                                                                        |                 |                    |                          |\n| `toolCallId`, `toolName`, `arguments?`                                                                      |                 |                    |                          |\n| `tool.execution_start`                                                                                      |                 |                    |                          |\n| Tool                                                                                                        |                 |                    |                          |\n| `toolCallId`, `toolName`, , `arguments?``mcpServerName?`                                                    |                 |                    |                          |\n| `tool.execution_partial_result`                                                                             | ✅               | Tool               |                          |\n| `toolCallId`, `partialOutput`                                                                               |                 |                    |                          |\n| `tool.execution_progress`                                                                                   | ✅               | Tool               |                          |\n| `toolCallId`, `progressMessage`                                                                             |                 |                    |                          |\n| `tool.execution_complete`                                                                                   |                 |                    |                          |\n| Tool                                                                                                        |                 |                    |                          |\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| *(vazio)*                                                                                                   |                 |                    |                          |\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| Permissão                                                                                                   |                 |                    |                          |\n| `requestId`, `permissionRequest`                                                                            |                 |                    |                          |\n| `permission.completed`                                                                                      |                 |                    |                          |\n| Permissão                                                                                                   |                 |                    |                          |\n| `requestId`, `result.kind`                                                                                  |                 |                    |                          |\n| `user_input.requested`                                                                                      | ✅               | Entrada do usuário |                          |\n| `requestId`, `question`, `choices?`                                                                         |                 |                    |                          |\n| `user_input.completed`                                                                                      | ✅               | Entrada do usuário | `requestId`              |\n| `elicitation.requested`                                                                                     | ✅               | Entrada do usuário |                          |\n| `requestId`, `message`, `requestedSchema`                                                                   |                 |                    |                          |\n| `elicitation.completed`                                                                                     | ✅               | Entrada do usuário | `requestId`              |\n| `subagent.started`                                                                                          |                 |                    |                          |\n| Subagente                                                                                                   |                 |                    |                          |\n| `toolCallId`, `agentName`, , `agentDisplayName``model?`                                                     |                 |                    |                          |\n| `subagent.completed`                                                                                        |                 |                    |                          |\n| Subagente                                                                                                   |                 |                    |                          |\n| `toolCallId`, `agentName`, `agentDisplayName`, `model?`, , `durationMs?`, `totalTokens?`, `totalToolCalls?` |                 |                    |                          |\n| `subagent.failed`                                                                                           |                 |                    |                          |\n| Subagente                                                                                                   |                 |                    |                          |\n| `toolCallId`, `agentName`, `error`, `model?`, , `durationMs?`, `totalTokens?`, `totalToolCalls?`            |                 |                    |                          |\n| `subagent.selected`                                                                                         |                 |                    |                          |\n| Subagente                                                                                                   |                 |                    |                          |\n| `agentName`, `agentDisplayName`, `tools`                                                                    |                 |                    |                          |\n| `subagent.deselected`                                                                                       |                 |                    |                          |\n| Subagente                                                                                                   |                 |                    |                          |\n| *(vazio)*                                                                                                   |                 |                    |                          |\n| `skill.invoked`                                                                                             |                 |                    |                          |\n| Habilidade                                                                                                  |                 |                    |                          |\n| `name`, `path`, , `content``allowedTools?`                                                                  |                 |                    |                          |\n| `abort`                                                                                                     |                 |                    |                          |\n| Controle                                                                                                    | `reason`        |                    |                          |\n| `user.message`                                                                                              |                 |                    |                          |\n| Usuário                                                                                                     |                 |                    |                          |\n| `content`, `attachments?`, `agentMode?`                                                                     |                 |                    |                          |\n| `system.message`                                                                                            |                 |                    |                          |\n| System                                                                                                      |                 |                    |                          |\n| `content`, `role`                                                                                           |                 |                    |                          |\n| `external_tool.requested`                                                                                   |                 |                    |                          |\n| Ferramenta Externa                                                                                          |                 |                    |                          |\n| `requestId`, `toolName`, `arguments?`                                                                       |                 |                    |                          |\n| `external_tool.completed`                                                                                   |                 |                    |                          |\n| Ferramenta Externa                                                                                          | `requestId`     |                    |                          |\n| `command.queued`                                                                                            | ✅               | Command            |                          |\n| `requestId`, `command`                                                                                      |                 |                    |                          |\n| `command.completed`                                                                                         | ✅               | Command            | `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`                                                                                  | ✅               | Modo Planejamento  |                          |\n| `requestId`, `summary`, , `planContent``actions`                                                            |                 |                    |                          |\n| `exit_plan_mode.completed`                                                                                  | ✅               | Modo Planejamento  | `requestId`              |"}