1.0.0-beta.9 (2026-10-15)
Features Added
- Hosted durable multi-turn task IDs are now scoped by
FOUNDRY_AGENT_SESSION_GUID, preventing
recreated sessions from reusing name-derived IDs that refer to tombstoned tasks from an earlier
incarnation and can cause a service precondition failure (HTTP 412).
PublicResponseContext.ConversationChainIdvalues and one-shot task IDs are unchanged, and
pending, in-progress, or suspended pre-rollout chains continue under their legacy task IDs. - Added
AddResponsesServer(IHostApplicationBuilder host, string sectionName)and
AddResponsesServer(IHostApplicationBuilder host, string sectionName, Action<ResponsesServerSettings>),
which bind a newResponsesServerSettings : ClientSettings(the Foundry credential,Endpoint,
and option flags) from a single configuration section. Because response storage and
resilient-task storage bind the same identity and endpoint from one section, the two cannot
diverge. This is the required entry point in hosted Foundry environments. In a hosted
container, values the section does not provide default to the platform:Endpointto
FOUNDRY_PROJECT_ENDPOINT, and an absentCredentialsection to aDefaultAzureCredential
limited by default to the production credentials (environment, workload identity and managed
identity;AZURE_TOKEN_CREDENTIALSoverrides the selection), so
ResponsesServer.Run<THandler>()needs no configuration. ACredentialsection that does not
resolve still fails startup. - Added
ResponseContext.ClientCancellation(aCancellationToken) alongside
ResponseContext.Shutdown, so an explicit client cancel is composable as a token.
Breaking Changes
- Stored responses use Core durable tasks only when the resilient-task runtime is enabled.
ResilientBackground=trueenables it automatically; otherwisestore=truerequests execute
in-process and are not recovered after an ungraceful crash. - The local file-backed response provider now uses a new
responses/partitions-v1namespace.
Previously persisted responses and their history are not visible after upgrade, including
for anonymous requests and crash recovery. Legacy files remain unchanged; there is no
automatic migration or legacy read fallback. Restoring old data requires an explicit,
operator-controlled migration with independently verified ownership. Newly persisted
partitioned data continues to survive restarts. - Hosted registration now uses the
ClientSettingspattern. The
AddResponsesServer(IServiceCollection, Action<ResponsesServerOptions>)overload remains for
local / non-hosted scenarios and now throws in a hosted Foundry environment (use the
IHostApplicationBuilderoverload there). The internalDEFAULT_FETCH_HISTORY_ITEM_COUNT
environment-variable read and the ambientTokenCredentialregistration were removed
(FOUNDRY_PROJECT_ENDPOINTis now only the fallback for an unconfigured
ResponsesServer:Endpoint); the HTTPS-in-non-development check now honors
IHostEnvironment.IsDevelopment()rather than readingASPNETCORE_ENVIRONMENT/
DOTNET_ENVIRONMENTdirectly. ResponseEventStream.Checkpoint()was renamed to the virtualCreateCheckpointEvent(), and
ResponseEventStream.InternalMetadatawas renamed toPersistedMetadata.ResponseContext.ClientCancelledwas renamed toIsClientCancelled.IsShutdownRequestedand
IsClientCancelledare now get-only virtual passthroughs over theShutdown/
ClientCancellationtokens; the settableIsShutdownRequestedwas removed.
Bugs Fixed
- Legacy-chain migration now atomically requires the selected legacy task to still exist. If
deletion wins after the compatibility probe, Responses starts the session-instance-scoped task
instead of recreating the tombstoned legacy ID, including when the legacy chain is active and
accepting steering input. - Scope local in-memory and file-backed response envelopes, items, history, and conversation
indexes toPlatformContext.UserIdKey. Anonymous requests use a separate local partition. - Require an existing response in the caller's partition for updates, and retain deletion
semantics without allowing updates to recreate deleted responses. - Changed the default history fetch limit from 100 to
-1(unlimited), avoiding
automatic truncation of conversation history. Positive limits remain supported. - Hosted
ResponsesServer.RunandAgentHostBuilder.AddResponsesnow bind through the
ResponsesServersettings section instead of routing through the local-only service-collection
registration path. - Hosted
ResponsesServer.Run<THandler>()andAgentHostBuilder.AddResponsesno longer fail at
startup in a hosted Foundry container that provides only the platform environment
(FOUNDRY_PROJECT_ENDPOINTand a managed identity). Unconfigured values fall back to the
platform, and the fallback is logged at startup. A configured but unresolvableCredential
section still fails startup. - The Foundry response-storage HTTP pipeline is now private to its provider, preventing unrelated
ambient pipeline registrations from replacing the configured credential-bound pipeline. - Task-bound SSE relays now observe durable task completion failures, emit the existing SSE error
event instead of hanging, and leave the underlying stream open for recovery.
Other Changes
- Registered the Responses event-stream backing as a protocol default so an explicit
application selection takes precedence regardless of registration order. - Hosted settings now reject malformed endpoint, count, and boolean values instead of silently
falling back to defaults, and reject unsupported authentication-provider types with the actual
configured type in the error. - Hosted response storage and resilient-task storage now receive the same resolved project endpoint
as well as the same credential. - Explicit client-cancel and shutdown signals are replayed when a task context attaches after the
signal, closing the multi-turn dispatch race. - Resilient streaming publishes and subscribes through Core's task-owned stream path; observer
errors propagate to the task owner while normal completion leaves transport closure to Core.