pub enum UiEvent {
Show 27 variants
AssistantPartial {
text: String,
},
AssistantMessage {
content: String,
},
ToolCall {
id: String,
name: String,
arguments: String,
},
ToolResult {
id: String,
name: String,
output: String,
success: bool,
},
Usage {
input_tokens: u64,
output_tokens: u64,
},
Reasoning {
content: String,
},
Latency {
llm_ms: u64,
},
Compacted {
removed: usize,
kept: usize,
},
TurnFinished,
Error {
message: String,
},
PlanProposed {
plan_text: String,
tool_calls: Vec<Value>,
},
PlanConfirmed,
PlanRejected {
reason: String,
},
PlanModeRequested {
reason: String,
},
PlanModeApproved,
PlanModeRejected {
reason: String,
},
TodoUpdated {
todos: Vec<TodoItem>,
},
GoalContinuing {
reason: String,
turns: u32,
},
GoalAchieved {
condition: String,
turns: u32,
},
GoalCleared,
Interrupted,
SessionResumed {
session_id: String,
turn_count: usize,
},
McpServersLoaded {
entries: Vec<McpEntry>,
},
HookStarted {
hook_event: String,
hook_name: String,
status_message: Option<String>,
},
HookProgress {
hook_event: String,
hook_name: String,
last_line: String,
},
HookFinished {
hook_event: String,
hook_name: String,
outcome: String,
duration_ms: u64,
},
HookSystemMessage {
text: String,
},
}Expand description
Events bubbled up from the backend worker into the UI loop.
Variants§
AssistantPartial
A streamed partial token chunk to append to the in-flight assistant message.
AssistantMessage
A completed assistant message (non-streaming providers, or the
final flush after PartialToken chunks).
ToolCall
Model requested to execute a tool. Carries the call id so the
matching UiEvent::ToolResult can pair up.
ToolResult
Tool finished executing. id matches the originating
UiEvent::ToolCall.
Usage
Token usage for the latest LLM call.
Reasoning
Reasoning / thinking content produced by the model for the
current step (DeepSeek R1, OpenAI o1, …). Carries the full
reasoning text; the TUI renders it as a thinking… block
above the corresponding assistant message. Steps that did
not produce reasoning never emit this event.
Latency
Latency (ms) of the latest LLM call.
Compacted
Transcript compaction notification.
TurnFinished
Marks the end of a turn so the UI can stop the spinner.
Error
A non-fatal error worth surfacing to the user.
PlanProposed
Goal-147: structured plan proposal from the runtime
(AgentEvent::PlanProposed). The UI opens a Modal::PlanReview
over the chat screen and freezes input until the user
approves / rejects / edits.
tool_calls carries the pending tool calls as JSON values
— each one has name, id, and arguments fields, mirroring
the kernel’s serialised StepEvent::PlanProposed payload.
PlanConfirmed
Goal-147: the runtime accepted the plan and resumed execution.
Closes any open Modal::PlanReview and pushes a System block.
PlanRejected
Goal-147: the runtime rejected (or had its plan rejected) with
a free-form reason. Same UI handling as PlanConfirmed plus
the reason in the System block.
PlanModeRequested
Goal-202: agent called request_plan_mode; user should approve or skip.
PlanModeApproved
Goal-202: user approved the plan-mode entry request.
PlanModeRejected
Goal-202: user rejected the plan-mode entry request.
TodoUpdated
Goal-167: the agent updated its task list via todo_write. Carries
the complete replacement list so the UI can re-render without a diff.
GoalContinuing
Goal loop is running; the judge found the condition not yet met.
GoalAchieved
Goal loop completed — condition confirmed met.
GoalCleared
Active goal was cleared (budget exceeded, /goal clear, or API).
Interrupted
The current turn was aborted by the user (Esc/Ctrl+C). The backend
cancelled the in-flight LLM request via JoinHandle::abort() and
truncated the transcript back to the pre-turn state.
SessionResumed
A previous session was successfully loaded into the runtime. The UI should clear the in-progress transcript and show a System block.
McpServersLoaded
MCP server list loaded from the workspace config.
HookStarted
A hook started executing.
HookProgress
A hook produced incremental output (last stdout line).
HookFinished
A hook finished executing.
HookSystemMessage
The hook produced a system message to surface to the user.
Trait Implementations§
impl Eq for UiEvent
impl StructuralPartialEq for UiEvent
Auto Trait Implementations§
impl Freeze for UiEvent
impl RefUnwindSafe for UiEvent
impl Send for UiEvent
impl Sync for UiEvent
impl Unpin for UiEvent
impl UnsafeUnpin for UiEvent
impl UnwindSafe for UiEvent
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more