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§
Provided Methods§
Sourcefn incompatible_middleware(&self) -> &'static [&'static str]
fn incompatible_middleware(&self) -> &'static [&'static str]
Middleware IDs that cannot share a stack with this configured capability.
Sourcefn context_limit(&self, _context_window: i64) -> Option<i64>
fn context_limit(&self, _context_window: i64) -> Option<i64>
Returns the input-token limit this capability enforces for a model context window.
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.
§Errors
Returns an error if validation or an operation required by this function fails.
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.
§Errors
Returns an error if validation or an operation required by this function fails.
Sourcefn frontend(&self, _session_id: &str) -> FrontendContribution
fn frontend(&self, _session_id: &str) -> FrontendContribution
Declares commands and status data that any frontend may render for one session.
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<'a>(
&'a self,
_context: &'a mut MessageRouteContext<'_>,
) -> BoxFuture<'a, Result<SubmissionResult>>
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.
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 prepare_compacted_input(
&self,
_original: ModelInput<'_>,
_compacted: &mut Vec<Arc<Value>>,
)
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.
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.
Sourcefn main_agent_only(&self) -> bool
fn main_agent_only(&self) -> bool
Keeps this capability out of child agents created from the root’s configuration.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".