Solicitudes de permiso
Comportamiento por defecto (deny-all)
Cuando permission_approve de config/copilot.php vale "deny-all" (valor por defecto), las solicitudes de permiso en Copilot::run() y Copilot::start() se deniegan automáticamente.
En usos centrados en generación de texto no suele hacer falta ningún permiso, así que es un valor seguro por defecto.
Valores configurables
PermissionHandler::approveAll()
PermissionHandler::approveAll() aprueba todas las solicitudes automáticamente.
PermissionHandler::approveSafety()
PermissionHandler::approveSafety() deniega únicamente los permisos de alto riesgo (shell, write) y aprueba el resto automáticamente.
$request['kind'].
PermissionHandler::denyAll()
PermissionHandler::denyAll() deniega todo.
Al usar Client directamente
Si utilizasCopilotClient directamente, indicar onPermissionRequest es obligatorio, igual que en el SDK oficial.
Handler personalizado
Para controlar autorización/denegación por tipo de solicitud, pasa una clausura.$request e $invocation son arrays como los siguientes.
$request
Los campos distintos de kind y toolCallId varían según kind.
$invocation
Response
El resultado de la decisión de permiso se devuelve como array. La clasePermissionRequestResultKind mejora la legibilidad.
Detalle del protocolo
En Protocol v3 (el valor por defecto actual), las solicitudes de permiso se entregan como eventos de sesión (permission.requested), no como peticiones JSON-RPC.
El SDK las procesa internamente y responde con el RPC session.permissions.handlePendingPermissionRequest.
El uso de SessionConfig no cambia.
Si pasas un handler a onPermissionRequest, el SDK absorbe las diferencias de protocolo.
PermissionRequestResultKind
También puedes devolver directamente algo como['kind' => 'approve-once'], pero usar PermissionRequestResultKind resulta más claro.
Métodos disponibles
Si quieres usar
Laravel\Prompts\select, puedes obtener las opciones con PermissionRequestResultKind::select().
no-result
Si el handler no puede devolver un resultado (por ejemplo, en un entorno no interactivo), puedes devolverno-result.
Al hacerlo, se omite la llamada RPC y se aplica la denegación por defecto de Copilot CLI.
Consulta la información más reciente en el repositorio de GitHub.