pub enum TurnLifecycleEffect {
TurnCompleted {
input_message_id: MessageId,
data: TurnCompletedData,
},
ResolveAskUserUnattended {
turn_id: Option<TurnId>,
input_message_id: MessageId,
calls: Vec<(String, Value)>,
},
SessionIdled {
turn_id: TurnId,
input_message_id: MessageId,
iterations: Option<u32>,
usage: Option<TokenUsage>,
},
TurnFailedWithDisclosure {
turn_id: TurnId,
input_message_id: MessageId,
text: String,
user_error: Option<UserFacingError>,
disclosure: Option<ErrorDisclosure>,
},
FireTurnEndHooks {
harness_id: HarnessId,
agent_id: Option<AgentId>,
turn_id: TurnId,
success: bool,
},
WaitingForToolResults,
}Expand description
A lifecycle side effect the engine decided must be recorded, described as data rather than performed.
The engine never emits events or fires hooks — it returns these, and the
host applies them (in list order) through its own lifecycle machinery. This
keeps planning deterministic while preserving the exact event stream. These
are NOT part of the public TurnPlan; they travel alongside it.
Variants§
TurnCompleted
Emit turn.completed with the summarized turn fields.
ResolveAskUserUnattended
Answer an ask_user call the client structurally cannot be asked.
Emitted instead of parking when the session never declared the
ask_user hint — a scheduled run, a trigger, an SDK caller. The host
completes each call with the declared defaults and
answered_by: "unattended", and the turn carries on in the same
iteration (EVE-1057).
Fields
SessionIdled
Idle the session and emit session.idled.
Fields
usage: Option<TokenUsage>TurnFailedWithDisclosure
Fail the turn with the already-disclosure-filtered error, emitting
turn.failed + session.idled.
FireTurnEndHooks
Fire the advisory turn_end lifecycle hooks.
WaitingForToolResults
Mark the session waiting_for_tool_results.