Repository navigation
Description
Summary
On mobile, a 1:1 DM with an agent offers no way to view the agent's live activity transcript. The same conversation on desktop shows the activity pane fine, and channel conversations expose the transcript through the members sheet — but the mobile DM surface has no entry point at all, even though the data layer already delivers everything needed.
Current behavior (mobile)
The live agent activity transcript lives in AgentActivitySheet
(mobile/lib/features/channels/agent_activity/agent_activity_sheet.dart). Its
only call site is the channel members sheet bot row:
mobile/lib/features/channels/members_sheet.dart:50-59—openActivity(ChannelMember bot)→AgentActivitySheet
In a 1:1 DM there is no path to that sheet:
mobile/lib/features/channels/channel_detail_page/app_bar.dart:7-13—_showsMembersActionreturnsfalsefor DM channels with exactly 2 participants, so the members button (and its working-bot dot + "View activity" menu) never renders in a 1:1 agent DM.mobile/lib/features/channels/channel_detail_page/app_bar.dart:195-326—_DmAppBarTitlerenders avatar/name/presence with no tap handler, so there is no profile or activity affordance from the DM header.mobile/lib/features/profile/user_profile_sheet.dart— no activity-related action either.
Result: while an agent works in a DM, the phone shows only "typing…" with no way to watch tool calls / progress, for minutes at a time.
Why this looks like a small fix
Everything behind the sheet already works for DMs:
mobile/lib/features/channels/agent_activity/observer_subscription.dart:135-149subscribes owner-scoped to kind 24200 observer frames globally (not per-channel).observerSubscriptionProvider(observer_subscription.dart:357-373) includes frames whereframe.channelId == null || frame.channelId == key.channelId.- Observer frames carry the turn's channel UUID, and DM turns are channel-scoped like any other channel (
crates/buzz-acp/src/pool.rskeys sessions bychannel_id;crates/buzz-acp/src/observer.rsstampschannel_idonto every event), so opening the sheet keyed to the DM channel id shows the DM transcript.
The gap is purely a missing UI entry point on the mobile DM surface.
Expected behavior
From a 1:1 agent DM on mobile, a user should be able to open the agent's live activity transcript — e.g. via a tappable DM header (profile → View activity), or a working-indicator affordance in the DM itself, consistent with how channels expose it today.
Desktop comparison (verified working)
Desktop opens the session pane inside any channel view, DMs included:
desktop/src/features/channels/ui/ChannelScreen.tsx:775—AgentSessionProviderwrapsChannelScreenunconditionally.desktop/src/features/channels/ui/useChannelAgentSessions.ts:210-230—openAgentSessionfalls back to the active channel id, scoping the pane to the DM.- Entry points: members sidebar "View activity" (
ChannelScreen.tsx:972), composer activity accessory while working (ChannelPane.tsx:741-751), and profile popover "View activity log" (UserProfilePopover.tsx:496).
(See also #6439 for a separate desktop regression about inline tool calls not rendering at the bottom of DMs.)
Related but distinct
- iOS UX: make active-agent indicators open channel-scoped tool activity #5066 makes the channel member-row/indicator entry points consistent on iOS; it does not cover the 1:1 DM surface, which has no members sheet at all.
- Fleet view: show live agent activity across channels and mobile #4169 (fleet view) and iOS UX: add channel-scoped agent profiles with threads and recent tool activity #5067 (channel-scoped agent profiles) are adjacent feature work.
Environment
- Mobile app (Flutter), current
mainverified at040b203.
Activity
Bring synced Solo chats and projects to mobile (#8337)