Agent chat: streaming replies grow by whole words, no block cursor

Closed
TE
15d ago
+174-2

Leo (2026-10-19, nightly): remove the blinking block cursor in streaming text; text should fade in by word or chunk without layout jumps.

  • The .cv-caret live edge (a pulsing 0.5em bar after the newest character) is removed.
  • wordEdge (streamReveal.ts) caps the revealed length at a whole word: a word shows once its end has arrived and fades in as one .cv-fresh span (opacity only, so no reflow). Words over 48 chars (URLs, hashes) show as they arrive; the full text shows when the stream ends. Reduce Motion is unchanged.

Tests: RevealedMarkdown.test.tsx (committed first): deltas that split words; asserts no caret, every visible word whole, full text after the stream ends; unit cases for wordEdge.
Risk tier: low (webview rendering only, no data or protocol change).

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Streaming agent replies no longer show a blinking block cursor and now grow by whole words instead of single characters, so the text reads more naturally without layout jumps.

  • Nothing trails the newest word; the change now sits on feat-cmux-next, which already dropped the caret CSS.
  • A word fades in only once it is complete, as a single opacity-only span (no reflow).
  • Chinese, Japanese, and Korean replies grow one character at a time, since those scripts don't space words.
  • Words longer than 48 characters (URLs, hashes) still appear as they arrive; the full text shows once the stream ends.
  • Adds RevealedMarkdown.test.tsx covering mid-word deltas, whole-word visibility, CJK scripts, and long-word passthrough.