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


## Related topics

- [GitHub Actions - GitHub Copilot SDK for Laravel](/ko/packages/laravel-copilot-sdk/github-actions.md)
- [인증 - GitHub Copilot SDK for Laravel](/ko/packages/laravel-copilot-sdk/auth.md)
- [GitHub Copilot SDK for Laravel](/ko/packages/laravel-copilot-sdk/index.md)
- [테스트 - GitHub Copilot SDK for Laravel](/ko/packages/laravel-copilot-sdk/fake.md)
- [Laravel Cloud - GitHub Copilot SDK for Laravel](/ko/packages/laravel-copilot-sdk/laravel-cloud.md)
