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

> Beschreibt die Nutzung von Cloud Sessions, um Sessions statt in der lokalen Copilot CLI in einer von GitHub gehosteten Umgebung auszuführen.

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

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

Die Angabe als Array ist ebenfalls möglich.

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

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

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

| Funktion        | Ausführungsort                | Hauptanwendung                                                                          |
| --------------- | ----------------------------- | --------------------------------------------------------------------------------------- |
| Remote Sessions | Lokal oder eigener Server     | Bestehende Sessions von Web/Mobile aus einsehen und steuern                             |
| Cloud Sessions  | Von GitHub gehostete Umgebung | Verarbeitung, 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

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

<Info>
  Aktuelle Informationen finden Sie im [GitHub-Repository](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [Remote Sessions](/de/packages/laravel-copilot-sdk/remote-sessions.md)
- [SessionConfig](/de/packages/laravel-copilot-sdk/session-config.md)
- [Streaming-Ereignisse](/de/packages/laravel-copilot-sdk/streaming-events.md)
- [Session](/de/session.md)
- [GitHub Copilot SDK für Laravel](/de/packages/laravel-copilot-sdk/index.md)
