mail4agent_messenger_shell/cli/
mod.rs1pub mod enroll;
21pub mod session_arg;
22pub mod vault;
23pub mod wake;
24#[cfg(feature = "element-open")]
25pub mod element_open;
26pub mod ensure_agent_webhooks;
27pub mod grok_listen;
28pub mod inbox;
29pub mod mail;
30pub mod send;
31pub mod web_client;
32pub mod door_listen;
33pub mod launch;
34pub mod account;
35pub mod mcp;
36mod letter;
37
38pub const COMMANDS: &[&str] = &["web-client", "grok-listen", "inbox", "send", "mail", "ensure-agent-webhooks", "enroll", "wake", "vault", "element-open", "door-listen", "launch", "account", "letter", "mcp"];
40
41pub fn dispatch(command: &str, args: Vec<String>) -> Result<(), String> {
43 match command {
44 "web-client" => web_client::run(args),
45 "grok-listen" => grok_listen::run(args),
46 "node-client" | "claude-channel" => {
47 return Err(format!("{command} moved out of m4a: session delivery is g4a's (hatchery node / gate4agent-wake)"))
48 }
49 "inbox" => inbox::run(args),
50 "send" => send::run(args),
51 "mail" => mail::run(args),
52 "ensure-agent-webhooks" => ensure_agent_webhooks::run(args),
53 "enroll" => enroll::run(args),
54 "wake" => wake::run(args),
55 "vault" => vault::run(args),
56 "door-listen" => door_listen::run(args),
57 "launch" => launch::run(args),
58 "account" => account::run(args),
59 "mcp" => mcp::run(args),
60 "letter" => letter::run(args),
61 #[cfg(feature = "element-open")]
62 "element-open" => element_open::run(args),
63 #[cfg(not(feature = "element-open"))]
64 "element-open" => return Err("this build was made without feature element-open".to_string()),
65 other => return Err(format!("unknown command {other:?}; commands: {}", COMMANDS.join(", "))),
66 }
67 Ok(())
68}
69
70#[cfg(test)]
71mod tests {
72 use super::*;
73
74 #[test]
75 fn an_unknown_command_is_named_not_run() {
76 let e = dispatch("nope", vec![]).unwrap_err();
77 assert!(e.contains("nope") && e.contains("web-client") && e.contains("mail"));
78 }
79
80 #[test]
81 fn enroll_is_a_command() {
82 assert!(COMMANDS.contains(&"enroll"));
83 }
84}