Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

.NET: [Bug]: AddAGUIServer's JSON setup writes null optional fields (rejected by @ag-ui/client) and cannot serialize interrupts

Đã đóng
#8,962 4 bình luận 1 reaction 1 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@javiercn đang làm issue này rồi.

Từ ngày 2/10/2026.

  • #7920 của @atty57 — đang mở

Đánh giá

Issue này chưa được đánh giá.

Mô tả

.NET ag-ui hosting reproduced
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 AGUIJsonSerializerContext resolver. AGUI.Abstractions documents AGUIJsonUtilities.DefaultTypeInfoResolver (that context plus OmitPropertiesWithoutAValue) as the resolver to use instead.
  • What happens: RUN_STARTED goes out with "parentRunId": null and "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.DefaultTypeInfoResolver does.

2. Interrupts cannot be serialized.

  • Cause: the method never calls AGUIJsonUtilities.RegisterInterruptContentTypes.
  • What happens: an agent that yields InterruptRequestContent makes the server fail the run. The same happens when the response update containing one is serialized, for example for rawEvent. The client receives RUN_ERROR ("An error occurred while streaming the agent response.") instead of a RUN_FINISHED whose 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

  1. Use builder.Services.AddAGUIServer(); and app.MapAGUIServer("/agui", agent); with any ChatClientAgent.
  2. POST a run and read the stream with @ag-ui/client's HttpAgent. You get a ZodError on RUN_STARTED (defect 1).
  3. Have the agent's chat client yield new ChatResponseUpdate(ChatRole.Assistant, [new InterruptRequestContent("ask-1") { Reason = "input_required", Message = "?" }]). The run ends in RUN_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 targets AGUI.* 0.0.6.
  • Suggested fix: in ConfigureAGUIJsonOptions.Configure, insert AGUIJsonUtilities.DefaultTypeInfoResolver (rather than adding the raw context) and call AGUIJsonUtilities.RegisterInterruptContentTypes(options.SerializerOptions).
Ngôn ngữ chính
Python
Star
14.2k
Fork
2.5k
Merge trung bình
2 ngày 11 giờ
Pull request đã merge (30 ngày)
407

Chuẩn bị môi trường

Mở trong Codespaces

Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của microsoft/agent-framework

Tất cả issue của microsoft/agent-framework

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.