Skip to main content

Middleware

Trait Middleware 

Source
pub trait Middleware: Send + Sync {
Show 23 methods // Required method fn name(&self) -> &'static str; // Provided methods fn register( &self, _catalog: &mut Catalog, _runtime: &RuntimeContext, ) -> Result<()> { ... } fn prompt_section( &self, _runtime: &RuntimeContext, ) -> Result<Option<PromptSection>> { ... } fn frontend(&self) -> 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( &self, _context: &mut MessageRouteContext<'_>, ) -> 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 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<()>> { ... }
}
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 register( &self, _catalog: &mut Catalog, _runtime: &RuntimeContext, ) -> Result<()>

Adds tools to the catalog while the agent is created.

Source

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

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

Source

fn frontend(&self) -> FrontendContribution

Declares commands and status data that any frontend may render.

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( &self, _context: &mut MessageRouteContext<'_>, ) -> Result<SubmissionResult>

Validates and prepares one conversation message for its lifecycle boundary.

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 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.

Dyn Compatibility§

This trait is dyn compatible.

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

Implementors§