Zum Hauptinhalt springen

Cloud Sessions

Cloud Sessions ist eine Funktion, mit der Sessions nicht als lokaler Copilot-CLI-Prozess, sondern in einer von GitHub gehosteten Umgebung ausgeführt werden. Aufgaben werden in Mission Control eingeplant, und der cloudseitige copilot-agent verbindet sich, um die Verarbeitung fortzusetzen. Reguläre Remote Sessions sind die Funktion, „lokal laufende Sessions über GitHub Web/Mobile sichtbar zu machen”. Wenn Sie den Ausführungsort selbst in die von GitHub gehostete Umgebung verlagern möchten, verwenden Sie Cloud Sessions.

Voraussetzungen

  • Der Benutzer verfügt über Copilot-Berechtigungen zur Nutzung des Cloud Agents
  • Authentifizierung ist mit einem GitHub-Token oder einem angemeldeten Copilot-CLI-Benutzer möglich
  • Verknüpfen Sie – wenn möglich – Informationen zum GitHub-Repository
  • Organisationsrichtlinien erlauben Cloud-Ausführung und Remote-Ansicht

Grundlegende Verwendung

Geben Sie in SessionConfig unter cloud eine CloudSessionOptions an. Repository-Informationen sind aus SDK-Sicht optional, es wird jedoch empfohlen, sie anzugeben, um Mission Control und dem Cloud-Agent Kontext zu geben.
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',
        ),
    ),
));
Die Angabe als Array ist ebenfalls möglich.
Copilot::run(
    prompt: 'このリポジトリのテスト方針を確認して',
    config: [
        'cloud' => [
            'repository' => [
                'owner' => 'myorg',
                'name' => 'myrepo',
                'branch' => 'main',
            ],
        ],
    ],
);

Zeitpunkt zum Senden des ersten Prompts

Eine Cloud Session wird zweistufig initialisiert. session.create kehrt zurück, sobald die Aufgabe in Mission Control eingeplant wurde, doch bis sich der cloudseitige copilot-agent verbindet und session.start auslöst, vergeht etwas Zeit. Um sicherzustellen, dass der erste Prompt ankommt, abonnieren Sie zunächst die Ereignisse und senden erst, nachdem producer das session.start des copilot-agent bestätigt hat.
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);
In realen Anwendungen lässt sich der Ablauf gut handhaben, wenn Sie den Prompt in einer Queue oder in einer asynchronen Verarbeitung erst nach der Bestätigung von session.start senden.

Unterschied zu Remote Sessions

FunktionAusführungsortHauptanwendung
Remote SessionsLokal oder eigener ServerBestehende Sessions von Web/Mobile aus einsehen und steuern
Cloud SessionsVon GitHub gehostete UmgebungVerarbeitung, ohne die Copilot CLI auf Benutzergeräten oder eigenen Servern auszuführen

Hinweise

  • Cloud Sessions unterliegen Berechtigungs- und Organisationsrichtlinien
  • Mit streaming: true erhalten Sie Echtzeitereignisse wie assistant.message_delta
  • Der Umgang mit Berechtigungsanfragen entspricht dem normaler Sessions. Über die Laravel-Facade gilt standardmäßig „deny-all”, geben Sie daher bei Bedarf z. B. PermissionHandler::approveSafety() an

Referenzen

Aktuelle Informationen finden Sie im GitHub-Repository.
Zuletzt geändert am 13. Juli 2026