mirror of
https://github.com/herdrdev/herdr.git
synced 2026-09-21 16:01:04 +00:00
fix: stop marking codex background terminals as working
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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,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,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"
|
||||
|
||||
Reference in New Issue
Block a user