mirror of
https://github.com/openai/codex.git
synced 2026-09-13 11:47:17 +00:00
Make `interrupted` an agent state and make it not final. As a result, a `wait` won't return on an interrupted agent and no notification will be send to the parent agent. The rationals are: * If a user interrupt a sub-agent for any reason, you don't want the parent agent to instantaneously ask the sub-agent to restart * If a parent agent interrupt a sub-agent, no need to add a noisy notification in the parent agen
28 lines
1.1 KiB
Rust
28 lines
1.1 KiB
Rust
use codex_protocol::protocol::AgentStatus;
|
|
use codex_protocol::protocol::EventMsg;
|
|
|
|
/// Derive the next agent status from a single emitted event.
|
|
/// Returns `None` when the event does not affect status tracking.
|
|
pub(crate) fn agent_status_from_event(msg: &EventMsg) -> Option<AgentStatus> {
|
|
match msg {
|
|
EventMsg::TurnStarted(_) => Some(AgentStatus::Running),
|
|
EventMsg::TurnComplete(ev) => Some(AgentStatus::Completed(ev.last_agent_message.clone())),
|
|
EventMsg::TurnAborted(ev) => match ev.reason {
|
|
codex_protocol::protocol::TurnAbortReason::Interrupted => {
|
|
Some(AgentStatus::Interrupted)
|
|
}
|
|
_ => Some(AgentStatus::Errored(format!("{:?}", ev.reason))),
|
|
},
|
|
EventMsg::Error(ev) => Some(AgentStatus::Errored(ev.message.clone())),
|
|
EventMsg::ShutdownComplete => Some(AgentStatus::Shutdown),
|
|
_ => None,
|
|
}
|
|
}
|
|
|
|
pub(crate) fn is_final(status: &AgentStatus) -> bool {
|
|
!matches!(
|
|
status,
|
|
AgentStatus::PendingInit | AgentStatus::Running | AgentStatus::Interrupted
|
|
)
|
|
}
|