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
{{ message }}
Repository navigation
Two opt-in settings for how live work is shown in the chat timeline
#16422
I would like maintainer direction and scope approval before opening any PR. Both changes are
opt-in and default to off, nothing changes for existing users until they turn them on, and both
branches are already pushed and verified. Two branches, two PRs, one problem each.
T3 Code collapses live work, and that is a deliberate, good default: the timeline stays quiet
instead of flickering through every command while a turn runs. The cost is that you cannot read
the turn as it happens. The live work is one row showing the latest action, so you cannot watch
tools run in sequence, scroll back to the command from thirty seconds ago, or copy a path from a
tool call that has already been replaced. Reasoning has the same problem from the other side: it
is behind a click, and once open it does not follow its own newest lines.
Two opt-in settings
Both live under Settings > Appearance and default to false.
Expand reasoning while streaming (expandReasoningWhileStreaming). Opens the live
reasoning block as soon as the model starts thinking and folds it back to its header when the
thought ends. The option is only about opening the block; making the box follow its own newest
lines is [Bug]: Live reasoning does not scroll to the bottom while it streams (OpenCode) #16201, already reported and being fixed in fix(web): reasoning trace follows live stream to the bottom #16225. The box keeps a fixed height so it
never grows the timeline, which is what keeps the list's end-follow working; a wheel or touch
drag upward hands the box back to the reader.
Streaming transcript (streamingTranscript). Gives each live tool call and reasoning
block its own timeline row instead of folding the running turn into one row that follows the
latest action. Earlier rows stay above it, so scrolling back shows the whole action history.
Error, compaction, and notification entries keep their current handling.
They compose but each stands alone, and they change only how the live transcript is rendered, not
what is persisted, sent to providers, or shown after a turn settles. OpenChamber, a sibling
OpenCode client, behaves this way, which is what prompted this; I am not asking T3 Code to match
it by default.
The pieces already exist: the work log models collapsed live rows (work-live) and can expand a
run into its entries (work-toggle), reasoning already has its fixed-height trace body
(ReasoningTraceContent), and ClientSettings already carries preferences such as chatWidth
and responseStreamingMode. What is missing is the mode that keeps the run appended while it is
live.
Ready to open
The work is finished and verified, so both PRs can go up as soon as the direction is agreed:
Two branches, one problem each, per the one-problem rule; the second is stacked on the first
because keeping the trace open only matters when auto-expand is on.
expandReasoningWhileStreaming: web typecheck clean, 304 focused tests pass.
streamingTranscript: web typecheck clean, 308 focused tests pass.
Lint warnings identical to main, no regressions, no explanatory comments added to the code.
Tests live in apps/web/src/components/chat/MessagesTimeline.logic.test.ts and packages/contracts/src/settings.test.ts. I will attach before/after screenshots and a short
recording to each PR.
I read the scope rules in CONTRIBUTING.md and I am treating this as focused configuration of the
established work-log capability, not a new workflow. If you think either one changes product
behavior beyond that route, say so and I will adjust or drop it.
Still unsure about two things: whether the settings should stay separate or become one "live
transcript" mode, and whether they belong in Appearance or a new Chat section.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
I would like maintainer direction and scope approval before opening any PR. Both changes are
opt-in and default to off, nothing changes for existing users until they turn them on, and both
branches are already pushed and verified. Two branches, two PRs, one problem each.
The problem
T3 Code collapses live work, and that is a deliberate, good default: the timeline stays quiet
instead of flickering through every command while a turn runs. The cost is that you cannot read
the turn as it happens. The live work is one row showing the latest action, so you cannot watch
tools run in sequence, scroll back to the command from thirty seconds ago, or copy a path from a
tool call that has already been replaced. Reasoning has the same problem from the other side: it
is behind a click, and once open it does not follow its own newest lines.
Two opt-in settings
Both live under Settings > Appearance and default to
false.Expand reasoning while streaming (
expandReasoningWhileStreaming). Opens the livereasoning block as soon as the model starts thinking and folds it back to its header when the
thought ends. The option is only about opening the block; making the box follow its own newest
lines is [Bug]: Live reasoning does not scroll to the bottom while it streams (OpenCode) #16201, already reported and being fixed in fix(web): reasoning trace follows live stream to the bottom #16225. The box keeps a fixed height so it
never grows the timeline, which is what keeps the list's end-follow working; a wheel or touch
drag upward hands the box back to the reader.
Streaming transcript (
streamingTranscript). Gives each live tool call and reasoningblock its own timeline row instead of folding the running turn into one row that follows the
latest action. Earlier rows stay above it, so scrolling back shows the whole action history.
Error, compaction, and notification entries keep their current handling.
They compose but each stands alone, and they change only how the live transcript is rendered, not
what is persisted, sent to providers, or shown after a turn settles. OpenChamber, a sibling
OpenCode client, behaves this way, which is what prompted this; I am not asking T3 Code to match
it by default.
The pieces already exist: the work log models collapsed live rows (
work-live) and can expand arun into its entries (
work-toggle), reasoning already has its fixed-height trace body(
ReasoningTraceContent), andClientSettingsalready carries preferences such aschatWidthand
responseStreamingMode. What is missing is the mode that keeps the run appended while it islive.
Ready to open
The work is finished and verified, so both PRs can go up as soon as the direction is agreed:
because keeping the trace open only matters when auto-expand is on.
expandReasoningWhileStreaming: web typecheck clean, 304 focused tests pass.streamingTranscript: web typecheck clean, 308 focused tests pass.main, no regressions, no explanatory comments added to the code.apps/web/src/components/chat/MessagesTimeline.logic.test.tsandpackages/contracts/src/settings.test.ts. I will attach before/after screenshots and a shortrecording to each PR.
Related work
My first option is narrower: it opens the block only while the thought is live, so the settled
transcript keeps today's default. If you would rather this live there, say so and I will move it.
rather than changing the default.
direction is preferred the second option should probably be reconsidered rather than land
beside it.
conflicts with feat(clients): live row shows the agent's latest thought #16284, tell me and I will drop it.
Scope
I read the scope rules in CONTRIBUTING.md and I am treating this as focused configuration of the
established work-log capability, not a new workflow. If you think either one changes product
behavior beyond that route, say so and I will adjust or drop it.
Still unsure about two things: whether the settings should stay separate or become one "live
transcript" mode, and whether they belong in Appearance or a new Chat section.
All reactions