Saltar al contenido principal

Cloud Sessions

Cloud Sessions permite ejecutar sesiones en el entorno hospedado por GitHub en lugar de en el proceso local de Copilot CLI. La tarea se reserva en Mission Control y el copilot-agent de la nube se conecta y realiza el procesamiento. Las Remote Sessions habituales sirven para «hacer visibles desde la web/móvil de GitHub sesiones que se ejecutan en local». Si lo que quieres es que la ejecución se realice en el entorno hospedado por GitHub, usa Cloud Sessions.

Requisitos previos

  • El usuario tiene permisos de Copilot suficientes para usar Cloud Agent
  • Puedes autenticarte con un token de GitHub o con un usuario ya logueado en Copilot CLI
  • Si es posible, asocia la información del repositorio de GitHub
  • La política de la organización permite la ejecución en la nube y la visualización remota

Uso básico

Indica un CloudSessionOptions en cloud dentro de SessionConfig. La información del repositorio es opcional en el tipo del SDK, pero se recomienda indicarla para pasar contexto a Mission Control y al agente de la nube.
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',
        ),
    ),
));
También puedes indicarlo como array:
Copilot::run(
    prompt: 'このリポジトリのテスト方針を確認して',
    config: [
        'cloud' => [
            'repository' => [
                'owner' => 'myorg',
                'name' => 'myrepo',
                'branch' => 'main',
            ],
        ],
    ],
);

Cuándo enviar el primer prompt

Una Cloud Session se inicializa en dos fases. session.create retorna en cuanto la tarea queda reservada en Mission Control, pero pasa un tiempo hasta que el copilot-agent de la nube se conecta y emite session.start. Para asegurarte de entregar el primer prompt, suscríbete a los eventos primero y envíalo solo después de que producer confirme el session.start del 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: 'READMEを要約して');
}, config: $config);
En una app real es más manejable enviar el prompt tras confirmar session.start desde el lado de la cola o del proceso asíncrono.

Diferencias con Remote Sessions

FunciónLugar de ejecuciónUso principal
Remote SessionsLocal o servidor propioVer/manipular sesiones existentes desde web/móvil
Cloud SessionsEntorno hospedado por GitHubProcesar sin ejecutar Copilot CLI en el equipo del usuario o servidor propio

Consideraciones

  • Cloud Sessions se ve afectado por los permisos y la política de la organización
  • Con streaming: true recibes eventos en tiempo real como assistant.message_delta
  • El manejo de solicitudes de permiso es igual que en una sesión normal. Vía el Facade de la versión Laravel, el valor por defecto es deny-all, por lo que indica PermissionHandler::approveSafety() u otro cuando lo necesites

Referencias

Consulta la información más reciente en el repositorio de GitHub.
Última modificación el 13 de julio de 2026