Provider wall-clock duration in ms.
Progress: one provider has returned. Carries no record content — the provider's hits have not been
through the permission pass yet. Results arrive in fused and final.
Friendly provider name that just returned (Vector / FullText / Entity / Storage / external).
How many hits this provider returned, capped at the caller's MaxResults. Counted before fusion, the
permission pass and any audience pass, like SearchResult.SourceCounts — so don't show it to a room.
Always empty: a provider's hits arrive before the permission pass, so the stream never
carries them. Use resultCount for progress and the final event for results.
RRF-fused list across providers (and across scopes when applicable).
Reranker class name (Cohere / Voyage / BGE / Noop / etc.)
Reranker-permuted list. Same items as 'fused', new order.
Total wall-clock duration of the stream.
Post-deduplication, post-permission, post-enrich result set — what Search() would have returned.
Same shape as the synchronous SearchResult.SourceCounts.
Human-readable error message (do NOT include stack traces).
OptionalproviderName?: stringProvider that failed, if scoped to one.
Discriminated union emitted by
SearchEngine.streamSearch()as each pipeline stage produces output. Consumers should treat unknown phases as no-ops to remain forward-compatible with future stages (e.g. a 'permission-filtered' phase added later).