pub struct App {
pub input: InputBuffer,
pub running: bool,
pub working_dir: String,
pub error_log: VecDeque<ErrorEntry>,
pub app_state: AppState,
pub model_state: ModelState,
pub ui_state: UIState,
pub session_state: ConversationState,
pub operation_state: OperationState,
pub status_state: StatusState,
pub attachment_state: AttachmentState,
}Expand description
Application state coordinator
Fields§
§input: InputBufferUser input buffer
running: boolIs the app running?
working_dir: StringCurrent working directory
error_log: VecDeque<ErrorEntry>Error log - keeps last N errors for visibility
app_state: AppStateState machine for application lifecycle
model_state: ModelStateModel state - LLM configuration
ui_state: UIStateUI state - visual presentation and widget states
session_state: ConversationStateSession state - conversation history and persistence
operation_state: OperationStateOperation state - file reading and tool calls
status_state: StatusStateStatus state - UI status messages
attachment_state: AttachmentStateAttachment state - pending image attachments
Implementations§
Source§impl App
impl App
Sourcepub fn add_message(&mut self, role: MessageRole, content: String)
pub fn add_message(&mut self, role: MessageRole, content: String)
Add a message to the chat (extracts thinking blocks automatically)
Sourcepub fn add_message_with_images(
&mut self,
role: MessageRole,
content: String,
images: Option<Vec<String>>,
)
pub fn add_message_with_images( &mut self, role: MessageRole, content: String, images: Option<Vec<String>>, )
Add a message with optional image attachments
Sourcepub fn add_assistant_message_with_tool_calls(
&mut self,
content: String,
tool_calls: Vec<ToolCall>,
)
pub fn add_assistant_message_with_tool_calls( &mut self, content: String, tool_calls: Vec<ToolCall>, )
Add an assistant message with tool_calls attached
Sourcepub fn add_tool_result(
&mut self,
tool_call_id: String,
tool_name: String,
content: String,
)
pub fn add_tool_result( &mut self, tool_call_id: String, tool_name: String, content: String, )
Add a tool result message
Sourcepub fn clear_input(&mut self)
pub fn clear_input(&mut self)
Clear the input buffer
Sourcepub fn set_status(&mut self, message: impl Into<String>)
pub fn set_status(&mut self, message: impl Into<String>)
Set status message
Sourcepub fn clear_status(&mut self)
pub fn clear_status(&mut self)
Clear status message
Sourcepub fn display_error(
&mut self,
summary: impl Into<String>,
detail: impl Into<String>,
)
pub fn display_error( &mut self, summary: impl Into<String>, detail: impl Into<String>, )
Display an error consistently across the UI
Sourcepub fn display_error_simple(&mut self, message: impl Into<String>)
pub fn display_error_simple(&mut self, message: impl Into<String>)
Display an error with just a message
Sourcepub fn log_error(&mut self, entry: ErrorEntry)
pub fn log_error(&mut self, entry: ErrorEntry)
Log an error to the error log
Sourcepub fn log_error_msg(&mut self, severity: ErrorSeverity, msg: impl Into<String>)
pub fn log_error_msg(&mut self, severity: ErrorSeverity, msg: impl Into<String>)
Log a simple error message
Sourcepub fn log_error_with_context(
&mut self,
severity: ErrorSeverity,
msg: impl Into<String>,
context: impl Into<String>,
)
pub fn log_error_with_context( &mut self, severity: ErrorSeverity, msg: impl Into<String>, context: impl Into<String>, )
Log error with context
Sourcepub fn recent_errors(&self, count: usize) -> Vec<&ErrorEntry>
pub fn recent_errors(&self, count: usize) -> Vec<&ErrorEntry>
Get recent errors
Sourcepub fn set_terminal_title(&self, title: &str)
pub fn set_terminal_title(&self, title: &str)
Set terminal window title
Sourcepub fn spawn_title_generation(&self) -> Option<JoinHandle<Option<String>>>
pub fn spawn_title_generation(&self) -> Option<JoinHandle<Option<String>>>
Spawn title generation as a background task (non-blocking).
Returns a JoinHandle the caller can poll with is_finished().
pub fn scroll_up(&mut self, amount: u16)
pub fn scroll_down(&mut self, amount: u16)
pub fn quit(&mut self)
Sourcepub fn build_message_history(&self) -> Vec<ChatMessage>
pub fn build_message_history(&self) -> Vec<ChatMessage>
Build message history for model API calls (all messages, no truncation)
pub fn build_managed_message_history( &self, max_context_tokens: usize, reserve_tokens: usize, ) -> Vec<ChatMessage>
pub fn load_conversation(&mut self, conversation: ConversationHistory)
pub fn save_conversation(&mut self) -> Result<()>
pub fn auto_save_conversation(&mut self)
pub fn start_generation(&mut self, abort_handle: AbortHandle)
Sourcepub fn update_abort_handle(&mut self, abort_handle: AbortHandle)
pub fn update_abort_handle(&mut self, abort_handle: AbortHandle)
Update the abort handle for a new model call within the same turn. Keeps the existing start_time and token count (cumulative for the turn).
Sourcepub fn transition_to_sending(&mut self)
pub fn transition_to_sending(&mut self)
Reset status to Sending for a new model call within the same turn.
pub fn transition_to_thinking(&mut self)
pub fn transition_to_streaming(&mut self)
Sourcepub fn set_final_tokens(&mut self, count: usize)
pub fn set_final_tokens(&mut self, count: usize)
Add tokens from a completed model call (accumulates across the turn)
pub fn stop_generation(&mut self)
pub fn abort_generation(&mut self) -> (Option<AbortHandle>, String)
Sourcepub fn push_response(&mut self, text: &str)
pub fn push_response(&mut self, text: &str)
Append text to the response buffer. No-op if not generating. Enforces MAX_RESPONSE_CHARS size limit.
Sourcepub fn response_len(&self) -> usize
pub fn response_len(&self) -> usize
Get response buffer length (0 if not generating)
Sourcepub fn take_response(&mut self) -> String
pub fn take_response(&mut self) -> String
Take the response buffer, leaving it empty. Returns empty string if not generating.
Sourcepub fn clear_response(&mut self)
pub fn clear_response(&mut self)
Clear the response buffer (for per-model-call reset within a turn)
Auto Trait Implementations§
impl Freeze for App
impl !RefUnwindSafe for App
impl Send for App
impl Sync for App
impl Unpin for App
impl UnsafeUnpin for App
impl !UnwindSafe for App
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
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<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.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, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
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 moreSource§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more