> ## 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-Lebenszyklus-Ereignisse

> Beschreibt, wie Sie im Laravel Copilot SDK Ereignisse für Session-Erstellung, -Aktualisierung, -Löschung und Vordergrund-/Hintergrundwechsel abonnieren.

## Session-Lebenszyklus-Ereignisse

Session-Lebenszyklus-Ereignisse informieren über das Erstellen, Löschen und Aktualisieren von Sessions sowie über Wechsel zwischen Vordergrund und Hintergrund (im TUI+Server-Modus).

## Ereignistypen

Im Enum `SessionLifecycleEventType` sind fünf Ereignistypen definiert.

| Ereignis             | Beschreibung                                     |
| -------------------- | ------------------------------------------------ |
| `session.created`    | Eine neue Session wurde erstellt                 |
| `session.deleted`    | Eine Session wurde gelöscht                      |
| `session.updated`    | Eine Session wurde aktualisiert                  |
| `session.foreground` | Eine Session wurde in den Vordergrund verschoben |
| `session.background` | Eine Session wurde in den Hintergrund verschoben |

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

// Wert des Ereignistyps abrufen
echo SessionLifecycleEventType::SESSION_CREATED->value; // 'session.created'
```

## Ereignisse abonnieren

Mit der Methode `onLifecycle()` können Sie Session-Lebenszyklus-Ereignisse abonnieren.

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

// Client abrufen und Lebenszyklus-Ereignisse abonnieren
$client = Copilot::client();

// Alle Lebenszyklus-Ereignisse abonnieren
$unsubscribe = $client->onLifecycle(function (SessionLifecycleEvent $event) {
    match ($event->type) {
        SessionLifecycleEventType::SESSION_CREATED => info("セッション作成: {$event->sessionId}"),
        SessionLifecycleEventType::SESSION_DELETED => info("セッション削除: {$event->sessionId}"),
        SessionLifecycleEventType::SESSION_FOREGROUND => info("フォアグラウンド: {$event->sessionId}"),
        SessionLifecycleEventType::SESSION_BACKGROUND => info("バックグラウンド: {$event->sessionId}"),
        default => null,
    };
});

// Abonnement beenden
$unsubscribe();
```

## SessionLifecycleEvent

`SessionLifecycleEvent` ist eine Readonly-Klasse mit den Details eines Lebenszyklus-Ereignisses.

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

readonly class SessionLifecycleEvent implements Arrayable
{
    public function __construct(
        public SessionLifecycleEventType $type,  // Ereignistyp
        public string $sessionId,                 // Session-ID
        public ?SessionLifecycleEventMetadata $metadata = null,  // Metadaten (bei Löschung nicht enthalten)
    ) {}
}
```

### SessionLifecycleEventMetadata

Eine Klasse mit den Metadaten einer Session (in Lösch-Ereignissen nicht enthalten).

```php theme={null}
readonly class SessionLifecycleEventMetadata implements Arrayable
{
    public function __construct(
        public string $startTime,      // Startzeit der Session
        public string $modifiedTime,   // Zeitpunkt der letzten Aktualisierung
        public ?string $summary = null, // Zusammenfassung der Session
    ) {}
}
```

## Verwaltung der Vordergrund-Session

Wenn Sie mit einem Server im TUI+Server-Modus (`--ui-server`) verbunden sind, können Sie die Vordergrund-Session verwalten.

### Aktuelle Vordergrund-Session abrufen

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

$client = Copilot::client();

// Aktuelle Session-ID abrufen, die in der TUI angezeigt wird
$sessionId = $client->getForegroundSessionId();

if ($sessionId !== null) {
    echo "現在のフォアグラウンドセッション: {$sessionId}";
}
```

### Vordergrund-Session setzen

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

$client = Copilot::client();

// Eine bestimmte Session in der TUI anzeigen
$client->setForegroundSessionId('session-123');
```

## ForegroundSessionInfo

Eine Readonly-Klasse mit Informationen zur Vordergrund-Session.

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

readonly class ForegroundSessionInfo implements Arrayable
{
    public function __construct(
        public ?string $sessionId = null,      // ID der Vordergrund-Session
        public ?string $workspacePath = null,  // Workspace-Pfad
    ) {}
}
```

## Verwendung im TCP-Modus

Sie können die Copilot CLI im TUI+Server-Modus starten und über das SDK verbinden, um Lebenszyklus-Ereignisse zu nutzen.

```bash theme={null}
# Copilot CLI im TUI+Server-Modus starten
copilot --ui-server --port 8080
```

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

// Im TCP-Modus mit dem Server verbinden
$client = Copilot::useTcp('tcp://127.0.0.1:8080')->client();

// Lebenszyklus-Ereignisse abonnieren
$client->onLifecycle(function (SessionLifecycleEvent $event) {
    // Ereignisverarbeitung
});
```

## Hinweise

* Die Ereignisse `session.foreground` und `session.background` treten nur im TUI+Server-Modus auf
* Beim Lösch-Ereignis (`session.deleted`) ist die Eigenschaft `metadata` `null`
* `onLifecycle()` gibt eine Callback-Funktion zum Beenden des Abonnements zurück
* Dies ist eine andere Funktion als `onSessionStart` und `onSessionEnd` aus den [Session-Hooks](/de/packages/laravel-copilot-sdk/hooks)

<Info>
  Aktuelle Informationen finden Sie im [GitHub-Repository](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [Session-Hooks](/de/packages/laravel-copilot-sdk/hooks.md)
- [Request-Lebenszyklus](/de/lifecycle.md)
- [Streaming-Ereignisse](/de/packages/laravel-copilot-sdk/streaming-events.md)
- [SessionConfig](/de/packages/laravel-copilot-sdk/session-config.md)
- [Cloud Sessions](/de/packages/laravel-copilot-sdk/cloud-sessions.md)
