跳转到主要内容

在运行时切换用于认证的 GitHub token

如何使用通过 Socialite 等认证的每个用户各自的 GitHub token 来运行 Copilot CLI。
Personal Access Token 需要 Copilot Requests 权限。Socialite 的 token 也应满足相同的要求。 如果无法从 Socialite 获取可用的 token,则采用让用户直接输入 PAT 的方式。
该方法仅在 stdio 模式下可用。 TCP 模式下 Copilot CLI 进程会一直运行,因此无法在运行时切换。 在 TCP 模式(cli_url)下指定 github_tokenuse_logged_in_user 会报错。
下面的「每个会话独立的 GitHub token(v0.3.0+)」在 TCP 模式下也可以使用。

github_token 选项

SDK 的官方选项。token 会通过环境变量 COPILOT_SDK_AUTH_TOKEN 传给 CLI。
use Revolution\Copilot\Facades\Copilot;

$config = array_merge(
    config('copilot'),
    [
        'github_token' => $user->github_token,
    ]
);

$response = Copilot::useStdio($config)->run(prompt: '...');
Copilot::stop(); // 以防万一销毁持有用户 token 的客户端

use_logged_in_user 选项

指定 github_token 后,use_logged_in_user 会自动变为 false。 这样 CLI 将不使用已保存的 OAuth token 或 gh CLI 认证,而只使用显式传入的 token。 也可以显式将 use_logged_in_user 设为 true
$config = [
    'github_token' => $user->github_token,
    'use_logged_in_user' => true, // 显式启用
];
不带 github_token 而将 use_logged_in_user 设为 false 时,会追加 --no-auto-login 标志,CLI 不会执行自动登录。

每个会话独立的 GitHub token(v0.3.0+)

使用 SessionConfiggitHubToken 字段,可以在同一 CLI 进程内为每个会话指定不同的 GitHub token(多租户支持)。 由于该 token 会作为 session.create JSON-RPC 的参数传递,因此 stdio 模式和 TCP 模式都可以使用。即使在 CLI 已经启动的 TCP 模式下,也可以按会话切换 token。
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;

$response = Copilot::run(
    prompt: '...',
    config: new SessionConfig(gitHubToken: $user->github_token),
);
TCP 模式下的使用示例:
// CLI 服务器已经启动(TCP 模式)
// 可以为每个会话传入不同的用户 token
$response = Copilot::useTcp(url: 'tcp://127.0.0.1:12345')->run(
    prompt: '...',
    config: new SessionConfig(gitHubToken: $user->github_token),
);
它与客户端级别的 github_token(CLI 进程启动时的 token)是独立工作的。 当你想按会话切换用户 token 时,请使用这个。
最新信息请参考 GitHub 仓库
最后修改于 2026年7月13日