Skip to main content

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

Se accetti prompt utente, "approve-safety" e "approve-all" sono pericolosi. Usa sempre false oppure "deny-all". Anche i permessi read-only potrebbero leggere il codice del progetto Laravel.

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.
Neanche questo è del tutto sicuro. Se vuoi un controllo rigoroso, implementa un handler personalizzato e valuta usando $request['kind'].

PermissionHandler::denyAll()

PermissionHandler::denyAll() rifiuta tutto.

Uso diretto di Client

Quando usi direttamente CopilotClient, 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.
Se $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 tra commands / read / write / url / workflow
  • promptRequest['managedApprovalRequired'] è un boolean
In questo modo, anche se $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 classe PermissionRequestResultKind 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 restituire no-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.
Ultima modifica il 19 ottobre 2026