From 3df565789c3d19209b3b0d3defa185c22fb9e698 Mon Sep 17 00:00:00 2001 From: damocles Date: Wed, 22 Jul 2026 18:40:26 +0200 Subject: [PATCH] type ask `to` target as Ident (#2621) --- Cargo.lock | 2 ++ hive-agent-mcp/Cargo.toml | 1 + hive-agent-mcp/src/mcp/mod.rs | 6 +++++- hive-c0re/src/socket_server/mod.rs | 2 +- hive-core-agent-sock/Cargo.toml | 1 + hive-core-agent-sock/src/lib.rs | 3 ++- 6 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f7bf45d2..3f4ab5b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1556,6 +1556,7 @@ dependencies = [ "hive-agent-sock", "hive-core-agent-sock", "hive-sh4re", + "hive-types", "rmcp", "serde", "serde_json", @@ -1662,6 +1663,7 @@ name = "hive-core-agent-sock" version = "0.1.0" dependencies = [ "hive-sh4re", + "hive-types", "serde", ] diff --git a/hive-agent-mcp/Cargo.toml b/hive-agent-mcp/Cargo.toml index 33576ddf..fda57a7c 100644 --- a/hive-agent-mcp/Cargo.toml +++ b/hive-agent-mcp/Cargo.toml @@ -17,6 +17,7 @@ clap.workspace = true hive-agent-sock.workspace = true hive-core-agent-sock.workspace = true hive-sh4re.workspace = true +hive-types.workspace = true rmcp.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/hive-agent-mcp/src/mcp/mod.rs b/hive-agent-mcp/src/mcp/mod.rs index 73e30954..3a965227 100644 --- a/hive-agent-mcp/src/mcp/mod.rs +++ b/hive-agent-mcp/src/mcp/mod.rs @@ -181,13 +181,17 @@ impl AgentServer { async fn ask(&self, Parameters(args): Parameters) -> String { let log = format!("{args:?}"); run_tool_envelope("ask", log, async move { + let to = match args.to.map(|t| hive_types::Ident::parse(&t)).transpose() { + Ok(to) => to, + Err(reason) => return format!("invalid `to` agent name: {reason}"), + }; let (resp, retries) = self .dispatch(hive_core_agent_sock::Request::Ask { question: args.question, options: args.options, multi: args.multi, ttl_seconds: args.ttl_seconds, - to: args.to, + to, }) .await; let s = match resp { diff --git a/hive-c0re/src/socket_server/mod.rs b/hive-c0re/src/socket_server/mod.rs index 8f14dfd5..d4e522da 100644 --- a/hive-c0re/src/socket_server/mod.rs +++ b/hive-c0re/src/socket_server/mod.rs @@ -222,7 +222,7 @@ pub(crate) async fn dispatch_shared( options, *multi, *ttl_seconds, - to.as_deref(), + to.as_ref().map(hive_types::Ident::as_str), ) .map_or_else( |message| hive_core_agent_sock::Response::Err { message }, diff --git a/hive-core-agent-sock/Cargo.toml b/hive-core-agent-sock/Cargo.toml index f810785d..c0e6a342 100644 --- a/hive-core-agent-sock/Cargo.toml +++ b/hive-core-agent-sock/Cargo.toml @@ -8,4 +8,5 @@ workspace = true [dependencies] hive-sh4re.workspace = true +hive-types.workspace = true serde.workspace = true diff --git a/hive-core-agent-sock/src/lib.rs b/hive-core-agent-sock/src/lib.rs index 8c4b58ba..6946b2a6 100644 --- a/hive-core-agent-sock/src/lib.rs +++ b/hive-core-agent-sock/src/lib.rs @@ -11,6 +11,7 @@ use hive_sh4re::{ CancelLooseEndKind, ContainerInfo, DeliveredMessage, InboxRow, JournalPriority, LooseEnd, MatrixIdentity, ReminderStats, ReminderTiming, SchedulePromptPayload, WireSchedule, }; +use hive_types::Ident; use serde::{Deserialize, Serialize}; /// serde `default` helper for `Response::AgentMeta::running` (absent = true). @@ -73,7 +74,7 @@ pub enum Request { #[serde(default)] ttl_seconds: Option, #[serde(default)] - to: Option, + to: Option, }, /// Answer a question previously routed to this agent via /// `HelperEvent::QuestionAsked`. Authorised callers + threading