Skip to content

fix(web): subagent cards name the provider account - #15493

Merged
maria-rcks merged 1 commit into
pingdotgg:mainfrom
SunkenInTime:t3code/show-provider-account
Oct 4, 2026
Merged

maria-rcks merged 1 commit into
pingdotgg:mainfrom
SunkenInTime:t3code/show-provider-account

Conversation

@SunkenInTime

Copy link
Copy Markdown
Contributor

Problem

If you have more than one account on a provider (say two Codex logins), you can't tell which account a subagent ran on. The composer, model picker, and sidebar thread card all show the account, but the subagent hover card in the lineage panel and timeline shows only the model. The bar on a provider-native subagent thread shows only the brand glyph. A user hit this after trying Orchestrator V2: https://x.com/EarleS_0/status/2106589263802323393

To reproduce, configure two instances of one driver (here "Codex Personal" and "Codex Work"), open a thread that delegated work to subagents, and hover a subagent row under Lineage. The card says "GPT-6-Astra" and nothing about the account.

Subagent hover card before and after

Change

The subagent hover card now reuses the sidebar card's rule. When shouldShowInstanceBadge says the glyph is ambiguous (several instances of one driver, or an accent color set), the model line reads model · account and the icon gets the account's accent dot. Lineage and timeline both render SubagentTooltipContent, so each caller now passes the environment's provider list along with the subagent's provider.

The native subagent bar gets the same two-letter account badge the composer trigger shows.

On mobile, subagent rows already print the account name, but they used the raw snapshot displayName, which falls back to the brand label for an unnamed custom instance. A codex_work instance read as "Codex". They now use resolveProviderInstanceDisplayName like every other surface.

Users with one account per provider see no change.

Native subagent bar before and after

Scope and approval

There's no approval link. This is a small consistency fix inside an existing capability: per-instance account badges and labels already ship in the composer, picker rail, and sidebar thread card, using shouldShowInstanceBadge and resolveProviderInstanceDisplayName from client-runtime. This PR applies the same helpers to the subagent surfaces that skipped them. It adds no new setting or rule.

Verification

Web dev build in Edge driven by Playwright, seeded from a real database with migrate-dev-db. The sandbox settings name the default Codex instance "Codex Personal" (blue accent) and add a second "Codex Work" instance. The real config already has a second Claude account, "Claude Base". Before shots come from the same build with only the changed file swapped back to main.

  • Lineage hover cards on the six visible rows of a thread with 41 subagents. Before: GPT-6-Astra, Claude Opus 5.5. After: GPT-6-Astra · Codex Personal with the blue dot, and Claude Opus 5.5 · Claude.
  • Native Claude subagent thread. Before: plain Claude glyph. After: glyph with the CL badge, same as the composer.
  • tsc --noEmit in apps/web and apps/mobile: clean. vp lint and vp fmt --check on the touched files: no errors (only existing ChatView.tsx compiler warnings).

Full after view for context:

After, lineage panel with hover card

Not checked: the timeline subagent row hover (it renders the same SubagentTooltipContent, with providers passed from V2LifecycleRow), and the mobile row in a running app. The mobile change is a one-line label swap, covered by its typecheck.

Claude Opus 5.5 in Claude Code, running inside T3 Code.

🤖 Generated with Claude Code

With several accounts on one provider, the sidebar thread card already says
which account a thread runs on, but subagent hover cards in the lineage panel
and timeline only showed the model. They now append the account name and its
accent dot under the same rule the sidebar uses. The native subagent bar gets
the composer's account badge, and mobile subagent rows resolve unnamed custom
instances to their instance name instead of the bare brand label.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Oct 4, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 70b0c13

Macroscope's review found this PR approvable — This is a localized UI fix that makes provider accounts distinguishable in existing mobile and web subagent cards. It only changes displayed labels and badges, with no schema, configuration, processing, or production-infrastructure impact.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Oct 4, 2026

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: pingdotgg/t3code/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 6279816d-4be7-4aeb-81ee-423c133980ac
📥 Commits

Reviewing files that changed from the base of the PR and between c5a0c78 and 70b0c13.

📒 Files selected for processing (6)
  • apps/mobile/src/features/threads/SubagentRow.tsx
  • apps/web/src/components/ChatView.tsx
  • apps/web/src/components/chat/ProviderSubagentBar.tsx
  • apps/web/src/components/chat/SubagentTooltipContent.tsx
  • apps/web/src/components/chat/ThreadRelationshipsControl.tsx
  • apps/web/src/components/chat/V2LifecycleRow.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.


📝 Walkthrough

Walkthrough

Web and mobile subagent views now use provider-instance data to display provider names and badges. Web components pass provider lists and badge state to subagent bars and tooltips, which resolve matching instances for display.

Changes

Subagent provider instance labels

Layer / File(s) Summary
Pass provider data and badge state
apps/web/src/components/ChatView.tsx, apps/web/src/components/chat/ProviderSubagentBar.tsx, apps/web/src/components/chat/ThreadRelationshipsControl.tsx, apps/web/src/components/chat/V2LifecycleRow.tsx
Web subagent components pass provider lists or badge state to bars and tooltips. The provider bar uses the supplied state to control its icon badge.
Resolve and display instance labels
apps/web/src/components/chat/SubagentTooltipContent.tsx, apps/mobile/src/features/threads/SubagentRow.tsx
The tooltip resolves a matching provider instance for its icon and model label. Mobile subagent metadata uses the provider-instance display-name resolver.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix

Suggested reviewers: juliusmarminge, jakeleventhal

Merge Risk: ⚪ Minimal · up to 70b0c

This PR changes how subagent views display provider names and badges. The supplied evidence shows compatible data flow and fallback behavior, with no actionable merge risk established; it is mergeable after normal checks.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 44.44% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 9 functions across 6 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: identifying provider accounts on subagent cards.
Description check ✅ Passed The description covers the problem, change, scope and approval rationale, and verification. It includes before-and-after screenshots and states that timeline hover behavior and the mobile row were not…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

@maria-rcks
maria-rcks merged commit daa1d0e into pingdotgg:main Oct 4, 2026
30 checks passed
ohbentos pushed a commit to ohbentos/t3code that referenced this pull request Oct 4, 2026
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 4, 2026
## What's Changed
* fix(server): registry test stubs no longer outlive the test run by @yordis in pingdotgg/t3code#15457
* test(server): the registry's fake Claude CLI is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15463
* refactor(clients): share opening a machine's No project folder by @bmdavis419 in pingdotgg/t3code#14759
* test(server): the git-ssh wrapper's fake SSH script is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15480
* test(server): the ACP registry's fake npm is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15483
* test(server): the ACP registry's fake uv is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15484
* feat(clients): step a new thread to the next machine from the keyboard by @juliusmarminge in pingdotgg/t3code#15391
* fix(web): promoting a draft thread no longer logs a React key warning by @yordis in pingdotgg/t3code#15458
* test(server): the text generation's fake Claude CLI is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15479
* fix(mobile): keep dictation running across navigation behind an edge pill by @juliusmarminge in pingdotgg/t3code#15502
* fix(client-runtime): relay disconnects no longer show as thread errors by @juliusmarminge in pingdotgg/t3code#15470
* fix(web): subagent cards name the provider account by @SunkenInTime in pingdotgg/t3code#15493
* fix(server): read paginated review replies when watching PRs by @eimexdev in pingdotgg/t3code#15427
* fix(server): offer one-click provider updates for every install by @maria-rcks in pingdotgg/t3code#15416
* fix(mobile): keep the dictation timer from shifting width by @juliusmarminge in pingdotgg/t3code#15504
* fix(relay): T3 Connect links no longer fail on colliding prepared statements by @juliusmarminge in pingdotgg/t3code#15411
* fix(server): sqlite transactions wait for the write lock instead of failing by @juliusmarminge in pingdotgg/t3code#15488
* fix(web): unpin button shows the pin-off icon on hover by @flamboh in pingdotgg/t3code#15425
* fix(mobile): make queued message removal tappable by @PixPMusic in pingdotgg/t3code#15417
* fix(web): keep workspace panels below dialogs by @maria-rcks in pingdotgg/t3code#15454
* fix(clients): Working section keeps its order while agents finish and wake by @t3dotgg in pingdotgg/t3code#15418
* feat(mobile): full-screen simulator viewer with on-demand controls by @juliusmarminge in pingdotgg/t3code#15551
* fix(client-runtime): closing a busy stream no longer drops the connection by @t3dotgg in pingdotgg/t3code#15563
* feat(web): add shift-held pull request quick actions by @maria-rcks in pingdotgg/t3code#15549
* fix: expanded tool calls show their output, empty ones don't expand by @maria-rcks in pingdotgg/t3code#15505


**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261004.2644...v0.0.46-nightly.20261004.2648

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261004.2648
github-actions Bot added a commit to davidvanderklay/t3code-flake that referenced this pull request Oct 4, 2026
## What's Changed
* fix(server): registry test stubs no longer outlive the test run by @yordis in pingdotgg/t3code#15457
* test(server): the registry's fake Claude CLI is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15463
* refactor(clients): share opening a machine's No project folder by @bmdavis419 in pingdotgg/t3code#14759
* test(server): the git-ssh wrapper's fake SSH script is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15480
* test(server): the ACP registry's fake npm is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15483
* test(server): the ACP registry's fake uv is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15484
* feat(clients): step a new thread to the next machine from the keyboard by @juliusmarminge in pingdotgg/t3code#15391
* fix(web): promoting a draft thread no longer logs a React key warning by @yordis in pingdotgg/t3code#15458
* test(server): the text generation's fake Claude CLI is a fixture file, not a generated string by @yordis in pingdotgg/t3code#15479
* fix(mobile): keep dictation running across navigation behind an edge pill by @juliusmarminge in pingdotgg/t3code#15502
* fix(client-runtime): relay disconnects no longer show as thread errors by @juliusmarminge in pingdotgg/t3code#15470
* fix(web): subagent cards name the provider account by @SunkenInTime in pingdotgg/t3code#15493
* fix(server): read paginated review replies when watching PRs by @eimexdev in pingdotgg/t3code#15427
* fix(server): offer one-click provider updates for every install by @maria-rcks in pingdotgg/t3code#15416
* fix(mobile): keep the dictation timer from shifting width by @juliusmarminge in pingdotgg/t3code#15504
* fix(relay): T3 Connect links no longer fail on colliding prepared statements by @juliusmarminge in pingdotgg/t3code#15411
* fix(server): sqlite transactions wait for the write lock instead of failing by @juliusmarminge in pingdotgg/t3code#15488
* fix(web): unpin button shows the pin-off icon on hover by @flamboh in pingdotgg/t3code#15425
* fix(mobile): make queued message removal tappable by @PixPMusic in pingdotgg/t3code#15417
* fix(web): keep workspace panels below dialogs by @maria-rcks in pingdotgg/t3code#15454
* fix(clients): Working section keeps its order while agents finish and wake by @t3dotgg in pingdotgg/t3code#15418
* feat(mobile): full-screen simulator viewer with on-demand controls by @juliusmarminge in pingdotgg/t3code#15551
* fix(client-runtime): closing a busy stream no longer drops the connection by @t3dotgg in pingdotgg/t3code#15563
* feat(web): add shift-held pull request quick actions by @maria-rcks in pingdotgg/t3code#15549
* fix: expanded tool calls show their output, empty ones don't expand by @maria-rcks in pingdotgg/t3code#15505


**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261004.2644...v0.0.46-nightly.20261004.2648

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261004.2648
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants