> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Streaming-Ereignisse

> Übersicht der Session-Events und deren Payloads, die Sie erhalten, wenn Sie in SessionConfig streaming aktivieren.

## Streaming-Ereignisse

Wenn Sie in `SessionConfig` `streaming: true` setzen, wird der Verlauf einer Session als Ereignisstrom ausgeliefert.
Diese Seite ist eine für Laravel aufbereitete deutsche Fassung der offiziellen `streaming-events.md`.

> Die Seite [SessionEvent](/de/packages/laravel-copilot-sdk/session-event) beschreibt die für Laravel erweiterte `SessionEvent`-Klasse selbst.
> Diese Seite ist eine Referenz, „welche Daten bei welchem Ereignistyp ankommen".

## Überblick

Alle Verarbeitungsschritte des Copilot-Agenten (Reasoning, Nachrichtengenerierung, Tool-Ausführung, Berechtigungsprüfungen usw.) werden als Session-Events übertragen.

* **Ephemeral event**: Nur Echtzeit-Auslieferung. Wird nicht im Session-Log persistiert (beim Fortsetzen nicht erneut abgespielt)
* **Persisted event**: Wird im Session-Log gespeichert (beim Fortsetzen erneut abgespielt)
* **Delta event**: Ereignisse, die in Teilstücken ankommen (z. B. `deltaContent`). Werden zum Gesamtinhalt zusammengefügt
* **`parentId` chain**: Verkettung, in der jedes Event die ID des vorangegangenen Events referenziert

## Event-Envelope (gemeinsame Felder)

Alle Ereignisse haben die folgende gemeinsame Struktur.

| Field       | Type             | Beschreibung                                        |
| ----------- | ---------------- | --------------------------------------------------- |
| `id`        | `string`         | Eindeutige Event-ID (UUID v4)                       |
| `timestamp` | `string`         | Erstellungszeitpunkt (ISO 8601)                     |
| `parentId`  | `string \| null` | ID des vorherigen Events (beim ersten Event `null`) |
| `ephemeral` | `boolean?`       | Bei temporären Events `true`                        |
| `type`      | `string`         | Ereignistyp                                         |
| `data`      | `object`         | Ereignisspezifischer Payload                        |

## Abonnement-Beispiel in Laravel

```php theme={null}
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Enums\SessionEventType;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;
use Revolution\Copilot\Types\SessionEvent;

Copilot::start(function (CopilotSession $session): void {
    // Alle Events
    $session->on(function (SessionEvent $event): void {
        info($event->type(), $event->toArray());
    });

    // Bestimmtes Event
    $session->on(SessionEventType::ASSISTANT_MESSAGE_DELTA, function (SessionEvent $event): void {
        echo $event->deltaContent();
    });

    $session->sendAndWait(prompt: 'Laravelの特徴を教えて');
}, config: new SessionConfig(streaming: true));
```

## Hauptkategorien

## Assistant events

### `assistant.turn_start`

Turn-Start.

* `turnId` (erforderlich)
* `interactionId` (optional)

### `assistant.intent` (ephemeral)

Aktuelle Ausführungsabsicht (z. B. `Exploring codebase`).

* `intent` (erforderlich)

### `assistant.reasoning`

Vollständiger Reasoning-Block.

* `reasoningId` (erforderlich)
* `content` (erforderlich)

### `assistant.reasoning_delta` (ephemeral)

Delta des Reasoning-Textes.

* `reasoningId` (erforderlich)
* `deltaContent` (erforderlich)

### `assistant.message`

Vollständige Nachricht des Assistenten.

Wichtige Felder:

* `messageId` (erforderlich)
* `content` (erforderlich)
* `toolRequests` (optional)
* `reasoningOpaque` / `reasoningText` / `encryptedContent` (optional)
* `phase` / `outputTokens` / `interactionId` (optional)
* `parentToolCallId` (optional, wenn aus einem Sub-Agenten stammend)

### `assistant.message_delta` (ephemeral)

Delta des Nachrichteninhalts.

* `messageId` (erforderlich)
* `deltaContent` (erforderlich)
* `parentToolCallId` (optional)

### `assistant.turn_end`

Turn-Ende.

* `turnId` (erforderlich)

### `assistant.usage` (ephemeral)

Verbrauchsinformationen pro API-Aufruf.

Wichtige Felder:

* `model` (erforderlich)
* `inputTokens` / `outputTokens` / `cost` / `duration` (optional)
* `apiCallId` / `providerCallId` (optional)
* `quotaSnapshots` / `copilotUsage` (optional)

### `assistant.streaming_delta` (ephemeral)

Low-Level-Empfangsfortschritt.

* `totalResponseSizeBytes` (erforderlich)

## Tool execution events

### `tool.execution_start`

Beginn der Tool-Ausführung.

* `toolCallId` (erforderlich)
* `toolName` (erforderlich)
* `arguments` / `mcpServerName` / `mcpToolName` / `parentToolCallId` (optional)

### `tool.execution_partial_result` (ephemeral)

Teilweise Ausgabe während der Tool-Ausführung.

* `toolCallId` (erforderlich)
* `partialOutput` (erforderlich)

### `tool.execution_progress` (ephemeral)

Fortschrittsnachricht.

* `toolCallId` (erforderlich)
* `progressMessage` (erforderlich)

### `tool.execution_complete`

Abschluss der Tool-Ausführung (Erfolg/Misserfolg).

* `toolCallId` (erforderlich)
* `success` (erforderlich)
* `result` (bei Erfolg)
* `error` (bei Fehlschlag)
* `toolTelemetry` / `parentToolCallId` (optional)

### `tool.user_requested`

Tool-Aufruf auf explizite Nutzeranforderung.

* `toolCallId` (erforderlich)
* `toolName` (erforderlich)
* `arguments` (optional)

## Session lifecycle events

### `session.start`

Session-Start. Bei Cloud Sessions ist es sicher, den ersten Prompt erst zu senden, nachdem `producer` das `session.start` des `copilot-agent` bestätigt hat.

* `producer` (optional)

### `session.idle` (ephemeral)

Aktuelle Verarbeitung abgeschlossen, System wartet auf nächste Eingabe.

* `backgroundTasks` (optional)

### `session.error`

Fehler während der Session-Verarbeitung.

* `errorType` (erforderlich)
* `message` (erforderlich)
* `stack` / `statusCode` / `providerCallId` (optional)

### `session.compaction_start`

Beginn der Kontextkompaktierung (`data` ist ein leeres Objekt).

### `session.compaction_complete`

Kontextkompaktierung abgeschlossen.

Wichtige Felder:

* `success` (erforderlich)
* `error` (optional)
* `preCompactionTokens` / `postCompactionTokens` (optional)
* `summaryContent` / `checkpointPath` (optional)

### `session.title_changed` (ephemeral)

Automatische Titelaktualisierung.

* `title` (erforderlich)

### `session.context_changed`

Wechsel des Arbeitskontexts.

* `cwd` (erforderlich)
* `gitRoot` / `repository` / `branch` (optional)

### `session.info`

Session-Informationen, z. B. eine Remote-URL.

* `infoType` (erforderlich)
* `url` (optional, z. B. wenn `infoType` `remote` ist)

### `session.remote_steerable_changed`

Ereignis, das eine Änderung der Fernsteuerbarkeit aus Mission Control anzeigt.

* `remoteSteerable` (optional)

### `session.usage_info` (ephemeral)

Nutzung des Context-Windows.

* `tokenLimit` (erforderlich)
* `currentTokens` (erforderlich)
* `messagesLength` (erforderlich)

### `session.task_complete`

Benachrichtigung über Aufgabenabschluss.

* `summary` (optional)

### `session.shutdown`

Session-Ende.

Wichtige Felder:

* `shutdownType` (erforderlich)
* `errorReason` (optional)
* `totalPremiumRequests` / `totalApiDurationMs` (erforderlich)
* `codeChanges` / `modelMetrics` (erforderlich)

## Permission / user input events

### `permission.requested` (ephemeral)

Berechtigungsabfrage.

* `requestId` (erforderlich)
* `permissionRequest` (erforderlich)

`permissionRequest.kind`:

* `shell`
* `write`
* `read`
* `mcp`
* `url`
* `memory`
* `custom-tool`

### `permission.completed` (ephemeral)

Ergebnis der Berechtigungsanfrage.

* `requestId` (erforderlich)
* `result.kind` (erforderlich)

### `user_input.requested` (ephemeral)

Frage an den Nutzer.

* `requestId` (erforderlich)
* `question` (erforderlich)
* `choices` / `allowFreeform` (optional)

### `user_input.completed` (ephemeral)

Abschluss der Benutzereingabe.

* `requestId` (erforderlich)

### `elicitation.requested` (ephemeral)

Anfrage nach strukturierter Eingabe (Formular).

* `requestId` (erforderlich)
* `message` (erforderlich)
* `requestedSchema` (erforderlich)

### `elicitation.completed` (ephemeral)

Abschluss der strukturierten Eingabe.

* `requestId` (erforderlich)

## Sub-agent / skill events

### `subagent.started`

* `toolCallId` (erforderlich)
* `agentName` / `agentDisplayName` / `agentDescription` (erforderlich)

### `subagent.completed`

* `toolCallId` (erforderlich)
* `agentName` / `agentDisplayName` (erforderlich)

### `subagent.failed`

* `toolCallId` (erforderlich)
* `agentName` / `agentDisplayName` (erforderlich)
* `error` (erforderlich)

### `subagent.selected`

* `agentName` (erforderlich)
* `agentDisplayName` (erforderlich)
* `tools` (erforderlich, `null` zulässig)

### `subagent.deselected`

Rückkehr zum Standard-Agenten (`data` ist ein leeres Objekt).

### `skill.invoked`

* `name` / `path` / `content` (erforderlich)
* `allowedTools` / `pluginName` / `pluginVersion` (optional)

## Other events

### `abort`

* `reason` (erforderlich)

### `user.message`

* `content` (erforderlich)
* `transformedContent` / `attachments` / `source` / `agentMode` / `interactionId` (optional)

### `system.message`

* `content` (erforderlich)
* `role` (erforderlich)
* `name` / `metadata` (optional)

### `external_tool.requested` (ephemeral)

* `requestId` / `sessionId` / `toolCallId` / `toolName` (erforderlich)
* `arguments` (optional)

### `external_tool.completed` (ephemeral)

* `requestId` (erforderlich)

### `exit_plan_mode.requested` (ephemeral)

* `requestId` / `summary` / `planContent` / `actions` / `recommendedAction` (erforderlich)

### `exit_plan_mode.completed` (ephemeral)

* `requestId` (erforderlich)

### `command.queued` (ephemeral)

* `requestId` (erforderlich)
* `command` (erforderlich)

### `command.completed` (ephemeral)

* `requestId` (erforderlich)

## Typische Reihenfolge der Events

```text theme={null}
assistant.turn_start
├── assistant.intent (ephemeral)
├── assistant.reasoning_delta (ephemeral, mehrfach)
├── assistant.reasoning
├── assistant.message_delta (ephemeral, mehrfach)
├── assistant.message
├── assistant.usage (ephemeral)
├── [bei Bedarf permission / tool.* in Schleife]
assistant.turn_end
session.idle (ephemeral)
```

## Übersicht aller Events (Quickreferenz)

| Event Type                         | Ephemeral | Category      |
| ---------------------------------- | --------- | ------------- |
| `session.start`                    |           | Session       |
| `assistant.turn_start`             |           | Assistant     |
| `assistant.intent`                 | ✅         | Assistant     |
| `assistant.reasoning`              |           | Assistant     |
| `assistant.reasoning_delta`        | ✅         | Assistant     |
| `assistant.streaming_delta`        | ✅         | Assistant     |
| `assistant.message`                |           | Assistant     |
| `assistant.message_delta`          | ✅         | Assistant     |
| `assistant.turn_end`               |           | Assistant     |
| `assistant.usage`                  | ✅         | Assistant     |
| `tool.user_requested`              |           | Tool          |
| `tool.execution_start`             |           | Tool          |
| `tool.execution_partial_result`    | ✅         | Tool          |
| `tool.execution_progress`          | ✅         | Tool          |
| `tool.execution_complete`          |           | Tool          |
| `session.idle`                     | ✅         | Session       |
| `session.error`                    |           | Session       |
| `session.compaction_start`         |           | Session       |
| `session.compaction_complete`      |           | Session       |
| `session.title_changed`            | ✅         | Session       |
| `session.context_changed`          |           | Session       |
| `session.info`                     |           | Session       |
| `session.remote_steerable_changed` |           | Session       |
| `session.usage_info`               | ✅         | Session       |
| `session.task_complete`            |           | Session       |
| `session.shutdown`                 |           | Session       |
| `permission.requested`             | ✅         | Permission    |
| `permission.completed`             | ✅         | Permission    |
| `user_input.requested`             | ✅         | User Input    |
| `user_input.completed`             | ✅         | User Input    |
| `elicitation.requested`            | ✅         | User Input    |
| `elicitation.completed`            | ✅         | User Input    |
| `subagent.started`                 |           | Sub-Agent     |
| `subagent.completed`               |           | Sub-Agent     |
| `subagent.failed`                  |           | Sub-Agent     |
| `subagent.selected`                |           | Sub-Agent     |
| `subagent.deselected`              |           | Sub-Agent     |
| `skill.invoked`                    |           | Skill         |
| `abort`                            |           | Control       |
| `user.message`                     |           | User          |
| `system.message`                   |           | System        |
| `external_tool.requested`          | ✅         | External Tool |
| `external_tool.completed`          | ✅         | External Tool |
| `command.queued`                   | ✅         | Command       |
| `command.completed`                | ✅         | Command       |
| `exit_plan_mode.requested`         | ✅         | Plan Mode     |
| `exit_plan_mode.completed`         | ✅         | Plan Mode     |

## Verwandte Dokumentation

* [Offizielle Streaming Events-Referenz](https://github.com/github/copilot-sdk/blob/main/docs/features/streaming-events.md)
* Erläuterung der Event-Klasse in der Laravel-Version: [SessionEvent](/de/packages/laravel-copilot-sdk/session-event)
* Implementierungsmuster für Streaming: [Streaming](/de/packages/laravel-copilot-sdk/streaming)


## Related topics

- [Fleet Mode](/de/packages/laravel-copilot-sdk/fleet-mode.md)
- [Cloud Sessions](/de/packages/laravel-copilot-sdk/cloud-sessions.md)
- [Agent-Loop](/de/packages/laravel-copilot-sdk/agent-loop.md)
- [Streaming](/de/packages/laravel-copilot-sdk/streaming.md)
- [Session-Lebenszyklus-Ereignisse](/de/packages/laravel-copilot-sdk/session-lifecycle-event.md)
