Mobile: 1:1 agent DMs have no entry point to the live agent activity transcript
- Dominant language
- Rust
- Stars
- 32.7k
- Forks
- 4.3k
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 253
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` — `_showsMembersAction` returns `false` for 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` — `_DmAppBarTitle` renders 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-149` subscribes owner-scoped to kind 24200 observer frames globally (not per-channel).
- `observerSubscriptionProvider` (`observer_subscription.dart:357-373`) includes frames where `frame.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.rs` keys sessions by `channel_id`; `crates/buzz-acp/src/observer.rs` stamps `channel_id` onto 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` — `AgentSessionProvider` wraps `ChannelScreen` unconditionally.
- `desktop/src/features/channels/ui/useChannelAgentSessions.ts:210-230` — `openAgentSession` falls 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
- #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.
- #4169 (fleet view) and #5067 (channel-scoped agent profiles) are adjacent feature work.
## Environment
- Mobile app (Flutter), current `main` verified at `040b203`.
Contributor guide
Assessment
This issue has not been assessed yet.