diff options
Diffstat (limited to 'src/agent_resume.rs')
| -rw-r--r-- | src/agent_resume.rs | 53 |
1 files changed, 50 insertions, 3 deletions
diff --git a/src/agent_resume.rs b/src/agent_resume.rs index 4a97f207..5012e991 100644 --- a/src/agent_resume.rs +++ b/src/agent_resume.rs @@ -60,7 +60,7 @@ pub fn session_ref_from_report( return None; } - if agent == "pi" { + if agent == "pi" || agent == "omp" { return _agent_session_path .and_then(AgentSessionRef::path) .or_else(|| agent_session_id.and_then(AgentSessionRef::id)); @@ -99,7 +99,7 @@ pub fn session_ref_from_snapshot( return None; } let session_ref = match (agent, kind) { - ("pi", AgentSessionRefKind::Path) => AgentSessionRef::path(value)?, + ("pi" | "omp", AgentSessionRefKind::Path) => AgentSessionRef::path(value)?, (_, AgentSessionRefKind::Id) => AgentSessionRef::id(value)?, _ => return None, }; @@ -141,6 +141,11 @@ pub fn plan(source: &str, agent: &str, session_ref: &AgentSessionRef) -> Option< ("herdr:pi", "pi", AgentSessionRefKind::Path | AgentSessionRefKind::Id) => { vec!["pi".into(), "--session".into(), session_ref.value.clone()] } + ("herdr:omp", "omp", AgentSessionRefKind::Path | AgentSessionRefKind::Id) => { + // omp resume is `-r, --resume=<value>` (ID prefix or path); it has no + // `--session` flag, unlike pi. + vec!["omp".into(), format!("--resume={}", session_ref.value)] + } ("herdr:hermes", "hermes", AgentSessionRefKind::Id) => { vec![ "hermes".into(), @@ -198,6 +203,7 @@ fn is_official_agent_source(source: &str, agent: &str) -> bool { | ("herdr:devin", "devin") | ("herdr:droid", "droid") | ("herdr:kimi", "kimi") + | ("herdr:omp", "omp") | ("herdr:pi", "pi") | ("herdr:hermes", "hermes") | ("herdr:opencode", "opencode") @@ -245,6 +251,7 @@ mod tests { #[test] fn planner_allows_supported_agents() { let pi_session = absolute_test_path("pi-session.jsonl"); + let omp_session = absolute_test_path("omp-session.jsonl"); assert_eq!( plan( "herdr:claude", @@ -317,6 +324,16 @@ mod tests { ); assert_eq!( plan( + "herdr:omp", + "omp", + &AgentSessionRef::path(&omp_session).unwrap() + ) + .unwrap() + .argv, + vec!["omp", format!("--resume={omp_session}").as_str()] + ); + assert_eq!( + plan( "herdr:hermes", "hermes", &AgentSessionRef::id("hermes-session").unwrap() @@ -385,8 +402,9 @@ mod tests { } #[test] - fn report_ref_prefers_pi_path_and_validates_values() { + fn report_ref_prefers_pi_and_omp_paths_and_validates_values() { let pi_session = absolute_test_path("pi-session.jsonl"); + let omp_session = absolute_test_path("omp-session.jsonl"); let claude_session = absolute_test_path("claude-session"); let copilot_session = absolute_test_path("copilot-session"); let session_ref = session_ref_from_report( @@ -405,6 +423,35 @@ mod tests { .is_none() ); assert!(session_ref_from_report("custom:pi", "pi", Some("pi-id".into()), None).is_none()); + + let session_ref = session_ref_from_report( + "herdr:omp", + "omp", + Some("omp-id".into()), + Some(omp_session.clone()), + ) + .unwrap(); + assert_eq!(session_ref.kind, AgentSessionRefKind::Path); + assert_eq!(session_ref.value, omp_session); + + let session_ref = + session_ref_from_report("herdr:omp", "omp", Some("omp-id".into()), None).unwrap(); + assert_eq!(session_ref.kind, AgentSessionRefKind::Id); + assert_eq!(session_ref.value, "omp-id"); + let session_ref = session_ref_from_report( + "herdr:omp", + "omp", + Some("omp-id".into()), + Some("relative.jsonl".into()), + ) + .unwrap(); + assert_eq!(session_ref.kind, AgentSessionRefKind::Id); + assert_eq!(session_ref.value, "omp-id"); + assert!( + session_ref_from_report("herdr:omp", "omp", None, Some("relative.jsonl".into())) + .is_none() + ); + assert!( session_ref_from_report("herdr:claude", "claude", None, Some(claude_session)).is_none() ); |
