PermissionHandler.java
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
*--------------------------------------------------------------------------------------------*/
package com.github.copilot.sdk.json;
import java.util.concurrent.CompletableFuture;
/**
* Functional interface for handling permission requests from the AI assistant.
* <p>
* When the assistant needs permission to perform certain actions (such as
* executing tools or accessing resources), this handler is invoked to approve
* or deny the request.
*
* <h2>Example Implementation</h2>
*
* <pre>{@code
* PermissionHandler handler = (request, invocation) -> {
* // Check the permission kind
* if ("dangerous-action".equals(request.getKind())) {
* // Deny dangerous actions
* return CompletableFuture.completedFuture(new PermissionRequestResult().setKind("user-denied"));
* }
*
* // Approve other requests
* return CompletableFuture.completedFuture(new PermissionRequestResult().setKind("user-approved"));
* };
* }</pre>
*
* <p>
* A pre-built handler that approves all requests is available as
* {@link #APPROVE_ALL}.
*
* @see SessionConfig#setOnPermissionRequest(PermissionHandler)
* @see PermissionRequest
* @see PermissionRequestResult
* @since 1.0.0
*/
@FunctionalInterface
public interface PermissionHandler {
/**
* A pre-built handler that approves all permission requests.
*
* @since 1.0.11
*/
PermissionHandler APPROVE_ALL = (request, invocation) -> CompletableFuture
.completedFuture(new PermissionRequestResult().setKind(PermissionRequestResultKind.APPROVED));
/**
* Handles a permission request from the assistant.
* <p>
* The handler should evaluate the request and return a result indicating
* whether the permission is granted or denied.
*
* @param request
* the permission request details
* @param invocation
* the invocation context with session information
* @return a future that completes with the permission decision
*/
CompletableFuture<PermissionRequestResult> handle(PermissionRequest request, PermissionInvocation invocation);
}