pub struct Tui { /* private fields */ }Expand description
Main TUI handle that integrates with the event bus.
Implementations§
Source§impl Tui
impl Tui
Sourcepub fn connect(base_url: &str) -> Result<Self>
pub fn connect(base_url: &str) -> Result<Self>
Creates a TUI that connects to a running ralph-api server.
The TUI will fetch initial state via HTTP and subscribe to the RPC v1 event stream over WebSocket. No in-process observer is needed.
§Arguments
base_url— e.g."http://127.0.0.1:3000"
Sourcepub fn spawn(args: Vec<String>) -> Result<Self>
pub fn spawn(args: Vec<String>) -> Result<Self>
Creates a TUI that spawns ralph run --rpc as a subprocess.
The TUI reads JSON-RPC events from the subprocess stdout and sends commands to its stdin. This mode allows the TUI to run independently of the orchestration loop process.
§Arguments
args- Arguments to pass toralph run --rpc(e.g.,-p "prompt",-c config.yml)
§Example
let tui = Tui::spawn(vec![
"-p".to_string(),
"Implement feature X".to_string(),
"-c".to_string(),
"ralph.yml".to_string(),
])?;
tui.run().await?;Sourcepub fn with_hat_map(self, hat_map: HashMap<String, (HatId, String)>) -> Self
pub fn with_hat_map(self, hat_map: HashMap<String, (HatId, String)>) -> Self
Sets the hat map for dynamic topic-to-hat resolution.
This allows the TUI to display the correct hat for custom topics without hardcoding them in TuiState::update().
Sourcepub fn with_termination_signal(self, terminated_rx: Receiver<bool>) -> Self
pub fn with_termination_signal(self, terminated_rx: Receiver<bool>) -> Self
Sets the termination signal receiver for graceful shutdown.
The TUI will exit when this receiver signals true.
Sourcepub fn with_interrupt_tx(self, interrupt_tx: Sender<bool>) -> Self
pub fn with_interrupt_tx(self, interrupt_tx: Sender<bool>) -> Self
Sets the interrupt channel for Ctrl+C signaling.
In raw terminal mode, SIGINT is not generated by the OS when the user presses Ctrl+C. The TUI detects Ctrl+C via crossterm events and uses this channel to signal the main orchestration loop to terminate.
Sourcepub fn with_events_path(self, path: PathBuf) -> Self
pub fn with_events_path(self, path: PathBuf) -> Self
Sets the path to events.jsonl for direct guidance writes.
Sourcepub fn with_urgent_steer_path(self, path: PathBuf) -> Self
pub fn with_urgent_steer_path(self, path: PathBuf) -> Self
Sets the path to the urgent-steer marker file for immediate ! gating.
Sourcepub fn guidance_next_queue(&self) -> Arc<Mutex<Vec<String>>>
pub fn guidance_next_queue(&self) -> Arc<Mutex<Vec<String>>>
Returns a handle to the guidance next-queue for draining in the loop runner.
Sourcepub fn observer(&self) -> impl Fn(&Event) + Send + 'static
pub fn observer(&self) -> impl Fn(&Event) + Send + 'static
Returns an observer closure that updates TUI state from events.
Only meaningful in in-process mode. In RPC mode, state is updated by the WebSocket bridge instead.
Sourcepub async fn run(self) -> Result<()>
pub async fn run(self) -> Result<()>
Runs the TUI application loop.
In in-process mode, requires with_termination_signal() to have
been called first.
In RPC client mode (HTTP/WS), the TUI manages its own lifecycle — the RPC
bridge runs alongside the render loop and exits on Ctrl+C or q.
In subprocess RPC mode, the TUI spawns an event reader to consume JSON events from the subprocess stdout and uses an RPC writer to send commands to the subprocess stdin.
§Errors
Returns an error if the terminal cannot be initialized or if the application loop encounters an unrecoverable error.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Tui
impl !RefUnwindSafe for Tui
impl Send for Tui
impl Sync for Tui
impl Unpin for Tui
impl UnsafeUnpin for Tui
impl !UnwindSafe for Tui
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
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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
impl<T> DowncastSync for T
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