aboutsummaryrefslogtreecommitdiff
path: root/src/terminal
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-06-02 21:20:28 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-06-02 21:25:32 +0300
commit295b09ca25edbccac65401ee84fa420dd3888aad (patch)
treed54ed875518e042869ed3f43e95f0b9ee59f5d34 /src/terminal
parent48641e253f1aa3886b470cbebec60103247a7622 (diff)
feat: make claude codex opencode hooks session-only
Diffstat (limited to 'src/terminal')
-rw-r--r--src/terminal/state.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/terminal/state.rs b/src/terminal/state.rs
index 09c5812a..e6ac3c00 100644
--- a/src/terminal/state.rs
+++ b/src/terminal/state.rs
@@ -428,6 +428,34 @@ impl TerminalState {
self.persisted_agent_session = Some(session);
}
+ pub fn set_agent_session_ref(
+ &mut self,
+ source: String,
+ agent_label: String,
+ session_ref: Option<crate::agent_resume::AgentSessionRef>,
+ seq: Option<u64>,
+ ) -> Option<TerminalStateMutation> {
+ let session_ref = session_ref?;
+ if !self.accept_hook_report(&source, seq) {
+ return None;
+ }
+ if self.known_agent_label_conflicts_with_detected_agent(&agent_label) {
+ return None;
+ }
+
+ let previous_session = self.current_session_identity_for_persistence();
+ self.persisted_agent_session = Some(crate::agent_resume::PersistedAgentSession {
+ source,
+ agent: agent_label,
+ session_ref,
+ });
+ let current_session = self.current_session_identity_for_persistence();
+ Some(TerminalStateMutation {
+ effective_state_change: None,
+ session_ref_changed: previous_session != current_session,
+ })
+ }
+
fn known_agent_label_conflicts_with_detected_agent(&self, agent_label: &str) -> bool {
let Some(detected_agent) = self.detected_agent else {
return false;