Passer au contenu principal

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.
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.
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).
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écutionUsage principal
Remote SessionsLocal ou votre propre serveurVisualiser/piloter une session existante depuis le Web/mobile
Cloud SessionsEnvironnement hébergé par GitHubTraiter 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

Pour les dernières informations, consultez le dépôt GitHub.
Dernière modification le 13 juillet 2026