diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-08-13 03:00:35 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-13 03:00:35 +0300 |
| commit | a4d52ab60282b2ad021cb90978a7ed4d3898704b (patch) | |
| tree | cdd5f55d6d392d54541b86da7f1a00a48c211d03 /src/terminal/state.rs | |
| parent | 8b635c918066dd184bacc29b4c06c40a3efea3f5 (diff) | |
feat: add qwen code detection and restore (#2743)
refs #2730
Diffstat (limited to 'src/terminal/state.rs')
| -rw-r--r-- | src/terminal/state.rs | 71 |
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); |
