> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Token GitHub

> Descrive come cambiare a runtime il token GitHub per singolo utente in Laravel Copilot SDK.

## Cambio a runtime del token GitHub per autenticazione

Come eseguire Copilot CLI usando il token GitHub del singolo utente autenticato con Socialite o simili.

<Note>
  Per i Personal Access Token è necessario il permesso `Copilot Requests`. Anche i token di Socialite dovrebbero avere lo stesso requisito.
  Se non puoi ottenere un token utilizzabile tramite Socialite, adotta un approccio in cui l'utente inserisce direttamente il PAT.
</Note>

Questo metodo è disponibile solo in modalità stdio.
La modalità TCP tiene attivo il processo Copilot CLI, quindi non consente il cambio a runtime.
Specificare `github_token` o `use_logged_in_user` in modalità TCP (`cli_url`) genera un errore.

<Note>
  La sezione "Token GitHub per singola sessione (v0.3.0+)" seguente è utilizzabile anche in modalità TCP.
</Note>

## Opzione `github_token`

È l'opzione ufficiale dell'SDK. Il token viene passato al CLI tramite la variabile d'ambiente `COPILOT_SDK_AUTH_TOKEN`.

```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(); // per sicurezza, dismetti il client che detiene il token utente
```

## Opzione `use_logged_in_user`

Specificando `github_token`, `use_logged_in_user` viene automaticamente impostato a `false`.
In questo modo il CLI non usa token OAuth salvati né l'autenticazione del `gh` CLI, ma solo il token passato esplicitamente.

Puoi anche impostare esplicitamente `use_logged_in_user` a `true`.

```php theme={null}
$config = [
    'github_token' => $user->github_token,
    'use_logged_in_user' => true, // abilitato esplicitamente
];
```

Se imposti `use_logged_in_user` a `false` senza `github_token`, viene aggiunto il flag `--no-auto-login` e il CLI non effettua il login automatico.

## Token GitHub per singola sessione (v0.3.0+)

Usando il campo `gitHubToken` di `SessionConfig` puoi specificare token GitHub diversi per ciascuna sessione all'interno dello stesso processo CLI (supporto multi-tenant).

Questo token viene passato come parametro della `session.create` JSON-RPC, quindi è **utilizzabile sia in modalità stdio sia in modalità TCP**. Anche in modalità TCP, con CLI già in esecuzione, puoi cambiare token per singola sessione.

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

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

Esempio in modalità TCP:

```php theme={null}
// Server CLI già avviato (modalità TCP)
// Puoi passare token utente diversi per ciascuna sessione
$response = Copilot::useTcp(url: 'tcp://127.0.0.1:12345')->run(
    prompt: '...',
    config: new SessionConfig(gitHubToken: $user->github_token),
);
```

Funziona in modo indipendente dal `github_token` a livello di client (token al momento dell'avvio del processo CLI).
Usalo quando vuoi cambiare il token utente per singola sessione.

<Info>
  Per le informazioni più recenti fai riferimento al [repository GitHub](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [GitHub Actions - GitHub Copilot SDK for Laravel](/it/packages/laravel-copilot-sdk/github-actions.md)
- [Autenticazione - GitHub Copilot SDK for Laravel](/it/packages/laravel-copilot-sdk/auth.md)
- [Laravel Cloud - GitHub Copilot SDK for Laravel](/it/packages/laravel-copilot-sdk/laravel-cloud.md)
- [GitHub Copilot SDK for Laravel](/it/packages/laravel-copilot-sdk/index.md)
- [Laravel Package Skeleton — template starter per pacchetti ufficiali](/it/blog/package-skeleton-introduction.md)
