aboutsummaryrefslogtreecommitdiff
path: root/src/agent_resume.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/agent_resume.rs')
-rw-r--r--src/agent_resume.rs53
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()
);