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

# Événements de cycle de vie de session

> Découvrez comment vous abonner aux événements de création, suppression, mise à jour et changement d'état premier plan de session avec Laravel Copilot SDK.

## Événements de cycle de vie de session

Ces événements notifient la création, la suppression, la mise à jour d'une session ainsi que le passage au premier plan/à l'arrière-plan (en mode TUI+serveur).

## Types d'événements

Cinq types sont définis dans l'enum `SessionLifecycleEventType`.

| Événement            | Description                            |
| -------------------- | -------------------------------------- |
| `session.created`    | Une nouvelle session a été créée       |
| `session.deleted`    | Une session a été supprimée            |
| `session.updated`    | Une session a été mise à jour          |
| `session.foreground` | La session est passée au premier plan  |
| `session.background` | La session est passée à l'arrière-plan |

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

// Récupérer la valeur du type d'événement
echo SessionLifecycleEventType::SESSION_CREATED->value; // 'session.created'
```

## S'abonner aux événements

Utilisez la méthode `onLifecycle()` pour vous abonner aux événements de cycle de vie de session.

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

// Récupère le Client et s'abonne aux événements de cycle de vie
$client = Copilot::client();

// S'abonne à tous les événements de cycle de vie
$unsubscribe = $client->onLifecycle(function (SessionLifecycleEvent $event) {
    match ($event->type) {
        SessionLifecycleEventType::SESSION_CREATED => info("Session créée : {$event->sessionId}"),
        SessionLifecycleEventType::SESSION_DELETED => info("Session supprimée : {$event->sessionId}"),
        SessionLifecycleEventType::SESSION_FOREGROUND => info("Premier plan : {$event->sessionId}"),
        SessionLifecycleEventType::SESSION_BACKGROUND => info("Arrière-plan : {$event->sessionId}"),
        default => null,
    };
});

// Se désabonner
$unsubscribe();
```

## SessionLifecycleEvent

`SessionLifecycleEvent` est une classe readonly contenant le détail de l'événement de cycle de vie.

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

readonly class SessionLifecycleEvent implements Arrayable
{
    public function __construct(
        public SessionLifecycleEventType $type,  // Type d'événement
        public string $sessionId,                 // ID de session
        public ?SessionLifecycleEventMetadata $metadata = null,  // Métadonnées (non incluses en cas de suppression)
    ) {}
}
```

### SessionLifecycleEventMetadata

Classe contenant les métadonnées de la session (absente pour l'événement de suppression).

```php theme={null}
readonly class SessionLifecycleEventMetadata implements Arrayable
{
    public function __construct(
        public string $startTime,      // Heure de début de la session
        public string $modifiedTime,   // Heure de dernière modification
        public ?string $summary = null, // Résumé de session
    ) {}
}
```

## Gestion de la session au premier plan

Lorsque vous êtes connecté à un serveur en mode TUI+serveur (`--ui-server`), vous pouvez gérer la session au premier plan.

### Récupérer la session au premier plan

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

$client = Copilot::client();

// Récupère l'ID de la session actuellement affichée dans le TUI
$sessionId = $client->getForegroundSessionId();

if ($sessionId !== null) {
    echo "Session courante au premier plan : {$sessionId}";
}
```

### Définir la session au premier plan

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

$client = Copilot::client();

// Affiche une session spécifique dans le TUI
$client->setForegroundSessionId('session-123');
```

## ForegroundSessionInfo

Classe readonly contenant les informations sur la session au premier plan.

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

readonly class ForegroundSessionInfo implements Arrayable
{
    public function __construct(
        public ?string $sessionId = null,      // ID de la session au premier plan
        public ?string $workspacePath = null,  // Chemin du workspace
    ) {}
}
```

## Utilisation en mode TCP

Démarrez le Copilot CLI en mode TUI+serveur et connectez-vous depuis le SDK pour exploiter les événements de cycle de vie.

```bash theme={null}
# Démarrer Copilot CLI en mode TUI+serveur
copilot --ui-server --port 8080
```

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

// Se connecter au serveur en mode TCP
$client = Copilot::useTcp('tcp://127.0.0.1:8080')->client();

// S'abonner aux événements de cycle de vie
$client->onLifecycle(function (SessionLifecycleEvent $event) {
    // Traitement de l'événement
});
```

## Points d'attention

* Les événements `session.foreground` et `session.background` ne surviennent qu'en mode TUI+serveur
* Lors d'une suppression (`session.deleted`), la propriété `metadata` est `null`
* `onLifecycle()` renvoie un callback à appeler pour se désabonner
* Ce sont des fonctionnalités distinctes de `onSessionStart` / `onSessionEnd` des [Hooks de session](/fr/packages/laravel-copilot-sdk/hooks)

<Info>
  Pour les dernières informations, consultez le [dépôt GitHub](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [Cycle de vie d'une requête](/fr/lifecycle.md)
- [Hooks de session](/fr/packages/laravel-copilot-sdk/hooks.md)
- [Introduction à Eloquent](/fr/eloquent.md)
- [Observateurs Eloquent et événements de modèle](/fr/advanced/eloquent-observers.md)
- [Événements de streaming](/fr/packages/laravel-copilot-sdk/streaming-events.md)
