Skip to content

perf: tighten message timeline and tidy workspace sidebar#606

Merged
XDfield merged 6 commits into
devfrom
perf/timeline-dom-cleanup
Jul 16, 2026
Merged

perf: tighten message timeline and tidy workspace sidebar#606
XDfield merged 6 commits into
devfrom
perf/timeline-dom-cleanup

Conversation

@XDfield

@XDfield XDfield commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Shed per-message DOM and tighten gaps in the session timeline; compute each assistant message's duration from its prior anchor, smooth empty-turn gaps during SSE streaming, and keep the "thinking" shimmer visible whenever the latest message lacks renderable content.
  • Replace the workspace sidebar search input with a full-width "create workspace" trigger (icon + label) and reword the empty-state hints to point users at the home-page guide and online idle workspaces.

Test plan

  • Open a long session and confirm assistant durations render per-message (not all identical) and the timeline has no stray gaps during streaming.
  • Verify the "thinking" indicator stays visible between steps and hides once visible content streams in.
  • Open the workspace sidebar: search input is gone, create button spans full width with icon + label, and the device popover still opens with manage/refresh actions.
  • Empty device list shows the new home-page guidance copy; empty running list shows the "online idle workspace" hint.

DoSun and others added 6 commits July 16, 2026 18:08
Drop the gap-3 that was forcing 12px between every message and only
apply mt-3 at turn boundaries (user messages after the first), so
assistants sit tight against their parent user message again.

Strip per-message wrappers in TimelineMessage: the fake scroll-content
slot, the interaction shim, and the duplicate container around the
assistant slot are gone. The assistant branch now reuses the
session-turn-assistant-content slot directly. Drop createAutoScroll
from TimelineMessage entirely — it was creating a store, two effects,
and a ResizeObserver per message for a scroll viewport that lives on
the outer ScrollView. Also drop the now-unused MessageTransition
wrapper and dead queued memo in MessageTimeline.

Co-Authored-By: CoStrict <noreply@costrict.ai>
Assistant messages stamp time.created === time.completed at finalization,
so completed - created is always 0. Walk backwards from each assistant to
the previous message's anchor (prior assistant's completed, or the user
message's created) so consecutive assistants show distinct durations
instead of a shared turn value or zero.

Co-Authored-By: CoStrict <noreply@costrict.ai>
Hide empty user turns reactively during SSE streaming and gate the
thinking shimmer on whether the latest message is producing visible
content, so it covers wait-after-send, first-token, and between-steps
gaps instead of only the user turn.

Co-Authored-By: CoStrict <noreply@costrict.ai>
Drop the early-out that showed thinking whenever the latest assistant
message was completed, so a finished message with no renderable parts
(e.g. hidden reasoning summaries) no longer hides the shimmer prematurely.

Co-Authored-By: CoStrict <noreply@costrict.ai>
… create button

Drop the workspace filter input and turn the create trigger into a
full-width primary button with an icon and label, reusing the existing
"workspace.device.createWorkspace" copy.

Co-Authored-By: CoStrict <noreply@costrict.ai>
Reword the device-registration prompt to point at the home page guide
and note that only online idle workspaces can be activated.

Co-Authored-By: CoStrict <noreply@costrict.ai>
@XDfield
XDfield merged commit 0f8a8f8 into dev Jul 16, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant