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

# Cloud Sessions

> Descrive come usare le Cloud Sessions per eseguire le sessioni nell'ambiente hostato da GitHub anziché nella Copilot CLI locale.

## Cloud Sessions

Le Cloud Sessions consentono di eseguire le sessioni nell'ambiente hostato da GitHub anziché in un processo Copilot CLI locale. Un task viene prenotato in Mission Control e il `copilot-agent` lato cloud si connette per procedere con l'elaborazione.

Le normali Remote Sessions rendono "visibili da GitHub Web/mobile le sessioni in esecuzione in locale". Se vuoi che sia proprio il luogo di esecuzione ad essere nell'ambiente hostato da GitHub, usa le Cloud Sessions.

## Prerequisiti

* L'utente deve avere i permessi Copilot per usare Cloud Agent
* Puoi autenticarti tramite token GitHub oppure con un utente Copilot CLI già loggato
* Se possibile, associa le informazioni del repository GitHub
* La policy dell'organizzazione consente esecuzione in cloud e visualizzazione remota

## Uso di base

Specifica `CloudSessionOptions` in `cloud` di `SessionConfig`. Le informazioni sul repository sono opzionali dal punto di vista dei tipi SDK, ma è consigliato specificarle per fornire contesto a Mission Control e all'agente cloud.

```php theme={null}
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Support\PermissionHandler;
use Revolution\Copilot\Types\CloudSessionOptions;
use Revolution\Copilot\Types\CloudSessionRepository;
use Revolution\Copilot\Types\SessionConfig;

Copilot::start(function (CopilotSession $session): void {
    $session->sendAndWait(prompt: 'Riassumi il README');
}, config: new SessionConfig(
    onPermissionRequest: PermissionHandler::approveSafety(),
    cloud: new CloudSessionOptions(
        repository: new CloudSessionRepository(
            owner: 'myorg',
            name: 'myrepo',
            branch: 'main',
        ),
    ),
));
```

Puoi anche specificarlo come array.

```php theme={null}
Copilot::run(
    prompt: 'Verifica la strategia di test di questo repository',
    config: [
        'cloud' => [
            'repository' => [
                'owner' => 'myorg',
                'name' => 'myrepo',
                'branch' => 'main',
            ],
        ],
    ],
);
```

## Quando inviare il primo prompt

Una Cloud Session viene inizializzata in due fasi. `session.create` ritorna nel momento in cui il task viene prenotato in Mission Control, ma passa un po' di tempo prima che il `copilot-agent` lato cloud si connetta ed emetta `session.start`.

Per consegnare in modo affidabile il primo prompt, sottoscrivi prima gli eventi e invialo dopo aver confermato il `session.start` del `producer` `copilot-agent`.

```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\CloudSessionOptions;
use Revolution\Copilot\Types\CloudSessionRepository;
use Revolution\Copilot\Types\SessionConfig;

$config = new SessionConfig(
    streaming: true,
    onPermissionRequest: PermissionHandler::approveSafety(),
    cloud: new CloudSessionOptions(
        repository: new CloudSessionRepository(owner: 'myorg', name: 'myrepo'),
    ),
);

Copilot::start(function (CopilotSession $session): void {
    $cloudAgentStarted = false;

    foreach ($session->stream(timeout: 30.0) as $event) {
        if (
            $event->is(SessionEventType::SESSION_START)
            && $event->data('producer') === 'copilot-agent'
        ) {
            $cloudAgentStarted = true;
            break;
        }
    }

    if (! $cloudAgentStarted) {
        throw new RuntimeException('Cloud session did not become ready.');
    }

    $session->sendAndWait(prompt: 'Riassumi il README');
}, config: $config);
```

In un'applicazione reale è più semplice se lato queue o processo asincrono invii il prompt dopo aver confermato `session.start`.

## Differenze rispetto alle Remote Sessions

| Funzionalità    | Luogo di esecuzione           | Uso principale                                                                 |
| --------------- | ----------------------------- | ------------------------------------------------------------------------------ |
| Remote Sessions | In locale o su server proprio | Consultare/operare sessioni esistenti da Web/mobile                            |
| Cloud Sessions  | Ambiente hostato da GitHub    | Elaborare senza eseguire Copilot CLI sul dispositivo utente o su server propri |

## Considerazioni

* Le Cloud Sessions sono influenzate da permessi e policy dell'organizzazione
* Impostando `streaming: true` puoi ricevere eventi in tempo reale come `assistant.message_delta`
* La gestione delle richieste di permesso è la stessa delle sessioni normali. Nella versione Laravel, tramite Facade, il default è deny-all, quindi specifica se necessario `PermissionHandler::approveSafety()` ecc.

## Riferimenti

* [Remote Sessions](/it/packages/laravel-copilot-sdk/remote-sessions)
* [SessionConfig](/it/packages/laravel-copilot-sdk/session-config)
* [Eventi di streaming](/it/packages/laravel-copilot-sdk/streaming-events)

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


## Related topics

- [Remote Sessions](/it/packages/laravel-copilot-sdk/remote-sessions.md)
- [SessionConfig](/it/packages/laravel-copilot-sdk/session-config.md)
- [Eventi di streaming](/it/packages/laravel-copilot-sdk/streaming-events.md)
- [GitHub Copilot SDK for Laravel](/it/packages/laravel-copilot-sdk/index.md)
- [Laravel Cloud CLI — usa Laravel Cloud dal terminale](/it/blog/laravel-cloud-cli.md)
