权限请求
默认行为(deny-all)
当 config/copilot.php 的 permission_approve 为 "deny-all"(默认)时,Copilot::run() 和 Copilot::start() 中的权限请求会被自动 拒绝。
由于以文本生成为主的用途通常不需要权限,因此这是一个安全的默认值。
可配置的值
PermissionHandler::approveAll()
PermissionHandler::approveAll() 会自动许可所有请求。
PermissionHandler::approveSafety()
PermissionHandler::approveSafety() 只拒绝高风险的权限(shell、write),其他自动许可。
$request['kind'] 进行判断。
PermissionHandler::denyAll()
PermissionHandler::denyAll() 会拒绝所有请求。
直接使用 Client 的情况
直接使用CopilotClient 时,与官方 SDK 一样,onPermissionRequest 是 必需的。
自定义处理器
要按请求类型控制许可 / 拒绝,请传入闭包。$request 和 $invocation 是如下的数组。
$request
kind 和 toolCallId 以外的字段会因 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 仓库。