Skip to main content

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

Lorsque vous acceptez des prompts saisis par l’utilisateur, "approve-safety" et "approve-all" sont dangereux. Utilisez impérativement false ou "deny-all". Même avec des permissions en lecture seule, le code du projet Laravel peut être lu.

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.
Ce n’est pas totalement sûr pour autant. Pour un contrôle strict, implémentez un gestionnaire personnalisé qui se base sur $request['kind'].

PermissionHandler::denyAll()

PermissionHandler::denyAll() refuse tout.

Utilisation directe du Client

Si vous utilisez CopilotClient 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.
Si $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'] vaut commands / read / write / url / workflow
  • promptRequest['managedApprovalRequired'] est un booléen
Ainsi, même si $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 classe PermissionRequestResultKind 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), utilisez no-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.
Dernière modification le 19 octobre 2026