aboutsummaryrefslogtreecommitdiff
path: root/src/agent_resume.rs
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-08-13 03:00:35 +0300
committerGitHub <noreply@github.com>2026-08-13 03:00:35 +0300
commita4d52ab60282b2ad021cb90978a7ed4d3898704b (patch)
treecdd5f55d6d392d54541b86da7f1a00a48c211d03 /src/agent_resume.rs
parent8b635c918066dd184bacc29b4c06c40a3efea3f5 (diff)
feat: add qwen code detection and restore (#2743)
refs #2730
Diffstat (limited to 'src/agent_resume.rs')
-rw-r--r--src/agent_resume.rs31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/agent_resume.rs b/src/agent_resume.rs
index e2fc47e9..cd1ae7bb 100644
--- a/src/agent_resume.rs
+++ b/src/agent_resume.rs
@@ -71,9 +71,10 @@ pub fn session_ref_from_report(
pub fn normalize_session_start_source(value: Option<String>) -> Option<String> {
match value.as_deref().map(str::trim) {
- Some(source @ ("startup" | "resume" | "clear" | "compact" | "new" | "fork" | "select")) => {
- Some(source.to_string())
- }
+ Some(
+ source @ ("startup" | "resume" | "clear" | "compact" | "branch" | "new" | "fork"
+ | "select"),
+ ) => Some(source.to_string()),
_ => None,
}
}
@@ -87,6 +88,7 @@ pub fn is_reserved_native_state_source(source: &str, agent: &str) -> bool {
| ("herdr:devin", "devin")
| ("herdr:droid", "droid")
| ("herdr:qodercli", "qodercli")
+ | ("herdr:qwen", "qwen")
| ("herdr:cursor", "cursor")
| ("herdr:grok", "grok")
)
@@ -177,6 +179,9 @@ pub fn plan(source: &str, agent: &str, session_ref: &AgentSessionRef) -> Option<
session_ref.value.clone(),
]
}
+ ("herdr:qwen", "qwen", AgentSessionRefKind::Id) => {
+ vec!["qwen".into(), "--resume".into(), session_ref.value.clone()]
+ }
("herdr:kilo", "kilo", AgentSessionRefKind::Id) => {
vec!["kilo".into(), "--session".into(), session_ref.value.clone()]
}
@@ -234,6 +239,7 @@ pub(crate) fn is_official_agent_source(source: &str, agent: &str) -> bool {
| ("herdr:hermes", "hermes")
| ("herdr:opencode", "opencode")
| ("herdr:qodercli", "qodercli")
+ | ("herdr:qwen", "qwen")
| ("herdr:kilo", "kilo")
| ("herdr:cursor", "cursor")
| ("herdr:antigravity_cli", "agy")
@@ -402,6 +408,16 @@ mod tests {
);
assert_eq!(
plan(
+ "herdr:qwen",
+ "qwen",
+ &AgentSessionRef::id("qwen-session").unwrap()
+ )
+ .unwrap()
+ .argv,
+ vec!["qwen", "--resume", "qwen-session"]
+ );
+ assert_eq!(
+ plan(
"herdr:kilo",
"kilo",
&AgentSessionRef::id("kilo-session").unwrap()
@@ -576,6 +592,11 @@ mod tests {
assert_eq!(session_ref.value, "qoder-id");
let session_ref =
+ session_ref_from_report("herdr:qwen", "qwen", Some("qwen-id".into()), None).unwrap();
+ assert_eq!(session_ref.kind, AgentSessionRefKind::Id);
+ assert_eq!(session_ref.value, "qwen-id");
+
+ let session_ref =
session_ref_from_report("herdr:antigravity_cli", "agy", Some("agy-id".into()), None)
.unwrap();
assert_eq!(session_ref.kind, AgentSessionRefKind::Id);
@@ -601,6 +622,10 @@ mod tests {
Some("compact".into())
);
assert_eq!(
+ normalize_session_start_source(Some("branch".into())),
+ Some("branch".into())
+ );
+ assert_eq!(
normalize_session_start_source(Some("new".into())),
Some("new".into())
);