> ## 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 events

> Een overzicht van de soorten session events en payloads die je ontvangt wanneer streaming in SessionConfig is ingeschakeld.

## Streaming events

Als je `streaming: true` inschakelt in `SessionConfig`, wordt de activiteit tijdens de session als opeenvolgende events afgeleverd.
Deze pagina is een voor Laravel toegankelijk gemaakte versie van de officiële `streaming-events.md`.

> De pagina [SessionEvent](/nl/packages/laravel-copilot-sdk/session-event) beschrijft de voor Laravel uitgebreide `SessionEvent`-klasse zelf.
> Deze pagina is een referentie voor "welk eventtype welke data aanlevert".

## Overzicht

Alle verwerking van de Copilot-agent (redeneren, berichten genereren, tools uitvoeren, permissiecontroles, enz.) stroomt binnen als session events.

* **Ephemeral event**: alleen realtime aflevering. Wordt niet gepersisteerd in de sessionlog (wordt niet opnieuw afgespeeld bij hervatten)
* **Persisted event**: wordt opgeslagen in de sessionlog (wordt opnieuw afgespeeld bij hervatten)
* **Delta event**: fragmentarische diff-events (zoals `deltaContent`). Voeg ze samen om de volledige tekst te vormen
* **`parentId` chain**: een keten waarin elk event verwijst naar de ID van het vorige event

## Event envelope (gedeelde velden)

Alle events hebben de volgende gedeelde structuur.

| Field       | Type             | Beschrijving                                          |
| ----------- | ---------------- | ----------------------------------------------------- |
| `id`        | `string`         | Unieke event-ID (UUID v4)                             |
| `timestamp` | `string`         | Tijdstip van aanmaak (ISO 8601)                       |
| `parentId`  | `string \| null` | ID van het vorige event (`null` bij het eerste event) |
| `ephemeral` | `boolean?`       | `true` bij een tijdelijk event                        |
| `type`      | `string`         | Eventtype                                             |
| `data`      | `object`         | Eventspecifieke payload                               |

## Voorbeeld van abonneren 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());
    });

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

    $session->sendAndWait(prompt: 'Vertel me over de kenmerken van Laravel');
}, config: new SessionConfig(streaming: true));
```

## Belangrijkste eventcategorieën

## Assistant events

### `assistant.turn_start`

Start van een turn.

* `turnId` (verplicht)
* `interactionId` (optioneel)

### `assistant.intent` (ephemeral)

De huidige uitvoeringsintentie (bijv. `Exploring codebase`).

* `intent` (verplicht)

### `assistant.reasoning`

De voltooide versie van een redeneerblok.

* `reasoningId` (verplicht)
* `content` (verplicht)

### `assistant.reasoning_delta` (ephemeral)

Diff van de redeneertekst.

* `reasoningId` (verplicht)
* `deltaContent` (verplicht)

### `assistant.message`

Het voltooide bericht van de assistent.

Belangrijkste velden:

* `messageId` (verplicht)
* `content` (verplicht)
* `toolRequests` (optioneel)
* `reasoningOpaque` / `reasoningText` / `encryptedContent` (optioneel)
* `phase` / `outputTokens` / `interactionId` (optioneel)
* `parentToolCallId` (optioneel, bij afkomst van een subagent)

### `assistant.message_delta` (ephemeral)

Diff van de berichttekst.

* `messageId` (verplicht)
* `deltaContent` (verplicht)
* `parentToolCallId` (optioneel)

### `assistant.turn_end`

Einde van een turn.

* `turnId` (verplicht)

### `assistant.usage` (ephemeral)

Gebruiksinformatie per API-aanroep.

Belangrijkste velden:

* `model` (verplicht)
* `inputTokens` / `outputTokens` / `cost` / `duration` (optioneel)
* `apiCallId` / `providerCallId` (optioneel)
* `quotaSnapshots` / `copilotUsage` (optioneel)

### `assistant.streaming_delta` (ephemeral)

Ontvangstvoortgang op laag niveau.

* `totalResponseSizeBytes` (verplicht)

## Tool execution events

### `tool.execution_start`

Start van een tooluitvoering.

* `toolCallId` (verplicht)
* `toolName` (verplicht)
* `arguments` / `mcpServerName` / `mcpToolName` / `parentToolCallId` (optioneel)

### `tool.execution_partial_result` (ephemeral)

Gedeeltelijke output tijdens de tooluitvoering.

* `toolCallId` (verplicht)
* `partialOutput` (verplicht)

### `tool.execution_progress` (ephemeral)

Voortgangsbericht.

* `toolCallId` (verplicht)
* `progressMessage` (verplicht)

### `tool.execution_complete`

Voltooiing van de tooluitvoering (succes/mislukking).

* `toolCallId` (verplicht)
* `success` (verplicht)
* `result` (bij succes)
* `error` (bij mislukking)
* `toolTelemetry` / `parentToolCallId` (optioneel)

### `tool.user_requested`

Toolaanroep op expliciet verzoek van de gebruiker.

* `toolCallId` (verplicht)
* `toolName` (verplicht)
* `arguments` (optioneel)

## Session lifecycle events

### `session.start`

Start van de session. Bij Cloud Sessions is het veilig om de eerste prompt pas te versturen nadat je een `session.start` met `producer` gelijk aan `copilot-agent` hebt gezien.

* `producer` (optioneel)

### `session.idle` (ephemeral)

De huidige verwerking is voltooid en er wordt gewacht op de volgende invoer.

* `backgroundTasks` (optioneel)

### `session.error`

Fout tijdens de sessieverwerking.

* `errorType` (verplicht)
* `message` (verplicht)
* `stack` / `statusCode` / `providerCallId` (optioneel)

### `session.compaction_start`

Start van contextcompaction (`data` is een leeg object).

### `session.compaction_complete`

Voltooiing van contextcompaction.

Belangrijkste velden:

* `success` (verplicht)
* `error` (optioneel)
* `preCompactionTokens` / `postCompactionTokens` (optioneel)
* `summaryContent` / `checkpointPath` (optioneel)

### `session.title_changed` (ephemeral)

Automatische titelupdate.

* `title` (verplicht)

### `session.context_changed`

Wijziging van de werkcontext.

* `cwd` (verplicht)
* `gitRoot` / `repository` / `branch` (optioneel)

### `session.info`

Sessie-informatie zoals de remote URL.

* `infoType` (verplicht)
* `url` (optioneel, bijvoorbeeld als `infoType` `remote` is)

### `session.remote_steerable_changed`

Event dat aangeeft dat de mogelijkheid tot remote bediening vanuit Mission Control is gewijzigd.

* `remoteSteerable` (optioneel)

### `session.usage_info` (ephemeral)

Gebruik van het contextvenster.

* `tokenLimit` (verplicht)
* `currentTokens` (verplicht)
* `messagesLength` (verplicht)

### `session.task_complete`

Melding dat een taak is voltooid.

* `summary` (optioneel)

### `session.shutdown`

Einde van de session.

Belangrijkste velden:

* `shutdownType` (verplicht)
* `errorReason` (optioneel)
* `totalPremiumRequests` / `totalApiDurationMs` (verplicht)
* `codeChanges` / `modelMetrics` (verplicht)

## Permission / user input events

### `permission.requested` (ephemeral)

Verzoek om permissiebevestiging.

* `requestId` (verplicht)
* `permissionRequest` (verplicht)

`permissionRequest.kind`:

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

### `permission.completed` (ephemeral)

Het resultaat van de permissiebevestiging.

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

### `user_input.requested` (ephemeral)

Vraag aan de gebruiker.

* `requestId` (verplicht)
* `question` (verplicht)
* `choices` / `allowFreeform` (optioneel)

### `user_input.completed` (ephemeral)

Gebruikersinvoer voltooid.

* `requestId` (verplicht)

### `elicitation.requested` (ephemeral)

Verzoek om gestructureerde invoer (formulier).

* `requestId` (verplicht)
* `message` (verplicht)
* `requestedSchema` (verplicht)

### `elicitation.completed` (ephemeral)

Voltooiing van de gestructureerde invoer.

* `requestId` (verplicht)

## Sub-agent / skill events

### `subagent.started`

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

### `subagent.completed`

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

### `subagent.failed`

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

### `subagent.selected`

* `agentName` (verplicht)
* `agentDisplayName` (verplicht)
* `tools` (verplicht, `null` toegestaan)

### `subagent.deselected`

Terugkeer naar de default agent (`data` is een leeg object).

### `skill.invoked`

* `name` / `path` / `content` (verplicht)
* `allowedTools` / `pluginName` / `pluginVersion` (optioneel)

## Other events

### `abort`

* `reason` (verplicht)

### `user.message`

* `content` (verplicht)
* `transformedContent` / `attachments` / `source` / `agentMode` / `interactionId` (optioneel)

### `system.message`

* `content` (verplicht)
* `role` (verplicht)
* `name` / `metadata` (optioneel)

### `external_tool.requested` (ephemeral)

* `requestId` / `sessionId` / `toolCallId` / `toolName` (verplicht)
* `arguments` (optioneel)

### `external_tool.completed` (ephemeral)

* `requestId` (verplicht)

### `exit_plan_mode.requested` (ephemeral)

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

### `exit_plan_mode.completed` (ephemeral)

* `requestId` (verplicht)

### `command.queued` (ephemeral)

* `requestId` (verplicht)
* `command` (verplicht)

### `command.completed` (ephemeral)

* `requestId` (verplicht)

## Typische eventvolgorde

```text theme={null}
assistant.turn_start
├── assistant.intent (ephemeral)
├── assistant.reasoning_delta (ephemeral, meerdere keren)
├── assistant.reasoning
├── assistant.message_delta (ephemeral, meerdere keren)
├── assistant.message
├── assistant.usage (ephemeral)
├── [indien nodig een loop van permission / tool.*]
assistant.turn_end
session.idle (ephemeral)
```

## Overzicht van alle events (snelle referentie)

| 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     |

## Gerelateerde documentatie

* [Officiële Streaming Events-referentie](https://github.com/github/copilot-sdk/blob/main/docs/features/streaming-events.md)
* Uitleg over de eventklasse in de Laravel-versie: [SessionEvent](/nl/packages/laravel-copilot-sdk/session-event)
* Implementatiepatronen voor streaming: [Streaming](/nl/packages/laravel-copilot-sdk/streaming)


## Related topics

- [Agent loop](/nl/packages/laravel-copilot-sdk/agent-loop.md)
- [Fleet Mode](/nl/packages/laravel-copilot-sdk/fleet-mode.md)
- [Cloud Sessions](/nl/packages/laravel-copilot-sdk/cloud-sessions.md)
- [Streaming](/nl/packages/laravel-copilot-sdk/streaming.md)
- [SessionEvent](/nl/packages/laravel-copilot-sdk/session-event.md)
