diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-09 15:59:34 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-09 15:59:34 +0300 |
| commit | df7880c54b8b5d337421cb4b1dd8daea27008801 (patch) | |
| tree | 4d0cc6290ad71c413bac71cfaab4ef41ea017ecb /src/agent_resume.rs | |
| parent | eeacb45b4b6ab4446c5bea1331f743fee5e5b9f8 (diff) | |
feat: update agent lifecycle integrations
Diffstat (limited to 'src/agent_resume.rs')
| -rw-r--r-- | src/agent_resume.rs | 82 |
1 files changed, 80 insertions, 2 deletions
diff --git a/src/agent_resume.rs b/src/agent_resume.rs index d166aed2..b6a8c818 100644 --- a/src/agent_resume.rs +++ b/src/agent_resume.rs @@ -74,9 +74,11 @@ pub fn is_reserved_native_state_source(source: &str, agent: &str) -> bool { (source, agent), ("herdr:claude", "claude") | ("herdr:codex", "codex") - | ("herdr:cursor", "cursor") + | ("herdr:copilot", "copilot") | ("herdr:droid", "droid") - | ("herdr:opencode", "opencode") + | ("herdr:kimi", "kimi") + | ("herdr:qodercli", "qodercli") + | ("herdr:cursor", "cursor") ) } @@ -123,6 +125,9 @@ pub fn plan(source: &str, agent: &str, session_ref: &AgentSessionRef) -> Option< ("herdr:droid", "droid", AgentSessionRefKind::Id) => { vec!["droid".into(), "--resume".into(), session_ref.value.clone()] } + ("herdr:kimi", "kimi", AgentSessionRefKind::Id) => { + vec!["kimi".into(), "--session".into(), session_ref.value.clone()] + } ("herdr:pi", "pi", AgentSessionRefKind::Path | AgentSessionRefKind::Id) => { vec!["pi".into(), "--session".into(), session_ref.value.clone()] } @@ -140,6 +145,16 @@ pub fn plan(source: &str, agent: &str, session_ref: &AgentSessionRef) -> Option< session_ref.value.clone(), ] } + ("herdr:qodercli", "qodercli", AgentSessionRefKind::Id) => { + vec![ + "qodercli".into(), + "--resume".into(), + session_ref.value.clone(), + ] + } + ("herdr:kilo", "kilo", AgentSessionRefKind::Id) => { + vec!["kilo".into(), "--session".into(), session_ref.value.clone()] + } ("herdr:cursor", "cursor", AgentSessionRefKind::Id) => { vec![ "cursor-agent".into(), @@ -171,9 +186,12 @@ fn is_official_agent_source(source: &str, agent: &str) -> bool { | ("herdr:codex", "codex") | ("herdr:copilot", "copilot") | ("herdr:droid", "droid") + | ("herdr:kimi", "kimi") | ("herdr:pi", "pi") | ("herdr:hermes", "hermes") | ("herdr:opencode", "opencode") + | ("herdr:qodercli", "qodercli") + | ("herdr:kilo", "kilo") | ("herdr:cursor", "cursor") ) } @@ -246,6 +264,16 @@ mod tests { ); assert_eq!( plan( + "herdr:kimi", + "kimi", + &AgentSessionRef::id("kimi-session").unwrap() + ) + .unwrap() + .argv, + vec!["kimi", "--session", "kimi-session"] + ); + assert_eq!( + plan( "herdr:pi", "pi", &AgentSessionRef::path(&pi_session).unwrap() @@ -276,6 +304,26 @@ mod tests { ); assert_eq!( plan( + "herdr:qodercli", + "qodercli", + &AgentSessionRef::id("qoder-session").unwrap() + ) + .unwrap() + .argv, + vec!["qodercli", "--resume", "qoder-session"] + ); + assert_eq!( + plan( + "herdr:kilo", + "kilo", + &AgentSessionRef::id("kilo-session").unwrap() + ) + .unwrap() + .argv, + vec!["kilo", "--session", "kilo-session"] + ); + assert_eq!( + plan( "herdr:cursor", "cursor", &AgentSessionRef::id("cursor-session").unwrap() @@ -349,6 +397,22 @@ mod tests { Some("/tmp/droid-session".into()) ) .is_none()); + + let session_ref = + session_ref_from_report("herdr:kimi", "kimi", Some("kimi-id".into()), None).unwrap(); + assert_eq!(session_ref.kind, AgentSessionRefKind::Id); + assert_eq!(session_ref.value, "kimi-id"); + + let session_ref = + session_ref_from_report("herdr:kilo", "kilo", Some("kilo-id".into()), None).unwrap(); + assert_eq!(session_ref.kind, AgentSessionRefKind::Id); + assert_eq!(session_ref.value, "kilo-id"); + + let session_ref = + session_ref_from_report("herdr:qodercli", "qodercli", Some("qoder-id".into()), None) + .unwrap(); + assert_eq!(session_ref.kind, AgentSessionRefKind::Id); + assert_eq!(session_ref.value, "qoder-id"); } #[test] @@ -370,6 +434,7 @@ mod tests { fn planner_rejects_path_refs_for_id_only_agents() { let hermes_session = absolute_test_path("hermes-session"); let opencode_session = absolute_test_path("opencode-session"); + let kilo_session = absolute_test_path("kilo-session"); let copilot_session = absolute_test_path("copilot-session"); assert!(plan( "herdr:hermes", @@ -384,6 +449,12 @@ mod tests { ) .is_none()); assert!(plan( + "herdr:kilo", + "kilo", + &AgentSessionRef::path(&kilo_session).unwrap() + ) + .is_none()); + assert!(plan( "herdr:copilot", "copilot", &AgentSessionRef::path(&copilot_session).unwrap() @@ -404,6 +475,13 @@ mod tests { ) .is_some()); assert!(session_ref_from_snapshot( + "herdr:kilo", + "kilo", + AgentSessionRefKind::Id, + "kilo-session" + ) + .is_some()); + assert!(session_ref_from_snapshot( "herdr:copilot", "copilot", AgentSessionRefKind::Id, |
