Vai al contenuto principale

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.
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.
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.
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 esecuzioneUso principale
Remote SessionsIn locale o su server proprioConsultare/operare sessioni esistenti da Web/mobile
Cloud SessionsAmbiente hostato da GitHubElaborare 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

Per le informazioni più recenti fai riferimento al repository GitHub.
Ultima modifica il 13 luglio 2026