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_token 或 use_logged_in_user)。