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

# Sessioncontext en filtering

> Leer hoe je met SessionContext en SessionListFilter van de Laravel Copilot SDK sessions bekijkt en filtert op werkdirectory en Git-informatie.

## Sessioncontext en filtering

Vanaf GitHub Copilot SDK v0.1.24 is aan sessions een context toegevoegd met de werkdirectory en Git-informatie, en kun je de sessionlijst hierop filteren.

## SessionContext

`SessionContext` bevat de werkdirectory en Git-repository-informatie op het moment dat de session werd aangemaakt.

### Properties

* `cwd` (`string`): Absoluut pad van de werkdirectory
* `gitRoot` (`?string`): Rootdirectory van de Git-repository (`null` buiten een Git-repository)
* `repository` (`?string`): GitHub-repository (in het formaat `owner/repo`, bijv. `invokable/laravel-copilot-sdk`)
* `branch` (`?string`): Naam van de huidige Git-branch

### Voorbeeld

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

// De sessionlijst ophalen
$sessions = Copilot::client()->listSessions();

foreach ($sessions as $metadata) {
    echo "Session: {$metadata->sessionId}\n";

    if ($metadata->context !== null) {
        echo "  Werkdirectory: {$metadata->context->cwd}\n";

        if ($metadata->context->repository !== null) {
            echo "  Repository: {$metadata->context->repository}\n";
            echo "  Branch: {$metadata->context->branch}\n";
        }
    }
}
```

## SessionListFilter

Met `SessionListFilter` kun je alleen de sessions van een bepaalde werkdirectory of repository ophalen.

### Properties

* `cwd` (`?string`): Filter op exacte overeenkomst van de werkdirectory
* `gitRoot` (`?string`): Filter op de Git-rootdirectory
* `repository` (`?string`): Filter op repository (formaat `owner/repo`)
* `branch` (`?string`): Filter op branchnaam

### Voorbeelden

#### Filter opgeven als array

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

// Alleen de sessions van een bepaalde repository ophalen
$sessions = Copilot::client()->listSessions([
    'repository' => 'invokable/laravel-copilot-sdk',
]);

// De sessions ophalen die aan een bepaalde branch werken
$sessions = Copilot::client()->listSessions([
    'repository' => 'owner/repo',
    'branch' => 'feature/new-feature',
]);

// De sessions van een bepaalde werkdirectory ophalen
$sessions = Copilot::client()->listSessions([
    'cwd' => '/home/user/projects/my-app',
]);
```

#### De klasse SessionListFilter gebruiken

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

$filter = new SessionListFilter(
    repository: 'owner/repo',
    branch: 'main',
);

$sessions = Copilot::client()->listSessions($filter);
```

## Het event `session.context_changed`

Als de werkdirectory tijdens een session verandert, wordt het event `session.context_changed` afgevuurd.

### Eventtype

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

SessionEventType::SESSION_CONTEXT_CHANGED; // 'session.context_changed'
```

### Eventdata

De eventdata bevat de bijgewerkte contextinformatie.

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

Copilot::start(function ($session) {
    $session->on(function ($event) {
        if ($event->type === 'session.context_changed') {
            $data = $event->data;

            echo "De werkdirectory is gewijzigd\n";
            echo "  cwd: {$data['cwd']}\n";
            echo "  repository: {$data['repository']}\n";
            echo "  branch: {$data['branch']}\n";
        }
    });

    $response = $session->sendAndWait(
        prompt: 'Change to a different directory and list files',
    );
});
```

## SessionMetadata

Aan `SessionMetadata` is de property `context` toegevoegd.

### Nieuwe property

* `context` (`?SessionContext`): Werkdirectory en Git-informatie van de session

### Voorbeeld

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

$sessions = Copilot::client()->listSessions();

foreach ($sessions as $metadata) {
    echo "Session ID: {$metadata->sessionId}\n";
    echo "Starttijd: {$metadata->startTime}\n";

    // context is optioneel, dus een null-check is nodig
    if ($metadata->context !== null) {
        echo "Context:\n";
        echo "  Werkdirectory: {$metadata->context->cwd}\n";

        if ($metadata->context->repository !== null) {
            echo "  Repository: {$metadata->context->repository}\n";
        }

        if ($metadata->context->branch !== null) {
            echo "  Branch: {$metadata->context->branch}\n";
        }
    }

    echo "\n";
}
```

## Praktijkvoorbeelden

### Sessions van een specifiek project ophalen

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

// Alleen de sessions van het Laravel Copilot SDK-project ophalen
$sessions = Copilot::client()->listSessions([
    'repository' => 'invokable/laravel-copilot-sdk',
]);

// Actieve sessions tonen
foreach ($sessions as $metadata) {
    echo "{$metadata->sessionId}: {$metadata->summary}\n";
    echo "  Branch: {$metadata->context->branch}\n";
}
```

### Sessions van feature-branches beheren

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

$sessions = Copilot::client()->listSessions();

$featureSessions = array_filter($sessions, function ($metadata) {
    return $metadata->context !== null
        && str_starts_with($metadata->context->branch ?? '', 'feature/');
});

// Sessions groeperen per feature-branch
$byBranch = [];
foreach ($featureSessions as $metadata) {
    $branch = $metadata->context->branch;
    $byBranch[$branch][] = $metadata;
}

foreach ($byBranch as $branch => $sessions) {
    echo "{$branch}: " . count($sessions) . " sessions\n";
}
```

### Sessions ordenen per werkdirectory

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

$sessions = Copilot::client()->listSessions();

// Groeperen per werkdirectory
$byCwd = [];
foreach ($sessions as $metadata) {
    if ($metadata->context !== null) {
        $cwd = $metadata->context->cwd;
        $byCwd[$cwd][] = $metadata;
    }
}

// Aantal sessions per directory tonen
foreach ($byCwd as $cwd => $sessions) {
    echo "{$cwd}: " . count($sessions) . " sessions\n";
}
```

## Aandachtspunten

* `context` bevat alleen Git-gerelateerde informatie (`gitRoot`, `repository`, `branch`) voor sessions die binnen een Git-repository zijn aangemaakt.
* Het veld `context` is beschikbaar vanaf Copilot CLI v0.0.409. Oudere versies retourneren `null`.
* Filtering werkt op basis van exacte overeenkomst. Gedeeltelijke matches en wildcards worden niet ondersteund.
* Alle velden van `SessionListFilter` zijn optioneel. Zonder filter worden alle sessions geretourneerd.

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


## Related topics

- [Session hooks](/nl/packages/laravel-copilot-sdk/hooks.md)
- [WebSocket (Jetstream / Firehose)](/nl/packages/laravel-bluesky/websocket.md)
- [laravel/agent-skills — de officiële Laravel-collectie van AI-agentskills](/nl/blog/agent-skills-introduction.md)
- [Streaming events](/nl/packages/laravel-copilot-sdk/streaming-events.md)
- [send() en on()](/nl/packages/laravel-copilot-sdk/send-on.md)
