.NET: [Bug]: AddAGUIServer's JSON setup writes null optional fields (rejected by @ag-ui/client) and cannot serialize interrupts
Los mantenedores suelen responder en 1 día
@javiercn ya está trabajando en esto.
Desde el 2/10/2026.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
Description
MapAGUIServer writes a stream that the official AG-UI TypeScript client (@ag-ui/client 1.0.1, used by CopilotKit 1.76) rejects. Separately, any interrupt makes the run end in RUN_ERROR. Both defects come from ConfigureAGUIJsonOptions in Microsoft.Agents.AI.Hosting.AGUI.AspNetCore, which AddAGUIServer() registers:
// Microsoft.Agents.AI.Hosting.AGUI.AspNetCore.ConfigureAGUIJsonOptions (1.23.0-preview.260928.1, decompiled)
public void Configure(JsonOptions options)
{
var chain = options.SerializerOptions.TypeInfoResolverChain;
chain.Add(AgentAbstractionsJsonUtilities.DefaultOptions.TypeInfoResolver);
chain.Add(((JsonSerializerContext)AGUIJsonSerializerContext.Default).Options.TypeInfoResolver);
}
1. Optional event fields are written as null, and the official client rejects them.
- Cause: the method appends the raw
AGUIJsonSerializerContextresolver.AGUI.AbstractionsdocumentsAGUIJsonUtilities.DefaultTypeInfoResolver(that context plusOmitPropertiesWithoutAValue) as the resolver to use instead. - What happens:
RUN_STARTEDgoes out with"parentRunId": nulland"input": null, and interrupts carry"subagentRunId": null.@ag-ui/client's schema validation fails on the first event, so no run can be followed from a browser. - Expected: optional fields without a value are omitted, as
AGUIJsonUtilities.DefaultTypeInfoResolverdoes.
2. Interrupts cannot be serialized.
- Cause: the method never calls
AGUIJsonUtilities.RegisterInterruptContentTypes. - What happens: an agent that yields
InterruptRequestContentmakes the server fail the run. The same happens when the response update containing one is serialized, for example forrawEvent. The client receivesRUN_ERROR("An error occurred while streaming the agent response.") instead of aRUN_FINISHEDwhose outcome is an interrupt. - Expected:
AddAGUIServer()registers the interrupt content types, so the protocol's own interrupt/resume works out of the box.
Steps to reproduce
- Use
builder.Services.AddAGUIServer();andapp.MapAGUIServer("/agui", agent);with anyChatClientAgent. - POST a run and read the stream with
@ag-ui/client'sHttpAgent. You get a ZodError onRUN_STARTED(defect 1). - Have the agent's chat client yield
new ChatResponseUpdate(ChatRole.Assistant, [new InterruptRequestContent("ask-1") { Reason = "input_required", Message = "?" }]). The run ends inRUN_ERROR(defect 2).
Code Sample
```csharp
// Workaround we use today; with it, both cases work end to end with @ag-ui/client and CopilotKit.
builder.Services.AddAGUIServer();
builder.Services.Configure<Microsoft.AspNetCore.Http.Json.JsonOptions>(o =>
AGUIJsonUtilities.RegisterInterruptContentTypes(o.SerializerOptions));
builder.Services.PostConfigure<Microsoft.AspNetCore.Http.Json.JsonOptions>(o =>
o.SerializerOptions.TypeInfoResolverChain.Insert(0, AGUIJsonUtilities.DefaultTypeInfoResolver));
```
Error Messages / Stack Traces
```
// 1 — @ag-ui/client 1.0.1 on RUN_STARTED:
ZodError: parentRunId: expected string, received null; input: expected object, received null
// 2 — server, when an InterruptRequestContent is serialized:
System.NotSupportedException: Runtime type 'AGUI.Abstractions.InterruptRequestContent' is not supported by polymorphic type 'Microsoft.Extensions.AI.AIContent'.
```
Package Versions
Microsoft.Agents.AI.Hosting.AGUI.AspNetCore: 1.23.0-preview.260928.1, Microsoft.Agents.AI: 1.23.0, Microsoft.Agents.AI.Hosting: 1.23.0-preview.260928.1, AGUI.Abstractions: 1.0.0, AGUI.Server: 1.0.0, Microsoft.Extensions.AI.Abstractions: 10.10.1
.NET Version
.NET 10 (SDK 10.0.401)
Additional Context
- Version scope: 1.22.0-preview.260918.1 has the same
ConfigureAGUIJsonOptions, and it also targetsAGUI.*0.0.6. - Suggested fix: in
ConfigureAGUIJsonOptions.Configure, insertAGUIJsonUtilities.DefaultTypeInfoResolver(rather than adding the raw context) and callAGUIJsonUtilities.RegisterInterruptContentTypes(options.SerializerOptions).
- Lenguaje dominante
- Python
- Estrellas
- 13.9k
- Forks
- 2.4k
- Merge medio
- 1 d 16 h
- PR fusionados (30 d)
- 432
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de microsoft/agent-framework
-
.NET: Proposal: add an llms.txtAbierto.NET python triage
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
microsoft/agent-framework#9092 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Python: raw-data content mappings lose annotations and attachment metadataPosiblemente ocupada @moonbox3 la tomó hace 6 días. Abiertopython triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
microsoft/agent-framework#8632 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Python: Clarify when to use platformPosiblemente ocupada @eavanvalkenburg la tomó hace 6 días. Abiertopython triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
microsoft/agent-framework#8599 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
.NET Compaction - Update docs to refer to `AIContextProvider` deep divePosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto.NET compaction documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
microsoft/agent-framework#4629 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Python: [Bug]: Public stream close does not release delegated provider responsesPosiblemente ocupada @eavanvalkenburg la tomó hoy. Abiertoag-ui python reproduced
microsoft/agent-framework#9099 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 1 día
Todos los issues de microsoft/agent-framework
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Juniper/ansible-junos-stdlib#904 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
pollen-robotics/reachy_mini#1457 ·
Los mantenedores suelen responder en 1 día
-
area:runtime good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
WATonomous/wato_f1tenth#39 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
FireDynamics/fdsreader#123 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100