Vai al contenuto principale

Cambio a runtime del token GitHub per autenticazione

Come eseguire Copilot CLI usando il token GitHub del singolo utente autenticato con Socialite o simili.
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.
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.
La sezione “Token GitHub per singola sessione (v0.3.0+)” seguente è utilizzabile anche in modalità TCP.

Opzione github_token

È l’opzione ufficiale dell’SDK. Il token viene passato al CLI tramite la variabile d’ambiente COPILOT_SDK_AUTH_TOKEN.
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.
$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.
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:
// 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.
Per le informazioni più recenti fai riferimento al repository GitHub.
Ultima modifica il 13 luglio 2026