Skip to content

agent pane: a Subagents tab in the summary card (cx-x62ev) - #20961

Closed
teamleaderleo wants to merge 6 commits into
op-next-toolbar/pin-summary-panelfrom
op-next-toolbar/subagents-tab
Closed

teamleaderleo wants to merge 6 commits into
op-next-toolbar/pin-summary-panelfrom
op-next-toolbar/subagents-tab

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 15, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Stacked on #20514.

The summary card's Subagents title now opens a Subagents tab beside the card's Summary tab, like the right pane in the ChatGPT desktop app (bead cx-x62ev):

  • The tab lists Active · N (or No active subagents) and Done · N, newest first, nested subagents included. Waiting subagents count as active, and failed or cancelled ones count as done.
  • Each row is the transcript's own SubagentListRow (avatar with status dot, name, kind, state or current action, elapsed time). In the card it uses a compact 40px row with no border.
  • Clicking a row shows that subagent through the card's existing onOpen. In the app that is chat.subagentPane (opens beside the chat). When the host opens no pane, the subagent shows in this pane.
  • The tab's × goes back to the summary and puts focus back on the Subagents title. The Summary and Subagents tabs switch between the two views.
  • The tabs are aria-pressed toggle buttons, like the gallery filters, because ui-rules bans raw tablist/tab roles in page code.

Reuse: I did not add a second row component. The tab builds SUBAGENT_ROW rows from subagents/subagentRows.ts and renders them with SubagentListRow from subagents/SubagentGroup.tsx, through SubagentPaneContext. #20718 extended that same row with progress and a stop button. #20718 is merged on feat-cmux-next, but #20514's head does not include it yet. When #20514 takes a base merge, this tab picks up #20718's progress and stop button with no extra change. The section title still uses subagentsIn and SubagentStatusList.

Also: one-line lower of scripts/cmux-next/layers-baseline.tsv. #20514's reduced-transparency fallback leaves summary.css with 0 bare backdrop-filter, so check-layers asked for the lower baseline. Without it, bun run check fails.

Not in this PR:

  • The bead's "Outputs + with the tooltip Create a file or site". There is no create action behind it yet, and a + that does nothing would be dead UI.
  • Generated colourful avatars. The tab uses the same avatar as the transcript's subagent stack (the harness mark), and changing that look for everyone needs a call.

In-app stills (side by side with ChatGPT) will follow in a comment.

Testing

  • Red, at db86bd4 (test only): CMUX_BROWSER_TESTS=1 bun test test/agent-pane-subagents-tab.test.ts gave 0 pass / 2 fail. The heading "Subagents · 1 running" is there, but there is no button to open the tab.
  • Green at head:
    • agent-pane-subagents-tab.test.ts 2 pass
    • agent-pane-summary-panel.test.ts 7 pass
    • popup-surface 10 pass
    • agent-pane-background-tasks 2 pass
    • sources-changes 1 pass. Its first run timed out on a cold vite server and passed on rerun.
    • ui-rules 4 pass
    • subtle-elevation and popup-one-hairline 42 pass
  • vp fmt, vp check and bun run check all pass.
  • gen-strings.mjs --check passes, and check-l10n.sh reports 0 errors.
  • Localization: 4 new keys (summary.subagents.active, .ended, .noneActive, .closeTab) in all 21 locales. The tab labels reuse summary.title and summary.subagents.

Changelog

  • Added: The agent chat's summary card has a Subagents tab listing active and finished subagents; click one to open it.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Adds a Subagents tab to the agent chat's summary card so active and finished subagents can be reviewed without leaving the summary.

The Subagents section's title now opens a tab beside the card's Summary tab, mirroring the ChatGPT desktop app's right pane. The tab lists Active · N (or "No active subagents") and Done · N, newest first, nested subagents included; waiting subagents count as active, failed and cancelled as done. Rows reuse the transcript's SubagentListRow, compacted to 40px, and clicking a row opens that subagent via the card's existing onOpen—the chat's subagent pane, or this tab when the host opens none. Opening the tab drops the card's head counts since the tab lists them itself (they were cut off next to the two tabs). The close button returns to the summary and refocuses the Subagents title. Tabs are aria-pressed toggles because ui-rules bans raw tablist/tab roles in page code. Four new locale strings ship in all 21 locales, and the layers baseline is lowered one line since summary.css no longer has a bare backdrop-filter. SubagentsTab is allowlisted in gallery coverage until it gets an entry.

Written for commit 3d01e89. Summary will update on new commits.

View guided diff Turn on auto-fix

teamleaderleo and others added 3 commits October 15, 2026 00:35
… and done subagents

cx-x62ev. Red: the Subagents section's title is a plain heading, not a button.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The summary card's reduced-transparency fallback (#20514) leaves summary.css with no bare
backdrop-filter; check-layers asks for the lower baseline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cx-x62ev. The Subagents section's title opens a Subagents tab beside the card's Summary tab, as
the ChatGPT desktop app's right pane does: the chat's subagents under "Active · N" (or "No active
subagents") and "Done · N", newest first. Each is the transcript's own SubagentListRow (avatar,
name, state, time), compact in the card; a row shows that subagent through the card's onOpen
(chat.subagentPane, or this pane when the host opens none). The tab's close button goes back to
the summary and returns focus to the title. Tabs are aria-pressed toggles: page code carries no
raw roles (ui-rules). Four new strings in all 21 locales.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: ddf8682b-37e7-48a3-b64e-32cd9c2b971d

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@blacksmith-sh

blacksmith-sh Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Found 5 test failures on Blacksmith runners:

Failures

Test View Logs
GitHub-hosted runner label: .github/workflows/
intent-familiar-review.yml:21: runs-on: ubuntu-24.04
View Logs
GitHub-hosted runner label: .github/workflows/
pr-red-checks-comment.yml:16: runs-on: ubuntu-24.04
View Logs
test_scans_only_test_sources (main.CommandLine.test_scans_only_test_sources)/
test_scans_only_test_sources (main.CommandLine.test_scans_only_test_sources)
View Logs
test_scans_the_ui_test_sources (main.CommandLine.test_scans_the_ui_test_sources) (p
ath='ios/cmuxUITests/ProbeTests.swift')
View Logs
two failed fetches then a success did not pass/
two failed fetches then a success did not pass
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Probably yours: Fast static checks failed: a static check failed, FAILED localization (0.93s).

CI failed on 3d01e89ea8 (run 38982116420 attempt 1): 2 code, 6 unknown.

Job Verdict Why
Fast static checks code a static check failed
CI fast guards unknown no known signature; failed step: Run the fast guard tests
guards / workflow-guard-history unknown no known signature; failed step: Validate SwiftPM lockfile policy
guards / workflow-guard-tests / app-host-cache unknown no known signature; failed step: Validate iOS video recording failures
guards / workflow-guard-tests / preflight unknown no known signature; failed step: Validate macOS runner guards
guards / workflow-guard-tests / quality-determinism code a Python test failed
guards / workflow-guard-tests / release-tooling unknown no known signature; failed step: Validate retried Ghostty Zig package fetches
guards / workflow-guard-tests / release-ios unknown no known signature; failed step: Validate iOS simulator build-once contract
Matched log lines
Fast static checks: FAILED localization (0.93s)
guards / workflow-guard-tests / quality-determinism: FAIL: test_scans_only_test_sources (__main__.CommandLine.test_scans_only_test_sources)

Not re-run automatically: Fast static checks, CI fast guards, guards / workflow-guard-history, guards / workflow-guard-tests / app-host-cache, guards / workflow-guard-tests / preflight are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

CI fast guards failed on 3d01e89ea8 (https://github.com/manaflow-ai/cmux/actions/runs/38982116420). It does not block the merge; a red guard merged into main breaks it for every open PR.
The log named no failed step; see the run.

Agents: python3 scripts/ci/guard_attribution.py fix applies the mechanical fixes locally. This comment is updated in place on each push.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Page renders (the PR's browser test fixture in headless Chromium, dark; not yet in the app: the in-app mock chat has no subagents):

Summary tab Subagents tab

Follow-ups before Leo's look: light-theme and in-app captures with a session that has subagents; the card head's counts truncate next to the tabs ("1 running · 1 f…"), so the tab row likely should drop them while Subagents shows (the tab lists the same counts). The 24h durations come from the fixture's start time.

teamleaderleo and others added 2 commits October 15, 2026 02:31
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The tab lists the same counts, and beside the two tabs they were cut off
("1 running · 1 f…").

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Superseded by #21676, the Subagents tab recut onto the current summary card (#21564's inline column and popover). This branch sat on #20514's card.

teamleaderleo added a commit that referenced this pull request Oct 19, 2026
* agent pane: a Subagents tab in the summary card (cx-x62ev)

Recut of #20961 onto the current card (#21564's inline column and
popover) instead of #20514's. The Subagents title opens a Subagents tab
beside Summary, listing Active and Done with the transcript's own
SubagentListRow; the tab's x goes back to the summary and puts focus on
the title. With a tab open, the tabs take the head's place: the column's
title or the popover's fold button, and the counts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: warm the dev server before the browser loads it (agent-pane-subagents-tab)

The base's check-browser-test-lanes now asks every browser test that
starts a Vite server to call warmViteServer once it listens.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Summary popover: keep the fold button beside the Subagents tabs

With the Subagents tab open, the popover head showed only the tabs, so a
narrow pane could not fold the card until the tab was closed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: give the Subagents tab test room for the inline summary column

At 1280px the default chat width leaves no room for the 300px column, so
the summary is a popover and the test found no card.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: the summary popover's fold button stays icon-sized beside the Subagents tabs

Red: the icon-only fold reuses .acpmux-summary-card__fold's flex:1 and
measures 83px at 1280px, pushing the tabs to the right edge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Summary popover: the fold button beside the Subagents tabs is icon-sized

It reused the head fold's flex:1, so it stretched across the empty head and
pushed the tabs right; the tabs' -8px lead-in then overlapped it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(acpmux): the Subagents tab stops running subagents, sits beside the popover's fold button, and refocuses it when folded (red)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(acpmux): the Subagents tab's running rows can stop, its tabs sit beside the popover's fold button, and closing it while folded keeps focus in the card

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(next): PR autofix at 87b32dd

- vp fmt webviews/src/agent-session/acpmux/replyHref.ts
- vp fmt webviews/src/pages/markdown/README.md
- vp fmt webviews/src/pages/markdown/links.ts
- vp fmt webviews/test/markdown-cmux-app-links.test.ts

Autofix-Run: https://github.com/manaflow-ai/cmux/actions/runs/39211898391

* fix(agent pane): summary tabs unfold a folded popover; tab close focuses in its click

Closing the Subagents tab now moves focus in the close button's click (flushSync, then
focus) instead of an effect. A Summary or Subagents tab picked on a folded popover
unfolds it, so the click shows that tab.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: cmux-autofix[bot] <cmux-autofix[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant