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>,
    pub wave_info: Option<WaveInfo>,
}
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).

§wave_info: Option<WaveInfo>

Wave data associated with this iteration (stored on wave completion).

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> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
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> IntoMaybeUndefined<T> for T

Source§

impl<T> IntoOption<T> for T

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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