Skip to main content

權限請求

預設行為(deny-all)

config/copilot.phppermission_approve"deny-all"(預設)時,Copilot::run()Copilot::start() 中的權限請求會自動 拒絕 以文字生成為主的用途通常不需要權限,因此這是一個安全的預設值。

可設定的值

若接受使用者輸入的提示,使用 "approve-safety""approve-all" 是危險的。 請務必使用 false"deny-all"。 即使是唯讀權限,也可能讀取 Laravel 專案的程式碼。

PermissionHandler::approveAll()

PermissionHandler::approveAll() 會自動核准所有請求。

PermissionHandler::approveSafety()

PermissionHandler::approveSafety() 僅拒絕高風險權限(shell, write),其他自動核准。
即便如此也未必完全安全。 若要嚴格控制,請實作自訂處理器,並依據 $request['kind'] 進行判斷。

PermissionHandler::denyAll()

PermissionHandler::denyAll() 拒絕所有請求。

直接使用 Client 時

若直接使用 CopilotClient,與官方 SDK 一樣,必須 指定 onPermissionRequest

自訂處理器

若要依請求類型個別控制核准或拒絕,請傳入 closure。 $request$invocation 是如下的陣列。

$request

除了 kindtoolCallId 之外的欄位會隨 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 儲存庫
最後修改於 2026年8月2日