Passer au contenu principal

É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énementDescription
session.createdUne nouvelle session a été créée
session.deletedUne session a été supprimée
session.updatedUne session a été mise à jour
session.foregroundLa session est passée au premier plan
session.backgroundLa session est passée à l’arrière-plan
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.
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.
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).
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

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

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.
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.
# Démarrer Copilot CLI en mode TUI+serveur
copilot --ui-server --port 8080
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
Pour les dernières informations, consultez le dépôt GitHub.
Dernière modification le 13 juillet 2026