diff options
| author | akbash <akbash@herdr.dev> | 2026-09-13 03:04:27 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-09-13 02:04:27 +0200 |
| commit | aa6b531a423067d8a71c2a57b41185bff17036be (patch) | |
| tree | 72fff1245d085d1b8aca3fbb124d007a731070ab /src/terminal | |
| parent | 98a8c6ce52a054b582a6210c79d76e10a99ccccc (diff) | |
fix: update grok session after new (#2683)
* fix: update grok session after new
refs #2681
* fix: avoid powershell args shadowing
refs #2681
---------
Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Diffstat (limited to 'src/terminal')
| -rw-r--r-- | src/terminal/state.rs | 65 |
1 files changed, 64 insertions, 1 deletions
diff --git a/src/terminal/state.rs b/src/terminal/state.rs index dc28af10..a7c84574 100644 --- a/src/terminal/state.rs +++ b/src/terminal/state.rs @@ -1331,6 +1331,7 @@ impl TerminalState { | ("herdr:hermes", "hermes", Some("startup" | "new" | "resume")) | ("herdr:opencode", "opencode", Some("select")) | ("herdr:pi", "pi", Some("new" | "resume" | "fork")) + | ("herdr:grok", "grok", Some("new")) | ( "herdr:omp", "omp", @@ -1635,7 +1636,8 @@ impl TerminalState { session_ref: &crate::agent_resume::AgentSessionRef, session_start_source: Option<&str>, ) -> bool { - Self::session_start_source_is_recognized(session_start_source) + (source, agent_label) != ("herdr:grok", "grok") + && Self::session_start_source_is_recognized(session_start_source) && self.foreground_agent_confirms_session_owner(source, agent_label, session_ref) } @@ -4653,6 +4655,38 @@ mod tests { } #[test] + fn grok_new_session_ref_replaces_existing_session_ref() { + let mut terminal = test_terminal(); + terminal + .set_agent_session_ref( + "herdr:grok".into(), + "grok".into(), + crate::agent_resume::AgentSessionRef::id("grok-old"), + Some(20), + ) + .expect("initial session should be accepted"); + + let mutation = terminal + .set_agent_session_ref_for_session_start( + "herdr:grok".into(), + "grok".into(), + crate::agent_resume::AgentSessionRef::id("grok-new"), + Some(21), + Some("new".into()), + ) + .expect("new should replace the grok session"); + + assert!(mutation.session_ref_changed); + assert_eq!( + terminal + .persisted_agent_session + .as_ref() + .map(|session| session.session_ref.value.as_str()), + Some("grok-new") + ); + } + + #[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); @@ -5106,6 +5140,35 @@ mod tests { } #[test] + fn grok_new_session_does_not_replace_a_different_owner() { + let mut terminal = test_terminal(); + terminal.set_persisted_agent_session(crate::agent_resume::PersistedAgentSession { + source: "herdr:claude".into(), + agent: "claude".into(), + session_ref: crate::agent_resume::AgentSessionRef::id("claude-session").unwrap(), + }); + terminal.set_detected_state(Some(Agent::Grok), AgentState::Idle); + + let mutation = terminal.set_agent_session_ref_for_session_start( + "herdr:grok".into(), + "grok".into(), + crate::agent_resume::AgentSessionRef::id("grok-session"), + Some(21), + Some("new".into()), + ); + + assert!(mutation.is_none()); + assert_eq!( + terminal.persisted_agent_session.as_ref().map(|session| ( + session.source.as_str(), + session.agent.as_str(), + session.session_ref.value.as_str() + )), + Some(("herdr:claude", "claude", "claude-session")) + ); + } + + #[test] fn foreground_agent_session_replaces_stale_different_owner_session_ref() { for session_start_source in ["resume", "startup"] { let mut terminal = test_terminal(); |
