You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Concurrent-agent stream corruption - Claude, Codex, Grok, and OpenCode backends now key per-turn parser state (stream uuids, accumulated text, working dir) by agentId. One backend instance serves every agent of a provider, so two agents streaming at once no longer reset each other's stream state (no dropped deltas, stuck streaming rows, or duplicate final bubbles).
Re-fading rows on scroll - the complete-block fade is gated to once per row per page session, so scrolling a virtualized output list or an agent-switch remount keeps settled rows static.
Changed
Live markdown streaming performance - streamed markdown splits into a stable head (completed paragraphs, parsed once and memoized) and a live tail (only the current paragraph re-parses per chunk), replacing the O(n^2) full-buffer re-parse that was the top CPU sink while agents type.
Stream settle animation - the complete-block fade uses a pure CSS animation with no forced reflow, so many rows mounting on agent switch or scroll no longer layout-thrash.
Technical Details
Interface change: CLIBackend.parseEvent(rawEvent, agentId?) and breakOpenStreams(agentId?) now thread agentId so shared backend singletons keep per-agent state.
Added regression tests in src/packages/server/claude/backend.test.ts and src/packages/server/grok/json-event-parser.test.ts, plus StreamFadeText splitStableMarkdown unit tests.