Vai al contenuto principale

Remote Sessions

Abilitando le Remote Sessions, puoi accedere alla stessa sessione da web e mobile tramite Mission Control di GitHub. Una volta abilitate, ogni sessione si connette a Mission Control e viene emesso un URL condivisibile come link o codice QR. Se vuoi che la sessione stessa venga eseguita nell’ambiente hostato da GitHub anziché in locale o su un tuo server, usa le Cloud Sessions.

Prerequisiti

  • L’utente deve essere autenticato (token GitHub o utente loggato)
  • La workingDirectory deve essere un repository GitHub

Attivazione a livello di client (sempre ON)

Abilitando remote: true, per tutte le sessioni all’interno di un repository GitHub viene automaticamente emesso un URL remoto. Piuttosto che aggiungerla in modo fisso a config/copilot.php, è più pratico abilitare remote: true con useStdio() solo dove serve.
L’opzione remote è valida solo quando è l’SDK ad avviare il processo CLI. In altre parole, è esclusiva della modalità stdio. In caso di connessione a server esterni come useTcp(), viene ignorata.
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Enums\SessionEventType;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Support\PermissionHandler;
use Revolution\Copilot\Types\SessionConfig;
use Revolution\Copilot\Types\SessionEvent;

$config = new SessionConfig(
    workingDirectory: '/path/to/github-repo',
    onPermissionRequest: PermissionHandler::approveAll(),
);

$stdioConfig = config('copilot');
$stdioConfig['remote'] = true;

Copilot::useStdio($stdioConfig)->start(function (CopilotSession $session): void {
    $session->on(SessionEventType::SESSION_INFO, function (SessionEvent $event): void {
        if ($event->data('infoType') === 'remote') {
            echo 'Remote URL: '.$event->data('url').PHP_EOL;
        }
    });
}, config: $config);

Attivazione per sessione (on-demand)

Se vuoi iniziare la condivisione remota in corso di sessione, usa l’RPC. È equivalente ai comandi /remote on e /remote off della CLI.
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;

Copilot::start(function (CopilotSession $session): void {
    $result = $session->rpc()->remote()->enable();

    if ($result->url !== null) {
        echo 'Remote URL: '.$result->url.PHP_EOL;
    }

    // Interrompi la condivisione
    $session->rpc()->remote()->disable();
});

Generazione codice QR

L’URL remoto ottenuto può essere trasformato in un codice QR da passare al mobile. Puoi usare BaconQrCode, utilizzato anche in Laravel Fortify.
use BaconQrCode\Renderer\Image\SvgImageBackEnd;
use BaconQrCode\Renderer\ImageRenderer;
use BaconQrCode\Renderer\RendererStyle\RendererStyle;
use BaconQrCode\Writer;

$writer = new Writer(
    new ImageRenderer(
        new RendererStyle(256),
        new SvgImageBackEnd(),
    ),
);

$svg = $writer->writeString($result->url ?? '');

Considerazioni

  • L’opzione remote è valida solo quando è l’SDK ad avviare il processo CLI. Con connessioni a server esterni tramite useTcp() è ignorata.
  • Se workingDirectory non è un repository GitHub, in modalità sempre ON la configurazione remota viene saltata. Con l’attivazione on-demand (remote()->enable()) può generare un errore.
  • Configura correttamente le credenziali di autenticazione (github_token o use_logged_in_user).

Riferimenti

Per le informazioni più recenti fai riferimento al repository GitHub.
Ultima modifica il 13 luglio 2026