Richieste di permesso
Comportamento predefinito (deny-all)
Quando permission_approve in config/copilot.php vale "deny-all" (default), le richieste di permesso vengono automaticamente rifiutate in Copilot::run() e Copilot::start().
Per gli usi centrati sulla generazione di testo spesso non servono permessi, quindi è un default sicuro.
Valori configurabili
PermissionHandler::approveAll()
PermissionHandler::approveAll() autorizza automaticamente tutte le richieste.
PermissionHandler::approveSafety()
PermissionHandler::approveSafety() rifiuta solo i permessi ad alto rischio (shell, write) e autorizza automaticamente gli altri.
$request['kind'].
PermissionHandler::denyAll()
PermissionHandler::denyAll() rifiuta tutto.
Uso diretto di Client
Quando usi direttamenteCopilotClient, come nell’SDK ufficiale è obbligatorio specificare onPermissionRequest.
Handler personalizzato
Per controllare autorizzazione/rifiuto in base al tipo di richiesta, passa una closure.$request e $invocation sono array come i seguenti.
$request
I campi oltre a kind e toolCallId variano a seconda di kind.
$request['managedApprovalRequired'] è true, le Managed Settings dell’organizzazione impediscono l’approvazione automatica di questa richiesta.
In questo caso PermissionHandler::approveAll() restituisce no-result e lascia la decisione al flusso standard di Copilot CLI.
$invocation
Contesto del prompt (promptRequest)
Nei runtime CLI più recenti, $invocation['promptRequest'] può contenere il contesto del prompt rivolto all’utente.
Negli handler personalizzati puoi usare questo valore per stabilire se è necessaria una risposta umana.
PermissionHandler::approveAll() dà priorità a promptRequest['managedApprovalRequired'] quando sono soddisfatte tutte le condizioni seguenti.
promptRequest['kind']è uno tracommands/read/write/url/workflowpromptRequest['managedApprovalRequired']è un boolean
$request['managedApprovalRequired'] rimane come marcatore derivato dalla policy, la richiesta può essere approvata automaticamente quando il prompt non richiede una risposta umana.
Il marcatore grezzo in $request viene comunque conservato.
Con CLI meno recenti senza promptRequest, tipi non supportati o in assenza di un valore boolean valido, la decisione si basa come prima su $request['managedApprovalRequired'].
Risposta
Il risultato della decisione sul permesso viene restituito come array. La classePermissionRequestResultKind la rende più leggibile.
Dettagli di protocollo
Nel Protocol v3 (default attuale) le richieste di permesso vengono consegnate come eventi di sessione (permission.requested) anziché come richieste JSON-RPC.
L’SDK le gestisce internamente e risponde con l’RPC session.permissions.handlePendingPermissionRequest.
L’utilizzo di SessionConfig non cambia.
Basta passare un handler a onPermissionRequest: le differenze di protocollo sono assorbite dall’SDK.
PermissionRequestResultKind
Puoi restituire direttamente['kind' => 'approve-once'], ma PermissionRequestResultKind è più chiaro.
Metodi disponibili
Se vuoi usare
Laravel\Prompts\select, con PermissionRequestResultKind::select() ottieni le opzioni.
no-result
Se l’handler non può restituire un risultato (ad es. ambiente non interattivo) puoi restituireno-result.
Restituendo no-result la chiamata RPC viene saltata e viene applicato il rifiuto predefinito di Copilot CLI.
Per le informazioni più recenti fai riferimento al repository GitHub.