feat(profile): show active turn badges on agent profile panel and popover#1026
Merged
Conversation
…over Surface the existing active-turn data (from useActiveAgentTurns) in two additional locations: the slide-out profile panel and the hover popover. Both show pulsing "Working in #channel · Xm Ys" badges that tick every second and navigate to the channel on click (panel) or display read-only (popover). Adds useActiveAgentTurnsBridge in UserProfilePanel so the turns store is populated even when the Agents page hasn't been visited. Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Add useManagedAgentObserverBridge alongside useActiveAgentTurnsBridge so the relay subscription registers the viewed agent's pubkey. Without this, events won't populate the turns store if the user opens the profile without having visited the Agents page first. Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Cover the profile panel (single and multi-channel) and hover popover surfaces that render the active-turn badges. Seeds a Charlie-authored message in #agents so the message avatar opens the managed-agent profile, since existing seeds had no bot-authored row in a channel without index assertions. Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
Collaborator
Author
E2E screenshots — profile active turn indicatorsCaptured from Profile panel — single channelAgent working in one channel. The "Working in #general" badge appears below the hero section, pulsing with a live duration counter. Profile panel — multiple channelsAgent working in two channels simultaneously. Multiple badges stack in a flex-wrap row. Hover popover — working indicatorHovering over an agent's avatar shows the compact working indicator in the popover, below the runtime/model info badges. |
wpfleger96
pushed a commit
that referenced
this pull request
Jun 13, 2026
tlongwell-block
pushed a commit
that referenced
this pull request
Jun 13, 2026
* origin/main: (33 commits) fix(desktop): make Windows release compile cleanly (#1029) Add production Docker Compose bundle (#985) feat(profile): show active turn badges on agent profile panel and popover (#1026) chore(release): release version 0.3.20 (#1027) fix(release): resolve Windows sidecar path and Linux AppImage updater format (#1024) chore(release): release version 0.3.19 (#1014) fix(release): ignore prerelease tags in changelog generation (#1021) fix: repair main build after cross-PR merge skew (#1020) feat(agents): show per-turn duration and prune dead turns within ~25s of host crash (#1017) fix(release): replace hermit with native tool setup on Windows job (#1018) feat(acp): surface error-class outcomes to the activity feed only, never the channel (#1010) fix(desktop): migrate Sprout workspace storage (#1016) feat(auth): force token refresh on rejected token (401/403), never the browser (#1015) fix(release): mark prerelease versions so they do not become latest (#1013) feat(acp): implement systemPrompt with protocol version gating (#981) fix(release): update repository name check from block/sprout to block/buzz (#1012) feat(release): all-OS desktop builds + universal auto-update manifest (#1011) Add relay disconnect UX: friendly errors, reconnect, cached identity (#1004) feat(agents): add active turn indicators to Agents Menu (#1005) ci: add fork guards to docker, release, and auto-tag workflows (#1007) ... Co-authored-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co> Signed-off-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co>
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
Surface the existing active-turn data (
useActiveAgentTurns) in two additional locations:ProfileSummaryView) — pulsing "Working in #channel · Xm Ys" badges below the hero/actions section, above the ingress rows. Clicking a badge navigates to that channel.UserProfilePopover) — compact read-only badges below the info badges (runtime/model), above the "about" text.Implementation
UserProfilePanel.tsx: AddsuseActiveAgentTurnsBridgecall for the viewed agent so the turns store is populated even when the Agents page hasn't been visited. Also derives achannelIdToNamemap fromchannelsQuery.dataand passes it toProfileSummaryView.UserProfilePanelSections.tsx: CallsuseActiveAgentTurns(pubkey)for bot profiles and rendersProfileWorkingBadgecomponents (same pattern asWorkingBadgeinManagedAgentRow). Each badge usesuseNow(1000)+formatElapsedfor the live counter.UserProfilePopover.tsx: CallsuseActiveAgentTurns(pubkey)for bot profiles and rendersPopoverWorkingBadge— a compact<span>with primary-colored text and pulse animation.Behavior
motion-safe:animate-pulse) and tick every second