> ## 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トークン

> Laravel Copilot SDK でユーザーごとの GitHub トークンを実行時に切り替える方法を説明します。

## 認証するGitHubトークンの実行時切り替え

Socialite などを使って認証したユーザーごとの GitHub トークンで Copilot CLI を実行する方法です。

<Note>
  Personal Access Token では `Copilot Requests` の権限が必要です。Socialite のトークンでも同様の要件になるはずです。
  Socialite から使えるトークンを取得できない場合は、PAT を直接入力してもらう方式にします。
</Note>

この方法は stdio モードでのみ利用できます。
TCP モードは Copilot CLI プロセスを起動したまま使うため、実行時に切り替えできません。
TCP モード（`cli_url`）で `github_token` や `use_logged_in_user` を指定するとエラーになります。

<Note>
  下記の「セッションごとのGitHubトークン（v0.3.0+）」は TCP モードでも利用可能です。
</Note>

## `github_token` オプション

SDK の公式オプションです。トークンは環境変数 `COPILOT_SDK_AUTH_TOKEN` 経由で CLI に渡されます。

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

$config = array_merge(
    config('copilot'),
    [
        'github_token' => $user->github_token,
    ]
);

$response = Copilot::useStdio($config)->run(prompt: '...');
Copilot::stop(); // 念のためユーザートークンを持ったクライアントを破棄
```

## `use_logged_in_user` オプション

`github_token` を指定すると自動的に `use_logged_in_user` は `false` になります。
これにより CLI は保存済み OAuth トークンや `gh` CLI 認証を使わず、明示的に渡したトークンだけを使います。

明示的に `use_logged_in_user` を `true` にすることもできます。

```php theme={null}
$config = [
    'github_token' => $user->github_token,
    'use_logged_in_user' => true, // 明示的に有効化
];
```

`github_token` なしで `use_logged_in_user` を `false` にすると、`--no-auto-login` フラグが追加され、CLI は自動ログインを行いません。

## セッションごとのGitHubトークン（v0.3.0+）

`SessionConfig` の `gitHubToken` フィールドを使うと、同一 CLI プロセス内でセッションごとに異なる GitHub トークンを指定できます（マルチテナント対応）。

このトークンは `session.create` JSON-RPC のパラメーターとして渡されるため、**stdio モードと TCP モードの両方で利用可能**です。CLI がすでに起動している TCP モードでも、セッション単位でトークンを切り替えられます。

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

$response = Copilot::run(
    prompt: '...',
    config: new SessionConfig(gitHubToken: $user->github_token),
);
```

TCP モードでの使用例：

```php theme={null}
// CLIサーバーは起動済み（TCPモード）
// セッションごとに異なるユーザートークンを渡せる
$response = Copilot::useTcp(url: 'tcp://127.0.0.1:12345')->run(
    prompt: '...',
    config: new SessionConfig(gitHubToken: $user->github_token),
);
```

クライアントレベルの `github_token`（CLI プロセス起動時のトークン）とは別に機能します。
セッション単位でユーザートークンを切り替えたい場合に使用してください。

<Info>
  最新情報は [GitHub リポジトリ](https://github.com/invokable/laravel-copilot-sdk) を参照してください。
</Info>
