aboutsummaryrefslogtreecommitdiff
path: root/src/detect
diff options
context:
space:
mode:
authorWard Peeters <ward@coding-tech.com>2026-07-04 00:29:42 +0200
committerGitHub <noreply@github.com>2026-07-04 01:29:42 +0300
commitd0e333451bd794a419e96f28db925772950ea156 (patch)
tree1a6e5d3bd6ac40f8ef454058f069d30202327002 /src/detect
parentd5521e3d250498df4af552fff83fce3d5ef33810 (diff)
feat: add mastracode integration (#788)
* feat: add mastracode integration refs #337 Co-authored-by: Mastra Code (openai/gpt-5.5) <noreply@mastra.ai> Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
Diffstat (limited to 'src/detect')
-rw-r--r--src/detect/mod.rs19
1 files changed, 19 insertions, 0 deletions
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<Agent> {
"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<Agent> {
"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,6 +677,7 @@ 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");
@@ -675,6 +685,15 @@ mod tests {
}
#[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);
assert_eq!(identify_agent("zsh"), None);