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

> Explica cómo usar Cloud Sessions para ejecutar sesiones en el entorno hospedado por GitHub, en lugar del Copilot CLI local.

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

```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',
        ),
    ),
));
```

También puedes indicarlo como array:

```php theme={null}
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`.

```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);
```

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ón         | Lugar de ejecución           | Uso principal                                                                |
| --------------- | ---------------------------- | ---------------------------------------------------------------------------- |
| Remote Sessions | Local o servidor propio      | Ver/manipular sesiones existentes desde web/móvil                            |
| Cloud Sessions  | Entorno hospedado por GitHub | Procesar 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

* [Remote Sessions](/es/packages/laravel-copilot-sdk/remote-sessions)
* [SessionConfig](/es/packages/laravel-copilot-sdk/session-config)
* [Eventos de streaming](/es/packages/laravel-copilot-sdk/streaming-events)

<Info>
  Consulta la información más reciente en el [repositorio de GitHub](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [Remote Sessions](/es/packages/laravel-copilot-sdk/remote-sessions.md)
- [SessionConfig](/es/packages/laravel-copilot-sdk/session-config.md)
- [Eventos de streaming](/es/packages/laravel-copilot-sdk/streaming-events.md)
- [GitHub Copilot SDK for Laravel](/es/packages/laravel-copilot-sdk/index.md)
- [Laravel Cloud CLI — Operar Laravel Cloud desde la terminal](/es/blog/laravel-cloud-cli.md)
