pub struct EffectRunner { /* private fields */ }Expand description
The runner. One instance per process, constructed by
app::run and consumed when the main loop exits.
Implementations§
Source§impl EffectRunner
impl EffectRunner
Sourcepub fn new(msg_tx: MsgSender, workdir: PathBuf) -> Self
pub fn new(msg_tx: MsgSender, workdir: PathBuf) -> Self
Create an unused runner. Pair with msg_rx from channel().
Sourcepub fn with_interactive_approvals(self) -> Self
pub fn with_interactive_approvals(self) -> Self
Enable inline approval prompts (interactive TUI only). The gate then
pauses gated tools and routes the user’s decision through the
ApprovalBroker instead of writing an out-of-band DB approval row.
Sourcepub fn with_interactive_questions(self) -> Self
pub fn with_interactive_questions(self) -> Self
Enable inline ask_user_question prompts (interactive TUI only). The tool
then parks on the QuestionBroker and routes the user’s answers back
through it instead of proceeding without asking.
Sourcepub fn spawn_config_watcher(&mut self, cwd: PathBuf, memory: MemoryConfig)
pub fn spawn_config_watcher(&mut self, cwd: PathBuf, memory: MemoryConfig)
Start the background config watcher (#45): it polls MERMAID.md + memory
and emits Msg::InstructionsChanged/MemoryChanged on change, so the
reducer reads them as injected data instead of refreshing inline. Call
once at startup. Live-loop only — a replay driver feeds the recorded
Changed Msgs rather than polling.
Sourcepub fn with_task_id(self, task_id: Option<String>) -> Self
pub fn with_task_id(self, task_id: Option<String>) -> Self
Attach a durable runtime task id so tool runs, approvals, checkpoints, compactions, and background processes can be linked.
Sourcepub fn without_terminal_title(self) -> Self
pub fn without_terminal_title(self) -> Self
Disable terminal-title writes for non-interactive callers.
Sourcepub fn without_global_mcp_shutdown(self) -> Self
pub fn without_global_mcp_shutdown(self) -> Self
Leave the process-global MCP manager alone on shutdown. Child
(subagent) runners share it with the parent and must not reap it.
Sourcepub fn with_bindings(
self,
providers: Arc<ProviderFactory>,
tools: Arc<ToolRegistry>,
) -> Self
pub fn with_bindings( self, providers: Arc<ProviderFactory>, tools: Arc<ToolRegistry>, ) -> Self
Attach provider + tool registries. Production wiring uses
this; unit tests that don’t need real dispatch can skip.
Without bindings, CallModel / ExecuteTool emit well-
formed error Msgs so the reducer still transitions cleanly.
Sourcepub fn pair(workdir: PathBuf) -> (Self, Receiver<Msg>)
pub fn pair(workdir: PathBuf) -> (Self, Receiver<Msg>)
Pair-constructor: returns both the runner and the receiving end of the Msg channel. Preferred for production wiring because it keeps the channel capacity constant in one place.
Sourcepub fn pair_with_bindings(
workdir: PathBuf,
config: Config,
tools: Arc<ToolRegistry>,
) -> (Self, Receiver<Msg>)
pub fn pair_with_bindings( workdir: PathBuf, config: Config, tools: Arc<ToolRegistry>, ) -> (Self, Receiver<Msg>)
Pair constructor that also wires the real provider factory +
tool registry. Used by app::run_interactive.
Sourcepub fn pair_from(
workdir: PathBuf,
providers: Arc<ProviderFactory>,
tools: Arc<ToolRegistry>,
) -> (Self, Receiver<Msg>)
pub fn pair_from( workdir: PathBuf, providers: Arc<ProviderFactory>, tools: Arc<ToolRegistry>, ) -> (Self, Receiver<Msg>)
Pair constructor that takes a pre-built ProviderFactory.
Used when the caller needs to share a ProviderFactory with
the SubagentSpawner so subagents can issue model calls
through the same cache.
pub fn pair_from_with_task( workdir: PathBuf, providers: Arc<ProviderFactory>, tools: Arc<ToolRegistry>, task_id: Option<String>, ) -> (Self, Receiver<Msg>)
Sourcepub fn new_child(
msg_tx: MsgSender,
workdir: PathBuf,
providers: Arc<ProviderFactory>,
tools: Arc<ToolRegistry>,
) -> Self
pub fn new_child( msg_tx: MsgSender, workdir: PathBuf, providers: Arc<ProviderFactory>, tools: Arc<ToolRegistry>, ) -> Self
Construct a runner that shares a pre-derived cancellation
token for its turn scopes. Used by SubagentSpawner so the
child runner’s work aborts as soon as the parent’s ctx.token
fires.
Sourcepub fn scope_count(&self) -> usize
pub fn scope_count(&self) -> usize
Number of active per-turn scopes. Tests use this to observe lifecycle without racing on internal state.
Auto Trait Implementations§
impl !RefUnwindSafe for EffectRunner
impl !UnwindSafe for EffectRunner
impl Freeze for EffectRunner
impl Send for EffectRunner
impl Sync for EffectRunner
impl Unpin for EffectRunner
impl UnsafeUnpin for EffectRunner
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> 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