diff --git a/crates/maestro-cli/src/sessions.rs b/crates/maestro-cli/src/sessions.rs index f58fd98..ed51946 100644 --- a/crates/maestro-cli/src/sessions.rs +++ b/crates/maestro-cli/src/sessions.rs @@ -108,6 +108,7 @@ fn print_session_table(out: &mut impl Write, sessions: &[Session], info: &Daemon ActivityState::Active => "active", ActivityState::Idle => "idle", ActivityState::AwaitingInput => "awaiting", + ActivityState::Error => "error", }; // Show the live foreground command alongside the spawn command when // the daemon has observed one that differs (NAP-340). diff --git a/crates/maestro-protocol/src/lib.rs b/crates/maestro-protocol/src/lib.rs index 391d0bd..e960175 100644 --- a/crates/maestro-protocol/src/lib.rs +++ b/crates/maestro-protocol/src/lib.rs @@ -126,6 +126,9 @@ pub enum ActivityState { Idle, /// Blocked on a `read()` from the pty — waiting on the user. AwaitingInput, + /// The agent running in the session reported a failure (#102). Never + /// inferred by the daemon; only set when an agent reports it (#105). + Error, } /// Optional worktree request attached to a `CreateSessionRequest`. @@ -617,6 +620,16 @@ mod tests { assert_eq!(full, round_trip(&full)); } + // #102: nothing infers `Error`; only #105's agent-reported failure sets it. + #[test] + fn error_activity_state_serializes_pascal_case_and_idle_stays_default() { + assert_eq!( + serde_json::to_value(ActivityState::Error).unwrap(), + serde_json::json!("Error") + ); + assert_eq!(ActivityState::default(), ActivityState::Idle); + } + #[test] fn activity_state_serializes_pascal_case_and_defaults_idle() { assert_eq!(