Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

StreamProcessor drops TEXT_MESSAGE_CHUNK events without a warning

オープン
#1,531 コメント 0 件 リアクション 0 件 担当者 1 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@AlemTuzlak がすでに取り組んでいます。

2026年9月27日 から。

評価

この issue はまだ評価されていません。

説明

waiting-on: maintainer
TanStack AI version

v0.61.0

Framework/Library version

React v19.2.0

Describe the bug and the steps to reproduce it

StreamProcessor has no handler for TEXT_MESSAGE_CHUNK. The event reaches
the default branch of processChunk and the processor drops it. There is no
warning.

AG-UI defines TEXT_MESSAGE_CHUNK as a short form of the
TEXT_MESSAGE_START / TEXT_MESSAGE_CONTENT / TEXT_MESSAGE_END triad. A
server can send one chunk event instead of three events. The AG-UI spec gives
the expansion job to the client stream transformer.

Two parts of this repository say that the event is supported:

  • packages/ai/src/types.ts declares TextMessageChunkEvent and puts it in
    the AGUIEvent union. That union is the exported StreamChunk type.
  • packages/ai/src/utilities/spec-event-keys.ts gives the event an allowlist
    entry, so stripToSpec keeps messageId, role, delta, and metadata
    at the top level.

The runtime does not match this. TOOL_CALL_CHUNK and
REASONING_MESSAGE_CHUNK have the same problem.

Steps to reproduce

live:
https://codesandbox.io/p/sandbox/hvf3mx

Open the sandbox. It needs no API key and makes no network calls. The AG-UI
events are constants in src/App.js.

  1. Build a StreamProcessor.
  2. Send RUN_STARTED, then one TEXT_MESSAGE_CHUNK with a messageId, a
    delta, and a metadata.error, then RUN_ERROR.
  3. Read processor.getMessages().
  4. Do the same again with the explicit triad in place of the chunk event.

Result

The chunk event loses three things that the triad keeps:

The server sent this, and the client TEXT_MESSAGE_CHUNK START / CONTENT / END
shows the text "the run failed" lost yes
keeps the message id "msg-1" lost yes
keeps metadata.error lost yes

The assistant message is not absent. It is empty, and it has a new id:

[{ "id": "msg-1790507900666-2mxf4p", "role": "assistant", "parts": [] }]

RUN_ERROR created that message. The id msg-1 from the server is gone, so a
later event that uses msg-1 cannot find the message.

Expected result
Both forms describe the same turn. Both must produce the same message.

Notes
MESSAGES_SNAPSHOT is a plain messages[], so a reload of a saved thread
shows the correct text. The fault is visible only during a live run. A unit
test that sends the triad cannot find this fault.

processChunk already has the three handlers that an expansion needs. A
case per chunk event can call them, hold the open message id, and close the
message when the id changes or when finalizeStream runs.

Related: #1465 tried this and closed without a merge. #1460 added the AG-UI 1.0
types and left the runtime out of scope.

Your Minimal, Reproducible Example - (Sandbox Highly Recommended)

https://codesandbox.io/p/sandbox/hvf3mx

Screenshots or Videos (Optional)
Image
Do you intend to try to help solve this bug with your own PR?

None

Terms & Code of Conduct
  • I agree to follow this project's Code of Conduct
  • I understand that if my bug cannot be reliable reproduced in a debuggable environment, it will probably not be fixed and this issue may even be closed.
主要言語
TypeScript
スター
3.1k
フォーク
340
平均マージ
2日 10時間
マージ済み PR(30日)
174

環境構築

はじめの一歩

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

TanStack/ai のほかの issue

TanStack/ai の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

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

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