💭 feat: Bring the Streaming Thought Peek Back Under a Collapsed Live Card - #16394
Merged
Merged
Conversation
danny-avila
force-pushed
the
danny-avila/live-card-thought-peek
branch
from
September 26, 2026 12:51
c239042 to
73616d0
Compare
Contributor
|
Head |
danny-avila
added this pull request to stack #16396
September 26, 2026 14:10
danny-avila
force-pushed
the
danny-avila/live-card-thought-peek
branch
from
September 27, 2026 00:17
6f74671 to
d77d397
Compare
Contributor
|
Head |
danny-avila
force-pushed
the
danny-avila/live-card-thought-peek
branch
2 times, most recently
from
September 27, 2026 01:46
cf23886 to
48eabb5
Compare
danny-avila
marked this pull request as ready for review
September 27, 2026 01:47
danny-avila
force-pushed
the
danny-avila/live-card-thought-peek
branch
from
September 27, 2026 01:56
48eabb5 to
19fe233
Compare
Base automatically changed from
danny-avila/expanded-live-header-label
to
dev
September 27, 2026 01:59
…Card #14546 previewed streaming reasoning as its trailing sentences in a short fading window under the thought's header. The live fold (#16118) put that thought inside a collapsed card, which unmounts its rows, so the peek went with them and one throttled sentence on the header stood for a paragraph of live reasoning. A collapsed live card whose tail is a streaming thought now renders the same peek under its header, outside the fold, in the cursor's place. It gives way to the rows when the card opens and to the cursor when a call, not a thought, is at the tail.
A mock-lane scenario streams three sentences of reasoning at a readable pace; the spec samples the collapsed card's header and asserts every line was the generic one or a whole sentence, sees the thought peek under the card, opens the card mid-stream and checks the header became a title, then checks the settled thought's header sits at the shared row scale. The peek strips the thought's tags itself: handed the stream straight from a live card, it had shown a literal `<think>` before the first words.
danny-avila
force-pushed
the
danny-avila/live-card-thought-peek
branch
from
September 27, 2026 01:59
19fe233 to
35653f7
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.
Summary
#14546 (Marco) previewed streaming reasoning as its trailing few sentences in a short, bottom-pinned window whose edges fade, under the thought's header. The live activity fold (#16118) folds a reasoning-bearing span into a collapsed card, and a collapsed card unmounts its rows, so that peek disappeared with them: one throttled sentence on the header was all that stood for a paragraph of live reasoning.
A collapsed live card whose tail is a streaming thought now renders the same
StreamingThoughtPeekunder its header, outside the fold, where the cursor dot used to sit (moving text is its own sign the run is alive). It gives way to the rows when the card opens, and to the cursor when a call rather than a thought is at the tail. Together with the finished-sentence header (#16392) this restores the "thinking out loud" treatment.Stacked on #16393 and targets its branch. Last in the stack.
Type of change
Testing
Ran the real app on the mock e2e lane with a new fake-model scenario,
E2E_SLOW_THINK_REPLY, that streams three sentences of reasoning at 120ms per word. Sampled the collapsed card every 150ms: every header line was either "Thinking…" or a whole sentence, the fading thought peek sat under the card, and opening the card mid-stream turned the header into "Thinking…" over the Thoughts row with the peek gone. The settled thought's header measured at 0.9× the markdown size, the same as every other row. This run is what caught the peek showing a literal<think>when fed straight from the stream, fixed here.Automated tests:
New
e2e/specs/mock/activity-thought.spec.ts(the run above);activity-fold.spec.tsstill passes on this headActivityPhaseGroup.test.tsx: the peek renders under a collapsed live card in the cursor's place and outside the panel; it is gone once the card is open; a call at the tail keeps the cursor insteadcd client && npx jest ActivityPhaseGroup LiveParity ContentParts.integration ReasoningCompact— 191 testsnpx tsc --noEmitinclient: no errors in touched filesBefore / after screenshot
Captured with the card collapsed at the same completed-sentence checkpoint. After, the fading streaming-thought peek is restored beneath the header.
73e8444a82ac(before) →6f74671faeff(after).