権限リクエスト
デフォルト動作(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 リポジトリ を参照してください。