Skip to main content

AgentSupervisor

Struct AgentSupervisor 

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

Manages a pool of agents with lifecycle operations.

Responsibilities:

  • Spawn / terminate agents
  • Persist snapshots via SnapshotStore
  • Broadcast lifecycle events
  • Supervise: auto-restart on failure (configurable)

Implementations§

Source§

impl AgentSupervisor

Source

pub fn new( resolver: Arc<dyn ProviderResolver>, snapshot_store: Arc<dyn SnapshotStore>, ) -> Self

Create a new supervisor.

Source

pub fn with_policy( resolver: Arc<dyn ProviderResolver>, snapshot_store: Arc<dyn SnapshotStore>, policy: SupervisorPolicy, ) -> Self

Create with a specific restart policy.

Source

pub fn with_agent_decorator( self, oxicode: Arc<Oxicode>, decorator: Arc<dyn AgentDecorator>, ) -> Self

Attach an crate::Oxicode reference and an crate::observability::AgentDecorator to this supervisor. Subsequent Self::spawn calls will route through Oxicode::agent(config) + decorator.decorate() instead of the bare Agent::new() fast path, so the decorator’s audit / authorizer / tracer / cost hooks actually run on every spawned agent.

Both must be supplied together — the decorator is only effective when the supervisor has an Oxicode to bind the builder against.

Source

pub fn subscribe(&self) -> Receiver<AgentLifecycleEvent>

Subscribe to lifecycle events from all agents.

Source

pub fn spawn(&self, config: AgentConfig) -> Result<AgentHandle>

Spawn a new agent.

When the supervisor was configured with both an Oxicode reference and an crate::observability::AgentDecorator (via with_agent_decorator or crate::builder::SupervisorBuilder::with_agent_decorator), this routes through Oxicode::agent(config) and lets the decorator apply audit / authorizer / tracer / cost hooks before .build(). Otherwise it takes the legacy fast path (Agent::new(provider, config, tools)), which leaves observability unset.

Source

pub fn spawn_child( &self, parent_id: &str, config: AgentConfig, ) -> Result<AgentHandle>

Spawn a child agent linked to a parent (delegation lineage).

Source

pub fn get(&self, agent_id: &str) -> Option<AgentHandle>

Get a handle by agent ID.

Source

pub fn list(&self) -> Vec<(String, AgentStatus)>

List all agents and their status.

Source

pub fn count_by_status(&self) -> HashMap<AgentStatus, usize>

Count agents by status.

Source

pub async fn suspend(&self, agent_id: &str) -> Result<AgentSnapshot>

Suspend and persist snapshot.

Source

pub async fn restore(&self, agent_id: &str) -> Result<AgentHandle>

Restore agent from persisted snapshot.

Source

pub async fn restore_from_snapshot( &self, snapshot: AgentSnapshot, ) -> Result<AgentHandle>

Restore from an in-memory snapshot.

Source

pub fn terminate(&self, agent_id: &str) -> Result<()>

Terminate an agent and remove from the pool.

Source

pub fn can_restart(&self, agent_id: &str) -> bool

Check whether an agent can be auto-restarted based on the policy.

Returns true if:

  • max_restarts > 0
  • The number of restarts within the window is less than max_restarts
Source

pub async fn restart(&self, agent_id: &str) -> SdkResult<AgentHandle>

Restart a failed agent with the same config.

Records the restart in the restart log and applies backoff delay. Returns the new handle on success.

Trait Implementations§

Source§

impl Clone for AgentSupervisor

Source§

fn clone(&self) -> AgentSupervisor

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. 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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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