diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-31 03:00:46 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-05-31 03:04:20 +0300 |
| commit | 3acd499ffb1119e8032bbcba3f1f46d4ff5f3da9 (patch) | |
| tree | 4e30e82ccbc821e8930b03addfd1542d91ee8705 /src/terminal | |
| parent | 4e1fbf410b844749dcddae775806e1cce01ef442 (diff) | |
fix: keep codex visible approval review working
Diffstat (limited to 'src/terminal')
| -rw-r--r-- | src/terminal/metadata.rs | 1 | ||||
| -rw-r--r-- | src/terminal/state.rs | 44 |
2 files changed, 45 insertions, 0 deletions
diff --git a/src/terminal/metadata.rs b/src/terminal/metadata.rs index 5b9f0078..1dcb80c0 100644 --- a/src/terminal/metadata.rs +++ b/src/terminal/metadata.rs @@ -361,6 +361,7 @@ impl TerminalState { } if self.visible_blocker_overrides_hook() + || self.visible_working_overrides_hook() || self.visible_idle_masks_hook_custom_status(state, now) { return None; diff --git a/src/terminal/state.rs b/src/terminal/state.rs index bcf5737a..ac7c4380 100644 --- a/src/terminal/state.rs +++ b/src/terminal/state.rs @@ -1263,6 +1263,50 @@ mod tests { } #[test] + fn refreshed_visible_working_overrides_newer_hook_blocked() { + let now = Instant::now(); + let mut terminal = test_terminal(); + terminal.set_detected_state_with_screen_signals_at( + Some(Agent::Codex), + AgentState::Working, + false, + false, + true, + false, + now, + ); + terminal.set_hook_authority_with_custom_status_at( + "herdr:codex".into(), + "codex".into(), + AgentState::Blocked, + None, + Some("permission".into()), + None, + None, + now + CLAUDE_WORKING_HOLD + Duration::from_millis(1), + ); + + assert_eq!(terminal.state, AgentState::Blocked); + + let change = terminal.set_detected_state_with_screen_signals_at( + Some(Agent::Codex), + AgentState::Working, + false, + false, + true, + false, + now + CLAUDE_WORKING_HOLD + Duration::from_millis(800), + ); + + assert_eq!(terminal.state, AgentState::Working); + assert_eq!(terminal.effective_custom_status(), None); + assert_eq!( + change.effective_state_change.unwrap().previous_state, + AgentState::Blocked + ); + } + + #[test] fn visible_idle_waits_before_overriding_claude_hook_blocked() { let now = Instant::now(); let mut terminal = test_terminal(); |
