• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

stacklok / toolhive-studio / 25429675396
68%

Build:
DEFAULT BRANCH: main
Ran 06 May 2026 10:26AM UTC
Jobs 1
Files 504
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

06 May 2026 10:22AM UTC coverage: 67.719% (+0.4%) from 67.319%
25429675396

push

github

web-flow
perf(playground): virtualize long chat threads with TanStack Virtual (#2192)

* refactor(playground): split chat-message into per-part components

The chat-message module had grown to ~770 lines housing the role
dispatcher, every part renderer (reasoning, tool call, tool output,
step start, joined assistant text), and several components
(mcp-app-view, attachment-preview, image-modal, token-usage,
no-content-message) that only render inside chat messages. Each piece
moves into a focused sibling under components/chat-message/, with the
public entry kept at components/chat-message/index.tsx so existing
`import { ChatMessage } from "./chat-message"` callsites resolve
unchanged. The folder/index layout matches the existing card-mcp-server,
form-run-from-registry, and groups-manager idiom.

The dispatcher itself shrinks to a small `memo(ChatMessageImpl)` that
hands off to UserMessage / AssistantMessage, so streaming ticks only
re-render the row whose message ref actually changed and sibling rows
skip via shallow prop equality.

* perf(playground): virtualize long chat threads with TanStack Virtual

Long Playground threads (200+ messages) felt sluggish on initial render,
streaming ticks, and route-restored scrolling because every row stayed
mounted and re-rendered on every status update. Adopts TanStack Virtual
through a hybrid strategy: historical rows render through `useVirtualizer`
+ `measureElement` (dynamic heights, `useFlushSync: false` per the React
19 guidance, `overscan: 5`), while the last TAIL_SIZE (2) rows and the
"Thinking..." indicator stay in normal flow. The streaming row keeps
growing scrollHeight naturally, so the ResizeObserver follow-to-bottom
logic in useAutoScroll is preserved unchanged.

A VIRTUALIZE_THRESHOLD of 10 short-circuits the virtualizer on small
threads, and the leaf VirtualChatMessageList carries `use no memo` so
React Compiler does not bail out on the surrounding tree. ChatInterface
delegates list rendering to the new ChatM... (continued)

4681 of 7451 branches covered (62.82%)

100 of 142 new or added lines in 13 files covered. (70.42%)

6990 of 10322 relevant lines covered (67.72%)

120.83 hits per line

Uncovered Changes

Lines Coverage ∆ File
18
0.0
renderer/src/features/chat/components/chat-message/assistant-message.tsx
6
0.0
renderer/src/features/chat/components/chat-message/user-message.tsx
5
0.0
renderer/src/features/chat/components/chat-message/joined-assistant-text.tsx
4
0.0
renderer/src/features/chat/components/chat-message/index.tsx
3
91.43
renderer/src/features/chat/components/chat-message-list.tsx
3
0.0
renderer/src/features/chat/components/chat-message/step-start-component.tsx
1
93.33
renderer/src/features/chat/components/chat-message/tool-output-content.tsx
1
94.12
renderer/src/features/chat/lib/disclosure-store.ts
1
90.91
renderer/src/features/chat/lib/has-mcp-ui-part.ts
Jobs
ID Job ID Ran Files Coverage
1 25429675396.1 06 May 2026 10:26AM UTC 504
67.72
GitHub Action Run
Source Files on build 25429675396
  • Tree
  • List 504
  • Changed 2
  • Source Changed 2
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #25429675396
  • a3a7af69 on github
  • Prev Build on main (#25423616338)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc