Struct ScopedAssembly
pub struct ScopedAssembly<'a> {Show 14 fields
pub config: &'a Config,
pub agent_alias: &'a str,
pub security: &'a Arc<SecurityPolicy>,
pub built: AllToolsResult,
pub skills: &'a [Skill],
pub runtime: Arc<dyn RuntimeAdapter>,
pub caller_allowed: Option<&'a [String]>,
pub connect_mcp: bool,
pub connect_peripherals: bool,
pub exclude_memory: bool,
pub acp_delivery: bool,
pub list_deferred_mcp_specs: bool,
pub emit_assembly_logs: bool,
pub mcp_registry: Option<Arc<McpRegistry>>,
}Expand description
Inputs to ScopedToolRegistry::assemble. The eager built-ins arrive already
built (built); assemble does the policy-bearing steps the sites used to repeat.
Fields§
§config: &'a Config§agent_alias: &'a str§security: &'a Arc<SecurityPolicy>§built: AllToolsResultEager built-in tools + the channel/delegate handle bundle, consumed here.
skills: &'a [Skill]Skills loaded by the caller’s (single) loader; registered under the same gate.
runtime: Arc<dyn RuntimeAdapter>§caller_allowed: Option<&'a [String]>Documented divergence: a per-run caller allowlist. It only NARROWS, and is
threaded into BOTH the built-in filter and the MCP tool-access policy. None
on every path except run.
connect_mcp: boolDocumented divergence: ACP session/new must return promptly, so it does not
connect MCP servers - they are neither resolved nor connected; nothing is
granted.
connect_peripherals: boolDocumented divergence: loading peripherals physically connects hardware (the
daemon’s loader opens serial ports, exclusively for real devices). Listing-only
surfaces (the gateway’s /api/tools registries) MUST pass false so they never
hold devices the live turn paths need; execution surfaces pass true.
exclude_memory: boolDocumented divergence: ACP excludes persistent memory tools.
acp_delivery: booldeliver_file hands the client a typed file attachment that only an
ACP-capable turn actually transports (the model history, WS, and RPC
paths all drop the artifact). Every non-ACP assembly passes false so
the tool is absent rather than returning a false success on a channel
that cannot deliver it. Only the ACP turn path passes true.
list_deferred_mcp_specs: bool§emit_assembly_logs: bool§mcp_registry: Option<Arc<McpRegistry>>Pre-built MCP registry supplied by the caller. The daemon heartbeat
worker constructs this once at worker start and shares it across
every tick so that stdio MCP children live for the daemon’s
lifetime rather than being orphaned and re-spawned per
agent::run call. When Some, assemble MUST use this
Arc<McpRegistry> and MUST NOT call McpRegistry::connect_all
itself. None preserves the legacy per-call connect path
(CLI / one-shot / process_message), which is correct for
callers that have no cross-turn reuse contract.
Auto Trait Implementations§
impl<'a> !RefUnwindSafe for ScopedAssembly<'a>
impl<'a> !UnwindSafe for ScopedAssembly<'a>
impl<'a> Freeze for ScopedAssembly<'a>
impl<'a> Send for ScopedAssembly<'a>
impl<'a> Sync for ScopedAssembly<'a>
impl<'a> Unpin for ScopedAssembly<'a>
impl<'a> UnsafeUnpin for ScopedAssembly<'a>
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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