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§
Provided Methods§
Sourcefn register(
&self,
_catalog: &mut Catalog,
_runtime: &RuntimeContext,
) -> Result<()>
fn register( &self, _catalog: &mut Catalog, _runtime: &RuntimeContext, ) -> Result<()>
Adds tools to the catalog while the agent is created.
Sourcefn prompt_section(
&self,
_runtime: &RuntimeContext,
) -> Result<Option<PromptSection>>
fn prompt_section( &self, _runtime: &RuntimeContext, ) -> Result<Option<PromptSection>>
Contributes one immutable system-prompt section while the agent is created.
Sourcefn frontend(&self) -> FrontendContribution
fn frontend(&self) -> FrontendContribution
Declares commands and status data that any frontend may render.
Sourcefn render(&self, _event: &EventMsg, _session_id: &str) -> Option<FrontendBlock>
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.
Sourcefn command<'a>(
&'a self,
context: MiddlewareCommandContext<'a>,
) -> BoxFuture<'a, Result<MiddlewareCommandOutput>>
fn command<'a>( &'a self, context: MiddlewareCommandContext<'a>, ) -> BoxFuture<'a, Result<MiddlewareCommandOutput>>
Handles a command declared by this middleware’s frontend contribution.
Sourcefn session_start<'a>(
&'a self,
_context: &'a mut SessionStartContext<'_>,
) -> BoxFuture<'a, Result<()>>
fn session_start<'a>( &'a self, _context: &'a mut SessionStartContext<'_>, ) -> BoxFuture<'a, Result<()>>
Starts or re-enters a session lifecycle.
Sourcefn handles_messages(&self) -> bool
fn handles_messages(&self) -> bool
Reports whether this middleware is the session’s conversation-message preparer.
Sourcefn route_message(
&self,
_context: &mut MessageRouteContext<'_>,
) -> Result<SubmissionResult>
fn route_message( &self, _context: &mut MessageRouteContext<'_>, ) -> Result<SubmissionResult>
Validates and prepares one conversation message for its lifecycle boundary.
Sourcefn message_boundary_events(&self, _submission_id: &str) -> Vec<EventMsg>
fn message_boundary_events(&self, _submission_id: &str) -> Vec<EventMsg>
Produces capability UI cleanup when one queued message reaches its boundary.
Sourcefn message_submit<'a>(
&'a self,
_context: &'a mut MessageSubmitContext<'_>,
) -> BoxFuture<'a, Result<()>>
fn message_submit<'a>( &'a self, _context: &'a mut MessageSubmitContext<'_>, ) -> BoxFuture<'a, Result<()>>
Intercepts a prepared conversation message at its delivery boundary.
Sourcefn active_command<'a>(
&'a self,
_context: &'a mut ActiveCommandContext<'_>,
) -> BoxFuture<'a, Result<Option<SubmissionResult>>>
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.
Sourcefn pre_model<'a>(
&'a self,
_context: &'a mut ModelContext<'_>,
) -> BoxFuture<'a, Result<()>>
fn pre_model<'a>( &'a self, _context: &'a mut ModelContext<'_>, ) -> BoxFuture<'a, Result<()>>
Mutates durable context before the next model request is assembled.
Sourcefn model_request<'a>(
&'a self,
_context: &'a mut ModelRequestContext<'_>,
) -> BoxFuture<'a, Result<()>>
fn model_request<'a>( &'a self, _context: &'a mut ModelRequestContext<'_>, ) -> BoxFuture<'a, Result<()>>
Applies request-only context after every durable transform has completed.
Sourcefn tool_exposure<'a>(
&'a self,
_context: &'a mut ToolExposureContext<'_>,
) -> BoxFuture<'a, Result<()>>
fn tool_exposure<'a>( &'a self, _context: &'a mut ToolExposureContext<'_>, ) -> BoxFuture<'a, Result<()>>
Hides registered tools whose capability is unavailable at this boundary.
Sourcefn pre_tool_use<'a>(
&'a self,
_context: &'a mut PreToolUseContext<'_>,
) -> BoxFuture<'a, Result<()>>
fn pre_tool_use<'a>( &'a self, _context: &'a mut PreToolUseContext<'_>, ) -> BoxFuture<'a, Result<()>>
Intercepts one normalized tool call before authorization and persistence.
Sourcefn permission_request<'a>(
&'a self,
_context: &'a mut PermissionRequestContext<'_>,
) -> BoxFuture<'a, Result<()>>
fn permission_request<'a>( &'a self, _context: &'a mut PermissionRequestContext<'_>, ) -> BoxFuture<'a, Result<()>>
Decides whether an approval request should be deferred, allowed, or denied.
Sourcefn post_tool_use<'a>(
&'a self,
_context: &'a mut PostToolUseContext<'_>,
) -> BoxFuture<'a, Result<()>>
fn post_tool_use<'a>( &'a self, _context: &'a mut PostToolUseContext<'_>, ) -> BoxFuture<'a, Result<()>>
Transforms model-visible feedback after a tool has executed.
Sourcefn pre_compact<'a>(
&'a self,
_context: &'a mut CompactContext<'_>,
) -> BoxFuture<'a, Result<()>>
fn pre_compact<'a>( &'a self, _context: &'a mut CompactContext<'_>, ) -> BoxFuture<'a, Result<()>>
Intercepts context immediately before compaction and may stop the active turn.
Sourcefn post_compact<'a>(
&'a self,
_context: &'a mut CompactContext<'_>,
) -> BoxFuture<'a, Result<()>>
fn post_compact<'a>( &'a self, _context: &'a mut CompactContext<'_>, ) -> BoxFuture<'a, Result<()>>
Intercepts the committed compacted context and may stop the active turn.
Sourcefn stop<'a>(
&'a self,
_context: &'a mut StopContext<'_>,
) -> BoxFuture<'a, Result<()>>
fn stop<'a>( &'a self, _context: &'a mut StopContext<'_>, ) -> BoxFuture<'a, Result<()>>
Decides whether a naturally stopped model should continue once more.
Sourcefn turn_end<'a>(
&'a self,
_context: &'a mut TurnEndContext<'_>,
) -> BoxFuture<'a, Result<()>>
fn turn_end<'a>( &'a self, _context: &'a mut TurnEndContext<'_>, ) -> BoxFuture<'a, Result<()>>
Observes terminal bookkeeping for a completed or aborted turn.
Sourcefn session_end<'a>(
&'a self,
_runtime: &'a RuntimeContext,
) -> BoxFuture<'a, Result<()>>
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".