block / block/buzz

Mobile: 1:1 agent DMs have no entry point to the live agent activity transcript

Open
#6,565 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.