pub enum PiEvent {
AgentStart,
AgentEnd {
messages: Vec<PiMessage>,
},
TurnStart,
TurnEnd {
message: Box<PiMessage>,
tool_results: Vec<PiMessage>,
},
MessageStart {
message: Box<PiMessage>,
},
MessageUpdate {
message: Option<Box<PiMessage>>,
usage: Option<Usage>,
assistant_message_event: Value,
},
MessageEnd {
message: Box<PiMessage>,
},
ToolExecutionStart {
tool_call_id: String,
tool_name: String,
args: Value,
},
ToolExecutionUpdate {
tool_call_id: String,
tool_name: String,
args: Value,
partial_result: Value,
},
ToolExecutionEnd {
tool_call_id: String,
tool_name: String,
result: Value,
is_error: bool,
},
Unknown {
event_type: String,
payload: Value,
},
}Expand description
One event from the --mode json / --mode rpc stdout stream,
discriminated on type. Known lifecycle events are typed with their
primary fields lifted; every variant keeps its full payload reachable
(unmodeled fields land in extra), and unknown types fall back to
PiEvent::Unknown instead of erroring.
Variants§
AgentStart
agent_start
AgentEnd
agent_end — carries the turn’s messages.
TurnStart
turn_start
TurnEnd
turn_end
MessageStart
message_start
MessageUpdate
message_update — streaming delta; in --mode json the
cumulative message snapshot is omitted and only the incremental
assistantMessageEvent (kept raw here) arrives.
MessageEnd
message_end
ToolExecutionStart
tool_execution_start
ToolExecutionUpdate
tool_execution_update
ToolExecutionEnd
tool_execution_end
Unknown
Any other type (session events like queue_update,
compaction_start/compaction_end, bash_execution_update,
extension UI requests, and whatever future CLIs add). The full
object is preserved.