diff --git a/hive-ag3nt/src/mcp.rs b/hive-ag3nt/src/mcp.rs index 774fd6fd..ace175aa 100644 --- a/hive-ag3nt/src/mcp.rs +++ b/hive-ag3nt/src/mcp.rs @@ -129,21 +129,22 @@ pub fn format_recv(resp: Result) -> String { } /// Format helper for `get_loose_ends`: renders a short bulleted list -/// of pending approvals + questions. Empty list collapses to a clear -/// marker so claude doesn't go hunting for a payload that isn't there. +/// of pending approvals + questions + reminders. Empty list collapses +/// to a clear marker so claude doesn't go hunting for a payload that +/// isn't there. pub fn format_loose_ends(resp: Result) -> String { use std::fmt::Write as _; - let threads = match resp { + let loose_ends = match resp { Ok(SocketReply::LooseEnds(t)) => t, Ok(SocketReply::Err(m)) => return format!("get_loose_ends failed: {m}"), Ok(other) => return format!("get_loose_ends unexpected response: {other:?}"), Err(e) => return format!("get_loose_ends transport error: {e:#}"), }; - if threads.is_empty() { - return "(no open threads)".to_owned(); + if loose_ends.is_empty() { + return "(no loose ends)".to_owned(); } - let mut out = format!("{} open thread(s):\n", threads.len()); - for t in &threads { + let mut out = format!("{} loose end(s):\n", loose_ends.len()); + for t in &loose_ends { match t { hive_sh4re::LooseEnd::Approval { id, @@ -205,6 +206,17 @@ fn parse_loose_end_kind(raw: &str) -> Result &'static str { + match kind { + hive_sh4re::CancelLooseEndKind::Question => "question", + hive_sh4re::CancelLooseEndKind::Reminder => "reminder", + } +} + /// Format helper for `whoami`: renders the identity block as a short /// human-readable string. Skips fields that are `None` so the output /// doesn't carry dead placeholders. @@ -491,13 +503,13 @@ impl AgentServer { )] async fn cancel_loose_end(&self, Parameters(args): Parameters) -> String { let log = format!("{args:?}"); - let kind_label = args.kind.clone(); let id = args.id; run_tool_envelope("cancel_loose_end", log, async move { let kind = match parse_loose_end_kind(&args.kind) { Ok(k) => k, Err(e) => return e, }; + let kind_label = loose_end_kind_label(kind); let (resp, retries) = self .dispatch(hive_sh4re::AgentRequest::CancelLooseEnd { kind, id }) .await; @@ -1031,13 +1043,13 @@ impl ManagerServer { )] async fn cancel_loose_end(&self, Parameters(args): Parameters) -> String { let log = format!("{args:?}"); - let kind_label = args.kind.clone(); let id = args.id; run_tool_envelope("cancel_loose_end", log, async move { let kind = match parse_loose_end_kind(&args.kind) { Ok(k) => k, Err(e) => return e, }; + let kind_label = loose_end_kind_label(kind); let (resp, retries) = self .dispatch(hive_sh4re::ManagerRequest::CancelLooseEnd { kind, id }) .await;