Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

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

未关闭
#8,962 4 条评论 1 个 reaction 已指派 1 人 在 GitHub 查看

维护者通常 1 天内回复

@javiercn 已经在做这个了。

开始于 2026年10月2日。

评估

这个 Issue 还没有评估数据。

描述

.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).
主要语言
Python
星标
13.9k
派生
2.4k
平均合并
1 天 16 小时
30 天内合并 PR
432

环境准备

在 Codespaces 中打开

在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

microsoft/agent-framework 的其他 Issue

查看 microsoft/agent-framework 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。