> ## 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 Token

> 說明如何在 Laravel Copilot SDK 中，於執行期切換每位使用者的 GitHub token。

## 執行期切換用於認證的 GitHub token

透過 Socialite 等驗證後，可依每位使用者以其 GitHub token 執行 Copilot CLI 的方式。

<Note>
  Personal Access Token 需具備 `Copilot Requests` 權限。Socialite 的 token 應該也需符合相同要求。
  若無法從 Socialite 取得可用 token，可改為讓使用者直接輸入 PAT。
</Note>

此方式僅可於 stdio 模式使用。
TCP 模式因為需要維持 Copilot CLI 程序運行，無法於執行期切換。
在 TCP 模式（`cli_url`）中指定 `github_token` 或 `use_logged_in_user` 會發生錯誤。

<Note>
  以下的「每個 session 的 GitHub token（v0.3.0+）」在 TCP 模式下也可以使用。
</Note>

## `github_token` 選項

這是 SDK 的官方選項。Token 會透過環境變數 `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(); // 保險起見銷毀持有使用者 token 的 client
```

## `use_logged_in_user` 選項

指定 `github_token` 後 `use_logged_in_user` 會自動變為 `false`。
如此 CLI 就不會使用已儲存的 OAuth token 或 `gh` CLI 認證，僅使用明確傳入的 token。

也可以明確將 `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 不會自動登入。

## 每個 session 的 GitHub token（v0.3.0+）

透過 `SessionConfig` 的 `gitHubToken` 欄位，可於同一 CLI 程序內為每個 session 指定不同的 GitHub token（支援多租戶）。

由於此 token 是作為 `session.create` JSON-RPC 的參數傳遞，**在 stdio 與 TCP 模式皆可使用**。即使在 CLI 已啟動的 TCP 模式，也能以 session 為單位切換 token。

```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 模式）
// 可為每個 session 傳入不同的使用者 token
$response = Copilot::useTcp(url: 'tcp://127.0.0.1:12345')->run(
    prompt: '...',
    config: new SessionConfig(gitHubToken: $user->github_token),
);
```

與 client 層級的 `github_token`（CLI 程序啟動時的 token）為獨立運作。
若想以 session 為單位切換使用者 token，可使用此欄位。

<Info>
  最新資訊請參考 [GitHub 儲存庫](https://github.com/invokable/laravel-copilot-sdk)。
</Info>


## Related topics

- [GitHub Actions - GitHub Copilot SDK for Laravel](/zh-TW/packages/laravel-copilot-sdk/github-actions.md)
- [認證 - GitHub Copilot SDK for Laravel](/zh-TW/packages/laravel-copilot-sdk/auth.md)
- [Laravel Cloud - GitHub Copilot SDK for Laravel](/zh-TW/packages/laravel-copilot-sdk/laravel-cloud.md)
- [GitHub Copilot SDK for Laravel](/zh-TW/packages/laravel-copilot-sdk/index.md)
- [Laravel Package Skeleton — 官方套件用起始模板](/zh-TW/blog/package-skeleton-introduction.md)
