From 70edfa43892db4f971a09f1a90a5125a2c3f360b Mon Sep 17 00:00:00 2001 From: Riz Ashraf Date: Sun, 27 Sep 2026 09:57:04 +0100 Subject: [PATCH] Add delete_decision tool for removing redundant ADRs --- server/src/handlers/meta.rs | 31 +++++++++++++++++++++++++++++++ server/src/router.rs | 1 + server/src/tools.rs | 7 +++++++ 3 files changed, 39 insertions(+) diff --git a/server/src/handlers/meta.rs b/server/src/handlers/meta.rs index 88c3ecc..daa6cf6 100644 --- a/server/src/handlers/meta.rs +++ b/server/src/handlers/meta.rs @@ -76,6 +76,37 @@ impl McpTool for QueryDecisionsHandler { } } +pub struct DeleteDecisionHandler; + +#[async_trait] +impl McpTool for DeleteDecisionHandler { + fn name(&self) -> &'static str { + "delete_decision" + } + + fn schema(&self) -> Value { + crate::mcp::tool_def::("delete_decision", "Delete an architectural decision record") + } + + async fn execute(&self, args: Value, state: Arc) -> Result { + let req: crate::tools::DeleteDecisionTool = serde_json::from_value(args).map_err(|e| e.to_string())?; + let mut found = false; + state.adrs.modify(|adrs| { + if let Some(pos) = adrs.iter().position(|a| a.id == req.id) { + adrs.remove(pos); + found = true; + } + }); + + if found { + state.rebuild_index().await; + Ok("Decision deleted successfully".to_string()) + } else { + Err("Decision not found".to_string()) + } + } +} + pub struct LogErrorFixHandler; #[async_trait] diff --git a/server/src/router.rs b/server/src/router.rs index 6916b85..c54d6d8 100644 --- a/server/src/router.rs +++ b/server/src/router.rs @@ -69,6 +69,7 @@ impl MemoryHandler { register!(meta::LogDecisionHandler); register!(meta::QueryDecisionsHandler); + register!(meta::DeleteDecisionHandler); register!(meta::LogErrorFixHandler); register!(meta::SearchErrorFixesHandler); register!(meta::LogCodeChangeHandler); diff --git a/server/src/tools.rs b/server/src/tools.rs index 146cd29..d548c4d 100644 --- a/server/src/tools.rs +++ b/server/src/tools.rs @@ -233,6 +233,13 @@ pub struct QueryDecisionsTool { pub include_body: Option, } +/// Delete an architectural decision record (ADR). +#[derive(Debug, Deserialize, Serialize, JsonSchema)] +pub struct DeleteDecisionTool { + /// The ID of the decision to delete. + pub id: String, +} + /// Merge two entities in the knowledge graph into one. #[derive(Debug, Deserialize, Serialize, JsonSchema)] pub struct MergeEntitiesTool {