1.0.0-beta.8 (2026-08-12)
Features Added
- Resilient responses. Resilient background responses (
ResponsesServerOptions.ResilientBackground)
are composed directly on theAzure.AI.AgentServer.Coredurable-task and event-stream primitives
rather than a bespoke Responses-owned recovery stack, matching the Python implementation.
Interrupted background responses are automatically recovered and re-invoked in the next process
lifetime.- Resilient streaming with checkpoint/resumption: handlers persist durable snapshots at safe
boundaries viaResponseEventStream.Checkpoint()and, on a recovered entry, reconstruct the
resumption response fromResponseContext.IsRecovery/ResponseContext.PersistedResponse. - Steerable conversations (
ResponsesServerOptions.SteerableConversations) with in-turn steering:
a superseding turn enqueues and drains against the active turn, observable through
ResponseContext.IsSteeredTurnandResponseContext.PendingInputCount; fork, lock, and
queue-full conflicts map to409 Conflict. - Internal metadata is persisted for recovery and stripped on egress so it never leaks to clients.
- Fail-loud composition validation: misconfigured resilient setups fail at startup with actionable
errors instead of silently degrading. - The local default response provider is now file-based (durable) when resilient background is
enabled outside a hosted environment. - Every stored (
store=true) request now runs its handler inside a Core resilient task —
foreground or background, streaming or non-streaming — so a crashed turn is task-tracked and
recovered/marked-failed by the next-lifetime recovery scan (matching the Python resilience
contract; onlystore=falseruns inline). Streaming relays the per-response event stream
immediately, preserving standalone SSEerrorsemantics for pre-creation failures and
response.failed(notresponse.completed) for terminal persistence failures. - A streaming turn superseded by steering that reaches its terminal via the framework
completion fallback (a non-cooperative handler that lets its token trip without emitting its
own terminal) is now durably persisted ascompleted, so the client-visible
response.completedmatches the stored record and the turn is valid conversation context for
the draining steered turn (FR-053).
- Resilient streaming with checkpoint/resumption: handlers persist durable snapshots at safe
Breaking Changes
- Removed
ConversationChainMetadata,ConversationChainMetadataNamespace,
ResponseContext.ConversationChainMetadata, andResponseContextExtensions.MetadataNamespace.
Durable application state now belongs in an explicit
Azure.AI.AgentServer.Core.Storage.FoundryStateStorescoped with
ResponseContext.ConversationChainId. - Removed the public
ResponsesStreamProviderabstract class and the publicIAsyncObserver<T>
interface. SSE streaming is now composed on theAzure.AI.AgentServer.Coreevent-stream
primitive (IEventStreamRegistry/IEventStream) rather than a Responses-owned stream
provider, matching the Python implementation. The local default event-stream backing is
in-memory replay, upgraded automatically to durable file-backed replay when resilient
background is enabled outside a hosted environment.
Other Changes
- Retired the interim .NET ↔ Python resilience parity reports now that the port has
converged.