Skip to content

Commit 997ec57

Browse files
Copilotedburns
andauthored
Fix permission kind values to match CLI v1.0.32 protocol changes
Agent-Logs-Url: https://github.com/github/copilot-sdk-java/sessions/6e6133f4-9ebc-4ee5-b0cd-a8bccfb8e03b Co-authored-by: edburns <75821+edburns@users.noreply.github.com>
1 parent b11b20e commit 997ec57

6 files changed

Lines changed: 30 additions & 29 deletions

File tree

src/main/java/com/github/copilot/sdk/CopilotSession.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1224,7 +1224,7 @@ CompletableFuture<PermissionRequestResult> handlePermissionRequest(JsonNode perm
12241224
PermissionHandler handler = permissionHandler.get();
12251225
if (handler == null) {
12261226
PermissionRequestResult result = new PermissionRequestResult();
1227-
result.setKind("denied-no-approval-rule-and-could-not-request-from-user");
1227+
result.setKind(PermissionRequestResultKind.USER_NOT_AVAILABLE);
12281228
return CompletableFuture.completedFuture(result);
12291229
}
12301230

@@ -1235,13 +1235,13 @@ CompletableFuture<PermissionRequestResult> handlePermissionRequest(JsonNode perm
12351235
return handler.handle(request, invocation).exceptionally(ex -> {
12361236
LOG.log(Level.SEVERE, "Permission handler threw an exception", ex);
12371237
PermissionRequestResult result = new PermissionRequestResult();
1238-
result.setKind("denied-no-approval-rule-and-could-not-request-from-user");
1238+
result.setKind(PermissionRequestResultKind.USER_NOT_AVAILABLE);
12391239
return result;
12401240
});
12411241
} catch (Exception e) {
12421242
LOG.log(Level.SEVERE, "Failed to process permission request", e);
12431243
PermissionRequestResult result = new PermissionRequestResult();
1244-
result.setKind("denied-no-approval-rule-and-could-not-request-from-user");
1244+
result.setKind(PermissionRequestResultKind.USER_NOT_AVAILABLE);
12451245
return CompletableFuture.completedFuture(result);
12461246
}
12471247
}

src/test/java/com/github/copilot/sdk/ExecutorWiringTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.github.copilot.sdk.json.MessageOptions;
2727
import com.github.copilot.sdk.json.PermissionHandler;
2828
import com.github.copilot.sdk.json.PermissionRequestResult;
29+
import com.github.copilot.sdk.json.PermissionRequestResultKind;
2930
import com.github.copilot.sdk.json.PreToolUseHookOutput;
3031
import com.github.copilot.sdk.json.SessionConfig;
3132
import com.github.copilot.sdk.json.SessionHooks;
@@ -199,7 +200,7 @@ void testPermissionDispatchUsesProvidedExecutor() throws Exception {
199200
TrackingExecutor trackingExecutor = new TrackingExecutor(ForkJoinPool.commonPool());
200201

201202
var config = new SessionConfig().setOnPermissionRequest((request, invocation) -> CompletableFuture
202-
.completedFuture(new PermissionRequestResult().setKind("approved")));
203+
.completedFuture(new PermissionRequestResult().setKind(PermissionRequestResultKind.APPROVED)));
203204

204205
try (CopilotClient client = new CopilotClient(createOptionsWithExecutor(trackingExecutor))) {
205206
CopilotSession session = client.createSession(config).get();

src/test/java/com/github/copilot/sdk/PermissionsTest.java

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.github.copilot.sdk.json.PermissionHandler;
2323
import com.github.copilot.sdk.json.PermissionRequest;
2424
import com.github.copilot.sdk.json.PermissionRequestResult;
25+
import com.github.copilot.sdk.json.PermissionRequestResultKind;
2526
import com.github.copilot.sdk.json.SessionConfig;
2627
import com.github.copilot.sdk.json.ResumeSessionConfig;
2728
import com.github.copilot.sdk.json.MessageOptions;
@@ -67,7 +68,8 @@ void testPermissionHandlerForWriteOperations(TestInfo testInfo) throws Exception
6768
permissionRequests.add(request);
6869
assertEquals(sessionIdHolder[0], invocation.getSessionId());
6970
// Approve the permission
70-
return CompletableFuture.completedFuture(new PermissionRequestResult().setKind("approved"));
71+
return CompletableFuture
72+
.completedFuture(new PermissionRequestResult().setKind(PermissionRequestResultKind.APPROVED));
7173
});
7274

7375
try (CopilotClient client = ctx.createClient()) {
@@ -104,7 +106,7 @@ void testDenyPermission(TestInfo testInfo) throws Exception {
104106
var config = new SessionConfig().setOnPermissionRequest((request, invocation) -> {
105107
// Deny all permissions
106108
return CompletableFuture
107-
.completedFuture(new PermissionRequestResult().setKind("denied-interactively-by-user"));
109+
.completedFuture(new PermissionRequestResult().setKind(PermissionRequestResultKind.REJECTED));
108110
});
109111

110112
try (CopilotClient client = ctx.createClient()) {
@@ -171,7 +173,7 @@ void testAsyncPermissionHandler(TestInfo testInfo) throws Exception {
171173
} catch (InterruptedException e) {
172174
Thread.currentThread().interrupt();
173175
}
174-
return new PermissionRequestResult().setKind("approved");
176+
return new PermissionRequestResult().setKind(PermissionRequestResultKind.APPROVED);
175177
});
176178
});
177179

@@ -209,7 +211,8 @@ void testResumeSessionWithPermissionHandler(TestInfo testInfo) throws Exception
209211
// Resume with permission handler
210212
var resumeConfig = new ResumeSessionConfig().setOnPermissionRequest((request, invocation) -> {
211213
permissionRequests.add(request);
212-
return CompletableFuture.completedFuture(new PermissionRequestResult().setKind("approved"));
214+
return CompletableFuture
215+
.completedFuture(new PermissionRequestResult().setKind(PermissionRequestResultKind.APPROVED));
213216
});
214217

215218
CopilotSession session2 = client.resumeSession(sessionId, resumeConfig).get();
@@ -241,7 +244,8 @@ void testToolCallIdInPermissionRequests(TestInfo testInfo) throws Exception {
241244
receivedToolCallId[0] = true;
242245
assertFalse(request.getToolCallId().isEmpty(), "Tool call ID should not be empty");
243246
}
244-
return CompletableFuture.completedFuture(new PermissionRequestResult().setKind("approved"));
247+
return CompletableFuture
248+
.completedFuture(new PermissionRequestResult().setKind(PermissionRequestResultKind.APPROVED));
245249
});
246250

247251
try (CopilotClient client = ctx.createClient()) {
@@ -301,11 +305,9 @@ void testShouldDenyToolOperationsWhenHandlerExplicitlyDenies(TestInfo testInfo)
301305
ctx.configureForTest("permissions", "should_deny_tool_operations_when_handler_explicitly_denies");
302306

303307
try (CopilotClient client = ctx.createClient()) {
304-
CopilotSession session = client
305-
.createSession(
306-
new SessionConfig().setOnPermissionRequest((request,
307-
invocation) -> CompletableFuture.completedFuture(new PermissionRequestResult()
308-
.setKind("denied-no-approval-rule-and-could-not-request-from-user"))))
308+
CopilotSession session = client.createSession(new SessionConfig()
309+
.setOnPermissionRequest((request, invocation) -> CompletableFuture.completedFuture(
310+
new PermissionRequestResult().setKind(PermissionRequestResultKind.USER_NOT_AVAILABLE))))
309311
.get();
310312

311313
final boolean[] permissionDenied = {false};
@@ -341,11 +343,9 @@ void testShouldDenyToolOperationsWhenHandlerExplicitlyDeniesAfterResume(TestInfo
341343
String sessionId = session1.getSessionId();
342344
session1.sendAndWait(new MessageOptions().setPrompt("What is 1+1?")).get(60, TimeUnit.SECONDS);
343345

344-
CopilotSession session2 = client
345-
.resumeSession(sessionId,
346-
new ResumeSessionConfig().setOnPermissionRequest((request,
347-
invocation) -> CompletableFuture.completedFuture(new PermissionRequestResult()
348-
.setKind("denied-no-approval-rule-and-could-not-request-from-user"))))
346+
CopilotSession session2 = client.resumeSession(sessionId, new ResumeSessionConfig()
347+
.setOnPermissionRequest((request, invocation) -> CompletableFuture.completedFuture(
348+
new PermissionRequestResult().setKind(PermissionRequestResultKind.USER_NOT_AVAILABLE))))
349349
.get();
350350

351351
final boolean[] permissionDenied = {false};

src/test/java/com/github/copilot/sdk/RpcHandlerDispatcherTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ void permissionRequestWithUnknownSession() throws Exception {
304304

305305
JsonNode response = readResponse();
306306
JsonNode result = response.get("result").get("result");
307-
assertEquals("denied-no-approval-rule-and-could-not-request-from-user", result.get("kind").asText());
307+
assertEquals("user-not-available", result.get("kind").asText());
308308
}
309309

310310
@Test
@@ -339,7 +339,7 @@ void permissionRequestHandlerFails() throws Exception {
339339
JsonNode response = readResponse();
340340
// CopilotSession catches the exception and returns a denied result
341341
JsonNode result = response.get("result").get("result");
342-
assertEquals("denied-no-approval-rule-and-could-not-request-from-user", result.get("kind").asText());
342+
assertEquals("user-not-available", result.get("kind").asText());
343343
}
344344

345345
@Test
@@ -358,7 +358,7 @@ void permissionRequestV2RejectsNoResult() throws Exception {
358358
// to the exception path and respond with denied.
359359
JsonNode response = readResponse();
360360
JsonNode result = response.get("result").get("result");
361-
assertEquals("denied-no-approval-rule-and-could-not-request-from-user", result.get("kind").asText());
361+
assertEquals("user-not-available", result.get("kind").asText());
362362
}
363363

364364
// ===== userInput.request tests =====

src/test/java/com/github/copilot/sdk/SessionHandlerTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ void testHandlePermissionRequestWithNoHandlerReturnsDenied() throws Exception {
6666

6767
PermissionRequestResult result = session.handlePermissionRequest(data).get();
6868

69-
assertEquals("denied-no-approval-rule-and-could-not-request-from-user", result.getKind());
69+
assertEquals("user-not-available", result.getKind());
7070
}
7171

7272
// ===== handlePermissionRequest: handler throws =====
@@ -81,7 +81,7 @@ void testHandlePermissionRequestHandlerExceptionReturnsDenied() throws Exception
8181

8282
PermissionRequestResult result = session.handlePermissionRequest(data).get();
8383

84-
assertEquals("denied-no-approval-rule-and-could-not-request-from-user", result.getKind());
84+
assertEquals("user-not-available", result.getKind());
8585
}
8686

8787
// ===== handlePermissionRequest: handler future fails =====
@@ -95,7 +95,7 @@ void testHandlePermissionRequestHandlerFutureFailsReturnsDenied() throws Excepti
9595

9696
PermissionRequestResult result = session.handlePermissionRequest(data).get();
9797

98-
assertEquals("denied-no-approval-rule-and-could-not-request-from-user", result.getKind());
98+
assertEquals("user-not-available", result.getKind());
9999
}
100100

101101
// ===== handlePermissionRequest: handler succeeds =====

src/test/java/com/github/copilot/sdk/ToolsTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.github.copilot.sdk.json.PermissionHandler;
2626
import com.github.copilot.sdk.json.PermissionRequest;
2727
import com.github.copilot.sdk.json.PermissionRequestResult;
28+
import com.github.copilot.sdk.json.PermissionRequestResultKind;
2829
import com.github.copilot.sdk.json.SessionConfig;
2930
import com.github.copilot.sdk.json.ToolDefinition;
3031

@@ -305,10 +306,9 @@ void testDeniesCustomToolWhenPermissionDenied(TestInfo testInfo) throws Exceptio
305306

306307
try (CopilotClient client = ctx.createClient()) {
307308
CopilotSession session = client
308-
.createSession(
309-
new SessionConfig().setTools(List.of(encryptTool))
310-
.setOnPermissionRequest((request, invocation) -> CompletableFuture.completedFuture(
311-
new PermissionRequestResult().setKind("denied-interactively-by-user"))))
309+
.createSession(new SessionConfig().setTools(List.of(encryptTool))
310+
.setOnPermissionRequest((request, invocation) -> CompletableFuture.completedFuture(
311+
new PermissionRequestResult().setKind(PermissionRequestResultKind.REJECTED))))
312312
.get();
313313

314314
session.sendAndWait(new MessageOptions().setPrompt("Use encrypt_string to encrypt this string: Hello"))

0 commit comments

Comments
 (0)