- BotActivityBar.tsx: replace the combined "agents working" trigger with one
pill per working agent (avatar + latest action summary in a rounded-full
chip, max-w-30 with truncation so pill widths stay uniform); extract
BotActivityAgentPill with per-pill hover popover state (useHoverPopover)
and remove the tab strip, tab selection state, and the 5-headline
rotation interval
- Pill label shows the agent's single latest action headline and decays to
a generic "Working…" state once activity goes quiet (15s staleness
window, 5s useNow tick); deliberately no rotation between recent actions
- Hovering a pill shows the live activity feed as the popover surface
itself (w-80 p-0, edge-to-edge, no inset bordered box); clicking the
pill opens the agent's full runtime in the auxiliary panel
(preventDefault stops Radix's composed trigger toggle from racing the
hover/focus open state, which made click-to-open flaky)
- composerLiveActivity.ts: add deriveActivityPillLabel pure helper
(channel-scoped spine-first scan + staleness decay,
ACTIVITY_PILL_STALE_MS = 15s) and remove the now-unused
resolveSelectedActivityAgent
- composerLiveActivity.test.mjs: replace resolveSelectedActivityAgent
tests with 7 deriveActivityPillLabel cases (fresh headline wins,
staleness decay, custom window, channel scoping, spine-over-metadata,
metadata fallback, empty transcript)
- ComposerLiveActivityFeed.tsx: overlay button rounding rounded-lg →
rounded-[inherit] so the hover tint follows the popover's rounded-xl
clip when the feed renders edge-to-edge
- ChannelComposerActivityRow.tsx / ChannelPane.tsx: drop the removed
variant prop (the toolbar variant was unused; both call sites rendered
inline)
- channels.spec.ts: activity-indicator test now hovers the pill for the
legacy preview popover and clicks the pill for direct aux-panel open
- Flag-off (composerLiveActivity disabled) hover popover keeps the legacy
"View activity" item; pills stay h-7 inside the fixed h-8.5 activity row
so the composer-shift guard keeps passing
Co-authored-by: Taylor Ho <taylorkmho@gmail.com>
Signed-off-by: Taylor Ho <taylorkmho@gmail.com>