Saltar al contenido principal

Cambio en tiempo de ejecución del token de GitHub para autenticarse

Método para ejecutar Copilot CLI con el token de GitHub de cada usuario autenticado, por ejemplo con Socialite.
En un Personal Access Token se requiere el permiso Copilot Requests. Con tokens de Socialite debería aplicar el mismo requisito. Si no puedes obtener un token utilizable desde Socialite, opta por que el usuario introduzca directamente un PAT.
Este método solo está disponible en el modo stdio. El modo TCP mantiene el proceso Copilot CLI arrancado, por lo que no permite cambiar en tiempo de ejecución. En modo TCP (cli_url), si indicas github_token o use_logged_in_user se produce un error.
El apartado «Token de GitHub por sesión (v0.3.0+)» descrito más abajo sí funciona también en modo TCP.

Opción github_token

Es la opción oficial del SDK. El token se pasa al CLI mediante la variable de entorno 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(); // Descarta por seguridad el cliente que tenía el token del usuario

Opción use_logged_in_user

Si indicas github_token, use_logged_in_user pasa automáticamente a false. Así el CLI no usa el token OAuth guardado ni la autenticación del CLI gh, y utiliza únicamente el token pasado explícitamente. También puedes poner use_logged_in_user a true de forma explícita:
$config = [
    'github_token' => $user->github_token,
    'use_logged_in_user' => true, // habilitación explícita
];
Si pones use_logged_in_user a false sin github_token, se añade la flag --no-auto-login y el CLI no realiza el login automático.

Token de GitHub por sesión (v0.3.0+)

Con el campo gitHubToken de SessionConfig puedes indicar un token de GitHub distinto para cada sesión dentro del mismo proceso CLI (soporte multi-tenant). Este token se pasa como parámetro del JSON-RPC session.create, por lo que funciona tanto en stdio como en TCP. Incluso en modo TCP con el CLI ya arrancado, puedes cambiar el token por sesión.
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;

$response = Copilot::run(
    prompt: '...',
    config: new SessionConfig(gitHubToken: $user->github_token),
);
Ejemplo en modo TCP:
// Servidor CLI ya arrancado (modo TCP)
// Puedes pasar un token de usuario distinto por sesión
$response = Copilot::useTcp(url: 'tcp://127.0.0.1:12345')->run(
    prompt: '...',
    config: new SessionConfig(gitHubToken: $user->github_token),
);
Funciona de forma independiente al github_token a nivel de cliente (el token con el que se arranca el proceso CLI). Úsalo cuando quieras cambiar el token del usuario por sesión.
Consulta la información más reciente en el repositorio de GitHub.
Última modificación el 13 de julio de 2026