メインコンテンツへスキップ

Documentation Index

Fetch the complete documentation index at: https://kawax.biz/llms.txt

Use this file to discover all available pages before exploring further.

セッションコンテキストとフィルタリング

GitHub Copilot SDK v0.1.24 以降では、セッションに作業ディレクトリと Git 情報を含むコンテキストが追加され、セッション一覧でフィルタリングできるようになりました。

SessionContext

SessionContext は、セッション作成時の作業ディレクトリと Git リポジトリ情報を保持します。

プロパティ

  • cwd (string): 作業ディレクトリの絶対パス
  • gitRoot (?string): Git リポジトリのルートディレクトリ(Git リポジトリ外では null
  • repository (?string): GitHub リポジトリ(owner/repo 形式、例: invokable/laravel-copilot-sdk
  • branch (?string): 現在の Git ブランチ名

使用例

use Revolution\Copilot\Facades\Copilot;

// セッション一覧を取得
$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

SessionListFilter を使うと、特定の作業ディレクトリやリポジトリのセッションだけを取得できます。

プロパティ

  • cwd (?string): 作業ディレクトリで完全一致フィルタ
  • gitRoot (?string): Git ルートディレクトリでフィルタ
  • repository (?string): リポジトリ(owner/repo 形式)でフィルタ
  • branch (?string): ブランチ名でフィルタ

使用例

配列でフィルタ指定

use Revolution\Copilot\Facades\Copilot;

// 特定のリポジトリのセッションのみを取得
$sessions = Copilot::client()->listSessions([
    'repository' => 'invokable/laravel-copilot-sdk',
]);

// 特定のブランチで作業中のセッションを取得
$sessions = Copilot::client()->listSessions([
    'repository' => 'owner/repo',
    'branch' => 'feature/new-feature',
]);

// 特定の作業ディレクトリのセッションを取得
$sessions = Copilot::client()->listSessions([
    'cwd' => '/home/user/projects/my-app',
]);

SessionListFilter クラスを使用

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

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

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

session.context_changed イベント

セッション中に作業ディレクトリが変更されると、session.context_changed イベントが発火します。

イベントタイプ

use Revolution\Copilot\Enums\SessionEventType;

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

イベントデータ

イベントデータには更新後のコンテキスト情報が含まれます。
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

SessionMetadatacontext プロパティが追加されました。

新しいプロパティ

  • context (?SessionContext): セッションの作業ディレクトリと Git 情報

使用例

use Revolution\Copilot\Facades\Copilot;

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

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

    // context はオプショナルなので null チェックが必要
    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";
}

実用例

特定プロジェクトのセッションを取得

use Revolution\Copilot\Facades\Copilot;

// Laravel Copilot SDK プロジェクトのセッションのみを取得
$sessions = Copilot::client()->listSessions([
    'repository' => 'invokable/laravel-copilot-sdk',
]);

// 作業中セッションを表示
foreach ($sessions as $metadata) {
    echo "{$metadata->sessionId}: {$metadata->summary}\n";
    echo "  ブランチ: {$metadata->context->branch}\n";
}

機能ブランチのセッションを管理

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/');
});

// 機能ブランチごとにセッションをグループ化
$byBranch = [];
foreach ($featureSessions as $metadata) {
    $branch = $metadata->context->branch;
    $byBranch[$branch][] = $metadata;
}

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

作業ディレクトリごとにセッションを整理

use Revolution\Copilot\Facades\Copilot;

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

// 作業ディレクトリでグループ化
$byCwd = [];
foreach ($sessions as $metadata) {
    if ($metadata->context !== null) {
        $cwd = $metadata->context->cwd;
        $byCwd[$cwd][] = $metadata;
    }
}

// ディレクトリごとのセッション数を表示
foreach ($byCwd as $cwd => $sessions) {
    echo "{$cwd}: " . count($sessions) . " セッション\n";
}

注意事項

  • context は、Git リポジトリ内で作成したセッションでのみ Git 関連情報(gitRoot, repository, branch)を含みます。
  • context フィールドは Copilot CLI v0.0.409 以降で利用できます。古いバージョンでは null が返ります。
  • フィルタリングは完全一致で動作します。部分一致やワイルドカードは未サポートです。
  • SessionListFilter のすべてのフィールドはオプショナルです。フィルタ未指定時は全セッションが返ります。
最新情報は GitHub リポジトリ を参照してください。
Last modified on April 22, 2026