Zum Hauptinhalt springen

Session-Kontext und Filterung

Ab GitHub Copilot SDK v0.1.24 enthält jede Session einen Kontext mit Arbeitsverzeichnis und Git-Informationen, und Sie können die Session-Liste danach filtern.

SessionContext

SessionContext enthält Arbeitsverzeichnis und Git-Repository-Informationen zum Zeitpunkt der Session-Erstellung.

Eigenschaften

  • cwd (string): Absoluter Pfad des Arbeitsverzeichnisses
  • gitRoot (?string): Wurzelverzeichnis des Git-Repositorys (außerhalb eines Git-Repos null)
  • repository (?string): GitHub-Repository (Format owner/repo, z. B. invokable/laravel-copilot-sdk)
  • branch (?string): Aktueller Git-Branch-Name

Anwendungsbeispiel

use Revolution\Copilot\Facades\Copilot;

// Session-Liste abrufen
$sessions = Copilot::client()->listSessions();

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

    if ($metadata->context !== null) {
        echo "  作業ディレクトリ: {$metadata->context->cwd}\n";

        if ($metadata->context->repository !== null) {
            echo "  リポジトリ: {$metadata->context->repository}\n";
            echo "  ブランチ: {$metadata->context->branch}\n";
        }
    }
}

SessionListFilter

Mit SessionListFilter können Sie nur Sessions eines bestimmten Arbeitsverzeichnisses oder Repositorys abrufen.

Eigenschaften

  • cwd (?string): Exakter Filter auf das Arbeitsverzeichnis
  • gitRoot (?string): Filter auf das Git-Wurzelverzeichnis
  • repository (?string): Filter auf das Repository (Format owner/repo)
  • branch (?string): Filter auf den Branch-Namen

Anwendungsbeispiele

Filter als Array angeben

use Revolution\Copilot\Facades\Copilot;

// Nur Sessions eines bestimmten Repositorys abrufen
$sessions = Copilot::client()->listSessions([
    'repository' => 'invokable/laravel-copilot-sdk',
]);

// Sessions abrufen, die in einem bestimmten Branch arbeiten
$sessions = Copilot::client()->listSessions([
    'repository' => 'owner/repo',
    'branch' => 'feature/new-feature',
]);

// Sessions eines bestimmten Arbeitsverzeichnisses abrufen
$sessions = Copilot::client()->listSessions([
    'cwd' => '/home/user/projects/my-app',
]);

Verwendung der Klasse SessionListFilter

use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionListFilter;

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

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

Event session.context_changed

Wenn sich das Arbeitsverzeichnis während einer Session ändert, wird das Event session.context_changed ausgelöst.

Event-Typ

use Revolution\Copilot\Enums\SessionEventType;

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

Event-Daten

Die Event-Daten enthalten die aktualisierten Kontextinformationen.
use Revolution\Copilot\Facades\Copilot;

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

            echo "作業ディレクトリが変更されました\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

SessionMetadata wurde um die Eigenschaft context erweitert.

Neue Eigenschaft

  • context (?SessionContext): Arbeitsverzeichnis und Git-Informationen der Session

Anwendungsbeispiel

use Revolution\Copilot\Facades\Copilot;

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

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

    // context ist optional, daher ist eine null-Prüfung nötig
    if ($metadata->context !== null) {
        echo "コンテキスト:\n";
        echo "  作業ディレクトリ: {$metadata->context->cwd}\n";

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

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

    echo "\n";
}

Praxisbeispiele

Sessions eines bestimmten Projekts abrufen

use Revolution\Copilot\Facades\Copilot;

// Nur Sessions des Projekts Laravel Copilot SDK abrufen
$sessions = Copilot::client()->listSessions([
    'repository' => 'invokable/laravel-copilot-sdk',
]);

// Laufende Sessions anzeigen
foreach ($sessions as $metadata) {
    echo "{$metadata->sessionId}: {$metadata->summary}\n";
    echo "  ブランチ: {$metadata->context->branch}\n";
}

Sessions von Feature-Branches verwalten

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 je Feature-Branch gruppieren
$byBranch = [];
foreach ($featureSessions as $metadata) {
    $branch = $metadata->context->branch;
    $byBranch[$branch][] = $metadata;
}

foreach ($byBranch as $branch => $sessions) {
    echo "{$branch}: " . count($sessions) . " セッション\n";
}

Sessions nach Arbeitsverzeichnis organisieren

use Revolution\Copilot\Facades\Copilot;

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

// Nach Arbeitsverzeichnis gruppieren
$byCwd = [];
foreach ($sessions as $metadata) {
    if ($metadata->context !== null) {
        $cwd = $metadata->context->cwd;
        $byCwd[$cwd][] = $metadata;
    }
}

// Anzahl der Sessions pro Verzeichnis anzeigen
foreach ($byCwd as $cwd => $sessions) {
    echo "{$cwd}: " . count($sessions) . " セッション\n";
}

Hinweise

  • context enthält Git-Informationen (gitRoot, repository, branch) nur für Sessions, die innerhalb eines Git-Repos erstellt wurden.
  • Das Feld context ist ab Copilot CLI v0.0.409 verfügbar. In älteren Versionen wird null zurückgegeben.
  • Die Filterung funktioniert per exakter Übereinstimmung. Teilstring-Matching und Wildcards werden nicht unterstützt.
  • Alle Felder von SessionListFilter sind optional. Ohne Filterangabe werden alle Sessions zurückgegeben.
Aktuelle Informationen finden Sie im GitHub-Repository.
Zuletzt geändert am 13. Juli 2026