diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-02 21:20:28 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-02 21:25:32 +0300 |
| commit | 295b09ca25edbccac65401ee84fa420dd3888aad (patch) | |
| tree | d54ed875518e042869ed3f43e95f0b9ee59f5d34 /src/terminal | |
| parent | 48641e253f1aa3886b470cbebec60103247a7622 (diff) | |
feat: make claude codex opencode hooks session-only
Diffstat (limited to 'src/terminal')
| -rw-r--r-- | src/terminal/state.rs | 28 |
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; |
