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

> Découvrez comment utiliser les Cloud Sessions, qui exécutent la session dans l'environnement hébergé par GitHub plutôt que sur votre Copilot CLI local.

## Cloud Sessions

Les Cloud Sessions permettent d'exécuter la session dans l'environnement hébergé par GitHub plutôt que dans un processus Copilot CLI local. La tâche est réservée dans Mission Control et le `copilot-agent` côté cloud s'y connecte pour poursuivre le traitement.

Les Remote Sessions habituelles exposent, depuis le Web/mobile GitHub, une session qui tourne en local. Si vous souhaitez que l'exécution elle-même ait lieu dans l'environnement hébergé par GitHub, utilisez Cloud Sessions.

## Prérequis

* L'utilisateur dispose des droits Copilot permettant d'utiliser le Cloud Agent
* Vous pouvez vous authentifier via un token GitHub ou un utilisateur Copilot CLI déjà connecté
* Si possible, associez des informations de dépôt GitHub
* La politique d'organisation autorise l'exécution dans le cloud et la consultation à distance

## Utilisation de base

Passez `CloudSessionOptions` à la clé `cloud` de `SessionConfig`. Les informations de dépôt sont optionnelles côté type SDK, mais recommandées afin de fournir du contexte à Mission Control et à l'agent 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: 'READMEを要約して');
}, config: new SessionConfig(
    onPermissionRequest: PermissionHandler::approveSafety(),
    cloud: new CloudSessionOptions(
        repository: new CloudSessionRepository(
            owner: 'myorg',
            name: 'myrepo',
            branch: 'main',
        ),
    ),
));
```

Vous pouvez aussi passer un tableau.

```php theme={null}
Copilot::run(
    prompt: 'このリポジトリのテスト方針を確認して',
    config: [
        'cloud' => [
            'repository' => [
                'owner' => 'myorg',
                'name' => 'myrepo',
                'branch' => 'main',
            ],
        ],
    ],
);
```

## Quand envoyer le premier prompt

Une Cloud Session s'initialise en deux étapes. `session.create` renvoie dès que la tâche est réservée dans Mission Control, mais il faut un court délai avant que le `copilot-agent` cloud se connecte et émette `session.start`.

Pour vous assurer que le premier prompt est bien remis, abonnez-vous aux événements en premier, puis envoyez-le uniquement après avoir constaté un `session.start` du `copilot-agent` (via `producer`).

```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: 'READMEを要約して');
}, config: $config);
```

Dans une application réelle, il est plus simple d'envoyer le prompt côté file d'attente ou traitement asynchrone après confirmation de `session.start`.

## Différences avec les Remote Sessions

| Fonctionnalité  | Lieu d'exécution                 | Usage principal                                                                  |
| --------------- | -------------------------------- | -------------------------------------------------------------------------------- |
| Remote Sessions | Local ou votre propre serveur    | Visualiser/piloter une session existante depuis le Web/mobile                    |
| Cloud Sessions  | Environnement hébergé par GitHub | Traiter sans faire tourner Copilot CLI sur le poste utilisateur ou votre serveur |

## Points d'attention

* Les Cloud Sessions sont soumises aux permissions et aux politiques d'organisation
* Avec `streaming: true`, vous recevez des événements temps réel comme `assistant.message_delta`
* La gestion des requêtes de permission est identique à celle d'une session standard. Depuis la Facade Laravel, le comportement par défaut est deny-all ; utilisez au besoin `PermissionHandler::approveSafety()`

## Voir aussi

* [Remote Sessions](/fr/packages/laravel-copilot-sdk/remote-sessions)
* [SessionConfig](/fr/packages/laravel-copilot-sdk/session-config)
* [Événements de streaming](/fr/packages/laravel-copilot-sdk/streaming-events)

<Info>
  Pour les dernières informations, consultez le [dépôt GitHub](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [Remote Sessions](/fr/packages/laravel-copilot-sdk/remote-sessions.md)
- [SessionConfig](/fr/packages/laravel-copilot-sdk/session-config.md)
- [Événements de streaming](/fr/packages/laravel-copilot-sdk/streaming-events.md)
- [Session](/fr/session.md)
- [GitHub Copilot SDK pour Laravel](/fr/packages/laravel-copilot-sdk/index.md)
