Skip to content

Activity dock: always visible, opens the Activity panel on click #143

Closed

Description

@mubeda

Summary

Clicking the Activity pill above the composer expands a small summary, and only a second click opens the Activity panel, where the useful information is. Make the pill open the Activity panel directly, remove the expand/collapse step, and keep the pill visible by default through a new setting.

This replaces this issue's original report: the clock icon on the expanded summary's elapsed-time line overlapped its "6m" label (ActivityDock.tsx:453, :497). The overlap came from buttonVariants' [&_svg]:-mx-0.5 (apps/web/src/components/ui/button.tsx:11) overriding the icon's mr-1. The redesign removes that line, so the overlap goes with it.

Seen on v0.10.0, Linux desktop (AppImage).

Current state

apps/web/src/components/activity/ActivityDock.tsx:

  • Collapsed pill: provider glyph plus Active N and Done N. A click toggles expanded (:405-413). The parent owns that state through expanded/onExpandedChange (:264-267), in ChatView.tsx:6836 and ProviderTerminalActivityDock.tsx.
  • Expanded summary (:416-505): one row each for Subagents and Background tasks. Each row shows that section's active and done counts, the oldest active item's elapsed time, and a stale/error marker (SectionStatus, :214-229). Clicking a row calls openSection(section), which opens the Activity panel.
  • What the expanded view adds:
    • The counts per section. The pill shows only the combined totals.
    • One elapsed time. The panel shows elapsed or completed times for every item.
    • The per-section stale/error marker. This is the only signal the pill lacks.

Proposed behavior

  • Clicking the pill calls onOpenSection with the section to open:

    • the section with an error;
    • else the one with active work, Subagents first;
    • else the one with the most recent item.

    If the Activity panel is already open, the click focuses it and scrolls to that section.

  • Remove:

    • the expanded state and onExpandedChange, in the dock and both callers;
    • the chevron and the expanded rows;
    • the Escape-to-collapse handler.
  • Move onto the pill: a stale or error marker when any section is stale or failing, reusing SectionStatus and its icons. Errors win over stale.

  • Pill accessibility:

    • The aria-label becomes "Open Activity: Subagents 1 active, 6 done; Background tasks 0 active, 0 done", plus the status when degraded.
    • A tooltip shows the same breakdown.
    • Drop aria-expanded.
  • Kept as is: the live-region announcement (liveAnnouncement, :319), the compact layout, and the sheet inset.

Always visible (new setting, on by default)

  • New client setting activityDockAlwaysVisible in ClientSettingsSchema (packages/contracts/src/settings.ts:119). Default true. It is a per-device display preference, so it lives next to wordWrap and diffIgnoreWhitespace, not in ServerSettings.
  • Settings row: Always show Activity, placed right after Chat agent activity (apps/web/src/components/settings/SettingsPanels.tsx:1032), with a reset action. Description: "Keep the Activity button above the chat even before any subagent or background task runs."
    • When Chat agent activity is off, the row is disabled and explains why: "Turn on Chat agent activity to show it."
  • On (default):
    • The pill shows on every thread whose provider reports activity, even with no records yet. selectActivityDockVisibility (apps/web/src/components/activity/activityPresentation.ts:33-70) drops the hasRecords requirement for supported sections, but still hides unsupported ones.
    • Idle state: with no records, the pill shows the provider glyph and a muted Activity label instead of "Active 0 · Done 0". Clicking it still opens the Activity panel, which shows its existing empty state.
    • Providers that never report subagents or background tasks get no pill, as today. A permanent zero would suggest nothing is running when BiBCode just can't see it.
  • Off: today's rule. The pill appears once the thread has a subagent or background task.

Acceptance criteria

  • One click on the pill opens the Activity panel on the chosen section, by the rules above.
  • With the panel already open, a click focuses it and scrolls to that section without closing it.
  • The pill shows a stale or error marker whenever any section is stale or failing.
  • No expanded summary, chevron or collapse state remains. The expanded/onExpandedChange props are gone from ActivityDock and its callers.
  • The accessible name and tooltip give per-section counts. Screen readers no longer announce an expandable control.
  • Keyboard: Enter or Space on the pill opens the panel.
  • activityDockAlwaysVisible decodes with default true. Stored settings without the key still decode.
  • With the setting on, the pill shows on a thread whose provider supports activity before any record exists, in its idle state. It still hides for unsupported providers.
  • With the setting off, visibility matches today's rule.
  • Settings shows Always show Activity with a reset action. It is disabled with a reason while Chat agent activity is off.

Validation

  • ActivityDock.test.tsx and ProviderTerminalActivityDock.test.tsx:
    • section choice: error, then active, then latest;
    • a click calls onOpenSection;
    • the marker on the pill;
    • the accessible name.
  • activityPresentation.test.ts: visibility with the setting on/off, with records/without, and with supported/unsupported sections.
  • Contracts settings test: the default and decoding of old stored settings.
  • SettingsPanels.test.tsx: the row, its reset, and the disabled reason.
  • ActivityPanel.test.tsx: opening at a section when the panel is already open.
  • vp check and vp run typecheck.
  • UI.md review: one step to useful information, and the degraded state stays visible.
  • vercel-react-best-practices review: removed state, no new effects for scrolling.
  • Update docs/user/workspace-ui.md if it describes the dock, and review the docs/testing/ runbooks.
  • Profiler coverage: none applies (client-only UI change).

Open questions

  • Should a second click on the pill, with the panel open on that section, close the panel? Default: no, keep it predictable.

Activity

  1. added
    bugSomething is broken or behaving incorrectly.
    enhancementRequested improvement or new capability.
    and removed
    bugSomething is broken or behaving incorrectly.
    on Oct 19, 2026
  2. changed the title [-]Activity dock: elapsed-time clock icon overlaps its label[/-] [+]Activity dock: open the Activity panel on click, drop the expanded summary[/+] on Oct 19, 2026
  3. changed the title [-]Activity dock: open the Activity panel on click, drop the expanded summary[/-] [+]Activity dock: always visible, opens the Activity panel on click[/+] on Oct 19, 2026
  4. added 3 commits that reference this issue on Oct 26, 2026
    68c459d
    8f3d454
    2770228
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementRequested improvement or new capability.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions