Skip to main content

MultiAgentRuntime

Struct MultiAgentRuntime 

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

Coordinates sub-agent lifecycle, event bridging, and cancellation.

Created once during builder setup and shared via Arc to all 6 multi-agent tools. Each tool calls methods on the runtime to spawn, communicate with, or close sub-agents.

Implementations§

Source§

impl MultiAgentRuntime

Source

pub fn new( config: MultiAgentConfig, client: Arc<dyn LlmClient>, business_tools: Vec<Arc<dyn Tool>>, root_cancel: CancellationToken, error_recovery: Option<Arc<dyn ToolErrorRecovery>>, language: Language, ) -> Self

Create a new multi-agent runtime.

This is called internally by the builder. Tools receive an Arc<Self>.

Source

pub fn set_event_sender(&self, tx: UnboundedSender<RuntimeEvent>)

Set the event sender for bridging child events to parent.

Called by the builder after creating the bridge channel.

Source

pub async fn spawn_child( &self, name: &str, system_prompt: String, depth: i32, tool_count: usize, ) -> Result<String, String>

Spawn a child agent at the given path with a specific system prompt.

This is called by the spawn_agent tool. It:

  1. Checks spawn limits
  2. Registers the agent in the registry
  3. Creates a mailbox
  4. Builds a child AgentRuntime
  5. Spawns a tokio task for the child’s event loop
  6. Returns the AgentPath
§Errors

Returns a string error message if spawning fails (limits exceeded, etc.).

Source

pub fn send_message( &self, agent_path: &str, message: String, ) -> Result<bool, String>

Send a message to a child agent (no execution trigger).

Called by send_message tool.

Source

pub fn send_task( &self, agent_path: &str, task: String, interrupt: bool, ) -> Result<bool, String>

Send a task to a child agent (triggers execution).

Called by followup_task tool. Updates status to Running.

Source

pub async fn wait_for_result( &self, agent_path: Option<&str>, timeout_ms: u64, ) -> WaitResult

Wait for a result from any or a specific child agent.

Called by wait_agent tool. Blocks until a result arrives or timeout.

Source

pub fn close_agent(&self, agent_path: &str) -> Result<CloseResult, String>

Close a child agent.

Called by close_agent tool. Cancels the child’s task, removes from registry, and posts a Closed result.

Source

pub fn list_agents(&self) -> Vec<AgentInfo>

List all active sub-agents.

Called by list_agents tool.

Source

pub fn mailbox(&self) -> &Arc<MailboxHub>

Get the mailbox hub (for tools that need it directly).

Source

pub fn registry(&self) -> &Mutex<AgentRegistry>

Get reference to the registry.

Source

pub fn cancel_all(&self)

Cancel all child agents.

Trait Implementations§

Source§

impl Drop for MultiAgentRuntime

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

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> 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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + 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: Sized + 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