Skip to main content

IterationBuffer

Struct IterationBuffer 

Source
pub struct IterationBuffer {
    pub number: u32,
    pub lines: Arc<Mutex<Vec<Line<'static>>>>,
    pub scroll_offset: usize,
    pub following_bottom: bool,
    pub hat_display: Option<String>,
    pub backend: Option<String>,
    pub started_at: Option<Instant>,
    pub elapsed: Option<Duration>,
}
Expand description

Stores formatted output content for a single Ralph iteration. Each iteration has its own buffer with independent scroll state.

The lines field is wrapped in Arc<Mutex<>> to allow sharing with stream handlers during execution, enabling real-time streaming to the TUI instead of batch transfer after execution completes.

Fields§

§number: u32

Iteration number (1-indexed for display)

§lines: Arc<Mutex<Vec<Line<'static>>>>

Formatted lines of output (shared for streaming)

§scroll_offset: usize

Scroll position within this buffer

§following_bottom: bool

Whether to auto-scroll to bottom as new content arrives. Starts true, becomes false when user scrolls up, restored when user scrolls to bottom (G key) or manually scrolls down to reach bottom.

§hat_display: Option<String>

Hat display name (emoji + name) for this iteration.

§backend: Option<String>

Backend used for this iteration (e.g., “claude”, “kiro”).

§started_at: Option<Instant>

When this iteration started (for elapsed time calculation).

§elapsed: Option<Duration>

Frozen elapsed duration for this iteration (set when completed).

Implementations§

Source§

impl IterationBuffer

Source

pub fn new(number: u32) -> Self

Creates a new buffer for the given iteration number.

Source

pub fn lines_handle(&self) -> Arc<Mutex<Vec<Line<'static>>>>

Returns a shared handle to the lines buffer for streaming.

This allows stream handlers to write directly to the buffer, enabling real-time streaming to the TUI.

Source

pub fn append_line(&mut self, line: Line<'static>)

Appends a line to the buffer.

Source

pub fn line_count(&self) -> usize

Returns the total number of lines in the buffer.

Source

pub fn visible_lines(&self, viewport_height: usize) -> Vec<Line<'static>>

Returns a clone of the visible lines based on scroll offset and viewport height.

Note: Returns owned Vec instead of slice due to interior mutability.

Source

pub fn scroll_up(&mut self)

Scrolls up by one line. Disables auto-scroll since user is moving away from bottom.

Source

pub fn scroll_down(&mut self, viewport_height: usize)

Scrolls down by one line, respecting the viewport bounds. Re-enables auto-scroll if user reaches the bottom.

Source

pub fn scroll_top(&mut self)

Scrolls to the top of the buffer. Disables auto-scroll since user is moving away from bottom.

Source

pub fn scroll_bottom(&mut self, viewport_height: usize)

Scrolls to the bottom of the buffer. Re-enables auto-scroll since user explicitly went to bottom.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more