aboutsummaryrefslogtreecommitdiff
path: root/src/terminal/state.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/terminal/state.rs
parent8b635c918066dd184bacc29b4c06c40a3efea3f5 (diff)
feat: add qwen code detection and restore (#2743)
refs #2730
Diffstat (limited to 'src/terminal/state.rs')
-rw-r--r--src/terminal/state.rs71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/terminal/state.rs b/src/terminal/state.rs
index 4b1fdaef..5c659eb9 100644
--- a/src/terminal/state.rs
+++ b/src/terminal/state.rs
@@ -1334,6 +1334,11 @@ impl TerminalState {
"omp",
Some("startup" | "new" | "resume" | "fork")
)
+ | (
+ "herdr:qwen",
+ "qwen",
+ Some("startup" | "clear" | "resume" | "compact" | "branch")
+ )
| ("herdr:antigravity_cli", "agy", None)
)
}
@@ -4552,6 +4557,72 @@ mod tests {
}
#[test]
+ fn qwen_lifecycle_session_ref_replaces_existing_session_ref() {
+ for session_start_source in ["startup", "clear", "resume", "compact", "branch"] {
+ let mut terminal = test_terminal();
+ terminal.set_detected_state(Some(Agent::Qwen), AgentState::Idle);
+ terminal
+ .set_agent_session_ref(
+ "herdr:qwen".into(),
+ "qwen".into(),
+ crate::agent_resume::AgentSessionRef::id("qwen-session"),
+ Some(20),
+ )
+ .expect("initial session should be accepted");
+
+ let next_session = format!("qwen-{session_start_source}-session");
+ let mutation = terminal
+ .set_agent_session_ref_for_session_start(
+ "herdr:qwen".into(),
+ "qwen".into(),
+ crate::agent_resume::AgentSessionRef::id(&next_session),
+ Some(21),
+ Some(session_start_source.into()),
+ )
+ .unwrap_or_else(|| panic!("{session_start_source} should replace the session"));
+
+ assert!(mutation.session_ref_changed);
+ assert_eq!(
+ terminal
+ .persisted_agent_session
+ .as_ref()
+ .map(|session| session.session_ref.value.as_str()),
+ Some(next_session.as_str())
+ );
+ }
+ }
+
+ #[test]
+ fn qwen_session_ref_does_not_replace_without_foreground_qwen() {
+ let mut terminal = test_terminal();
+ terminal
+ .set_agent_session_ref(
+ "herdr:qwen".into(),
+ "qwen".into(),
+ crate::agent_resume::AgentSessionRef::id("qwen-parent"),
+ Some(20),
+ )
+ .expect("initial session should be accepted");
+
+ let mutation = terminal.set_agent_session_ref_for_session_start(
+ "herdr:qwen".into(),
+ "qwen".into(),
+ crate::agent_resume::AgentSessionRef::id("qwen-branch"),
+ Some(21),
+ Some("branch".into()),
+ );
+
+ assert!(mutation.is_none());
+ assert_eq!(
+ terminal
+ .persisted_agent_session
+ .as_ref()
+ .map(|session| session.session_ref.value.as_str()),
+ Some("qwen-parent")
+ );
+ }
+
+ #[test]
fn opencode_server_new_does_not_replace_existing_session_ref() {
let mut terminal = test_terminal();
terminal.set_detected_state(Some(Agent::OpenCode), AgentState::Idle);