跳转到主要内容

权限请求

默认行为(deny-all

config/copilot.phppermission_approve"deny-all"(默认)时,Copilot::run()Copilot::start() 中的权限请求会被自动 拒绝 由于以文本生成为主的用途通常不需要权限,因此这是一个安全的默认值。

可配置的值

如果接收用户输入的 prompt,"approve-safety""approve-all" 是危险的。 请务必使用 false"deny-all"。 即使是 read-only 权限,Laravel 项目的代码也可能被读取。

PermissionHandler::approveAll()

PermissionHandler::approveAll() 会自动许可所有请求。

PermissionHandler::approveSafety()

PermissionHandler::approveSafety() 只拒绝高风险的权限(shellwrite),其他自动许可。
即便如此也未必完全安全。 若要严格控制,请实现自定义处理器,通过查看 $request['kind'] 进行判断。

PermissionHandler::denyAll()

PermissionHandler::denyAll() 会拒绝所有请求。

直接使用 Client 的情况

直接使用 CopilotClient 时,与官方 SDK 一样,onPermissionRequest必需的

自定义处理器

要按请求类型控制许可 / 拒绝,请传入闭包。 $request$invocation 是如下的数组。

$request

kindtoolCallId 以外的字段会因 kind 而变化。

$invocation

Response

权限判断结果以数组形式返回。 使用 PermissionRequestResultKind 类可以更易读。

协议详情

在 Protocol v3(当前默认)中,权限请求不再作为 JSON-RPC 请求,而是作为会话事件(permission.requested)投递。 SDK 内部会处理它,并通过 session.permissions.handlePendingPermissionRequest RPC 进行响应。 SessionConfig 的使用方式不变。 只要向 onPermissionRequest 传入处理器,协议差异会由 SDK 吸收。

PermissionRequestResultKind

你也可以直接以 ['kind' => 'approve-once'] 的形式返回,但使用 PermissionRequestResultKind 会更直观。

可用的方法

如果想使用 Laravel\Prompts\select,可以通过 PermissionRequestResultKind::select() 获取选项。

no-result

当处理器无法返回结果时(例如非交互环境),可以返回 no-result。 返回 no-result 会跳过 RPC 调用,采用 Copilot CLI 侧的默认拒绝。
最新信息请参考 GitHub 仓库
最后修改于 2026年7月18日