Skip to main content

PtyExecutor

Struct PtyExecutor 

Source
pub struct PtyExecutor { /* private fields */ }
Expand description

Executor for running prompts in a pseudo-terminal.

Implementations§

Source§

impl PtyExecutor

Source

pub fn new(backend: CliBackend, config: PtyConfig) -> Self

Creates a new PTY executor with the given backend and configuration.

Source

pub fn set_tui_mode(&mut self, enabled: bool)

Sets the TUI mode flag.

When TUI mode is enabled, PTY output is sent to the TUI channel instead of being written directly to stdout. This flag must be set before calling any of the run methods when using the TUI.

§Arguments
  • enabled - Whether TUI mode should be active
Source

pub fn set_backend(&mut self, backend: CliBackend)

Updates the backend configuration for this executor.

This allows switching backends between iterations without recreating the entire executor. Critical for hat-level backend configuration support.

§Arguments
  • backend - The new backend configuration to use
Source

pub fn handle(&mut self) -> PtyHandle

Returns a handle for TUI integration.

Can only be called once - panics if called multiple times.

Source

pub async fn run_observe( &self, prompt: &str, interrupt_rx: Receiver<bool>, ) -> Result<PtyExecutionResult>

Runs in observe mode (output-only, no input forwarding).

This is an async function that listens for interrupt signals via the shared interrupt_rx watch channel from the event loop. Uses a separate thread for blocking PTY reads and tokio::select! for signal handling.

Returns when the process exits, idle timeout triggers, or interrupt is received.

§Arguments
  • prompt - The prompt to execute
  • interrupt_rx - Watch channel receiver for interrupt signals from the event loop
§Errors

Returns an error if PTY allocation fails, the command cannot be spawned, or an I/O error occurs during output handling.

Source

pub async fn run_observe_streaming<H: StreamHandler>( &self, prompt: &str, interrupt_rx: Receiver<bool>, handler: &mut H, ) -> Result<PtyExecutionResult>

Runs in observe mode with streaming event handling for JSON output.

When the backend’s output format is StreamJson, this method parses NDJSON lines and dispatches events to the provided handler for real-time display. For Text format, behaves identically to run_observe.

§Arguments
  • prompt - The prompt to execute
  • interrupt_rx - Watch channel receiver for interrupt signals
  • handler - Handler to receive streaming events
§Errors

Returns an error if PTY allocation fails, the command cannot be spawned, or an I/O error occurs during output handling.

Source

pub async fn run_interactive( &mut self, prompt: &str, interrupt_rx: Receiver<bool>, ) -> Result<PtyExecutionResult>

Runs in interactive mode (bidirectional I/O).

Uses tokio::select! for non-blocking I/O multiplexing between:

  1. PTY output (from blocking reader via channel)
  2. User input (from stdin thread via channel)
  3. Interrupt signal from event loop
  4. Idle timeout

This design ensures Ctrl+C is always responsive, even when the PTY has no output (e.g., during long-running tool calls).

§Arguments
  • prompt - The prompt to execute
  • interrupt_rx - Watch channel receiver for interrupt signals from the event loop
§Errors

Returns an error if PTY allocation fails, the command cannot be spawned, or an I/O error occurs during bidirectional communication.

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, 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