pub struct CommandSender { /* private fields */ }Expand description
Unified command sender with 4-tier fallback: PTY session → IPC → RuntimeAdapter (tmux) → PTY inject
Tier priority follows reliability:
- PTY session: Direct write to spawned PTY session — most reliable for WebUI-spawned agents
- IPC:
tmai wrapprovides PTY master — most reliable for wrapped agents - tmux send-keys: tmux native mechanism — reliable when tmux is available
- PTY inject: TIOCSTI via
/proc/{pid}/fd/0— last resort, requires kernel support
Implementations§
Source§impl CommandSender
impl CommandSender
Sourcepub fn new(
ipc_server: Option<Arc<IpcServer>>,
runtime: Arc<dyn RuntimeAdapter>,
app_state: SharedState,
) -> Self
pub fn new( ipc_server: Option<Arc<IpcServer>>, runtime: Arc<dyn RuntimeAdapter>, app_state: SharedState, ) -> Self
Create a new CommandSender
Sourcepub fn with_hook_registry(self, registry: HookRegistry) -> Self
pub fn with_hook_registry(self, registry: HookRegistry) -> Self
Attach a HookRegistry for PTY injection PID resolution
Sourcepub fn with_pty_registry(self, registry: Arc<PtyRegistry>) -> Self
pub fn with_pty_registry(self, registry: Arc<PtyRegistry>) -> Self
Attach a PtyRegistry for direct PTY session writes
Sourcepub fn send_keys(&self, target: &str, keys: &str) -> Result<()>
pub fn send_keys(&self, target: &str, keys: &str) -> Result<()>
Send keys via PTY session → IPC → tmux send-keys → PTY inject
Sourcepub fn send_keys_literal(&self, target: &str, keys: &str) -> Result<()>
pub fn send_keys_literal(&self, target: &str, keys: &str) -> Result<()>
Send literal keys via PTY session → IPC → tmux send-keys → PTY inject
Sourcepub fn send_text_and_enter(&self, target: &str, text: &str) -> Result<()>
pub fn send_text_and_enter(&self, target: &str, text: &str) -> Result<()>
Send text + Enter via PTY session → IPC → tmux send-keys → PTY inject
Sourcepub fn runtime(&self) -> &Arc<dyn RuntimeAdapter>
pub fn runtime(&self) -> &Arc<dyn RuntimeAdapter>
Access the runtime adapter for direct operations (focus_pane, kill_pane, etc.)
Sourcepub fn ipc_server(&self) -> Option<&Arc<IpcServer>>
pub fn ipc_server(&self) -> Option<&Arc<IpcServer>>
Access the IPC server (needed for Poller registry)
Auto Trait Implementations§
impl Freeze for CommandSender
impl !RefUnwindSafe for CommandSender
impl Send for CommandSender
impl Sync for CommandSender
impl Unpin for CommandSender
impl UnsafeUnpin for CommandSender
impl !UnwindSafe for CommandSender
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
Mutably borrows from an owned value. Read more
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>
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>
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)
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)
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.