Skip to content

Commit 9c91ad8

Browse files
rinceyuanj-zhangyiyuanSteveSandersonMSCopilot
authored
fix(java): preserve MCP permission extension data (#2276)
* fix(java): preserve MCP permission extension data * test(java): preserve absent permission extension data Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * style(java): format permission regression test Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: j-zhangyiyuan <j-zhangyiyuan@microsoft.com> Co-authored-by: Steve Sanderson <SteveSandersonMS@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent a7a1d07 commit 9c91ad8

2 files changed

Lines changed: 31 additions & 0 deletions

File tree

java/src/main/java/com/github/copilot/rpc/PermissionRequest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
package com.github.copilot.rpc;
66

77
import java.io.IOException;
8+
import java.util.LinkedHashMap;
89
import java.util.Map;
910

11+
import com.fasterxml.jackson.annotation.JsonAnySetter;
1012
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
1113
import com.fasterxml.jackson.annotation.JsonInclude;
1214
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -45,6 +47,14 @@ public class PermissionRequest {
4547

4648
private Map<String, Object> extensionData;
4749

50+
@JsonAnySetter
51+
private void setExtensionDataEntry(String key, Object value) {
52+
if (extensionData == null) {
53+
extensionData = new LinkedHashMap<>();
54+
}
55+
extensionData.put(key, value);
56+
}
57+
4858
private static final class ManagedApprovalRequiredDeserializer extends JsonDeserializer<Boolean> {
4959

5060
@Override

java/src/test/java/com/github/copilot/DataObjectCoverageTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,27 @@ void permissionRequestSetExtensionData() {
139139
assertEquals("value", req.getExtensionData().get("key"));
140140
}
141141

142+
@Test
143+
void permissionRequestPreservesMcpExtensionData() {
144+
var request = PermissionRequest.fromJsonValue(
145+
java.util.Map.of("kind", "mcp", "serverName", "playwright", "toolName", "playwright-browser_navigate",
146+
"args", java.util.Map.of("url", "http://127.0.0.1:8106/docs/target-app/")));
147+
148+
assertEquals("mcp", request.getKind());
149+
assertEquals("playwright", request.getExtensionData().get("serverName"));
150+
assertEquals("playwright-browser_navigate", request.getExtensionData().get("toolName"));
151+
@SuppressWarnings("unchecked")
152+
var args = (java.util.Map<String, Object>) request.getExtensionData().get("args");
153+
assertEquals("http://127.0.0.1:8106/docs/target-app/", args.get("url"));
154+
}
155+
156+
@Test
157+
void permissionRequestWithoutExtensionDataPreservesNull() {
158+
var request = PermissionRequest.fromJsonValue(java.util.Map.of("kind", "read", "toolCallId", "tool-123"));
159+
160+
assertNull(request.getExtensionData());
161+
}
162+
142163
// ===== SectionOverride setContent =====
143164

144165
@Test

0 commit comments

Comments
 (0)