Skip to main content

Middleware

Trait Middleware 

Source
pub trait Middleware: Send + Sync {
Show 28 methods // Required method fn name(&self) -> &'static str; // Provided methods fn incompatible_middleware(&self) -> &'static [&'static str] { ... } fn context_limit(&self, _context_window: i64) -> Option<i64> { ... } fn register( &self, _catalog: &mut Catalog, _runtime: &RuntimeContext, ) -> Result<()> { ... } fn prompt_section( &self, _runtime: &RuntimeContext, ) -> Result<Option<PromptSection>> { ... } fn frontend(&self, _session_id: &str) -> FrontendContribution { ... } fn render( &self, _event: &EventMsg, _session_id: &str, ) -> Option<FrontendBlock> { ... } fn command<'a>( &'a self, context: MiddlewareCommandContext<'a>, ) -> BoxFuture<'a, Result<MiddlewareCommandOutput>> { ... } fn session_start<'a>( &'a self, _context: &'a mut SessionStartContext<'_>, ) -> BoxFuture<'a, Result<()>> { ... } fn handles_messages(&self) -> bool { ... } fn route_message<'a>( &'a self, _context: &'a mut MessageRouteContext<'_>, ) -> BoxFuture<'a, Result<SubmissionResult>> { ... } fn message_boundary_events(&self, _submission_id: &str) -> Vec<EventMsg> { ... } fn message_submit<'a>( &'a self, _context: &'a mut MessageSubmitContext<'_>, ) -> BoxFuture<'a, Result<()>> { ... } fn active_command<'a>( &'a self, _context: &'a mut ActiveCommandContext<'_>, ) -> BoxFuture<'a, Result<Option<SubmissionResult>>> { ... } fn pre_model<'a>( &'a self, _context: &'a mut ModelContext<'_>, ) -> BoxFuture<'a, Result<()>> { ... } fn model_request<'a>( &'a self, _context: &'a mut ModelRequestContext<'_>, ) -> BoxFuture<'a, Result<()>> { ... } fn tool_exposure<'a>( &'a self, _context: &'a mut ToolExposureContext<'_>, ) -> BoxFuture<'a, Result<()>> { ... } fn pre_tool_use<'a>( &'a self, _context: &'a mut PreToolUseContext<'_>, ) -> BoxFuture<'a, Result<()>> { ... } fn permission_request<'a>( &'a self, _context: &'a mut PermissionRequestContext<'_>, ) -> BoxFuture<'a, Result<()>> { ... } fn post_tool_use<'a>( &'a self, _context: &'a mut PostToolUseContext<'_>, ) -> BoxFuture<'a, Result<()>> { ... } fn pre_compact<'a>( &'a self, _context: &'a mut CompactContext<'_>, ) -> BoxFuture<'a, Result<()>> { ... } fn prepare_compacted_input( &self, _original: ModelInput<'_>, _compacted: &mut Vec<Arc<Value>>, ) { ... } fn post_compact<'a>( &'a self, _context: &'a mut CompactContext<'_>, ) -> BoxFuture<'a, Result<()>> { ... } fn stop<'a>( &'a self, _context: &'a mut StopContext<'_>, ) -> BoxFuture<'a, Result<()>> { ... } fn turn_end<'a>( &'a self, _context: &'a mut TurnEndContext<'_>, ) -> BoxFuture<'a, Result<()>> { ... } fn session_end<'a>( &'a self, _runtime: &'a RuntimeContext, ) -> BoxFuture<'a, Result<()>> { ... } fn main_agent_only(&self) -> bool { ... } fn has_background_work<'a>( &'a self, _session_id: &'a str, ) -> BoxFuture<'a, Result<bool>> { ... }
}
Expand description

A capability contribution to the single ordered agent pipeline.

Required Methods§

Source

fn name(&self) -> &'static str

Stable ID used to reject duplicate registrations.

Provided Methods§

Source

fn incompatible_middleware(&self) -> &'static [&'static str]

Middleware IDs that cannot share a stack with this configured capability.

Source

fn context_limit(&self, _context_window: i64) -> Option<i64>

Returns the input-token limit this capability enforces for a model context window.

Source

fn register( &self, _catalog: &mut Catalog, _runtime: &RuntimeContext, ) -> Result<()>

Adds tools to the catalog while the agent is created.

§Errors

Returns an error if validation or an operation required by this function fails.

Source

fn prompt_section( &self, _runtime: &RuntimeContext, ) -> Result<Option<PromptSection>>

Contributes one immutable system-prompt section while the agent is created.

§Errors

Returns an error if validation or an operation required by this function fails.

Source

fn frontend(&self, _session_id: &str) -> FrontendContribution

Declares commands and status data that any frontend may render for one session.

Source

fn render(&self, _event: &EventMsg, _session_id: &str) -> Option<FrontendBlock>

Renders an event owned by this capability for the destination session.

Session-bound handles must only be exposed when they belong to session_id.

Source

fn command<'a>( &'a self, context: MiddlewareCommandContext<'a>, ) -> BoxFuture<'a, Result<MiddlewareCommandOutput>>

Handles a command declared by this middleware’s frontend contribution.

Source

fn session_start<'a>( &'a self, _context: &'a mut SessionStartContext<'_>, ) -> BoxFuture<'a, Result<()>>

Starts or re-enters a session lifecycle.

Source

fn handles_messages(&self) -> bool

Reports whether this middleware is the session’s conversation-message preparer.

Source

fn route_message<'a>( &'a self, _context: &'a mut MessageRouteContext<'_>, ) -> BoxFuture<'a, Result<SubmissionResult>>

Validates and prepares one conversation message for its lifecycle boundary.

§Errors

Returns an error if validation or an operation required by this function fails.

Source

fn message_boundary_events(&self, _submission_id: &str) -> Vec<EventMsg>

Produces capability UI cleanup when one queued message reaches its boundary.

Source

fn message_submit<'a>( &'a self, _context: &'a mut MessageSubmitContext<'_>, ) -> BoxFuture<'a, Result<()>>

Intercepts a prepared conversation message at its delivery boundary.

Source

fn active_command<'a>( &'a self, _context: &'a mut ActiveCommandContext<'_>, ) -> BoxFuture<'a, Result<Option<SubmissionResult>>>

Handles a capability command while a turn is active.

The active model, tool, or hook future is not polled until this returns. Implementations must keep work bounded and must not await a resource held by that active future. Return None when the command is unavailable during the active turn.

Source

fn pre_model<'a>( &'a self, _context: &'a mut ModelContext<'_>, ) -> BoxFuture<'a, Result<()>>

Mutates durable context before the next model request is assembled.

Source

fn model_request<'a>( &'a self, _context: &'a mut ModelRequestContext<'_>, ) -> BoxFuture<'a, Result<()>>

Applies request-only context after every durable transform has completed.

Source

fn tool_exposure<'a>( &'a self, _context: &'a mut ToolExposureContext<'_>, ) -> BoxFuture<'a, Result<()>>

Hides registered tools whose capability is unavailable at this boundary.

Source

fn pre_tool_use<'a>( &'a self, _context: &'a mut PreToolUseContext<'_>, ) -> BoxFuture<'a, Result<()>>

Intercepts one normalized tool call before authorization and persistence.

Source

fn permission_request<'a>( &'a self, _context: &'a mut PermissionRequestContext<'_>, ) -> BoxFuture<'a, Result<()>>

Decides whether an approval request should be deferred, allowed, or denied.

Source

fn post_tool_use<'a>( &'a self, _context: &'a mut PostToolUseContext<'_>, ) -> BoxFuture<'a, Result<()>>

Transforms model-visible feedback after a tool has executed.

Source

fn pre_compact<'a>( &'a self, _context: &'a mut CompactContext<'_>, ) -> BoxFuture<'a, Result<()>>

Intercepts context immediately before compaction and may stop the active turn.

Source

fn prepare_compacted_input( &self, _original: ModelInput<'_>, _compacted: &mut Vec<Arc<Value>>, )

Repairs or discards capability-owned projections before compacted input is committed. The original input is read-only; changes are validated before the rewrite is saved.

Source

fn post_compact<'a>( &'a self, _context: &'a mut CompactContext<'_>, ) -> BoxFuture<'a, Result<()>>

Intercepts the committed compacted context and may stop the active turn.

Source

fn stop<'a>( &'a self, _context: &'a mut StopContext<'_>, ) -> BoxFuture<'a, Result<()>>

Decides whether a naturally stopped model should continue once more.

Source

fn turn_end<'a>( &'a self, _context: &'a mut TurnEndContext<'_>, ) -> BoxFuture<'a, Result<()>>

Observes terminal bookkeeping for a completed or aborted turn.

Source

fn session_end<'a>( &'a self, _runtime: &'a RuntimeContext, ) -> BoxFuture<'a, Result<()>>

Releases session-local state when the agent runtime stops.

Source

fn main_agent_only(&self) -> bool

Keeps this capability out of child agents created from the root’s configuration.

Source

fn has_background_work<'a>( &'a self, _session_id: &'a str, ) -> BoxFuture<'a, Result<bool>>

Reports work this capability still runs for the session outside an active turn.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§