aether_core/events/
acp.rs1use acp_utils::AETHER_TOOL_NAME_META_KEY;
2
3pub fn aether_tool_name_meta(name: &str) -> serde_json::Map<String, serde_json::Value> {
4 let mut meta = serde_json::Map::new();
5 meta.insert(AETHER_TOOL_NAME_META_KEY.to_string(), name.to_string().into());
6 meta
7}
8
9pub fn parse_tool_call_chunk(chunk: &str) -> serde_json::Value {
10 serde_json::from_str(chunk).unwrap_or_else(|_| serde_json::Value::String(chunk.to_string()))
11}
12
13pub fn mcp_tool_name(namespaced_name: &str) -> &str {
14 namespaced_name.split("__").last().unwrap_or(namespaced_name)
15}
16
17pub fn humanize_tool_name(name: &str) -> String {
18 let mut result = mcp_tool_name(name).replace('_', " ");
19 if let Some(first) = result.get_mut(0..1) {
20 first.make_ascii_uppercase();
21 }
22 result
23}
24
25#[cfg(test)]
26mod tests {
27 use super::*;
28
29 #[test]
30 fn humanizes_tool_names() {
31 assert_eq!(humanize_tool_name("coding__read_file"), "Read file");
32 assert_eq!(humanize_tool_name("read_file"), "Read file");
33 assert_eq!(humanize_tool_name("bash"), "Bash");
34 assert_eq!(humanize_tool_name("plugins__coding__read_file"), "Read file");
35 }
36
37 #[test]
38 fn strips_server_prefixes_from_tool_names() {
39 assert_eq!(mcp_tool_name("subagents__spawn_subagent"), "spawn_subagent");
40 assert_eq!(mcp_tool_name("plugins__coding__read_file"), "read_file");
41 assert_eq!(mcp_tool_name("bash"), "bash");
42 }
43}