feat: upgrade TUI streaming to LangGraph streamEvents v3 - #29
Merged
Conversation
- Replace streamMode: updates with streamEvents(v3) for token-by-token streaming - Add typed event callback: text, tool_start, tool_event, tool_end, tool_error - Display tool call results separately from assistant message content - Update Message typedef with toolCalls and toolCallDisplay fields - Add comprehensive tests for streamEvents callback dispatch - Add coverage tests for tool_event emission and text error handling
avoidwork
force-pushed
the
feat/stream-events-tui
branch
from
May 25, 2026 17:35
21cac37 to
24ce366
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Upgrade the TUI streaming implementation to use LangGraph's
streamEventsv3 API for real-time token-by-token rendering with tool call visibility. Replaces the oldstreamMode: "updates"approach with the newer event streaming API that provides typed projections for messages and tool lifecycle events. Text now renders incrementally as tokens arrive.Type of Change
Testing
streamMode: "updates"tests intests/unit/react_agent.test.jswith 8 newstreamEventsv3 tests:tests/unit/tui.test.js:Coverage
react.js: 100% line coverage (100.00 / 58.82% branch / 100.00% functions)Checklist
npm run lintpassesChanges
src/agent/react.jscallReactAgentStreamingusesagent.streamEvents({ version: "v3" })stream.messagesfor ChatModelStream instanceschatMessage.textas async iterable, accumulating deltas and trimming before each callbacktoolschannel eventsemitToolEvent()normalizes ProtocolEvents into typed callbackssrc/tui/app.jshandleChatprocesses all event typestextevents update streaming content with\u2588cursortool_end/tool_errorevents append formatted tool results totoolCallDisplaysrc/tui/conversationPanel.jstoolCallDisplayrender tool results below contentsrc/tui/messages.jsgetToolCallLines()helper functionMessagetypedef withtoolCallsandtoolCallDisplayfields