fix: stop marking codex background terminals as working

This commit is contained in:
Ogulcan Celik
2026-06-10 22:41:18 +03:00
parent f9b67570d2
commit 1fc5e84d46
4 changed files with 9 additions and 35 deletions
+1
View File
@@ -4,6 +4,7 @@
### Fixed
- Agent state detection for non-authoritative agents now comes from screen manifests instead of PTY-first semantic arbitration, so terminal output activity no longer publishes `working`, vetoes visible blockers, or decides idle fallback.
- Codex background terminal status text no longer overrides Codex's foreground idle OSC status, so long-running helpers such as dev servers do not keep the pane marked working.
- Removed the remaining PTY input-taint debounce from agent detection, so user input, pane resizes, and redraw nudges no longer delay screen/OSC manifest state updates.
- Numeric keypad keys that send VT100 application-keypad escape sequences now enter their digits and operators instead of being dropped. (#493)
- Codex panes now stay marked working when the live status header uses reasoning-summary text such as `Investigating code output` instead of the literal `Working` label. (#501)
+6 -7
View File
@@ -648,18 +648,17 @@ fn codex_osc_title_plain_is_idle() {
}
#[test]
fn codex_background_terminal_screen_beats_osc_idle() {
// Codex doesn't set is_task_running() for background terminals, so title is
// plain (idle). The screen rule background_terminal_working at priority 800
// beats osc_title_idle at priority 100.
fn codex_background_terminal_screen_does_not_override_osc_idle() {
// Background terminal tasks can be long-lived helpers such as dev servers.
// They should not make Codex look busy once the foreground turn is idle.
let screen = "background terminal running · /ps to view · /stop to close\n";
let result = osc_explain(Agent::Codex, screen, "llm-proxy", "");
assert_eq!(result.state, AgentState::Working);
assert_eq!(result.state, AgentState::Idle);
assert_eq!(
result.matched_rule.as_ref().map(|r| r.id.as_str()),
Some("background_terminal_working")
Some("osc_title_idle")
);
assert!(result.visible_working);
assert!(result.visible_idle);
}
#[test]
+1 -14
View File
@@ -1,5 +1,5 @@
id = "codex"
version = "2026.06.10.2"
version = "2026.06.10.3"
min_engine_version = 2
updated_at = "2026-06-10T00:00:00Z"
@@ -44,19 +44,6 @@ any = [
{ contains = ["allow command?"] },
]
[[rules]]
id = "background_terminal_working"
state = "working"
priority = 800
region = "bottom_non_empty_lines(6)"
visible_working = true
any = [
{ contains = ["background terminal running"] },
{ contains = ["Waiting for background terminal"] },
{ contains = ["/ps to view"] },
{ contains = ["/stop to close"] },
]
[[rules]]
id = "weak_blocker"
state = "blocked"
+1 -14
View File
@@ -1,5 +1,5 @@
id = "codex"
version = "2026.06.10.2"
version = "2026.06.10.3"
min_engine_version = 2
updated_at = "2026-06-10T00:00:00Z"
@@ -44,19 +44,6 @@ any = [
{ contains = ["allow command?"] },
]
[[rules]]
id = "background_terminal_working"
state = "working"
priority = 800
region = "bottom_non_empty_lines(6)"
visible_working = true
any = [
{ contains = ["background terminal running"] },
{ contains = ["Waiting for background terminal"] },
{ contains = ["/ps to view"] },
{ contains = ["/stop to close"] },
]
[[rules]]
id = "weak_blocker"
state = "blocked"