pub struct InteractiveRuntime<W: Write, S: SessionHost> { /* private fields */ }Expand description
Live interactive runtime.
Owns:
tui— the sole stdout owner.input— the sole stdin owner (crossterm::EventStream).editor— the live, stateful editor (preserved across frames).view— theViewStatesnapshot mutated by events and actions.mapper/input_state— pure input dispatch state.focus— single-focus manager (used by selectors and overlays).events— the bridged session-event channel.partial— the partial-assistant watch receiver.shutdown— notify for graceful exit.
The caller owns the pi_tui::terminal::guard::TerminalGuard so it can
outlive the runtime and write restore bytes on process exit even if the
runtime itself panics.
Implementations§
Source§impl<W: Write, S: SessionHost> InteractiveRuntime<W, S>
impl<W: Write, S: SessionHost> InteractiveRuntime<W, S>
Sourcepub fn new(
tui: Tui<W>,
input: TerminalInput,
session: Arc<S>,
options: &InteractiveRuntimeOptions,
) -> Self
pub fn new( tui: Tui<W>, input: TerminalInput, session: Arc<S>, options: &InteractiveRuntimeOptions, ) -> Self
Construct the runtime around an already-active Tui and
TerminalInput.
The caller is responsible for activating the
pi_tui::terminal::guard::TerminalGuard before this call and dropping
it after the runtime exits.
§Panics
Never. Construction is infallible.
Sourcepub fn viewport_bottom_row(&self) -> u16
pub fn viewport_bottom_row(&self) -> u16
Last row occupied by the current terminal viewport.
Sourcepub fn view_mut(&mut self) -> &mut ViewState
pub fn view_mut(&mut self) -> &mut ViewState
Mutably borrow the view state (tests / driver seam).
Sourcepub fn editor_mut(&mut self) -> &mut Editor
pub fn editor_mut(&mut self) -> &mut Editor
Mutably borrow the live editor (tests / driver seam).
Sourcepub fn input_state(&self) -> &InputState
pub fn input_state(&self) -> &InputState
Borrow the input mapper state (tests).
Sourcepub fn last_error(&self) -> Option<&str>
pub fn last_error(&self) -> Option<&str>
Last recorded session error message, if any.
Sourcepub fn request_shutdown(&self)
pub fn request_shutdown(&self)
Signal the runtime to exit at the next loop turn (signal handler hook).
Sourcepub fn shutdown_notify(&self) -> Arc<Notify> ⓘ
pub fn shutdown_notify(&self) -> Arc<Notify> ⓘ
Shared shutdown notify (for registering multiple signal sources).
Sourcepub fn input(&self) -> &TerminalInput
pub fn input(&self) -> &TerminalInput
Borrow the input handle (driver seam).
Sourcepub fn input_mut(&mut self) -> &mut TerminalInput
pub fn input_mut(&mut self) -> &mut TerminalInput
Mutably borrow the input handle (driver seam).
Sourcepub async fn run(&mut self) -> Result<InteractiveExit>
pub async fn run(&mut self) -> Result<InteractiveExit>
Run the main event loop until shutdown is requested or stdin closes.
Returns the exit reason; the caller drops the runtime and the
pi_tui::terminal::guard::TerminalGuard in that order.
§Errors
Returns io::Error only when a terminal write fails irrecoverably.
Sourcepub async fn rebind_session_channels(&mut self)
pub async fn rebind_session_channels(&mut self)
Rebind event/partial subscriptions and reload the transcript after a session replacement. Used by production rebind callback and tests.
Sourcepub fn close_selector_for_suspend(&mut self)
pub fn close_selector_for_suspend(&mut self)
Clear selector focus before process suspension.
Sourcepub async fn step_ui(&mut self, event: UiEvent) -> Result<()>
pub async fn step_ui(&mut self, event: UiEvent) -> Result<()>
Advance one UI event without running the full event loop. Returns the list of dispatch outcomes; the caller may then assert on view state.
This is the test driver seam: a fake TerminalInput can be injected
via InteractiveRuntime::new, and tests call step_ui to feed
scripted key sequences while observing the view and session host.
§Errors
Propagates I/O failures from the underlying Tui::commit.
Sourcepub fn step_session_event(
&mut self,
event: impl Borrow<AgentSessionEvent>,
) -> Ready<Result<()>>
pub fn step_session_event( &mut self, event: impl Borrow<AgentSessionEvent>, ) -> Ready<Result<()>>
Advance one session event without running the full event loop.
§Errors
Propagates I/O failures from the underlying Tui::commit.
Sourcepub fn paint_now(&mut self) -> Result<()>
pub fn paint_now(&mut self) -> Result<()>
Force a single paint (tests / driver seam).
§Errors
Propagates I/O failures from the underlying Tui::commit.
Sourcepub fn flush_coalescer(&mut self) -> Result<()>
pub fn flush_coalescer(&mut self) -> Result<()>
Force a coalesced paint tick (tests). Clears the deadline and commits.
§Errors
Propagates I/O failures from the underlying Tui::commit.
Sourcepub fn enqueue_settle(&mut self, blocks: Vec<SettledBlock>)
pub fn enqueue_settle(&mut self, blocks: Vec<SettledBlock>)
Enqueue a settle transaction for the next loop turn (tests / driver).
Auto Trait Implementations§
impl<W, S> !RefUnwindSafe for InteractiveRuntime<W, S>
impl<W, S> !Sync for InteractiveRuntime<W, S>
impl<W, S> !UnwindSafe for InteractiveRuntime<W, S>
impl<W, S> Freeze for InteractiveRuntime<W, S>where
W: Freeze,
impl<W, S> Send for InteractiveRuntime<W, S>where
W: Send,
impl<W, S> Unpin for InteractiveRuntime<W, S>where
W: Unpin,
impl<W, S> UnsafeUnpin for InteractiveRuntime<W, S>where
W: UnsafeUnpin,
Blanket Implementations§
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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> 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 more