Decorator-First Streaming
Replace the cookbook's raw @Res() + manual piping with a single @AiStream() decorator. The handler just returns an AI SDK stream result.
Full Enhancer Pipeline
Guards, pipes, interceptors, and exception filters all run before the stream opens, so a pre-stream rejection is an HTTP error, never an SSE error frame.
Express + Fastify Parity
The same handler streams identically on both adapters. The package writes to the underlying Node response and hijacks Fastify's reply so the AI SDK owns the socket.
Real AbortSignal Plumbing
Inject @AiAbortSignal() and forward it into your AI SDK call. A client disconnect cancels the upstream model request so the provider stops billing — tested against real disconnects.
Pre-Stream vs In-Stream Errors
Errors before the first byte become HTTP responses through your filters. Errors during the stream become the AI SDK's documented, secret-safe error frame.
Zero Runtime Dependencies
The published package keeps "dependencies": empty. The AI SDK and NestJS packages stay peers, so your app installs only what it uses.