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

# Session lifecycle events

> Leer hoe je je in de Laravel Copilot SDK abonneert op events voor het aanmaken, bijwerken en verwijderen van sessions en voorgrondstatuswijzigingen.

## Session lifecycle events

Session lifecycle events zijn events die je informeren over het aanmaken, verwijderen en bijwerken van sessions, en over voorgrond-/achtergrondstatuswijzigingen (in TUI+servermodus).

## Eventtypes

Er zijn vijf eventtypes, gedefinieerd in de enum `SessionLifecycleEventType`.

| Event                | Beschrijving                                  |
| -------------------- | --------------------------------------------- |
| `session.created`    | Er is een nieuwe session aangemaakt           |
| `session.deleted`    | Er is een session verwijderd                  |
| `session.updated`    | Er is een session bijgewerkt                  |
| `session.foreground` | Een session is naar de voorgrond verplaatst   |
| `session.background` | Een session is naar de achtergrond verplaatst |

```php theme={null}
use Revolution\Copilot\Enums\SessionLifecycleEventType;

// De waarde van het eventtype ophalen
echo SessionLifecycleEventType::SESSION_CREATED->value; // 'session.created'
```

## Abonneren op events

Met de methode `onLifecycle()` kun je je abonneren op session lifecycle events.

```php theme={null}
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionLifecycleEvent;

// De client ophalen en abonneren op lifecycle-events
$client = Copilot::client();

// Abonneren op alle lifecycle-events
$unsubscribe = $client->onLifecycle(function (SessionLifecycleEvent $event) {
    match ($event->type) {
        SessionLifecycleEventType::SESSION_CREATED => info("Session aangemaakt: {$event->sessionId}"),
        SessionLifecycleEventType::SESSION_DELETED => info("Session verwijderd: {$event->sessionId}"),
        SessionLifecycleEventType::SESSION_FOREGROUND => info("Voorgrond: {$event->sessionId}"),
        SessionLifecycleEventType::SESSION_BACKGROUND => info("Achtergrond: {$event->sessionId}"),
        default => null,
    };
});

// Het abonnement opzeggen
$unsubscribe();
```

## SessionLifecycleEvent

`SessionLifecycleEvent` is een readonly class met de details van het lifecycle-event.

```php theme={null}
use Revolution\Copilot\Types\SessionLifecycleEvent;
use Revolution\Copilot\Types\SessionLifecycleEventMetadata;

readonly class SessionLifecycleEvent implements Arrayable
{
    public function __construct(
        public SessionLifecycleEventType $type,  // Eventtype
        public string $sessionId,                 // Session-ID
        public ?SessionLifecycleEventMetadata $metadata = null,  // Metadata (niet aanwezig bij verwijdering)
    ) {}
}
```

### SessionLifecycleEventMetadata

Een klasse met de metadata van de session (niet aanwezig bij een verwijder-event).

```php theme={null}
readonly class SessionLifecycleEventMetadata implements Arrayable
{
    public function __construct(
        public string $startTime,      // Starttijd van de session
        public string $modifiedTime,   // Laatste wijzigingstijd
        public ?string $summary = null, // Samenvatting van de session
    ) {}
}
```

## Voorgrondsessions beheren

Als je verbonden bent met een server die in TUI+servermodus (`--ui-server`) draait, kun je de voorgrondsession beheren.

### De huidige voorgrondsession ophalen

```php theme={null}
use Revolution\Copilot\Facades\Copilot;

$client = Copilot::client();

// De session-ID ophalen die momenteel in de TUI wordt getoond
$sessionId = $client->getForegroundSessionId();

if ($sessionId !== null) {
    echo "Huidige voorgrondsession: {$sessionId}";
}
```

### De voorgrondsession instellen

```php theme={null}
use Revolution\Copilot\Facades\Copilot;

$client = Copilot::client();

// Een specifieke session in de TUI tonen
$client->setForegroundSessionId('session-123');
```

## ForegroundSessionInfo

Een readonly class met informatie over de voorgrondsession.

```php theme={null}
use Revolution\Copilot\Types\ForegroundSessionInfo;

readonly class ForegroundSessionInfo implements Arrayable
{
    public function __construct(
        public ?string $sessionId = null,      // ID van de voorgrondsession
        public ?string $workspacePath = null,  // Pad van de workspace
    ) {}
}
```

## Gebruik in TCP-modus

Je kunt lifecycle-events benutten door de Copilot CLI in TUI+servermodus te starten en er vanuit de SDK mee te verbinden.

```bash theme={null}
# De Copilot CLI in TUI+servermodus starten
copilot --ui-server --port 8080
```

```php theme={null}
use Revolution\Copilot\Facades\Copilot;

// In TCP-modus met de server verbinden
$client = Copilot::useTcp('tcp://127.0.0.1:8080')->client();

// Abonneren op lifecycle-events
$client->onLifecycle(function (SessionLifecycleEvent $event) {
    // Events verwerken
});
```

## Aandachtspunten

* De events `session.foreground` en `session.background` treden alleen op in TUI+servermodus
* Bij het verwijderen van een session (`session.deleted`) is de property `metadata` `null`
* `onLifecycle()` retourneert een callback-functie om het abonnement op te zeggen
* Dit is losstaande functionaliteit van `onSessionStart` en `onSessionEnd` van [Session hooks](/nl/packages/laravel-copilot-sdk/hooks)

<Info>
  Raadpleeg de [GitHub-repository](https://github.com/invokable/laravel-copilot-sdk) voor de meest actuele informatie.
</Info>


## Related topics

- [Aan de slag - GitHub Copilot SDK voor Laravel](/nl/packages/laravel-copilot-sdk/getting-started.md)
- [SessionEvent](/nl/packages/laravel-copilot-sdk/session-event.md)
- [Sessioncontext en filtering](/nl/packages/laravel-copilot-sdk/session-context.md)
- [Session hooks](/nl/packages/laravel-copilot-sdk/hooks.md)
- [Request lifecycle](/nl/lifecycle.md)
