-///
-/// **Experimental.** This type is part of an experimental wire-protocol surface
-/// and may change or be removed in future SDK or CLI releases.
-///
-///
-#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
-pub enum DisableBypassPermissionsMode {
- #[serde(rename = "disable")]
- Disable,
- /// Unknown variant for forward compatibility.
- #[default]
- #[serde(other)]
- Unknown,
-}
-
/// Persisted extension discovery source
///
///
diff --git a/test/harness/package-lock.json b/test/harness/package-lock.json
index 18a9ac9a61..1481502d97 100644
--- a/test/harness/package-lock.json
+++ b/test/harness/package-lock.json
@@ -9,7 +9,7 @@
"version": "1.0.0",
"license": "ISC",
"devDependencies": {
- "@github/copilot": "^1.0.81-6",
+ "@github/copilot": "^1.0.81-7",
"@modelcontextprotocol/sdk": "^1.26.0",
"@types/node": "^25.3.3",
"@types/node-forge": "^1.3.14",
@@ -472,8 +472,8 @@
}
},
"node_modules/@github/copilot": {
- "version": "1.0.81-6",
- "integrity": "sha512-hT29nRkf0EJE3N6lqeLOPszbdEyALZ+fjYG9zKX5a3L5r+o+m4/KF+8l2gn2yORNqOzwUYNj2vnVzKqeYYNLGg==",
+ "version": "1.0.81-7",
+ "integrity": "sha512-C+V/PpCuhx6K46ghmdFk0MFnB5ycr/nila68l2ZkVGAA9FbLlnF3cStvNipnnGd3feRVaV+je3KWGdSVXpvAlw==",
"dev": true,
"license": "SEE LICENSE IN LICENSE.md",
"dependencies": {
@@ -483,19 +483,19 @@
"copilot": "npm-loader.js"
},
"optionalDependencies": {
- "@github/copilot-darwin-arm64": "1.0.81-6",
- "@github/copilot-darwin-x64": "1.0.81-6",
- "@github/copilot-linux-arm64": "1.0.81-6",
- "@github/copilot-linux-x64": "1.0.81-6",
- "@github/copilot-linuxmusl-arm64": "1.0.81-6",
- "@github/copilot-linuxmusl-x64": "1.0.81-6",
- "@github/copilot-win32-arm64": "1.0.81-6",
- "@github/copilot-win32-x64": "1.0.81-6"
+ "@github/copilot-darwin-arm64": "1.0.81-7",
+ "@github/copilot-darwin-x64": "1.0.81-7",
+ "@github/copilot-linux-arm64": "1.0.81-7",
+ "@github/copilot-linux-x64": "1.0.81-7",
+ "@github/copilot-linuxmusl-arm64": "1.0.81-7",
+ "@github/copilot-linuxmusl-x64": "1.0.81-7",
+ "@github/copilot-win32-arm64": "1.0.81-7",
+ "@github/copilot-win32-x64": "1.0.81-7"
}
},
"node_modules/@github/copilot-darwin-arm64": {
- "version": "1.0.81-6",
- "integrity": "sha512-nALa4e8Jc/g5ltIHrpHBHByJ5rlgzoZFylZIrkQY+B9vr3L57d5F6fOiTbf/OF9blFQX7artWRE1K0TmowGNCA==",
+ "version": "1.0.81-7",
+ "integrity": "sha512-oNZxTVsGn5vq/+vXv4uj+3bhVhRKg3oqG1ywPZ3Zq/HREnvFhX3nC3mIbdDmYj8Z2UKac45ULM+Vj75bnJ4fGA==",
"cpu": [
"arm64"
],
@@ -510,8 +510,8 @@
}
},
"node_modules/@github/copilot-darwin-x64": {
- "version": "1.0.81-6",
- "integrity": "sha512-K+bp799DejrsmxMNyaFAmKo4xnLJXBb8hkv9N8OCQukmTSoRpfqhv2oTDfgVFadwllt+py/FIdxKTZQYvPGGGw==",
+ "version": "1.0.81-7",
+ "integrity": "sha512-CtxhG5qF5CSl+Z1iDa2gS8HsQ1SWKiivuWyQ55yD6SGnGdVZ6XVAAQwUwSDw8z6yoR4p/IbKXr7UHwx+VsE2Tw==",
"cpu": [
"x64"
],
@@ -526,8 +526,8 @@
}
},
"node_modules/@github/copilot-linux-arm64": {
- "version": "1.0.81-6",
- "integrity": "sha512-aEpnfTTjOxpesFo9jqk/phZUivOhNHbdBRfBrS2NiCPrQZFBYUC4wRVo/Xo2PMMQ4J07b6fU7JJQPoUUkKy5Wg==",
+ "version": "1.0.81-7",
+ "integrity": "sha512-aBDIW7b/30kJUl75DGwd2ydXEy2zQHtGPmK7Wiszu3zNymVLZqZJJRuKUe8ZrZRU4DPc38YlmHK/t+BKkT4QQQ==",
"cpu": [
"arm64"
],
@@ -542,8 +542,8 @@
}
},
"node_modules/@github/copilot-linux-x64": {
- "version": "1.0.81-6",
- "integrity": "sha512-NFqonFfJCyA7d3bNoYeLWUQ69zelPr9TTnLpAHCi3scFZqbEvMBDFxW2XsKWwfYuuR9XzfU7/tgOUgq3gmL5aA==",
+ "version": "1.0.81-7",
+ "integrity": "sha512-U7RLP43H8R0Llqw8o8JCQ/6WVF+ztawhaj8Qw8aX8x+5Xf3Bf+pHgFYXWnCgSZhdGIE/p7HnncDstorMOM8lcg==",
"cpu": [
"x64"
],
@@ -558,8 +558,8 @@
}
},
"node_modules/@github/copilot-linuxmusl-arm64": {
- "version": "1.0.81-6",
- "integrity": "sha512-EE99DFTAgTq6eOFDiiv+OUROD2pDQIrzyyJEfUS9K8JanwNc+Py8vTxrJ0yK0slpJ+Fue5uDRno6c9ys8OM59g==",
+ "version": "1.0.81-7",
+ "integrity": "sha512-K03K1WS/92+2tE51EqVg5XPX9N6GSXqSkCzaLh2lVK3ho0/HQXeMtBlPAqafzWhpum3APbb8z97CKwQQWZr8XQ==",
"cpu": [
"arm64"
],
@@ -574,8 +574,8 @@
}
},
"node_modules/@github/copilot-linuxmusl-x64": {
- "version": "1.0.81-6",
- "integrity": "sha512-90HRKx25EjhlQNOCCdbiC0Ck0fSKyp8XUxUoCvuNdoigdUP54ZGS07dkyJiJq9KZaKilxZBSpXiNt8t5ETA2Sg==",
+ "version": "1.0.81-7",
+ "integrity": "sha512-8MWGNvSUAo0CadpuiHvtu8gi03TQ18bd6UkThDmdRXyfK+/vB32k5rB5jlHOzOFCoD3uRJew0RB1uO02gWC9vg==",
"cpu": [
"x64"
],
@@ -590,8 +590,8 @@
}
},
"node_modules/@github/copilot-win32-arm64": {
- "version": "1.0.81-6",
- "integrity": "sha512-1dRSHF/7PFzB+AGORg8BJh2n1+N7+sIJDLqozrC9INWFp1t6ercptIXgJTF/V7UZVGQLO4LBBK1HH/QhzUmrfA==",
+ "version": "1.0.81-7",
+ "integrity": "sha512-ARgj/6Vo614H/lT7kxZ0T+AL3xMv5d04o3uQXTqbByJbaWrm4fRuUWjHKNp9H89yMUddHILegErX4HWAb7uEEg==",
"cpu": [
"arm64"
],
@@ -606,8 +606,8 @@
}
},
"node_modules/@github/copilot-win32-x64": {
- "version": "1.0.81-6",
- "integrity": "sha512-lIbN1mk6Rm9bWrWU4/UfrC5OCga7XcBi2LBz5roDnNcuG8mKEevDcNOtbEYz/TaJg+WBMoTbGfXBVd1hGy2DTA==",
+ "version": "1.0.81-7",
+ "integrity": "sha512-ViNYHav6pbuTejyV9YZOr8JJze+ccs5e6eWeqr9VGuLz1LYnl9EJzWLYnTcdV2DgGCIIlssrbZlXlCtNePqoNg==",
"cpu": [
"x64"
],
diff --git a/test/harness/package.json b/test/harness/package.json
index 23b30b9aac..15927c509c 100644
--- a/test/harness/package.json
+++ b/test/harness/package.json
@@ -14,7 +14,7 @@
"node": "^20.19.0 || >=22.12.0"
},
"devDependencies": {
- "@github/copilot": "^1.0.81-6",
+ "@github/copilot": "^1.0.81-7",
"@modelcontextprotocol/sdk": "^1.26.0",
"@types/node": "^25.3.3",
"@types/node-forge": "^1.3.14",
From 39a89007c89498572447e76fa57c5611faabae4b Mon Sep 17 00:00:00 2001
From: Shay Rojansky
Date: Sun, 23 Aug 2026 22:57:00 +0200
Subject: [PATCH 2/3] Adapt SDKs to Copilot 1.0.81-7 schema
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---
go/client_test.go | 20 ++++++++++++++++
go/types.go | 9 ++++++--
.../rpc/DisableBypassPermissionsModes.java | 23 +++++++++++++++++++
.../rpc/ManagedSettingsPermissions.java | 7 +++---
.../github/copilot/ManagedSettingsTest.java | 12 ++++++++--
.../rpc/GeneratedRpcRecordsCoverageTest.java | 3 ++-
rust/src/lib.rs | 1 +
7 files changed, 66 insertions(+), 9 deletions(-)
create mode 100644 java/sdk/src/main/java/com/github/copilot/rpc/DisableBypassPermissionsModes.java
diff --git a/go/client_test.go b/go/client_test.go
index d0139eb11a..2332a77011 100644
--- a/go/client_test.go
+++ b/go/client_test.go
@@ -3834,6 +3834,26 @@ func TestSessionRequests_ManagedSettings(t *testing.T) {
}
})
+ t.Run("accepts future bypass-permissions modes", func(t *testing.T) {
+ req := createSessionRequest{ManagedSettings: &ManagedSettings{
+ Permissions: &ManagedSettingsPermissions{
+ DisableBypassPermissionsMode: DisableBypassPermissionsMode("future-fail-closed-mode"),
+ },
+ }}
+ data, err := json.Marshal(req)
+ if err != nil {
+ t.Fatalf("Failed to marshal: %v", err)
+ }
+ var m map[string]any
+ if err := json.Unmarshal(data, &m); err != nil {
+ t.Fatalf("Failed to unmarshal: %v", err)
+ }
+ perms := m["managedSettings"].(map[string]any)["permissions"].(map[string]any)
+ if perms["disableBypassPermissionsMode"] != "future-fail-closed-mode" {
+ t.Errorf("Expected future mode preserved, got %v", perms["disableBypassPermissionsMode"])
+ }
+ })
+
t.Run("omits managedSettings when nil", func(t *testing.T) {
req := createSessionRequest{}
data, _ := json.Marshal(req)
diff --git a/go/types.go b/go/types.go
index 60781d1da8..c8cf72197b 100644
--- a/go/types.go
+++ b/go/types.go
@@ -1569,11 +1569,16 @@ type ManagedSettings struct {
}
// DisableBypassPermissionsMode is the managed bypass-permissions policy.
-type DisableBypassPermissionsMode = rpc.DisableBypassPermissionsMode
+//
+// The runtime may introduce additional fail-closed modes. Values are serialized
+// as strings so callers can use newer modes without waiting for an SDK release.
+type DisableBypassPermissionsMode string
const (
// DisableBypassPermissionsModeDisable turns off bypass-permissions mode.
- DisableBypassPermissionsModeDisable = rpc.DisableBypassPermissionsModeDisable
+ DisableBypassPermissionsModeDisable DisableBypassPermissionsMode = "disable"
+ // DisableBypassPermissionsModeAllowAutoOnly permits only automatic bypass.
+ DisableBypassPermissionsModeAllowAutoOnly DisableBypassPermissionsMode = "allow-auto-only"
)
// ManagedSettingsPermissions is the permissions-only managed policy injected
diff --git a/java/sdk/src/main/java/com/github/copilot/rpc/DisableBypassPermissionsModes.java b/java/sdk/src/main/java/com/github/copilot/rpc/DisableBypassPermissionsModes.java
new file mode 100644
index 0000000000..cf98f0526d
--- /dev/null
+++ b/java/sdk/src/main/java/com/github/copilot/rpc/DisableBypassPermissionsModes.java
@@ -0,0 +1,23 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *--------------------------------------------------------------------------------------------*/
+package com.github.copilot.rpc;
+
+/**
+ * Known values for the managed bypass-permissions policy.
+ *
+ *
+ * The wire contract is an open string so callers can pass newer fail-closed
+ * modes directly to
+ * {@link ManagedSettingsPermissions#setDisableBypassPermissionsMode(String)}.
+ */
+public final class DisableBypassPermissionsModes {
+ /** Turns off bypass-permissions mode. */
+ public static final String DISABLE = "disable";
+
+ /** Permits bypass only for automatic operations. */
+ public static final String ALLOW_AUTO_ONLY = "allow-auto-only";
+
+ private DisableBypassPermissionsModes() {
+ }
+}
diff --git a/java/sdk/src/main/java/com/github/copilot/rpc/ManagedSettingsPermissions.java b/java/sdk/src/main/java/com/github/copilot/rpc/ManagedSettingsPermissions.java
index 0923cea54a..f857391dbc 100644
--- a/java/sdk/src/main/java/com/github/copilot/rpc/ManagedSettingsPermissions.java
+++ b/java/sdk/src/main/java/com/github/copilot/rpc/ManagedSettingsPermissions.java
@@ -5,7 +5,6 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
-import com.github.copilot.generated.rpc.DisableBypassPermissionsMode;
import java.util.ArrayList;
import java.util.List;
@@ -15,7 +14,7 @@
@JsonInclude(JsonInclude.Include.NON_NULL)
public final class ManagedSettingsPermissions {
@JsonProperty("disableBypassPermissionsMode")
- private DisableBypassPermissionsMode disableBypassPermissionsMode;
+ private String disableBypassPermissionsMode;
@JsonProperty("deny")
private List deny;
@@ -27,7 +26,7 @@ public final class ManagedSettingsPermissions {
private List allow;
/** @return the bypass-permissions policy, or {@code null} when unset */
- public DisableBypassPermissionsMode getDisableBypassPermissionsMode() {
+ public String getDisableBypassPermissionsMode() {
return disableBypassPermissionsMode;
}
@@ -38,7 +37,7 @@ public DisableBypassPermissionsMode getDisableBypassPermissionsMode() {
* bypass-permissions policy
* @return this policy
*/
- public ManagedSettingsPermissions setDisableBypassPermissionsMode(DisableBypassPermissionsMode value) {
+ public ManagedSettingsPermissions setDisableBypassPermissionsMode(String value) {
this.disableBypassPermissionsMode = value;
return this;
}
diff --git a/java/sdk/src/test/java/com/github/copilot/ManagedSettingsTest.java b/java/sdk/src/test/java/com/github/copilot/ManagedSettingsTest.java
index dbd19f3c97..d6341b26c5 100644
--- a/java/sdk/src/test/java/com/github/copilot/ManagedSettingsTest.java
+++ b/java/sdk/src/test/java/com/github/copilot/ManagedSettingsTest.java
@@ -8,7 +8,7 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.github.copilot.generated.rpc.DisableBypassPermissionsMode;
+import com.github.copilot.rpc.DisableBypassPermissionsModes;
import com.github.copilot.rpc.ManagedSettings;
import com.github.copilot.rpc.ManagedSettingsPermissions;
import com.github.copilot.rpc.PermissionRequestResult;
@@ -23,7 +23,7 @@ class ManagedSettingsTest {
@Test
void forwardsManagedSettingsOnCreateAndResume() throws Exception {
var permissions = new ManagedSettingsPermissions()
- .setDisableBypassPermissionsMode(DisableBypassPermissionsMode.DISABLE).setDeny(List.of("Shell(rm *)"))
+ .setDisableBypassPermissionsMode(DisableBypassPermissionsModes.DISABLE).setDeny(List.of("Shell(rm *)"))
.setAsk(List.of("Domain(publish.example)")).setAllow(List.of("Read(**)"));
var managedSettings = new ManagedSettings().setPermissions(permissions);
@@ -41,6 +41,14 @@ void forwardsManagedSettingsOnCreateAndResume() throws Exception {
assertTrue(json.contains("\"disableBypassPermissionsMode\":\"disable\""));
}
+ @Test
+ void acceptsFutureBypassPermissionsModes() throws Exception {
+ var permissions = new ManagedSettingsPermissions().setDisableBypassPermissionsMode("future-fail-closed-mode");
+ var json = new ObjectMapper().writeValueAsString(permissions);
+
+ assertTrue(json.contains("\"disableBypassPermissionsMode\":\"future-fail-closed-mode\""));
+ }
+
@Test
void preservesExplicitEmptyPermissionArrays() throws Exception {
// Security-critical: a present empty allow list admits nothing, while an
diff --git a/java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java b/java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java
index cf5b0426c5..0827cdbd34 100644
--- a/java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java
+++ b/java/sdk/src/test/java/com/github/copilot/generated/rpc/GeneratedRpcRecordsCoverageTest.java
@@ -818,7 +818,8 @@ void modelsListResult_nested() {
var policy = new ModelPolicy(ModelPolicyState.ENABLED, null);
var promo = new ModelBillingPromo("summer-2026", 25.0, "2026-08-01T00:00:00Z", "Summer discount");
var billing = new ModelBilling(1.0, null, null, promo);
- var modelItem = new Model("gpt-5", "GPT-5", capabilities, policy, billing, null, null, null, null, null);
+ var modelItem = new Model("gpt-5", "GPT-5", capabilities, policy, billing, null, null, null, null, null, null,
+ null);
var result = new ModelsListResult(List.of(modelItem));
assertEquals(1, result.models().size());
diff --git a/rust/src/lib.rs b/rust/src/lib.rs
index 5c06744698..bf50adfd48 100644
--- a/rust/src/lib.rs
+++ b/rust/src/lib.rs
@@ -2163,6 +2163,7 @@ impl Client {
.on_github_telemetry
.is_some()
.then_some(true),
+ ..Default::default()
};
let value = self
.call(
From 5cc64e552001a8190b9d8ab5d206d7bb44e907d8 Mon Sep 17 00:00:00 2001
From: Shay Rojansky
Date: Sun, 23 Aug 2026 23:45:20 +0200
Subject: [PATCH 3/3] Initialize Go model validation fixture
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: d59fb17f-5171-4eb4-bf40-04135baed642
---
go/internal/e2e/rpc_tasks_and_handlers_e2e_test.go | 1 +
1 file changed, 1 insertion(+)
diff --git a/go/internal/e2e/rpc_tasks_and_handlers_e2e_test.go b/go/internal/e2e/rpc_tasks_and_handlers_e2e_test.go
index 0267f8d042..648855e5a3 100644
--- a/go/internal/e2e/rpc_tasks_and_handlers_e2e_test.go
+++ b/go/internal/e2e/rpc_tasks_and_handlers_e2e_test.go
@@ -127,6 +127,7 @@ func TestRPCTasksAndHandlersE2E(t *testing.T) {
})
t.Run("should report implemented error for invalid task agent model", func(t *testing.T) {
+ ctx.ConfigureForTest(t)
session, err := client.CreateSession(t.Context(), &copilot.SessionConfig{
OnPermissionRequest: copilot.PermissionHandler.ApproveAll,
})