> ## 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 从 Web 或移动端访问同一会话。

## Remote Sessions

启用 Remote Sessions 后，你可以通过 GitHub 的 Mission Control 从 Web 或移动端访问同一个会话。
启用后，每个会话都会连接到 Mission Control，并发出可以作为链接或 QR 码分享的 URL。

如果想让会话本身在 GitHub 托管环境（而非本地或自建服务器）中运行，请使用 [Cloud Sessions](/zh/packages/laravel-copilot-sdk/cloud-sessions)。

## 前置条件

* 用户已经认证（GitHub token 或已登录用户）
* `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](/zh/packages/laravel-copilot-sdk/cloud-sessions)
* [RPC](/zh/packages/laravel-copilot-sdk/rpc)
* [TCP 模式](/zh/packages/laravel-copilot-sdk/tcp-mode)

<Info>
  最新信息请参考 [GitHub 仓库](https://github.com/invokable/laravel-copilot-sdk)。
</Info>


## Related topics

- [Cloud Sessions](/zh/packages/laravel-copilot-sdk/cloud-sessions.md)
- [流式事件](/zh/packages/laravel-copilot-sdk/streaming-events.md)
- [RPC（Remote Procedure Call）](/zh/packages/laravel-copilot-sdk/rpc.md)
- [Session](/zh/session.md)
- [用 WSL 安装 PHP、Composer 和 Node.js(Windows)](/zh/blog/windows-setup.md)
