권한 요청
기본 동작(deny-all)
config/copilot.php의 permission_approve가 "deny-all"(기본값)인 경우, Copilot::run()이나 Copilot::start()에서는 권한 요청이 자동으로 거부됩니다.
텍스트 생성 중심의 용도에서는 권한이 필요 없는 경우가 많으므로 안전한 기본값입니다.
설정 가능한 값
PermissionHandler::approveAll()
PermissionHandler::approveAll()은 모든 요청을 자동 허용합니다.
PermissionHandler::approveSafety()
PermissionHandler::approveSafety()는 고위험 권한(shell, write)만 거부하고 나머지는 자동 허용합니다.
$request['kind']를 보고 판정하세요.
PermissionHandler::denyAll()
PermissionHandler::denyAll()은 모두 거부합니다.
Client를 직접 사용하는 경우
CopilotClient를 직접 사용할 경우, 공식 SDK와 마찬가지로 onPermissionRequest의 지정이 필수입니다.
커스텀 핸들러
요청 종류별로 허용/거부를 제어하려면 클로저를 전달합니다.$request와 $invocation은 다음과 같은 배열입니다.
$request
kind와 toolCallId 외의 필드는 kind에 따라 달라집니다.
$invocation
Response
권한 판정 결과는 배열로 반환합니다.PermissionRequestResultKind 클래스를 사용하면 가독성이 좋아집니다.
프로토콜 세부
Protocol v3(현재의 기본값)에서는 권한 요청이 JSON-RPC 요청이 아니라 세션 이벤트(permission.requested)로 전달됩니다.
SDK는 내부에서 이를 처리하고 session.permissions.handlePendingPermissionRequest RPC로 응답합니다.
SessionConfig의 사용법은 변하지 않습니다.
onPermissionRequest에 핸들러를 전달하면 프로토콜 차이는 SDK가 흡수합니다.
PermissionRequestResultKind
['kind' => 'approve-once'] 형식으로 직접 반환할 수도 있지만, PermissionRequestResultKind를 사용하면 이해하기 쉬워집니다.
사용 가능한 메서드
Laravel\Prompts\select를 사용하려면 PermissionRequestResultKind::select()로 선택지를 가져올 수 있습니다.
no-result
핸들러가 결과를 반환할 수 없는 경우(예: 비대화 환경)는no-result를 반환할 수 있습니다.
no-result를 반환하면 RPC 호출을 스킵하고 Copilot CLI 측의 기본 거부가 적용됩니다.
최신 정보는 GitHub 저장소를 참고하세요.