> ## 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

> Uitleg over Cloud Sessions, waarmee je sessies uitvoert in een door GitHub gehoste omgeving in plaats van met de lokale Copilot CLI.

## Cloud Sessions

Cloud Sessions is een functie waarmee sessies worden uitgevoerd in een gehoste omgeving aan de GitHub-kant, in plaats van in een lokaal Copilot CLI-proces. De taak wordt gereserveerd in Mission Control, waarna de `copilot-agent` aan de cloudkant verbinding maakt en de verwerking uitvoert.

Gewone Remote Sessions zijn een functie om "een lokaal draaiende sessie zichtbaar te maken vanuit GitHub Web/mobiel". Wil je dat de uitvoering zelf in de door GitHub gehoste omgeving plaatsvindt, dan gebruik je Cloud Sessions.

## Vereisten

* De gebruiker heeft Copilot-rechten waarmee de Cloud Agent gebruikt kan worden
* Je kunt authenticeren met een GitHub-token of als ingelogde Copilot CLI-gebruiker
* Koppel indien mogelijk GitHub-repositorygegevens
* Het organisatiebeleid staat clouduitvoering en remote inzage toe

## Basisgebruik

Geef in `SessionConfig` een `CloudSessionOptions` op bij `cloud`. Repositorygegevens zijn in de SDK-types optioneel, maar het wordt aanbevolen ze op te geven om context door te geven aan Mission Control en de cloudagent.

```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: 'Vat de README samen');
}, config: new SessionConfig(
    onPermissionRequest: PermissionHandler::approveSafety(),
    cloud: new CloudSessionOptions(
        repository: new CloudSessionRepository(
            owner: 'myorg',
            name: 'myrepo',
            branch: 'main',
        ),
    ),
));
```

Je kunt het ook als array opgeven.

```php theme={null}
Copilot::run(
    prompt: 'Controleer de teststrategie van deze repository',
    config: [
        'cloud' => [
            'repository' => [
                'owner' => 'myorg',
                'name' => 'myrepo',
                'branch' => 'main',
            ],
        ],
    ],
);
```

## Het moment om de eerste prompt te sturen

Een Cloud Session wordt in twee fasen geïnitialiseerd. `session.create` keert terug zodra de taak in Mission Control is gereserveerd, maar het duurt even voordat de `copilot-agent` aan de cloudkant verbinding maakt en `session.start` uitstuurt.

Om de eerste prompt gegarandeerd af te leveren, abonneer je je eerst op de events en verstuur je pas nadat je hebt vastgesteld dat de `producer` van `session.start` de `copilot-agent` is.

```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: 'Vat de README samen');
}, config: $config);
```

In een echte app is het handig om de prompt vanuit een queue of asynchrone verwerking te versturen nadat `session.start` is bevestigd.

## Verschil met Remote Sessions

| Functie         | Uitvoeringslocatie           | Belangrijkste gebruik                                                                          |
| --------------- | ---------------------------- | ---------------------------------------------------------------------------------------------- |
| Remote Sessions | Lokaal of je eigen server    | Een bestaande sessie bekijken en bedienen vanaf web/mobiel                                     |
| Cloud Sessions  | Door GitHub gehoste omgeving | Verwerken zonder de Copilot CLI op het apparaat van de gebruiker of je eigen server te draaien |

## Aandachtspunten

* Cloud Sessions worden beïnvloed door permissies en organisatiebeleid
* Met `streaming: true` ontvang je realtime events zoals `assistant.message_delta`
* Het afhandelen van permissieverzoeken werkt hetzelfde als bij gewone sessies. Via de Laravel-facade geldt standaard deny-all, dus geef indien nodig bijvoorbeeld `PermissionHandler::approveSafety()` op

## Referenties

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

<Info>
  Zie de [GitHub-repository](https://github.com/invokable/laravel-copilot-sdk) voor de laatste informatie.
</Info>


## Related topics

- [Remote sessions](/nl/packages/laravel-copilot-sdk/remote-sessions.md)
- [SessionConfig](/nl/packages/laravel-copilot-sdk/session-config.md)
- [Streaming events](/nl/packages/laravel-copilot-sdk/streaming-events.md)
- [Laravel Cloud CLI — Laravel Cloud bedienen vanuit de terminal](/nl/blog/laravel-cloud-cli.md)
- [laravel/symfony-on-cloud — Symfony-apps draaien op Laravel Cloud](/nl/blog/symfony-on-cloud-introduction.md)
