Middleware interface

public interface AgentMiddleware {
  AgentResponse invoke(AgentRequest req, AgentChain next);
}
Advertisement

Composition

AgentChain chain = AgentChain.of(
    new AuthMiddleware(policy),
    new RateLimitMiddleware(limiter),
    new TracingMiddleware(tracer),
    new CostMiddleware(meter),
    myAgent
);
return chain.invoke(req);
Advertisement

Order matters

Auth before rate limit (don't limit unauthorized). Tracing before everything else (want full spans).