fix(core) default RejectConfig.request_permissions (#14165)

## Summary
Adds a default here so existing config deserializes

## Testing
- [x] Added a unit test
This commit is contained in:
Dylan Hurd
2026-03-09 21:56:23 -07:00
committed by GitHub
Unverified
parent d71e042694
commit 772259b01f
16 changed files with 59 additions and 15 deletions
@@ -58,6 +58,7 @@
"type": "boolean"
},
"request_permissions": {
"default": false,
"type": "boolean"
},
"rules": {
@@ -69,7 +70,6 @@
},
"required": [
"mcp_elicitations",
"request_permissions",
"rules",
"sandbox_approval"
],
@@ -4872,6 +4872,7 @@
"type": "boolean"
},
"request_permissions": {
"default": false,
"description": "Reject approval prompts related to built-in permission requests.",
"type": "boolean"
},
@@ -4886,7 +4887,6 @@
},
"required": [
"mcp_elicitations",
"request_permissions",
"rules",
"sandbox_approval"
],
@@ -6805,6 +6805,7 @@
"type": "boolean"
},
"request_permissions": {
"default": false,
"description": "Reject approval prompts related to built-in permission requests.",
"type": "boolean"
},
@@ -6819,7 +6820,6 @@
},
"required": [
"mcp_elicitations",
"request_permissions",
"rules",
"sandbox_approval"
],
@@ -9330,6 +9330,7 @@
"type": "boolean"
},
"request_permissions": {
"default": false,
"type": "boolean"
},
"rules": {
@@ -9341,7 +9342,6 @@
},
"required": [
"mcp_elicitations",
"request_permissions",
"rules",
"sandbox_approval"
],
@@ -732,6 +732,7 @@
"type": "boolean"
},
"request_permissions": {
"default": false,
"type": "boolean"
},
"rules": {
@@ -743,7 +744,6 @@
},
"required": [
"mcp_elicitations",
"request_permissions",
"rules",
"sandbox_approval"
],
@@ -149,6 +149,7 @@
"type": "boolean"
},
"request_permissions": {
"default": false,
"type": "boolean"
},
"rules": {
@@ -160,7 +161,6 @@
},
"required": [
"mcp_elicitations",
"request_permissions",
"rules",
"sandbox_approval"
],
@@ -21,6 +21,7 @@
"type": "boolean"
},
"request_permissions": {
"default": false,
"type": "boolean"
},
"rules": {
@@ -32,7 +33,6 @@
},
"required": [
"mcp_elicitations",
"request_permissions",
"rules",
"sandbox_approval"
],
@@ -21,6 +21,7 @@
"type": "boolean"
},
"request_permissions": {
"default": false,
"type": "boolean"
},
"rules": {
@@ -32,7 +33,6 @@
},
"required": [
"mcp_elicitations",
"request_permissions",
"rules",
"sandbox_approval"
],
@@ -25,6 +25,7 @@
"type": "boolean"
},
"request_permissions": {
"default": false,
"type": "boolean"
},
"rules": {
@@ -36,7 +37,6 @@
},
"required": [
"mcp_elicitations",
"request_permissions",
"rules",
"sandbox_approval"
],
@@ -21,6 +21,7 @@
"type": "boolean"
},
"request_permissions": {
"default": false,
"type": "boolean"
},
"rules": {
@@ -32,7 +33,6 @@
},
"required": [
"mcp_elicitations",
"request_permissions",
"rules",
"sandbox_approval"
],
@@ -25,6 +25,7 @@
"type": "boolean"
},
"request_permissions": {
"default": false,
"type": "boolean"
},
"rules": {
@@ -36,7 +37,6 @@
},
"required": [
"mcp_elicitations",
"request_permissions",
"rules",
"sandbox_approval"
],
@@ -21,6 +21,7 @@
"type": "boolean"
},
"request_permissions": {
"default": false,
"type": "boolean"
},
"rules": {
@@ -32,7 +33,6 @@
},
"required": [
"mcp_elicitations",
"request_permissions",
"rules",
"sandbox_approval"
],
@@ -25,6 +25,7 @@
"type": "boolean"
},
"request_permissions": {
"default": false,
"type": "boolean"
},
"rules": {
@@ -36,7 +37,6 @@
},
"required": [
"mcp_elicitations",
"request_permissions",
"rules",
"sandbox_approval"
],
@@ -25,6 +25,7 @@
"type": "boolean"
},
"request_permissions": {
"default": false,
"type": "boolean"
},
"rules": {
@@ -36,7 +37,6 @@
},
"required": [
"mcp_elicitations",
"request_permissions",
"rules",
"sandbox_approval"
],
@@ -201,6 +201,7 @@ pub enum AskForApproval {
Reject {
sandbox_approval: bool,
rules: bool,
#[serde(default)]
request_permissions: bool,
mcp_elicitations: bool,
},
@@ -5978,6 +5979,28 @@ mod tests {
assert_eq!(back_to_v2, v2_policy);
}
#[test]
fn ask_for_approval_reject_defaults_missing_request_permissions_to_false() {
let decoded = serde_json::from_value::<AskForApproval>(serde_json::json!({
"reject": {
"sandbox_approval": true,
"rules": false,
"mcp_elicitations": true,
}
}))
.expect("legacy reject approval policy should deserialize");
assert_eq!(
decoded,
AskForApproval::Reject {
sandbox_approval: true,
rules: false,
request_permissions: false,
mcp_elicitations: true,
}
);
}
#[test]
fn mcp_server_elicitation_response_round_trips_rmcp_result() {
let rmcp_result = rmcp::model::CreateElicitationResult {
+1 -1
View File
@@ -1323,6 +1323,7 @@
"type": "boolean"
},
"request_permissions": {
"default": false,
"description": "Reject approval prompts related to built-in permission requests.",
"type": "boolean"
},
@@ -1337,7 +1338,6 @@
},
"required": [
"mcp_elicitations",
"request_permissions",
"rules",
"sandbox_approval"
],
+21
View File
@@ -527,6 +527,7 @@ pub struct RejectConfig {
/// Reject prompts triggered by execpolicy `prompt` rules.
pub rules: bool,
/// Reject approval prompts related to built-in permission requests.
#[serde(default)]
pub request_permissions: bool,
/// Reject MCP elicitation prompts.
pub mcp_elicitations: bool,
@@ -3487,6 +3488,26 @@ mod tests {
);
}
#[test]
fn reject_config_defaults_missing_request_permissions_to_false() {
let decoded = serde_json::from_value::<RejectConfig>(serde_json::json!({
"sandbox_approval": true,
"rules": false,
"mcp_elicitations": true,
}))
.expect("legacy reject config should deserialize");
assert_eq!(
decoded,
RejectConfig {
sandbox_approval: true,
rules: false,
request_permissions: false,
mcp_elicitations: true,
}
);
}
#[test]
fn workspace_write_restricted_read_access_includes_effective_writable_roots() {
let cwd = if cfg!(windows) {