pub struct App {Show 13 fields
pub input: String,
pub cursor_position: usize,
pub running: bool,
pub context: ProjectContext,
pub current_response: String,
pub working_dir: String,
pub error_log: Vec<ErrorEntry>,
pub app_state: AppState,
pub model_state: ModelState,
pub ui_state: UIState,
pub session_state: SessionState,
pub operation_state: OperationState,
pub status_state: StatusState,
}Expand description
Application state
Fields§
§input: StringUser input buffer
cursor_position: usizeCursor position in the input string
running: boolIs the app running?
context: ProjectContextProject context
current_response: StringCurrent model response (for streaming)
working_dir: StringCurrent working directory
error_log: Vec<ErrorEntry>Error log - keeps last N errors for visibility (no more silent failures!)
app_state: AppStateState machine for application lifecycle
model_state: ModelStateModel state - LLM configuration
ui_state: UIStateUI state - visual presentation and widget states
session_state: SessionStateSession state - conversation history and persistence
operation_state: OperationStateOperation state - mode, confirmations, and plan execution
status_state: StatusStateStatus state - UI status messages
Implementations§
Source§impl App
impl App
Sourcepub fn new(
model: Box<dyn Model>,
context: ProjectContext,
model_id: String,
) -> Self
pub fn new( model: Box<dyn Model>, context: ProjectContext, model_id: String, ) -> Self
Create a new app instance
Sourcepub fn set_context_manager(&mut self, manager: ContextManager)
pub fn set_context_manager(&mut self, manager: ContextManager)
Set the context manager for dynamic context reloading
Sourcepub async fn reload_context_if_needed(&mut self) -> Result<()>
pub async fn reload_context_if_needed(&mut self) -> Result<()>
Update context if file tree has changed since last message
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 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 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
Sourcepub fn log_error(&mut self, entry: ErrorEntry)
pub fn log_error(&mut self, entry: ErrorEntry)
Log an error to the error log (no more silent failures!)
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>)
Convenience: 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>, )
Convenience: 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 (last N)
Sourcepub fn scroll_down(&mut self, amount: u16)
pub fn scroll_down(&mut self, amount: u16)
Scroll chat view down
Sourcepub fn cycle_mode(&mut self)
pub fn cycle_mode(&mut self)
Cycle to the next operation mode
Sourcepub fn cycle_mode_reverse(&mut self)
pub fn cycle_mode_reverse(&mut self)
Cycle to the previous operation mode
Sourcepub fn set_mode(&mut self, mode: OperationMode)
pub fn set_mode(&mut self, mode: OperationMode)
Set a specific operation mode
Sourcepub fn toggle_bypass_mode(&mut self)
pub fn toggle_bypass_mode(&mut self)
Toggle bypass mode (Ctrl+Y shortcut)
Sourcepub fn build_message_history(&self) -> Vec<ChatMessage>
pub fn build_message_history(&self) -> Vec<ChatMessage>
Build message history for sending to the model Includes only user and assistant messages (not system messages from the UI)
Sourcepub fn build_managed_message_history(
&self,
max_context_tokens: usize,
reserve_tokens: usize,
) -> Vec<ChatMessage>
pub fn build_managed_message_history( &self, max_context_tokens: usize, reserve_tokens: usize, ) -> Vec<ChatMessage>
Build message history with token management Ensures the conversation doesn’t exceed the model’s context window
Sourcepub fn load_conversation(&mut self, conversation: ConversationHistory)
pub fn load_conversation(&mut self, conversation: ConversationHistory)
Load a conversation history
Sourcepub fn save_conversation(&mut self) -> Result<()>
pub fn save_conversation(&mut self) -> Result<()>
Save the current conversation
Sourcepub fn auto_save_conversation(&mut self)
pub fn auto_save_conversation(&mut self)
Auto-save the conversation (called on exit)
Sourcepub fn start_generation(&mut self, abort_handle: AbortHandle)
pub fn start_generation(&mut self, abort_handle: AbortHandle)
Start generation - transitions to Generating state with Sending status
Sourcepub fn transition_to_thinking(&mut self)
pub fn transition_to_thinking(&mut self)
Transition from Sending to Thinking status
Sourcepub fn transition_to_streaming(&mut self)
pub fn transition_to_streaming(&mut self)
Transition from Thinking/Sending to Streaming status
Sourcepub fn increment_tokens(&mut self, count: usize)
pub fn increment_tokens(&mut self, count: usize)
Increment tokens received during generation
Sourcepub fn stop_generation(&mut self)
pub fn stop_generation(&mut self)
Stop generation - transitions back to Idle state
Sourcepub fn abort_generation(&mut self) -> Option<AbortHandle>
pub fn abort_generation(&mut self) -> Option<AbortHandle>
Abort generation and return the abort handle if present
Sourcepub fn set_pending_action(
&mut self,
action: AgentAction,
executor: ModeAwareExecutor,
)
pub fn set_pending_action( &mut self, action: AgentAction, executor: ModeAwareExecutor, )
Set pending action - transitions to AwaitingActionConfirmation state
Sourcepub fn clear_pending_action(&mut self)
pub fn clear_pending_action(&mut self)
Clear pending action - transitions back to Idle state
Sourcepub fn cancel_plan(&mut self)
pub fn cancel_plan(&mut self)
Cancel the active plan
Sourcepub fn start_plan_execution(&mut self)
pub fn start_plan_execution(&mut self)
Start executing the active plan
Sourcepub fn plan_next_action(&self) -> Option<&PlannedAction>
pub fn plan_next_action(&self) -> Option<&PlannedAction>
Get the next pending action from the plan
Sourcepub fn mark_plan_action_completed(&mut self, result: Option<ActionResult>)
pub fn mark_plan_action_completed(&mut self, result: Option<ActionResult>)
Mark current plan action as completed
Sourcepub fn mark_plan_action_failed(&mut self, error: String)
pub fn mark_plan_action_failed(&mut self, error: String)
Mark current plan action as failed
Sourcepub fn is_plan_complete(&self) -> bool
pub fn is_plan_complete(&self) -> bool
Check if plan execution is complete
Sourcepub fn get_plan_stats(&self) -> Option<PlanStats>
pub fn get_plan_stats(&self) -> Option<PlanStats>
Get plan statistics
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
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§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> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);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