From d0908d5801da3f32d27c26dc3fdbfe2ceb624f1b Mon Sep 17 00:00:00 2001 From: j-zhangyiyuan Date: Thu, 6 Aug 2026 17:43:52 +0800 Subject: [PATCH 1/3] fix(java): preserve MCP permission extension data --- .../github/copilot/rpc/PermissionRequest.java | 10 ++++++++++ .../github/copilot/DataObjectCoverageTest.java | 16 ++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/java/src/main/java/com/github/copilot/rpc/PermissionRequest.java b/java/src/main/java/com/github/copilot/rpc/PermissionRequest.java index a3297bfb2c..fc49332b8a 100644 --- a/java/src/main/java/com/github/copilot/rpc/PermissionRequest.java +++ b/java/src/main/java/com/github/copilot/rpc/PermissionRequest.java @@ -5,8 +5,10 @@ package com.github.copilot.rpc; import java.io.IOException; +import java.util.LinkedHashMap; import java.util.Map; +import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; @@ -45,6 +47,14 @@ public class PermissionRequest { private Map extensionData; + @JsonAnySetter + private void setExtensionDataEntry(String key, Object value) { + if (extensionData == null) { + extensionData = new LinkedHashMap<>(); + } + extensionData.put(key, value); + } + private static final class ManagedApprovalRequiredDeserializer extends JsonDeserializer { @Override diff --git a/java/src/test/java/com/github/copilot/DataObjectCoverageTest.java b/java/src/test/java/com/github/copilot/DataObjectCoverageTest.java index f38a038368..d82f47f43b 100644 --- a/java/src/test/java/com/github/copilot/DataObjectCoverageTest.java +++ b/java/src/test/java/com/github/copilot/DataObjectCoverageTest.java @@ -139,6 +139,22 @@ void permissionRequestSetExtensionData() { assertEquals("value", req.getExtensionData().get("key")); } + @Test + void permissionRequestPreservesMcpExtensionData() { + var request = PermissionRequest.fromJsonValue(java.util.Map.of( + "kind", "mcp", + "serverName", "playwright", + "toolName", "playwright-browser_navigate", + "args", java.util.Map.of("url", "http://127.0.0.1:8106/docs/target-app/"))); + + assertEquals("mcp", request.getKind()); + assertEquals("playwright", request.getExtensionData().get("serverName")); + assertEquals("playwright-browser_navigate", request.getExtensionData().get("toolName")); + @SuppressWarnings("unchecked") + var args = (java.util.Map) request.getExtensionData().get("args"); + assertEquals("http://127.0.0.1:8106/docs/target-app/", args.get("url")); + } + // ===== SectionOverride setContent ===== @Test From 5176d679dba6388fd49f64a5445f5ee195a9e860 Mon Sep 17 00:00:00 2001 From: Steve Sanderson Date: Thu, 6 Aug 2026 12:12:26 +0000 Subject: [PATCH 2/3] test(java): preserve absent permission extension data Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../java/com/github/copilot/DataObjectCoverageTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/java/src/test/java/com/github/copilot/DataObjectCoverageTest.java b/java/src/test/java/com/github/copilot/DataObjectCoverageTest.java index d82f47f43b..2fe0c84d7b 100644 --- a/java/src/test/java/com/github/copilot/DataObjectCoverageTest.java +++ b/java/src/test/java/com/github/copilot/DataObjectCoverageTest.java @@ -155,6 +155,13 @@ void permissionRequestPreservesMcpExtensionData() { assertEquals("http://127.0.0.1:8106/docs/target-app/", args.get("url")); } + @Test + void permissionRequestWithoutExtensionDataPreservesNull() { + var request = PermissionRequest.fromJsonValue(java.util.Map.of("kind", "read", "toolCallId", "tool-123")); + + assertNull(request.getExtensionData()); + } + // ===== SectionOverride setContent ===== @Test From f85c2ab871b897c4a71b8182d0897b82da58e32d Mon Sep 17 00:00:00 2001 From: Steve Sanderson Date: Thu, 6 Aug 2026 13:05:14 +0000 Subject: [PATCH 3/3] style(java): format permission regression test Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../java/com/github/copilot/DataObjectCoverageTest.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/java/src/test/java/com/github/copilot/DataObjectCoverageTest.java b/java/src/test/java/com/github/copilot/DataObjectCoverageTest.java index 2fe0c84d7b..f95c5bcc57 100644 --- a/java/src/test/java/com/github/copilot/DataObjectCoverageTest.java +++ b/java/src/test/java/com/github/copilot/DataObjectCoverageTest.java @@ -141,11 +141,9 @@ void permissionRequestSetExtensionData() { @Test void permissionRequestPreservesMcpExtensionData() { - var request = PermissionRequest.fromJsonValue(java.util.Map.of( - "kind", "mcp", - "serverName", "playwright", - "toolName", "playwright-browser_navigate", - "args", java.util.Map.of("url", "http://127.0.0.1:8106/docs/target-app/"))); + var request = PermissionRequest.fromJsonValue( + java.util.Map.of("kind", "mcp", "serverName", "playwright", "toolName", "playwright-browser_navigate", + "args", java.util.Map.of("url", "http://127.0.0.1:8106/docs/target-app/"))); assertEquals("mcp", request.getKind()); assertEquals("playwright", request.getExtensionData().get("serverName"));