aboutsummaryrefslogtreecommitdiff
path: root/src/agent_resume.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-06-09 15:59:34 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-06-09 15:59:34 +0300
commitdf7880c54b8b5d337421cb4b1dd8daea27008801 (patch)
tree4d0cc6290ad71c413bac71cfaab4ef41ea017ecb /src/agent_resume.rs
parenteeacb45b4b6ab4446c5bea1331f743fee5e5b9f8 (diff)
feat: update agent lifecycle integrations
Diffstat (limited to 'src/agent_resume.rs')
-rw-r--r--src/agent_resume.rs82
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,