> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Remote Sessions

> Laravel Copilot SDK에서 원격 세션을 활성화하고, GitHub의 Mission Control을 통해 웹이나 모바일에서 같은 세션에 접근하는 방법을 설명합니다.

## Remote Sessions

Remote Sessions를 활성화하면 GitHub의 Mission Control을 통해 웹이나 모바일에서 같은 세션에 접근할 수 있습니다.
활성화하면 각 세션이 Mission Control에 접속되고, 링크나 QR 코드로 공유할 수 있는 URL이 발급됩니다.

로컬이나 자체 서버가 아닌 GitHub 호스트 환경에서 세션 자체를 실행하려면 [Cloud Sessions](/ko/packages/laravel-copilot-sdk/cloud-sessions)를 사용합니다.

## 사전 조건

* 사용자가 인증되어 있을 것(GitHub 토큰 또는 로그인된 사용자)
* `workingDirectory`가 GitHub 저장소일 것

## 클라이언트 레벨에서 활성화(상시 ON)

`remote: true`를 활성화하면 GitHub 저장소 내의 모든 세션에서 자동으로 원격 URL이 발급됩니다.

`config/copilot.php`에 고정으로 추가하기보다는, 필요한 처리만 `useStdio()`로 `remote: true`를 활성화하는 사용법이 다루기 쉽습니다.

<Info>
  `remote` 옵션은 SDK가 CLI 프로세스를 기동하는 경우에만 유효합니다. 즉 **stdio 모드 전용**입니다. `useTcp()` 등 외부 서버로 접속할 경우 무시됩니다.
</Info>

```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\SessionConfig;
use Revolution\Copilot\Types\SessionEvent;

$config = new SessionConfig(
    workingDirectory: '/path/to/github-repo',
    onPermissionRequest: PermissionHandler::approveAll(),
);

$stdioConfig = config('copilot');
$stdioConfig['remote'] = true;

Copilot::useStdio($stdioConfig)->start(function (CopilotSession $session): void {
    $session->on(SessionEventType::SESSION_INFO, function (SessionEvent $event): void {
        if ($event->data('infoType') === 'remote') {
            echo 'Remote URL: '.$event->data('url').PHP_EOL;
        }
    });
}, config: $config);
```

## 세션별로 활성화(온디맨드)

도중부터 원격 공유를 시작하려면 RPC로 전환합니다.
CLI의 `/remote on` 및 `/remote off` 명령과 동등한 조작입니다.

```php theme={null}
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Facades\Copilot;

Copilot::start(function (CopilotSession $session): void {
    $result = $session->rpc()->remote()->enable();

    if ($result->url !== null) {
        echo 'Remote URL: '.$result->url.PHP_EOL;
    }

    // 공유 중지
    $session->rpc()->remote()->disable();
});
```

## QR 코드 생성

취득한 원격 URL은 QR 코드로 만들어 모바일에 전달할 수 있습니다.
Laravel Fortify에서도 사용되는 [BaconQrCode](https://github.com/Bacon/BaconQRCode)를 사용할 수 있습니다.

```php theme={null}
use BaconQrCode\Renderer\Image\SvgImageBackEnd;
use BaconQrCode\Renderer\ImageRenderer;
use BaconQrCode\Renderer\RendererStyle\RendererStyle;
use BaconQrCode\Writer;

$writer = new Writer(
    new ImageRenderer(
        new RendererStyle(256),
        new SvgImageBackEnd(),
    ),
);

$svg = $writer->writeString($result->url ?? '');
```

## 주의점

* `remote` 옵션은 SDK가 CLI 프로세스를 기동하는 경우에만 유효합니다. `useTcp()` 등 외부 서버 접속 시에는 무시됩니다.
* `workingDirectory`가 GitHub 저장소가 아닌 경우, 상시 ON 모드에서는 원격 설정이 스킵됩니다. 온디맨드 활성화(`remote()->enable()`)에서는 에러가 발생할 수 있습니다.
* 인증 정보(`github_token` 또는 `use_logged_in_user`)를 적절히 설정하세요.

## 참고

* [Cloud Sessions](/ko/packages/laravel-copilot-sdk/cloud-sessions)
* [RPC](/ko/packages/laravel-copilot-sdk/rpc)
* [TCP 모드](/ko/packages/laravel-copilot-sdk/tcp-mode)

<Info>
  최신 정보는 [GitHub 저장소](https://github.com/invokable/laravel-copilot-sdk)를 참고하세요.
</Info>


## Related topics

- [Cloud Sessions](/ko/packages/laravel-copilot-sdk/cloud-sessions.md)
- [스트리밍 이벤트](/ko/packages/laravel-copilot-sdk/streaming-events.md)
- [RPC(Remote Procedure Call)](/ko/packages/laravel-copilot-sdk/rpc.md)
- [WSL로 PHP와 Composer와 Node.js 설치하기 (Windows)](/ko/blog/windows-setup.md)
- [Laravel Sentinel — 라우트 보호 미들웨어 조사](/ko/blog/sentinel-introduction.md)
