pub struct ActorChildRunner { /* private fields */ }Expand description
Spawns and drives a child session as an independent actor: a bamboo-subagent worker process.
Implementations§
Source§impl ActorChildRunner
impl ActorChildRunner
pub fn new( agent_id: String, worker_bin: PathBuf, worker_args: Vec<String>, fabric_dir: PathBuf, executor: ExecutorSpec, credentials: Vec<ScopedCredential>, default_provider: String, max_concurrent: usize, ) -> Self
Sourcepub fn with_approval_decider(
self,
decider: Arc<dyn ChildApprovalDecider>,
) -> Self
pub fn with_approval_decider( self, decider: Arc<dyn ChildApprovalDecider>, ) -> Self
Wire the host-side decider for child gated-tool approval requests (Phase 2). Without this the host fail-closed DENYs every request.
Sourcepub fn with_remote_placements(
self,
placements: HashMap<String, ResolvedRemotePlacement>,
) -> Self
pub fn with_remote_placements( self, placements: HashMap<String, ResolvedRemotePlacement>, ) -> Self
Pin specific sub-agent roles to remote resident workers (#193). The map
is keyed by role (subagent_type); a child whose role is present connects
over wss:// to the resolved endpoint instead of spawning a local
subprocess. Default (empty) keeps every role on the local path — exactly
today’s behavior.
Sourcepub fn with_schedulable_placements(
self,
placements: HashMap<String, ResolvedSchedulablePlacement>,
) -> Self
pub fn with_schedulable_placements( self, placements: HashMap<String, ResolvedSchedulablePlacement>, ) -> Self
Route specific sub-agent roles to a registry-SCHEDULED worker (#181, P2b).
The map is keyed by role (subagent_type); a child whose role is present
(and NOT already pinned by remote_placements, which takes precedence) is
run on a live worker discovered from the registry instead of a local
subprocess. Default (empty) keeps every role on the local path.
Trait Implementations§
Source§impl ExternalChildRunner for ActorChildRunner
impl ExternalChildRunner for ActorChildRunner
Source§fn should_handle<'life0, 'life1, 'async_trait>(
&'life0 self,
session: &'life1 Session,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn should_handle<'life0, 'life1, 'async_trait>(
&'life0 self,
session: &'life1 Session,
) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn set_escalation_bridge(&self, bridge: Option<HostBridge>)
fn set_escalation_bridge(&self, bridge: Option<HostBridge>)
run() installs its OWN host bridge here so the runner can hand it to each
grandchild’s drive() AT SPAWN time (captured into the drive task, not read
later), letting the grandchild re-proxy a non-bypass approval request UP to
its parent run for its whole lifetime — even when it outlives the run that
spawned it. Default no-op for runners that don’t escalate (e.g. A2A).