aboutsummaryrefslogtreecommitdiff
path: root/src/detect
diff options
context:
space:
mode:
Diffstat (limited to 'src/detect')
-rw-r--r--src/detect/manifest.rs2
-rw-r--r--src/detect/manifest/tests.rs23
-rw-r--r--src/detect/mod.rs26
3 files changed, 27 insertions, 24 deletions
diff --git a/src/detect/manifest.rs b/src/detect/manifest.rs
index a6da1277..f798e871 100644
--- a/src/detect/manifest.rs
+++ b/src/detect/manifest.rs
@@ -288,7 +288,7 @@ fn manifest_cache() -> &'static RwLock<ManifestCache> {
fn build_manifest_cache() -> ManifestCache {
ManifestCache {
- manifests: Agent::ALL
+ manifests: Agent::SCREEN_MANIFEST_AGENTS
.into_iter()
.map(|agent| (agent, load_manifest_uncached(agent)))
.collect(),
diff --git a/src/detect/manifest/tests.rs b/src/detect/manifest/tests.rs
index 2570aa03..30a94220 100644
--- a/src/detect/manifest/tests.rs
+++ b/src/detect/manifest/tests.rs
@@ -291,28 +291,7 @@ fn detection_uses_cached_manifest_until_explicit_reload() {
#[test]
fn all_bundled_manifests_parse_and_validate() {
- let agents = [
- Agent::Pi,
- Agent::Claude,
- Agent::Codex,
- Agent::Gemini,
- Agent::Cursor,
- Agent::Devin,
- Agent::Antigravity,
- Agent::Cline,
- Agent::OpenCode,
- Agent::GithubCopilot,
- Agent::Kimi,
- Agent::Kiro,
- Agent::Droid,
- Agent::Amp,
- Agent::Grok,
- Agent::Hermes,
- Agent::Kilo,
- Agent::Qodercli,
- ];
-
- for agent in agents {
+ for agent in Agent::SCREEN_MANIFEST_AGENTS {
assert!(
bundled_manifest(agent).is_some(),
"missing bundled manifest for {}",
diff --git a/src/detect/mod.rs b/src/detect/mod.rs
index 66443877..c8292ab2 100644
--- a/src/detect/mod.rs
+++ b/src/detect/mod.rs
@@ -49,6 +49,7 @@ pub enum Agent {
Devin,
Antigravity,
Cline,
+ Omp,
OpenCode,
GithubCopilot,
Kimi,
@@ -62,7 +63,7 @@ pub enum Agent {
}
impl Agent {
- pub const ALL: [Self; 18] = [
+ pub const SCREEN_MANIFEST_AGENTS: [Self; 18] = [
Self::Pi,
Self::Claude,
Self::Codex,
@@ -94,6 +95,7 @@ pub fn agent_label(agent: Agent) -> &'static str {
Agent::Devin => "devin",
Agent::Antigravity => "agy",
Agent::Cline => "cline",
+ Agent::Omp => "omp",
Agent::OpenCode => "opencode",
Agent::GithubCopilot => "copilot",
Agent::Kimi => "kimi",
@@ -118,6 +120,7 @@ pub fn parse_agent_label(agent: &str) -> Option<Agent> {
"devin" | "devin-cli" | "devin cli" => Some(Agent::Devin),
"agy" | "antigravity" | "antigravity-cli" => Some(Agent::Antigravity),
"cline" => Some(Agent::Cline),
+ "omp" => Some(Agent::Omp),
"opencode" | "open-code" => Some(Agent::OpenCode),
"copilot" | "github-copilot" | "ghcs" => Some(Agent::GithubCopilot),
"kimi" | "kimi-code" | "kimi code" => Some(Agent::Kimi),
@@ -146,6 +149,7 @@ pub fn identify_agent(process_name: &str) -> Option<Agent> {
"devin" | "devin-cli" | "devin cli" => Some(Agent::Devin),
"agy" | "antigravity" | "antigravity-cli" => Some(Agent::Antigravity),
"cline" => Some(Agent::Cline),
+ "omp" => Some(Agent::Omp),
"opencode" | "open-code" => Some(Agent::OpenCode),
"copilot" | "github-copilot" | "ghcs" => Some(Agent::GithubCopilot),
"kimi" | "kimi-code" | "kimi code" => Some(Agent::Kimi),
@@ -592,6 +596,7 @@ mod tests {
assert_eq!(identify_agent("agy"), Some(Agent::Antigravity));
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("opencode"), Some(Agent::OpenCode));
assert_eq!(identify_agent("opencode.exe"), Some(Agent::OpenCode));
assert_eq!(identify_agent("kimi"), Some(Agent::Kimi));
@@ -616,6 +621,7 @@ mod tests {
assert_eq!(parse_agent_label("devin-cli"), Some(Agent::Devin));
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("opencode.exe"), Some(Agent::OpenCode));
assert_eq!(parse_agent_label("copilot"), Some(Agent::GithubCopilot));
assert_eq!(parse_agent_label("kimi-code"), Some(Agent::Kimi));
@@ -637,6 +643,7 @@ mod tests {
assert_eq!(agent_label(Agent::OpenCode), "opencode");
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::Kiro), "kiro");
assert_eq!(agent_label(Agent::Grok), "grok");
assert_eq!(agent_label(Agent::Hermes), "hermes");
@@ -759,6 +766,23 @@ mod tests {
}
#[test]
+ fn identify_agent_in_job_detects_bun_wrapped_omp() {
+ let job = crate::platform::ForegroundJob {
+ process_group_id: 123,
+ processes: vec![foreground_process(
+ 123,
+ "bun",
+ &["bun", "/home/can/.bun/bin/omp"],
+ )],
+ };
+
+ assert_eq!(
+ identify_agent_in_job(&job),
+ Some((Agent::Omp, "omp".to_string()))
+ );
+ }
+
+ #[test]
fn identify_agent_in_job_detects_windows_cmd_wrapped_codex() {
let job = crate::platform::ForegroundJob {
process_group_id: 123,