權限請求
預設行為(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。
自訂處理器
若要依請求類型個別控制核准或拒絕,請傳入 closure。$request 與 $invocation 是如下的陣列。
$request
除了 kind 與 toolCallId 之外的欄位會隨 kind 而變化。
$invocation
Response
權限判斷結果以陣列回傳。 使用PermissionRequestResultKind 類別可讓程式碼更易讀。
協定細節
在 Protocol v3(目前的預設)中,權限請求並非以 JSON-RPC 請求形式,而是以 Session Event(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 儲存庫。