Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの 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 件 担当者 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時間
マージ済み PR(30日)
432

環境構築

Codespaces で開く

このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

microsoft/agent-framework のほかの issue

microsoft/agent-framework の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。