跳转到主要内容

Remote Sessions

启用 Remote Sessions 后,你可以通过 GitHub 的 Mission Control 从 Web 或移动端访问同一个会话。 启用后,每个会话都会连接到 Mission Control,并发出可以作为链接或 QR 码分享的 URL。 如果想让会话本身在 GitHub 托管环境(而非本地或自建服务器)中运行,请使用 Cloud Sessions

前置条件

  • 用户已经认证(GitHub token 或已登录用户)
  • workingDirectory 是一个 GitHub 仓库

在客户端级别启用(始终 ON)

启用 remote: true 后,GitHub 仓库内的所有会话都会自动发出远程 URL。 与其固定写入 config/copilot.php,不如仅对需要的处理通过 useStdio() 启用 remote: true 更易处理。
remote 选项仅在 SDK 启动 CLI 进程时有效。也就是说 仅限 stdio 模式。使用 useTcp() 等连接到外部服务器时会被忽略。
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 命令等价。
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
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_tokenuse_logged_in_user)。

参考

最新信息请参考 GitHub 仓库
最后修改于 2026年7月13日