aboutsummaryrefslogtreecommitdiff
path: root/src/terminal
diff options
context:
space:
mode:
authorakbash <akbash@herdr.dev>2026-09-13 03:04:27 +0300
committerGitHub <noreply@github.com>2026-09-13 02:04:27 +0200
commitaa6b531a423067d8a71c2a57b41185bff17036be (patch)
tree72fff1245d085d1b8aca3fbb124d007a731070ab /src/terminal
parent98a8c6ce52a054b582a6210c79d76e10a99ccccc (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.rs65
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();