From d79fd746a96ddb5642939c9727baefce642d78e6 Mon Sep 17 00:00:00 2001 From: akbash Date: Tue, 25 Aug 2026 23:44:56 +0300 Subject: fix: require explicit workspace group close (#3206) refs #2874 Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com> --- src/api/schema/tests.rs | 28 ++++++++++++++++++++++++++++ src/api/schema/workspaces.rs | 7 +++++++ 2 files changed, 35 insertions(+) (limited to 'src/api/schema') diff --git a/src/api/schema/tests.rs b/src/api/schema/tests.rs index 5fe6dd27..5199038d 100644 --- a/src/api/schema/tests.rs +++ b/src/api/schema/tests.rs @@ -61,6 +61,34 @@ fn request_uses_dot_method_names() { assert_eq!(json["method"], "workspace.create"); } +#[test] +fn workspace_close_group_intent_defaults_false_and_round_trips() { + let request: Request = serde_json::from_value(serde_json::json!({ + "id": "close", + "method": "workspace.close", + "params": { "workspace_id": "w1" } + })) + .unwrap(); + assert!(matches!( + request.method, + Method::WorkspaceClose(WorkspaceCloseParams { + close_group: false, + .. + }) + )); + + let explicit = Request { + id: "close-group".into(), + method: Method::WorkspaceClose(WorkspaceCloseParams { + workspace_id: "w1".into(), + close_group: true, + }), + }; + let json = serde_json::to_value(&explicit).unwrap(); + assert_eq!(json["params"]["close_group"], true); + assert_eq!(serde_json::from_value::(json).unwrap(), explicit); +} + #[test] fn agent_start_and_prompt_requests_round_trip() { let start = Request { diff --git a/src/api/schema/workspaces.rs b/src/api/schema/workspaces.rs index f9ad4ced..bfc63252 100644 --- a/src/api/schema/workspaces.rs +++ b/src/api/schema/workspaces.rs @@ -16,6 +16,13 @@ pub struct WorkspaceCreateParams { pub env: HashMap, } +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] +pub struct WorkspaceCloseParams { + pub workspace_id: String, + #[serde(default, skip_serializing_if = "super::is_false")] + pub close_group: bool, +} + #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct WorkspaceRenameParams { pub workspace_id: String, -- cgit v1.2.3