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

# Remote Sessions

> Descrive come abilitare le sessioni remote in Laravel Copilot SDK e accedere alla stessa sessione da web e mobile tramite Mission Control di GitHub.

## 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](/it/packages/laravel-copilot-sdk/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.

<Info>
  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.
</Info>

```php theme={null}
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.

```php theme={null}
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](https://github.com/Bacon/BaconQRCode), utilizzato anche in Laravel Fortify.

```php theme={null}
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

* [Cloud Sessions](/it/packages/laravel-copilot-sdk/cloud-sessions)
* [RPC](/it/packages/laravel-copilot-sdk/rpc)
* [Modalità TCP](/it/packages/laravel-copilot-sdk/tcp-mode)

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


## Related topics

- [Cloud Sessions](/it/packages/laravel-copilot-sdk/cloud-sessions.md)
- [Eventi di streaming](/it/packages/laravel-copilot-sdk/streaming-events.md)
- [RPC (Remote Procedure Call)](/it/packages/laravel-copilot-sdk/rpc.md)
- [Installare PHP, Composer e Node.js con WSL (Windows)](/it/blog/windows-setup.md)
- [Laravel Sentinel — indagine sul middleware di protezione delle rotte](/it/blog/sentinel-introduction.md)
