# Ereignisse einer Streaming-Sitzung

Jede Aktion, die der Copilot-Agent ausführt – etwa Denken, Schreiben von Code oder Ausführen von Tools – wird als Session-Ereignis ausgegeben, das Sie abonnieren können. Dieses Handbuch ist ein Verweis auf Feldebene für jeden Ereignistyp, sodass Sie genau wissen, welche Daten erwartet werden, ohne die SDK-Quelle zu lesen.

<!-- markdownlint-disable GHD046 GHD005 -->

<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->

## Übersicht

Wenn `streaming: true` für eine Sitzung festgelegt wird, sendet das SDK **kurzlebige** Ereignisse in Echtzeit (Deltas, Statusaktualisierungen) neben **dauerhaften** Ereignissen (vollständige Nachrichten, Toolergebnisse). Alle Ereignisse teilen einen gemeinsamen Umschlag und tragen eine `data` Nutzlast, deren Shape vom Ereignis `type`abhängt.

![Diagramm: Sequenzdiagramm mit dem beschriebenen Prozess.](/assets/images/help/copilot/copilot-sdk/features-streaming-events-diagram-0.png)

| Konzept                    | Description                                                                                                                                   |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| **Ephemerales Ereignis**   | Vorübergehende; in Echtzeit gestreamt, aber **nicht** im Sitzungsprotokoll gespeichert. Wird beim Fortsetzen der Sitzung nicht wiedergegeben. |
| **Persistiertes Ereignis** | Im Sitzungsereignisprotokoll auf dem Datenträger gespeichert. Wird wiedergegeben, wenn eine Sitzung fortgesetzt wird.                         |
| **Delta-Ereignis**         | Ein ephemerer Streamingabschnitt (Text oder Argumentation). Sammeln Sie Deltas, um den vollständigen Inhalt zu erstellen.                     |
| **`parentId` Kette**       | Jedes Ereignis `parentId` verweist auf das vorherige Ereignis und bildet eine verknüpfte Liste, die Sie durchlaufen können.                   |

## Ereignishülle

Jedes Sitzungsereignis umfasst unabhängig vom Typ die folgenden Felder:

| Feld                                                                                           | Typ                              | Description                                                               |
| ---------------------------------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------- |
| `id`                                                                                           |                                  |                                                                           |
| `string` (UUID v4)                                                                             | Eindeutiger Ereignisbezeichner   |                                                                           |
| `timestamp`                                                                                    |                                  |                                                                           |
| `string` (ISO 8601)                                                                            | Wann das Ereignis erstellt wurde |                                                                           |
| `parentId`                                                                                     | `string \| null`                 | ID des vorherigen Ereignisses in der Kette; `null` für das erste Ereignis |
| `ephemeral`                                                                                    | `boolean?`                       |                                                                           |
| `true` für vorübergehende Ereignisse; nicht vorhanden oder `false` für beibehaltene Ereignisse |                                  |                                                                           |
| `type`                                                                                         | `string`                         | Diskriminator des Ereignistyps (siehe Tabellen unten)                     |
| `data`                                                                                         | `object`                         | Ereignisspezifische Nutzlast                                              |

## Abonnieren von Ereignissen

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="typescript" data-label="TypeScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">TypeScript</div>

```typescript
// All events
session.on((event) => {
    console.log(event.type, event.data);
});

// Specific event type — data is narrowed automatically
session.on("assistant.message_delta", (event) => {
    process.stdout.write(event.data.deltaContent);
});
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

```python
from copilot import CopilotClient
from copilot.generated.session_events import SessionEventType

client = CopilotClient()

session = None  # assume session is created elsewhere

def handle(event):
    if event.type == SessionEventType.ASSISTANT_MESSAGE_DELTA:
        print(event.data.delta_content, end="", flush=True)

# session.on(handle)
```

```python
from copilot.generated.session_events import SessionEventType

def handle(event):
    if event.type == SessionEventType.ASSISTANT_MESSAGE_DELTA:
        print(event.data.delta_content, end="", flush=True)

session.on(handle)
```

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

```golang
package main

import (
    "context"
    "fmt"
    copilot "github.com/github/copilot-sdk/go"
    "github.com/github/copilot-sdk/go/rpc"
)

func main() {
    ctx := context.Background()
    client := copilot.NewClient(nil)

    session, _ := client.CreateSession(ctx, &copilot.SessionConfig{
        Model:     "gpt-4.1",
        Streaming: copilot.Bool(true),
        OnPermissionRequest: func(req copilot.PermissionRequest, inv copilot.PermissionInvocation) (rpc.PermissionDecision, error) {
            return &rpc.PermissionDecisionApproveOnce{}, nil
        },
    })

    session.On(func(event copilot.SessionEvent) {
        if d, ok := event.Data.(*copilot.AssistantMessageDeltaData); ok {
            fmt.Print(d.DeltaContent)
        }
    })
    _ = session
}
```

```golang
session.On(func(event copilot.SessionEvent) {
    if d, ok := event.Data.(*copilot.AssistantMessageDeltaData); ok {
        fmt.Print(d.DeltaContent)
    }
})
```

</div>

<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

```csharp
using GitHub.Copilot;

public static class StreamingEventsExample
{
    public static async Task Example(CopilotSession session)
    {
        session.On<SessionEvent>(evt =>
        {
            if (evt is AssistantMessageDeltaEvent delta)
            {
                Console.Write(delta.Data.DeltaContent);
            }
        });
    }
}
```

```csharp
session.On<SessionEvent>(evt =>
{
    if (evt is AssistantMessageDeltaEvent delta)
    {
        Console.Write(delta.Data.DeltaContent);
    }
});
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

```java
// All events
session.on(event -> System.out.println(event.getType()));

// Specific event type — data is narrowed to the matching class
session.on(AssistantMessageDeltaEvent.class, event ->
    System.out.print(event.getData().deltaContent())
);
```

</div>

</div>

> \[!TIP]
> **(Python / Go)** Diese SDKs verwenden eine einzelne `Data` Klasse/Struktur mit allen möglichen Feldern als optional/nullable. Nur die felder, die in den folgenden Tabellen aufgeführt sind, werden für jeden Ereignistyp aufgefüllt – der Rest lautet `None` / `nil`.
>
> \[!TIP]
> **(.NET)** Das .NET SDK verwendet separate, stark typierte Datenklassen pro Ereignis (z. B. `AssistantMessageDeltaData`), sodass nur die relevanten Felder für jeden Typ vorhanden sind.
>
> \[!TIP]
> **(TypeScript)** Das TypeScript SDK verwendet ein discriminated union – wenn Sie auf `event.type` passen, wird der `data` Payload automatisch auf die richtige Form eingegrenzt.

## Ereignisse des Assistenten

Diese Ereignisse verfolgen den Lebenszyklus der Antwort des Agents - vom Start der Abzweigung über die Streaming Chunks bis zur endgültigen Nachricht.

### `assistant.turn_start`

Wird ausgelöst, wenn der Agent mit der Verarbeitung eines Ablaufschritts beginnt.

| Datenfeld                                      | Typ      | Erforderlich | Description                                                          |
| ---------------------------------------------- | -------- | ------------ | -------------------------------------------------------------------- |
| `turnId`                                       | `string` | ✅            | Turn-Identifikator (typischerweise eine stringifizierte Turn-Nummer) |
| `interactionId`                                | `string` |              |                                                                      |
| CAPI-Interaktions-ID für Telemetriekorrelation |          |              |                                                                      |

### `assistant.intent`

Flüchtig Kurze Beschreibung dessen, was der Agent gerade tut, aktualisiert während der Vorgang läuft.

| Datenfeld | Typ      | Erforderlich | Description                                      |
| --------- | -------- | ------------ | ------------------------------------------------ |
| `intent`  | `string` | ✅            | Lesbare Absicht (z. B. "Erkunden der Codebasis") |

### `assistant.reasoning`

Schließen Sie die erweiterte Denkblockade des Modells ab. Wird nach Abschluss der Begründung ausgegeben.

| Datenfeld     | Typ      | Erforderlich | Description                                  |
| ------------- | -------- | ------------ | -------------------------------------------- |
| `reasoningId` | `string` | ✅            | Eindeutiger Bezeichner für diesen Logikblock |
| `content`     | `string` | ✅            | Der vollständige erweiterte Denktext         |

### `assistant.reasoning_delta`

Flüchtig Inkrementeller Chunk des erweiterten Denkens des Modells, das in Echtzeit gestreamt wird.

| Datenfeld      | Typ      | Erforderlich | Description                                                       |
| -------------- | -------- | ------------ | ----------------------------------------------------------------- |
| `reasoningId`  | `string` | ✅            | Entspricht dem entsprechenden `assistant.reasoning` Ereignis.     |
| `deltaContent` | `string` | ✅            | Textabschnitt, der an den Inhalt von Gründen angefügt werden soll |

### `assistant.message`

Die vollständige Antwort des Assistenten für diesen LLM-Aufruf. Kann Toolaufrufanforderungen enthalten.

| Datenfeld                                                                   | Typ             | Erforderlich | Description                                |
| --------------------------------------------------------------------------- | --------------- | ------------ | ------------------------------------------ |
| `messageId`                                                                 | `string`        | ✅            | Eindeutiger Bezeichner für diese Nachricht |
| `content`                                                                   | `string`        | ✅            | Die Textantwort des Assistenten            |
| `toolRequests`                                                              | `ToolRequest[]` |              |                                            |
| Toolaufrufe, die der Assistent tätigen möchte (siehe unten)                 |                 |              |                                            |
| `reasoningOpaque`                                                           | `string`        |              |                                            |
| Verschlüsseltes erweitertes Denken (Anthropische Modelle); sitzungsgebunden |                 |              |                                            |
| `reasoningText`                                                             | `string`        |              |                                            |
| Lesbarer Reasoning-Text aus erweitertem Denken                              |                 |              |                                            |
| `encryptedContent`                                                          | `string`        |              |                                            |
| Verschlüsselte Begründungsinhalte (OpenAI-Modelle); sitzungsgebunden        |                 |              |                                            |
| `phase`                                                                     | `string`        |              |                                            |
| Generationsphase (z. B. `"thinking"` vs `"response"`)                       |                 |              |                                            |
| `outputTokens`                                                              | `number`        |              |                                            |
| Tatsächliche Ausgabetokenanzahl aus der API-Antwort                         |                 |              |                                            |
| `interactionId`                                                             | `string`        |              |                                            |
| CAPI-Interaktions-ID für Telemetrie                                         |                 |              |                                            |
| `parentToolCallId`                                                          | `string`        |              |                                            |
| Festlegen, wann diese Nachricht von einem Unter-Agent stammt                |                 |              |                                            |

\*\*
`ToolRequest` Felder:\*\*

| Feld                                                      | Typ                      | Erforderlich | Description                                    |
| --------------------------------------------------------- | ------------------------ | ------------ | ---------------------------------------------- |
| `toolCallId`                                              | `string`                 | ✅            | Eindeutige ID für diesen Toolaufruf            |
| `name`                                                    | `string`                 | ✅            | Toolname (z. B., `"bash"`, `"edit"`, `"grep"`) |
| `arguments`                                               | `object`                 |              |                                                |
| Analysierte Argumente für das Tool                        |                          |              |                                                |
| `type`                                                    | `"function" \| "custom"` |              |                                                |
| Anruftyp; Standardwert: `"function"` wenn nicht vorhanden |                          |              |                                                |

### `assistant.message_delta`

Flüchtig Inkrementeller Chunk der Text-Antwort des Assistenten, der in Echtzeit gestreamt wird.

| Datenfeld                                         | Typ      | Erforderlich | Description                                                 |
| ------------------------------------------------- | -------- | ------------ | ----------------------------------------------------------- |
| `messageId`                                       | `string` | ✅            | Entspricht dem entsprechenden `assistant.message` Ereignis. |
| `deltaContent`                                    | `string` | ✅            | Textabschnitt, der an die Nachricht angefügt werden soll    |
| `parentToolCallId`                                | `string` |              |                                                             |
| Festlegen, wenn sie von einem Unter-Agent stammen |          |              |                                                             |

### `assistant.turn_end`

Wird ausgegeben, wenn der Agent eine Runde abschließt (alle Tool-Ausführungen abgeschlossen, endgültige Antwort geliefert).

| Datenfeld | Typ      | Erforderlich | Description                                                    |
| --------- | -------- | ------------ | -------------------------------------------------------------- |
| `turnId`  | `string` | ✅            | Entspricht dem entsprechenden `assistant.turn_start` Ereignis. |

### `assistant.usage`

Flüchtig Tokenverwendungs- und Kosteninformationen für einen einzelnen API-Aufruf.

| Datenfeld                                                                                | Typ                             | Erforderlich | Description                          |
| ---------------------------------------------------------------------------------------- | ------------------------------- | ------------ | ------------------------------------ |
| `model`                                                                                  | `string`                        | ✅            | Modellbezeichner (z. B. `"gpt-4.1"`) |
| `inputTokens`                                                                            | `number`                        |              |                                      |
| Verbrauchte Eingabetoken                                                                 |                                 |              |                                      |
| `outputTokens`                                                                           | `number`                        |              |                                      |
| Erzeugte Ausgabetoken                                                                    |                                 |              |                                      |
| `cacheReadTokens`                                                                        | `number`                        |              |                                      |
| Token aus dem Prompt-Cache lesen                                                         |                                 |              |                                      |
| `cacheWriteTokens`                                                                       | `number`                        |              |                                      |
| Token werden in den Prompt-Cache geschrieben                                             |                                 |              |                                      |
| `cost`                                                                                   | `number`                        |              |                                      |
| Kosten für den Modellmultiplikator bei der Abrechnung                                    |                                 |              |                                      |
| `duration`                                                                               | `number`                        |              |                                      |
| API-Aufrufdauer in Millisekunden                                                         |                                 |              |                                      |
| `initiator`                                                                              | `string`                        |              |                                      |
| Was diesen Aufruf ausgelöst hat (z. B. `"sub-agent"`); fehlt für vom Benutzer initiierte |                                 |              |                                      |
| `apiCallId`                                                                              | `string`                        |              |                                      |
| Abschluss-ID vom Anbieter (z. B. `chatcmpl-abc123`)                                      |                                 |              |                                      |
| `providerCallId`                                                                         | `string`                        |              |                                      |
| GitHub-Anforderungsablaufverfolgungs-ID (`x-github-request-id`)                          |                                 |              |                                      |
| `parentToolCallId`                                                                       | `string`                        |              |                                      |
| Festlegen, wann die Verwendung von einem Unter-Agent stammt                              |                                 |              |                                      |
| `quotaSnapshots`                                                                         | `Record<string, QuotaSnapshot>` |              |                                      |
| Ressourcennutzung pro Kontingent, schlüsseliert nach Kontingentbezeichner                |                                 |              |                                      |
| `copilotUsage`                                                                           | `CopilotUsage`                  |              |                                      |
| Aufschlüsselung der Kosten für Tokens aus der API                                        |                                 |              |                                      |

### `assistant.streaming_delta`

Flüchtig Niedrigrangige Fortschrittsanzeige – Gesamtanzahl der Bytes, die von der Streaming-API-Antwort empfangen wurden.

| Datenfeld                | Typ      | Erforderlich | Description                        |
| ------------------------ | -------- | ------------ | ---------------------------------- |
| `totalResponseSizeBytes` | `number` | ✅            | Bisher empfangene kumulative Bytes |

## Toolausführungsereignisse

Diese Ereignisse verfolgen den vollständigen Lebenszyklus jedes Toolaufrufs, von der Anforderung durch das Modell über die Ausführung bis zur Fertigstellung.

### `tool.execution_start`

Wird ausgegeben, wenn ein Tool mit der Ausführung beginnt.

| Datenfeld                                                              | Typ      | Erforderlich | Description                                          |
| ---------------------------------------------------------------------- | -------- | ------------ | ---------------------------------------------------- |
| `toolCallId`                                                           | `string` | ✅            | Eindeutiger Bezeichner für diesen Toolaufruf         |
| `toolName`                                                             | `string` | ✅            | Name des Tools (z. B. , `"bash"`, `"edit"`) `"grep"` |
| `arguments`                                                            | `object` |              |                                                      |
| Analysierte Argumente, die an das Tool übergeben werden                |          |              |                                                      |
| `mcpServerName`                                                        | `string` |              |                                                      |
| MCP-Servername, wenn das Tool von einem MCP-Server bereitgestellt wird |          |              |                                                      |
| `mcpToolName`                                                          | `string` |              |                                                      |
| Ursprünglicher Toolname auf dem MCP-Server                             |          |              |                                                      |
| `parentToolCallId`                                                     | `string` |              |                                                      |
| Festlegen, wann von einem Unter-Agent aufgerufen wird                  |          |              |                                                      |

### `tool.execution_partial_result`

Flüchtig Inkrementelle Ausgabe eines laufenden Tools (z. B. gestreamte bash-Ausgabe).

| Datenfeld       | Typ      | Erforderlich | Description                                          |
| --------------- | -------- | ------------ | ---------------------------------------------------- |
| `toolCallId`    | `string` | ✅            | Entspricht dem entsprechenden `tool.execution_start` |
| `partialOutput` | `string` | ✅            | Inkrementeller Ausgabeabschnitt                      |

### `tool.execution_progress`

Flüchtig Menschenlesbarer Fortschrittsstatus von einem laufenden Tool (z. B. Fortschrittsbenachrichtigungen des MCP-Servers).

| Datenfeld         | Typ      | Erforderlich | Description                                          |
| ----------------- | -------- | ------------ | ---------------------------------------------------- |
| `toolCallId`      | `string` | ✅            | Entspricht dem entsprechenden `tool.execution_start` |
| `progressMessage` | `string` | ✅            | Fortschrittsstatusmeldung                            |

### `tool.execution_complete`

Wird ausgegeben, wenn die Ausführung eines Tools abgeschlossen ist – erfolgreich oder mit einem Fehler.

| Datenfeld                                                           | Typ                  | Erforderlich | Description                                          |
| ------------------------------------------------------------------- | -------------------- | ------------ | ---------------------------------------------------- |
| `toolCallId`                                                        | `string`             | ✅            | Entspricht dem entsprechenden `tool.execution_start` |
| `success`                                                           | `boolean`            | ✅            | Ob die Ausführung erfolgreich war                    |
| `model`                                                             | `string`             |              |                                                      |
| Modell, das diesen Toolaufruf generiert hat                         |                      |              |                                                      |
| `interactionId`                                                     | `string`             |              |                                                      |
| CAPI-Interaktions-ID                                                |                      |              |                                                      |
| `isUserRequested`                                                   | `boolean`            |              |                                                      |
|                                                                     |                      |              |                                                      |
| `true` wenn der Benutzer diesen Toolaufruf explizit angefordert hat |                      |              |                                                      |
| `result`                                                            | `Result`             |              |                                                      |
| Bei Erfolg anzeigen (siehe unten)                                   |                      |              |                                                      |
| `error`                                                             | `{ message, code? }` |              |                                                      |
| Vorhanden bei Fehlschlag                                            |                      |              |                                                      |
| `toolTelemetry`                                                     | `object`             |              |                                                      |
| Toolspezifische Telemetrie (z. B. Anzahl der CodeQL-Prüfungen)      |                      |              |                                                      |
| `parentToolCallId`                                                  | `string`             |              |                                                      |
| Festlegen, wann von einem Unter-Agent aufgerufen wird               |                      |              |                                                      |

\*\*
`Result` Felder:\*\*

| Feld                                                                                           | Typ              | Erforderlich | Description                                                                                          |
| ---------------------------------------------------------------------------------------------- | ---------------- | ------------ | ---------------------------------------------------------------------------------------------------- |
| `content`                                                                                      | `string`         | ✅            | Kurzes Ergebnis, das an das LLM gesendet wird (kann aus Gründen der Token-Effizienz verkürzt werden) |
| `detailedContent`                                                                              | `string`         |              |                                                                                                      |
| Vollständiges Ergebnis für die Anzeige, unter Beibehaltung des vollständigen Inhalts wie Diffs |                  |              |                                                                                                      |
| `contents`                                                                                     | `ContentBlock[]` |              |                                                                                                      |
| Strukturierte Inhaltsblöcke (Text, Terminal, Bild, Audio, Ressource)                           |                  |              |                                                                                                      |

### `tool.user_requested`

Wird ausgegeben, wenn der Benutzende explizit einen Tool-Aufruf anfordert (und nicht das Modell selbst einen Aufruf vornimmt).

| Datenfeld                | Typ      | Erforderlich | Description                                      |
| ------------------------ | -------- | ------------ | ------------------------------------------------ |
| `toolCallId`             | `string` | ✅            | Eindeutiger Bezeichner für diesen Toolaufruf     |
| `toolName`               | `string` | ✅            | Name des Tools, das der Benutzer aufrufen möchte |
| `arguments`              | `object` |              |                                                  |
| Argumente für den Aufruf |          |              |                                                  |

## Sitzungslebenszyklusereignisse

### `session.idle`

Flüchtig Der Agent hat die gesamte Verarbeitung abgeschlossen und ist bereit für die nächste Nachricht. Dies ist das Signal, dass eine Drehung vollständig abgeschlossen ist.

| Datenfeld                                                                             | Typ               | Erforderlich | Description |
| ------------------------------------------------------------------------------------- | ----------------- | ------------ | ----------- |
| `backgroundTasks`                                                                     | `BackgroundTasks` |              |             |
| Agents/Shells im Hintergrund, die noch ausgeführt wurden, als der Agent inaktiv wurde |                   |              |             |

### `session.error`

Ein Fehler ist während der Sitzungsverarbeitung aufgetreten.

| Datenfeld                                                                          | Typ      | Erforderlich | Description                                                            |
| ---------------------------------------------------------------------------------- | -------- | ------------ | ---------------------------------------------------------------------- |
| `errorType`                                                                        | `string` | ✅            | Fehlerkategorie (z. B. , `"authentication"`, `"quota"`) `"rate_limit"` |
| `message`                                                                          | `string` | ✅            | Vom Menschen lesbare Fehlermeldung                                     |
| `stack`                                                                            | `string` |              |                                                                        |
| Fehler Stack-Trace                                                                 |          |              |                                                                        |
| `statusCode`                                                                       | `number` |              |                                                                        |
| HTTP-Statuscode aus der upstream-Anforderung                                       |          |              |                                                                        |
| `providerCallId`                                                                   | `string` |              |                                                                        |
| GitHub Anforderungsablaufverfolgungs-ID für die serverseitige Protokollkorrelation |          |              |                                                                        |

### `session.compaction_start`

Die Verdichtung des Kontextfensters hat begonnen.
**Die Datennutzlast ist leer (`{}`)**.

### `session.compaction_complete`

Die Verdichtung des Kontextfensters wurde abgeschlossen.

| Datenfeld                                                            | Typ                              | Erforderlich | Description                                    |
| -------------------------------------------------------------------- | -------------------------------- | ------------ | ---------------------------------------------- |
| `success`                                                            | `boolean`                        | ✅            | Gibt an, ob die Komprimierung erfolgreich war. |
| `error`                                                              | `string`                         |              |                                                |
| Fehlermeldung, wenn die Komprimierung fehlgeschlagen ist             |                                  |              |                                                |
| `preCompactionTokens`                                                | `number`                         |              |                                                |
| Token vor Komprimierung                                              |                                  |              |                                                |
| `postCompactionTokens`                                               | `number`                         |              |                                                |
| Token nach Komprimierung                                             |                                  |              |                                                |
| `preCompactionMessagesLength`                                        | `number`                         |              |                                                |
| Nachrichtenanzahl vor Komprimierung                                  |                                  |              |                                                |
| `messagesRemoved`                                                    | `number`                         |              |                                                |
| Entfernte Nachrichten                                                |                                  |              |                                                |
| `tokensRemoved`                                                      | `number`                         |              |                                                |
| Token entfernt                                                       |                                  |              |                                                |
| `summaryContent`                                                     | `string`                         |              |                                                |
| LLM-generierte Zusammenfassung des komprimierten Verlaufs            |                                  |              |                                                |
| `checkpointNumber`                                                   | `number`                         |              |                                                |
| Nummer des für die Wiederherstellung erstellten Checkpoint-Snapshots |                                  |              |                                                |
| `checkpointPath`                                                     | `string`                         |              |                                                |
| Dateipfad, in dem der Prüfpunkt gespeichert wurde                    |                                  |              |                                                |
| `compactionTokensUsed`                                               | `{ input, output, cachedInput }` |              |                                                |
| Tokenverwendung für den Komprimierungsaufruf des LLM                 |                                  |              |                                                |
| `requestId`                                                          | `string`                         |              |                                                |
| GitHub-Anforderungsablaufverfolgungs-ID für den Kompaktierungsaufruf |                                  |              |                                                |

### `session.title_changed`

Flüchtig Der automatisch generierte Titel der Sitzung wurde aktualisiert.

| Datenfeld | Typ      | Erforderlich | Description         |
| --------- | -------- | ------------ | ------------------- |
| `title`   | `string` | ✅            | Neuer Sitzungstitel |

### `session.context_changed`

Der Arbeitsverzeichnis- oder Repositorykontext der Sitzung wurde geändert.

| Datenfeld                           | Typ      | Erforderlich | Description                  |
| ----------------------------------- | -------- | ------------ | ---------------------------- |
| `cwd`                               | `string` | ✅            | Aktuelles Arbeitsverzeichnis |
| `gitRoot`                           | `string` |              |                              |
| Git-Repository-Stammverzeichnis     |          |              |                              |
| `repository`                        | `string` |              |                              |
| Repository im `"owner/name"` Format |          |              |                              |
| `branch`                            | `string` |              |                              |
| Aktuelle Git-Verzweigung            |          |              |                              |

### `session.usage_info`

Flüchtig Momentaufnahme der Kontextfensterverwendung.

| Datenfeld        | Typ      | Erforderlich | Description                                         |
| ---------------- | -------- | ------------ | --------------------------------------------------- |
| `tokenLimit`     | `number` | ✅            | Maximale Token für das Kontextfenster des Modells   |
| `currentTokens`  | `number` | ✅            | Aktuelle Token im Kontextfenster                    |
| `messagesLength` | `number` | ✅            | Aktuelle Anzahl der Nachrichten in der Konversation |

### `session.task_complete`

Der Agent hat seine zugewiesene Aufgabe abgeschlossen.

| Datenfeld                                    | Typ      | Erforderlich | Description |
| -------------------------------------------- | -------- | ------------ | ----------- |
| `summary`                                    | `string` |              |             |
| Zusammenfassung des abgeschlossenen Vorgangs |          |              |             |

### `session.shutdown`

Die Sitzung wurde beendet.

| Datenfeld                                                    | Typ                                           | Erforderlich | Description                                            |
| ------------------------------------------------------------ | --------------------------------------------- | ------------ | ------------------------------------------------------ |
| `shutdownType`                                               | `"routine" \| "error"`                        | ✅            | Normales Herunterfahren oder Absturz                   |
| `errorReason`                                                | `string`                                      |              |                                                        |
| Fehlerbeschreibung, wenn `shutdownType` gleich `"error"` ist |                                               |              |                                                        |
| `totalPremiumRequests`                                       | `number`                                      | ✅            | Gesamtanzahl der verwendeten Premium-API-Anforderungen |
| `totalApiDurationMs`                                         | `number`                                      | ✅            | Kumulierte API-Aufrufzeit in Millisekunden             |
| `sessionStartTime`                                           | `number`                                      | ✅            | Unix-Zeitstempel (ms) beim Starten der Sitzung         |
| `codeChanges`                                                | `{ linesAdded, linesRemoved, filesModified }` | ✅            | Aggregierte Codeänderungsmetriken                      |
| `modelMetrics`                                               | `Record<string, ModelMetric>`                 | ✅            | Aufschlüsselung der Modellnutzung                      |
| `currentModel`                                               | `string`                                      |              |                                                        |
| Modell zum Zeitpunkt des Herunterfahrens ausgewählt          |                                               |              |                                                        |

## Berechtigungs- und Benutzereingabeereignisse

Diese Ereignisse werden ausgegeben, wenn der Agent eine Genehmigung oder Eingabe des Benutzers benötigt, bevor er fortfahren kann.

### `permission.requested`

Flüchtig Der Agent benötigt die Berechtigung zum Ausführen einer Aktion (Ausführen eines Befehls, Schreiben einer Datei usw.).

| Datenfeld           | Typ                 | Erforderlich | Description                                                               |
| ------------------- | ------------------- | ------------ | ------------------------------------------------------------------------- |
| `requestId`         | `string`            | ✅            | Verwenden Sie dies, um über `session.respondToPermission()` zu antworten. |
| `permissionRequest` | `PermissionRequest` | ✅            | Details der angeforderten Berechtigung                                    |

Der `permissionRequest` ist ein discriminated union auf `kind`:

| `kind`                                                          | Schlüsselfelder                             | Description |
| --------------------------------------------------------------- | ------------------------------------------- | ----------- |
| `"shell"`                                                       |                                             |             |
| `fullCommandText`, `intention`, `commands[]`, `possiblePaths[]` | Ausführen eines Shellbefehls                |             |
| `"write"`                                                       |                                             |             |
| `fileName`, `diff`, `intention`, `newFileContents?`             | Schreiben/Ändern einer Datei                |             |
| `"read"`                                                        |                                             |             |
| `path`, `intention`                                             | Lesen einer Datei oder eines Verzeichnisses |             |
| `"mcp"`                                                         |                                             |             |
| `serverName`, `toolName`, `toolTitle`, `args?`, , `readOnly`    | Aufrufen eines MCP-Tools                    |             |
| `"url"`                                                         |                                             |             |
| `url`, `intention`                                              | Abrufen einer URL                           |             |
| `"memory"`                                                      |                                             |             |
| `subject`, `fact``citations`                                    | Ein Gedächtnis speichern                    |             |
| `"custom-tool"`                                                 |                                             |             |
| `toolName`, `toolDescription``args?`                            | Aufrufen eines benutzerdefinierten Tools    |             |

Alle `kind` Varianten enthalten auch eine optionale `toolCallId` Verknüpfung mit dem Toolaufruf, der die Anforderung ausgelöst hat.

### `permission.completed`

Flüchtig Eine Berechtigungsanfrage wurde gelöst.

| Datenfeld     | Typ      | Erforderlich | Description                                                                                                                                                                         |
| ------------- | -------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `requestId`   | `string` | ✅            | Entspricht dem entsprechenden `permission.requested`                                                                                                                                |
| `result.kind` | `string` | ✅            | Einer von: `"approved"`, , `"denied-by-rules"``"denied-interactively-by-user"`, , `"denied-no-approval-rule-and-could-not-request-from-user"``"denied-by-content-exclusion-policy"` |

### `user_input.requested`

Flüchtig Der Agent stellt dem Benutzer eine Frage.

| Datenfeld                                           | Typ        | Erforderlich | Description                                                              |
| --------------------------------------------------- | ---------- | ------------ | ------------------------------------------------------------------------ |
| `requestId`                                         | `string`   | ✅            | Verwenden Sie dies, um über `session.respondToUserInput()` zu antworten. |
| `question`                                          | `string`   | ✅            | Die Frage, die dem Benutzer präsentiert werden soll                      |
| `choices`                                           | `string[]` |              |                                                                          |
| Vordefinierte Auswahlmöglichkeiten für den Benutzer |            |              |                                                                          |
| `allowFreeform`                                     | `boolean`  |              |                                                                          |
| Gibt an, ob Freiformtexteingaben zulässig sind.     |            |              |                                                                          |

### `user_input.completed`

Flüchtig Eine Benutzereingabeanforderung wurde aufgelöst.

| Datenfeld   | Typ      | Erforderlich | Description                                          |
| ----------- | -------- | ------------ | ---------------------------------------------------- |
| `requestId` | `string` | ✅            | Entspricht dem entsprechenden `user_input.requested` |

### `elicitation.requested`

Flüchtig Der Agent benötigt strukturierte Formulareingaben vom Benutzer (MCP-Elicitationsprotokoll).

| Datenfeld                                | Typ                                         | Erforderlich | Description                                                                |
| ---------------------------------------- | ------------------------------------------- | ------------ | -------------------------------------------------------------------------- |
| `requestId`                              | `string`                                    | ✅            | Verwenden Sie dies, um über `session.respondToElicitation()` zu antworten. |
| `message`                                | `string`                                    | ✅            | Beschreibung der benötigten Informationen                                  |
| `mode`                                   | `"form"`                                    |              |                                                                            |
| Elicitationsmodus (derzeit nur `"form"`) |                                             |              |                                                                            |
| `requestedSchema`                        | `{ type: "object", properties, required? }` | ✅            | JSON-Schema zur Beschreibung der Formularfelder                            |

### `elicitation.completed`

Flüchtig Eine Anfrage wurde behoben.

| Datenfeld   | Typ      | Erforderlich | Description                                           |
| ----------- | -------- | ------------ | ----------------------------------------------------- |
| `requestId` | `string` | ✅            | Entspricht dem entsprechenden `elicitation.requested` |

## Sub-Agenten und Skill-Ereignisse

### `subagent.started`

Ein angepasster Agent wurde als Sub-Agent aufgerufen.

| Datenfeld          | Typ      | Erforderlich | Description                                                         |
| ------------------ | -------- | ------------ | ------------------------------------------------------------------- |
| `toolCallId`       | `string` | ✅            | Übergeordneter Werkzeugaufruf, der diesen Unter-Agenten erzeugt hat |
| `agentName`        | `string` | ✅            | Interner Name des Unter-Agents                                      |
| `agentDisplayName` | `string` | ✅            | Menschenlesbarer Anzeigename                                        |
| `agentDescription` | `string` | ✅            | Beschreibung der Funktionsweise des Unter-Agents                    |

### `subagent.completed`

Ein Sub-Agent wurde erfolgreich abgeschlossen.

| Datenfeld          | Typ      | Erforderlich | Description                                      |
| ------------------ | -------- | ------------ | ------------------------------------------------ |
| `toolCallId`       | `string` | ✅            | Entspricht dem entsprechenden `subagent.started` |
| `agentName`        | `string` | ✅            | Interner Name                                    |
| `agentDisplayName` | `string` | ✅            | Anzeigename                                      |

### `subagent.failed`

Bei einem Unter-Agent ist ein Fehler aufgetreten.

| Datenfeld          | Typ      | Erforderlich | Description                                      |
| ------------------ | -------- | ------------ | ------------------------------------------------ |
| `toolCallId`       | `string` | ✅            | Entspricht dem entsprechenden `subagent.started` |
| `agentName`        | `string` | ✅            | Interner Name                                    |
| `agentDisplayName` | `string` | ✅            | Anzeigename                                      |
| `error`            | `string` | ✅            | Fehlermeldung                                    |

### `subagent.selected`

Ein benutzerdefinierter Agent wurde ausgewählt (abgeleitet), um die aktuelle Anforderung zu verarbeiten.

| Datenfeld          | Typ                | Erforderlich | Description                                                  |
| ------------------ | ------------------ | ------------ | ------------------------------------------------------------ |
| `agentName`        | `string`           | ✅            | Interner Name des ausgewählten Agents                        |
| `agentDisplayName` | `string`           | ✅            | Anzeigename                                                  |
| `tools`            | `string[] \| null` | ✅            | Für diesen Agent verfügbare Toolnamen; `null` für alle Tools |

### `subagent.deselected`

Ein benutzerdefinierter Agent wurde deaktiviert und kehrt zum Standard-Agent zurück.
**Die Datennutzlast ist leer (`{}`)**.

### `skill.invoked`

Für die aktuelle Unterhaltung wurde eine Fähigkeit aktiviert.

| Datenfeld                                                                  | Typ        | Erforderlich | Description                                                           |
| -------------------------------------------------------------------------- | ---------- | ------------ | --------------------------------------------------------------------- |
| `name`                                                                     | `string`   | ✅            | Qualifikationsname                                                    |
| `path`                                                                     | `string`   | ✅            | Dateipfad zur SKILL.md Definition                                     |
| `content`                                                                  | `string`   | ✅            | Vollständiger Skill-Inhalt, der in die Kommunikation eingespeist wird |
| `allowedTools`                                                             | `string[]` |              |                                                                       |
| Werkzeuge werden automatisch genehmigt, solange diese Fähigkeit aktiv ist. |            |              |                                                                       |
| `pluginName`                                                               | `string`   |              |                                                                       |
| Plugin, aus dem die Fertigkeit stammt                                      |            |              |                                                                       |
| `pluginVersion`                                                            | `string`   |              |                                                                       |
| Plugin-Version                                                             |            |              |                                                                       |

## Andere Ereignisse

### `abort`

Die aktuelle Drehung wurde abgebrochen.

| Datenfeld | Typ      | Erforderlich | Description                                                    |
| --------- | -------- | ------------ | -------------------------------------------------------------- |
| `reason`  | `string` | ✅            | Warum die Drehung abgebrochen wurde (z. B. `"user initiated"`) |

### `user.message`

Der Benutzer hat eine Nachricht gesendet. Aufgezeichnet für den Sitzungsverlauf.

| Datenfeld                                                            | Typ            | Erforderlich | Description                       |
| -------------------------------------------------------------------- | -------------- | ------------ | --------------------------------- |
| `content`                                                            | `string`       | ✅            | Der Nachrichtentext des Benutzers |
| `transformedContent`                                                 | `string`       |              |                                   |
| Transformierte Version nach der Vorverarbeitung                      |                |              |                                   |
| `attachments`                                                        | `Attachment[]` |              |                                   |
| Datei-, Verzeichnis-, Auswahl-, Blob- oder GitHub-Referenzanhänge    |                |              |                                   |
| `source`                                                             | `string`       |              |                                   |
| Nachrichtenquellenkennung                                            |                |              |                                   |
| `agentMode`                                                          | `string`       |              |                                   |
| Agentmodus: `"interactive"`, , `"plan"`, `"autopilot"`oder `"shell"` |                |              |                                   |
| `interactionId`                                                      | `string`       |              |                                   |
| CAPI-Interaktions-ID                                                 |                |              |                                   |

### `system.message`

Eine System- oder Entwickleraufforderung wurde in die Unterhaltung eingefügt.

| Datenfeld                    | Typ                              | Erforderlich | Description           |
| ---------------------------- | -------------------------------- | ------------ | --------------------- |
| `content`                    | `string`                         | ✅            | Der Aufforderungstext |
| `role`                       | `"system" \| "developer"`        | ✅            | Nachrichtenfunktion   |
| `name`                       | `string`                         |              |                       |
| Quellenbezeichner            |                                  |              |                       |
| `metadata`                   | `{ promptVersion?, variables? }` |              |                       |
| Metadaten der Prompt-Vorlage |                                  |              |                       |

### `external_tool.requested`

Flüchtig Der Agent möchte ein externes Tool aufrufen (eines, das vom SDK-Consumer bereitgestellt wird).

| Datenfeld              | Typ      | Erforderlich | Description                                                                 |
| ---------------------- | -------- | ------------ | --------------------------------------------------------------------------- |
| `requestId`            | `string` | ✅            | Verwenden Sie dies, um über `session.respondToExternalTool()` zu antworten. |
| `sessionId`            | `string` | ✅            | Sitzung, zu der diese Anforderung gehört                                    |
| `toolCallId`           | `string` | ✅            | Toolaufruf-ID für diesen Aufruf                                             |
| `toolName`             | `string` | ✅            | Name des externen Tools                                                     |
| `arguments`            | `object` |              |                                                                             |
| Argumente für das Tool |          |              |                                                                             |

### `external_tool.completed`

Flüchtig Eine externe Toolanforderung wurde aufgelöst.

| Datenfeld   | Typ      | Erforderlich | Description                                             |
| ----------- | -------- | ------------ | ------------------------------------------------------- |
| `requestId` | `string` | ✅            | Entspricht dem entsprechenden `external_tool.requested` |

### `exit_plan_mode.requested`

Flüchtig Der Agent hat einen Plan erstellt und möchte den Planmodus beenden.

| Datenfeld           | Typ        | Erforderlich | Description                                                                 |
| ------------------- | ---------- | ------------ | --------------------------------------------------------------------------- |
| `requestId`         | `string`   | ✅            | Verwenden Sie dies, um über `session.respondToExitPlanMode()` zu antworten. |
| `summary`           | `string`   | ✅            | Zusammenfassung des Plans                                                   |
| `planContent`       | `string`   | ✅            | Vollständiger Inhalt der Plandatei                                          |
| `actions`           | `string[]` | ✅            | Verfügbare Benutzeraktionen (z. B. Genehmigen, Bearbeiten, Ablehnen)        |
| `recommendedAction` | `string`   | ✅            | Vorgeschlagene Maßnahme                                                     |

### `exit_plan_mode.completed`

Flüchtig Eine Anforderung für den Exit-Plan-Modus wurde aufgelöst.

| Datenfeld   | Typ      | Erforderlich | Description                                              |
| ----------- | -------- | ------------ | -------------------------------------------------------- |
| `requestId` | `string` | ✅            | Entspricht dem entsprechenden `exit_plan_mode.requested` |

### `command.queued`

Flüchtig Ein Slash-Befehl wurde zur Ausführung in die Warteschlange gestellt.

| Datenfeld   | Typ      | Erforderlich | Description                                                                  |
| ----------- | -------- | ------------ | ---------------------------------------------------------------------------- |
| `requestId` | `string` | ✅            | Verwenden Sie dies, um über `session.respondToQueuedCommand()` zu antworten. |
| `command`   | `string` | ✅            | Der Text des Slash-Befehls (z. B. `/help`, `/clear`)                         |

### `command.completed`

Flüchtig Ein Befehl in der Warteschlange wurde aufgelöst.

| Datenfeld   | Typ      | Erforderlich | Description                                    |
| ----------- | -------- | ------------ | ---------------------------------------------- |
| `requestId` | `string` | ✅            | Entspricht dem entsprechenden `command.queued` |

## Kurzübersicht: Agentischer Handlungsfluss

Ein typischer Agent gibt Ereignisse in dieser Reihenfolge aus:

```text
assistant.turn_start          → Turn begins
├── assistant.intent          → What the agent plans to do (ephemeral)
├── assistant.reasoning_delta → Streaming thinking chunks (ephemeral, repeated)
├── assistant.reasoning       → Complete thinking block
├── assistant.message_delta   → Streaming response chunks (ephemeral, repeated)
├── assistant.message         → Complete response (may include toolRequests)
├── assistant.usage           → Token usage for this API call (ephemeral)
│
├── [If tools were requested:]
│   ├── permission.requested  → Needs user approval (ephemeral)
│   ├── permission.completed  → Approval result (ephemeral)
│   ├── tool.execution_start  → Tool begins
│   ├── tool.execution_partial_result  → Streaming tool output (ephemeral, repeated)
│   ├── tool.execution_progress        → Progress updates (ephemeral, repeated)
│   ├── tool.execution_complete        → Tool finished
│   │
│   └── [Agent loops: more reasoning → message → tool calls...]
│
assistant.turn_end            → Turn complete
session.idle                  → Ready for next message (ephemeral)
```

## Alle Ereignistypen auf einen Blick

| Ereignistyp                                                          | Kurzlebig  | Kategorie         | Schlüsseldatenfelder     |
| -------------------------------------------------------------------- | ---------- | ----------------- | ------------------------ |
| `assistant.turn_start`                                               |            |                   |                          |
| Assistent                                                            |            |                   |                          |
| `turnId`, `interactionId?`                                           |            |                   |                          |
| `assistant.intent`                                                   | ✅          | Assistent         | `intent`                 |
| `assistant.reasoning`                                                |            |                   |                          |
| Assistent                                                            |            |                   |                          |
| `reasoningId`, `content`                                             |            |                   |                          |
| `assistant.reasoning_delta`                                          | ✅          | Assistent         |                          |
| `reasoningId`, `deltaContent`                                        |            |                   |                          |
| `assistant.streaming_delta`                                          | ✅          | Assistent         | `totalResponseSizeBytes` |
| `assistant.message`                                                  |            |                   |                          |
| Assistent                                                            |            |                   |                          |
| `messageId`, `content`, `toolRequests?`, `outputTokens?`, , `phase?` |            |                   |                          |
| `assistant.message_delta`                                            | ✅          | Assistent         |                          |
| `messageId`, `deltaContent``parentToolCallId?`                       |            |                   |                          |
| `assistant.turn_end`                                                 |            |                   |                          |
| Assistent                                                            | `turnId`   |                   |                          |
| `assistant.usage`                                                    | ✅          | Assistent         |                          |
| `model`, `inputTokens?`, `outputTokens?`, `cost?`, , `duration?`     |            |                   |                          |
| `tool.user_requested`                                                |            |                   |                          |
| Werkzeug                                                             |            |                   |                          |
| `toolCallId`, `toolName``arguments?`                                 |            |                   |                          |
| `tool.execution_start`                                               |            |                   |                          |
| Werkzeug                                                             |            |                   |                          |
| `toolCallId`, `toolName`, `arguments?`, `mcpServerName?`             |            |                   |                          |
| `tool.execution_partial_result`                                      | ✅          | Werkzeug          |                          |
| `toolCallId`, `partialOutput`                                        |            |                   |                          |
| `tool.execution_progress`                                            | ✅          | Werkzeug          |                          |
| `toolCallId`, `progressMessage`                                      |            |                   |                          |
| `tool.execution_complete`                                            |            |                   |                          |
| Werkzeug                                                             |            |                   |                          |
| `toolCallId`, `success`, `result?`, `error?`                         |            |                   |                          |
| `session.idle`                                                       | ✅          | Session           | `backgroundTasks?`       |
| `session.error`                                                      |            |                   |                          |
| Session                                                              |            |                   |                          |
| `errorType`, `message``statusCode?`                                  |            |                   |                          |
| `session.compaction_start`                                           |            |                   |                          |
| Session                                                              |            |                   |                          |
| *(leer)*                                                             |            |                   |                          |
| `session.compaction_complete`                                        |            |                   |                          |
| Session                                                              |            |                   |                          |
| `success`, `preCompactionTokens?``summaryContent?`                   |            |                   |                          |
| `session.title_changed`                                              | ✅          | Session           | `title`                  |
| `session.context_changed`                                            |            |                   |                          |
| Session                                                              |            |                   |                          |
| `cwd`, `gitRoot?`, `repository?`, `branch?`                          |            |                   |                          |
| `session.usage_info`                                                 | ✅          | Session           |                          |
| `tokenLimit`, `currentTokens``messagesLength`                        |            |                   |                          |
| `session.task_complete`                                              |            |                   |                          |
| Session                                                              | `summary?` |                   |                          |
| `session.shutdown`                                                   |            |                   |                          |
| Session                                                              |            |                   |                          |
| `shutdownType`, `codeChanges``modelMetrics`                          |            |                   |                          |
| `permission.requested`                                               | ✅          | Erlaubnis         |                          |
| `requestId`, `permissionRequest`                                     |            |                   |                          |
| `permission.completed`                                               | ✅          | Erlaubnis         |                          |
| `requestId`, `result.kind`                                           |            |                   |                          |
| `user_input.requested`                                               | ✅          | Benutzereingabe   |                          |
| `requestId`, `question``choices?`                                    |            |                   |                          |
| `user_input.completed`                                               | ✅          | Benutzereingabe   | `requestId`              |
| `elicitation.requested`                                              | ✅          | Benutzereingabe   |                          |
| `requestId`, `message``requestedSchema`                              |            |                   |                          |
| `elicitation.completed`                                              | ✅          | Benutzereingabe   | `requestId`              |
| `subagent.started`                                                   |            |                   |                          |
| Unteragent                                                           |            |                   |                          |
| `toolCallId`, `agentName``agentDisplayName`                          |            |                   |                          |
| `subagent.completed`                                                 |            |                   |                          |
| Unteragent                                                           |            |                   |                          |
| `toolCallId`, `agentName``agentDisplayName`                          |            |                   |                          |
| `subagent.failed`                                                    |            |                   |                          |
| Unteragent                                                           |            |                   |                          |
| `toolCallId`, `agentName``error`                                     |            |                   |                          |
| `subagent.selected`                                                  |            |                   |                          |
| Unteragent                                                           |            |                   |                          |
| `agentName`, `agentDisplayName``tools`                               |            |                   |                          |
| `subagent.deselected`                                                |            |                   |                          |
| Unteragent                                                           |            |                   |                          |
| *(leer)*                                                             |            |                   |                          |
| `skill.invoked`                                                      |            |                   |                          |
| Skill                                                                |            |                   |                          |
| `name`, `path`, `content`, `allowedTools?`                           |            |                   |                          |
| `abort`                                                              |            |                   |                          |
| Steuerung                                                            | `reason`   |                   |                          |
| `user.message`                                                       |            |                   |                          |
| Benutzer                                                             |            |                   |                          |
| `content`, `attachments?``agentMode?`                                |            |                   |                          |
| `system.message`                                                     |            |                   |                          |
| System                                                               |            |                   |                          |
| `content`, `role`                                                    |            |                   |                          |
| `external_tool.requested`                                            | ✅          | Externes Werkzeug |                          |
| `requestId`, `toolName``arguments?`                                  |            |                   |                          |
| `external_tool.completed`                                            | ✅          | Externes Werkzeug | `requestId`              |
| `command.queued`                                                     | ✅          | Befehl            |                          |
| `requestId`, `command`                                               |            |                   |                          |
| `command.completed`                                                  | ✅          | Befehl            | `requestId`              |
| `exit_plan_mode.requested`                                           | ✅          | Planmodus         |                          |
| `requestId`, `summary`, `planContent`, `actions`                     |            |                   |                          |
| `exit_plan_mode.completed`                                           | ✅          | Planmodus         | `requestId`              |