pub struct DispatchPipeline { /* private fields */ }Expand description
The dispatch pipeline processes tool calls through governance, rate limiting, circuit breaking, and karma tracking before and after the actual tool execution.
Implementations§
Source§impl DispatchPipeline
impl DispatchPipeline
Sourcepub fn new(
rate_limiter: Arc<RateLimiter>,
circuit_breakers: Arc<CircuitBreakerRegistry>,
dharma_gate: Arc<DharmaGate>,
karma_ledger: Option<Arc<KarmaLedger>>,
) -> Self
pub fn new( rate_limiter: Arc<RateLimiter>, circuit_breakers: Arc<CircuitBreakerRegistry>, dharma_gate: Arc<DharmaGate>, karma_ledger: Option<Arc<KarmaLedger>>, ) -> Self
Create a new dispatch pipeline with the given components.
Not const: the default-armed firebreak is built here (pattern
sets compile once per pipeline).
Sourcepub fn timeout_from_env() -> Option<Duration>
pub fn timeout_from_env() -> Option<Duration>
Parse the dispatch timeout from WM_DISPATCH_TIMEOUT_MS.
Unset → DEFAULT_DISPATCH_TIMEOUT; 0 → disabled; other values are
milliseconds. Invalid values fall back to the default.
Sourcepub const fn with_dispatch_timeout(self, timeout: Option<Duration>) -> Self
pub const fn with_dispatch_timeout(self, timeout: Option<Duration>) -> Self
Bound tool execution with a timeout (None disables the bound).
Sourcepub fn with_defaults() -> Self
pub fn with_defaults() -> Self
Create a pipeline with default components and no karma ledger.
Sourcepub const fn with_capability_mode(self, mode: CapabilityGateMode) -> Self
pub const fn with_capability_mode(self, mode: CapabilityGateMode) -> Self
Override the capability-gate mode (tests, deliberate strict runs).
Sourcepub fn with_gana_registry(self, registry: Arc<Mutex<GanaRegistry>>) -> Self
pub fn with_gana_registry(self, registry: Arc<Mutex<GanaRegistry>>) -> Self
Attach a GanaRegistry for co-usage tracking (Phase 6).
Sourcepub fn with_resource_rules(self, rules: Arc<ResourceRules>) -> Self
pub fn with_resource_rules(self, rules: Arc<ResourceRules>) -> Self
Attach ResourceRules (Yama) — evaluated on every dispatch.
Sourcepub fn with_write_gate(self, gate: Arc<WriteGate>) -> Self
pub fn with_write_gate(self, gate: Arc<WriteGate>) -> Self
Attach the write gate (V8 S5 stage 2c) — runs between resource rules and the rate limiter: junk filter, dedup short-circuit, and class plausibility ceilings/floors on the memory-create path.
Sourcepub fn with_write_audit(self, journal: Arc<WriteAuditJournal>) -> Self
pub fn with_write_audit(self, journal: Arc<WriteAuditJournal>) -> Self
Attach a write-audit journal — every dispatch appends a journal entry recording declared vs actual store mutations.
Sourcepub fn with_flight_recorder(self, recorder: Option<Arc<FlightRecorder>>) -> Self
pub fn with_flight_recorder(self, recorder: Option<Arc<FlightRecorder>>) -> Self
Attach a flight recorder (Q35b replay capture). OFF by default.
Capture point matches args_digest (post-gate, pre-call) so the
sidecar is always digest-aligned with the journal.
Sourcepub fn with_secret_scan_option(self, scanner: Option<SharedSampler>) -> Self
pub fn with_secret_scan_option(self, scanner: Option<SharedSampler>) -> Self
Replace the default secret scanner — None disables output
sampling entirely for this pipeline (tests, special constructions).
Sourcepub fn secret_scan(&self) -> Option<&SecretSampler>
pub fn secret_scan(&self) -> Option<&SecretSampler>
The secret scanner attached to this pipeline (if any).
Sourcepub fn with_sandbox_executor(
self,
executor: Option<Arc<ScopedSandboxExecutor>>,
) -> Self
pub fn with_sandbox_executor( self, executor: Option<Arc<ScopedSandboxExecutor>>, ) -> Self
Attach the scoped-thread sandbox executor (P-SANDBOX-3). When
attached, tools declaring Sandbox::StoreScoped run on a confined
fresh thread; everything else keeps the ambient path.
Sourcepub fn sandbox_executor(&self) -> Option<&ScopedSandboxExecutor>
pub fn sandbox_executor(&self) -> Option<&ScopedSandboxExecutor>
The sandbox executor attached to this pipeline (if any).
Sourcepub fn with_subprocess_sandbox(
self,
sandbox: Option<Arc<SubprocessSandbox>>,
) -> Self
pub fn with_subprocess_sandbox( self, sandbox: Option<Arc<SubprocessSandbox>>, ) -> Self
Attach the subprocess spawn sandbox registry (B2). When attached,
Sandbox::Subprocess tools receive a runner-backed spawn policy in
their context; anything short of an active runner loud-degrades.
Sourcepub fn subprocess_sandbox(&self) -> Option<&SubprocessSandbox>
pub fn subprocess_sandbox(&self) -> Option<&SubprocessSandbox>
The subprocess spawn sandbox registry attached to this pipeline.
Sourcepub fn with_firebreak(self, firebreak: Arc<Firebreak>) -> Self
pub fn with_firebreak(self, firebreak: Arc<Firebreak>) -> Self
Attach a firebreak with an explicit arm state (tests, special
constructions) — see Self::with_firebreak_option.
Sourcepub fn with_firebreak_option(self, firebreak: Option<Arc<Firebreak>>) -> Self
pub fn with_firebreak_option(self, firebreak: Option<Arc<Firebreak>>) -> Self
Replace the default-armed firebreak — None disarms it entirely
for this pipeline (the WM_FIREBREAK=0 env kill-switch operates
inside wm_governance::Firebreak::promoted and is the normal
off switch; this builder is for tests and special constructions).
Sourcepub fn firebreak(&self) -> Option<&Firebreak>
pub fn firebreak(&self) -> Option<&Firebreak>
The firebreak attached to this pipeline (if any).
Sourcepub fn with_write_audit_option(
self,
journal: Option<Arc<WriteAuditJournal>>,
) -> Self
pub fn with_write_audit_option( self, journal: Option<Arc<WriteAuditJournal>>, ) -> Self
Optional variant of Self::with_write_audit — read-only servers
pass None because journaling is itself an LMDB write.
Sourcepub fn resource_rules(&self) -> Option<&ResourceRules>
pub fn resource_rules(&self) -> Option<&ResourceRules>
The resource rules attached to this pipeline (if any).
Sourcepub fn write_audit(&self) -> Option<&WriteAuditJournal>
pub fn write_audit(&self) -> Option<&WriteAuditJournal>
The write-audit journal attached to this pipeline (if any).
Sourcepub async fn dispatch(
&self,
tool: &dyn Tool,
ctx: &mut Context,
args: Args,
) -> Result<Output>
pub async fn dispatch( &self, tool: &dyn Tool, ctx: &mut Context, args: Args, ) -> Result<Output>
Dispatch a tool call through the full pipeline.
Sourcepub async fn dispatch_by_name(
&self,
registry: &ToolRegistry,
name: &str,
ctx: &mut Context,
args: Args,
) -> Result<Output>
pub async fn dispatch_by_name( &self, registry: &ToolRegistry, name: &str, ctx: &mut Context, args: Args, ) -> Result<Output>
Dispatch a tool by name, looking it up in a registry.
Convenience method that combines registry lookup with pipeline dispatch.
Returns NotFound if the tool isn’t registered.
Sourcepub fn rate_limiter(&self) -> &RateLimiter
pub fn rate_limiter(&self) -> &RateLimiter
Access the rate limiter.
Sourcepub fn circuit_breakers(&self) -> &CircuitBreakerRegistry
pub fn circuit_breakers(&self) -> &CircuitBreakerRegistry
Access the circuit breaker registry.
Sourcepub fn dharma_gate(&self) -> &DharmaGate
pub fn dharma_gate(&self) -> &DharmaGate
Access the Dharma gate.
Sourcepub fn karma_ledger(&self) -> Option<&KarmaLedger>
pub fn karma_ledger(&self) -> Option<&KarmaLedger>
Access the karma ledger (if configured).
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for DispatchPipeline
impl !UnwindSafe for DispatchPipeline
impl Freeze for DispatchPipeline
impl Send for DispatchPipeline
impl Sync for DispatchPipeline
impl Unpin for DispatchPipeline
impl UnsafeUnpin for DispatchPipeline
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>, which can then be
downcast into Box<dyn 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>, which 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> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<T> Fruit 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