Demandes de permission
Comportement par défaut (deny-all)
Lorsque permission_approve dans config/copilot.php vaut "deny-all" (par défaut), les demandes de permission émises depuis Copilot::run() ou Copilot::start() sont automatiquement refusées.
Comme les usages orientés génération de texte ne nécessitent souvent pas de permission, c’est une valeur par défaut sûre.
Valeurs configurables
PermissionHandler::approveAll()
PermissionHandler::approveAll() approuve automatiquement toutes les demandes.
PermissionHandler::approveSafety()
PermissionHandler::approveSafety() refuse uniquement les permissions à haut risque (shell, write) et approuve automatiquement le reste.
$request['kind'].
PermissionHandler::denyAll()
PermissionHandler::denyAll() refuse tout.
Utilisation directe du Client
Si vous utilisezCopilotClient directement, onPermissionRequest est obligatoire, comme dans le SDK officiel.
Gestionnaire personnalisé
Pour contrôler l’approbation par type de requête, passez une closure.$request et $invocation sont des tableaux comme suit.
$request
Les champs autres que kind et toolCallId varient selon kind.
$request['managedApprovalRequired'] vaut true, les Managed Settings de l’organisation empêchent l’approbation automatique de cette demande.
Dans ce cas, PermissionHandler::approveAll() renvoie no-result et laisse la main au flux standard de Copilot CLI.
$invocation
Contexte du prompt (promptRequest)
Avec les runtimes CLI récents, $invocation['promptRequest'] peut contenir le contexte du prompt destiné à l’utilisateur.
Dans un gestionnaire personnalisé, vous pouvez utiliser cette valeur pour déterminer si une réponse humaine est nécessaire.
PermissionHandler::approveAll() donne la priorité à promptRequest['managedApprovalRequired'] lorsque toutes les conditions suivantes sont remplies :
promptRequest['kind']vautcommands/read/write/url/workflowpromptRequest['managedApprovalRequired']est un booléen
$request['managedApprovalRequired'] subsiste comme marqueur issu d’une politique, la demande peut être approuvée automatiquement si le prompt ne nécessite pas de réponse humaine.
Le marqueur brut de $request reste conservé.
Avec un ancien CLI sans promptRequest, un type non pris en charge ou en l’absence de valeur booléenne valide, la décision repose comme auparavant sur $request['managedApprovalRequired'].
Réponse
Le résultat de la décision est renvoyé sous forme de tableau. La classePermissionRequestResultKind la rend plus lisible.
Détails du protocole
Dans le Protocol v3 (défaut actuel), la demande de permission n’est pas une requête JSON-RPC mais un événement de session (permission.requested).
Le SDK le traite en interne et répond via le RPC session.permissions.handlePendingPermissionRequest.
L’usage de SessionConfig ne change pas.
Si vous fournissez un gestionnaire à onPermissionRequest, le SDK absorbe les différences de protocole.
PermissionRequestResultKind
Vous pouvez renvoyer directement['kind' => 'approve-once'], mais PermissionRequestResultKind rend le code plus clair.
Méthodes disponibles
Pour utiliser
Laravel\Prompts\select, PermissionRequestResultKind::select() fournit les options.
no-result
Si le gestionnaire ne peut pas renvoyer de résultat (par ex. en environnement non interactif), utilisezno-result.
Renvoyer no-result ignore l’appel RPC et applique le refus par défaut côté Copilot CLI.
Pour les dernières informations, consultez le dépôt GitHub.