From d0e333451bd794a419e96f28db925772950ea156 Mon Sep 17 00:00:00 2001 From: Ward Peeters Date: Sat, 4 Jul 2026 00:29:42 +0200 Subject: feat: add mastracode integration (#788) * feat: add mastracode integration refs #337 Co-authored-by: Mastra Code (openai/gpt-5.5) Co-authored-by: Ogulcan Celik --- src/detect/mod.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/detect') diff --git a/src/detect/mod.rs b/src/detect/mod.rs index cd350331..3520f010 100644 --- a/src/detect/mod.rs +++ b/src/detect/mod.rs @@ -50,6 +50,7 @@ pub enum Agent { Antigravity, Cline, Omp, + Mastracode, OpenCode, GithubCopilot, Kimi, @@ -96,6 +97,7 @@ pub fn agent_label(agent: Agent) -> &'static str { Agent::Antigravity => "agy", Agent::Cline => "cline", Agent::Omp => "omp", + Agent::Mastracode => "mastracode", Agent::OpenCode => "opencode", Agent::GithubCopilot => "copilot", Agent::Kimi => "kimi", @@ -121,6 +123,7 @@ pub fn parse_agent_label(agent: &str) -> Option { "agy" | "antigravity" | "antigravity-cli" => Some(Agent::Antigravity), "cline" => Some(Agent::Cline), "omp" => Some(Agent::Omp), + "mastracode" | "mastra-code" | "mastra code" => Some(Agent::Mastracode), "opencode" | "open-code" => Some(Agent::OpenCode), "copilot" | "github-copilot" | "ghcs" => Some(Agent::GithubCopilot), "kimi" | "kimi-code" | "kimi code" => Some(Agent::Kimi), @@ -150,6 +153,7 @@ pub fn identify_agent(process_name: &str) -> Option { "agy" | "antigravity" | "antigravity-cli" => Some(Agent::Antigravity), "cline" => Some(Agent::Cline), "omp" => Some(Agent::Omp), + "mastracode" | "mastra-code" | "mastra code" => Some(Agent::Mastracode), "opencode" | "open-code" => Some(Agent::OpenCode), "copilot" | "github-copilot" | "ghcs" => Some(Agent::GithubCopilot), "kimi" | "kimi-code" | "kimi code" => Some(Agent::Kimi), @@ -242,6 +246,7 @@ pub(crate) fn full_lifecycle_hook_authority(source: &str, agent_label: &str) -> (source, agent_label), ("herdr:pi", "pi") | ("herdr:omp", "omp") + | ("herdr:mastracode", "mastracode") | ("herdr:hermes", "hermes") | ("herdr:opencode", "opencode") | ("herdr:kilo", "kilo") @@ -621,6 +626,8 @@ mod tests { assert_eq!(identify_agent("antigravity-cli"), Some(Agent::Antigravity)); assert_eq!(identify_agent("cline"), Some(Agent::Cline)); assert_eq!(identify_agent("omp"), Some(Agent::Omp)); + assert_eq!(identify_agent("mastracode"), Some(Agent::Mastracode)); + assert_eq!(identify_agent("mastra-code"), Some(Agent::Mastracode)); assert_eq!(identify_agent("opencode"), Some(Agent::OpenCode)); assert_eq!(identify_agent("opencode.exe"), Some(Agent::OpenCode)); assert_eq!(identify_agent("kimi"), Some(Agent::Kimi)); @@ -646,6 +653,8 @@ mod tests { assert_eq!(parse_agent_label("agy"), Some(Agent::Antigravity)); assert_eq!(parse_agent_label("antigravity"), Some(Agent::Antigravity)); assert_eq!(parse_agent_label("omp"), Some(Agent::Omp)); + assert_eq!(parse_agent_label("mastracode"), Some(Agent::Mastracode)); + assert_eq!(parse_agent_label("mastra code"), Some(Agent::Mastracode)); assert_eq!(parse_agent_label("opencode.exe"), Some(Agent::OpenCode)); assert_eq!(parse_agent_label("copilot"), Some(Agent::GithubCopilot)); assert_eq!(parse_agent_label("kimi-code"), Some(Agent::Kimi)); @@ -668,12 +677,22 @@ mod tests { assert_eq!(agent_label(Agent::Devin), "devin"); assert_eq!(agent_label(Agent::Antigravity), "agy"); assert_eq!(agent_label(Agent::Omp), "omp"); + assert_eq!(agent_label(Agent::Mastracode), "mastracode"); assert_eq!(agent_label(Agent::Kiro), "kiro"); assert_eq!(agent_label(Agent::Grok), "grok"); assert_eq!(agent_label(Agent::Hermes), "hermes"); assert_eq!(agent_label(Agent::Kilo), "kilo"); } + #[test] + fn mastracode_is_hook_authority_without_screen_manifest() { + assert!(full_lifecycle_hook_authority( + "herdr:mastracode", + "mastracode" + )); + assert!(!Agent::SCREEN_MANIFEST_AGENTS.contains(&Agent::Mastracode)); + } + #[test] fn identify_unknown_processes() { assert_eq!(identify_agent("bash"), None); -- cgit v1.2.3