pub struct App {
pub input: InputBuffer,
pub running: bool,
pub current_response: String,
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,
}Expand description
Application state coordinator
Fields§
§input: InputBufferUser input buffer
running: boolIs the app running?
current_response: StringCurrent model response (for streaming)
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
Implementations§
Source§impl App
impl App
Sourcepub fn cursor_position(&self) -> usize
pub fn cursor_position(&self) -> usize
Get cursor position (compatibility shim)
Sourcepub fn set_cursor_position(&mut self, pos: usize)
pub fn set_cursor_position(&mut self, pos: usize)
Set cursor position (compatibility shim)
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
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 This is used when the model returns tool_calls that need to be recorded for proper agent loop conversation history
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 This follows the Ollama/OpenAI API format for tool results:
- role: “tool”
- content: the result of executing the tool
- tool_call_id: links back to the original tool_call
- tool_name: the function name that was called (required by Ollama)
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 async fn generate_conversation_title(&mut self)
pub async fn generate_conversation_title(&mut self)
Generate conversation title from current messages
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 Includes User, Assistant, and Tool messages (for proper agent loop)
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)
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)
Set the final token count from Ollama’s actual response
pub fn stop_generation(&mut self)
pub fn abort_generation(&mut self) -> Option<AbortHandle>
Auto Trait Implementations§
impl Freeze for App
impl !RefUnwindSafe for App
impl Send for App
impl Sync for App
impl Unpin 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> Pointable for T
impl<T> Pointable for T
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