fix(web): subagent cards name the provider account - #15493
Conversation
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>
ApprovabilityVerdict: Approved at 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. |
|
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
📒 Files selected for processing (6)
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review. 📝 WalkthroughWalkthroughWeb 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. ChangesSubagent provider instance labels
Priority: ⬇️ Low Estimated code review effort: 2 (Simple) | ~10 minutes Change: Bug fix Suggested reviewers: Merge Risk: ⚪ Minimal · up to 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)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
## 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
## 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
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.
Change
The subagent hover card now reuses the sidebar card's rule. When
shouldShowInstanceBadgesays the glyph is ambiguous (several instances of one driver, or an accent color set), the model line readsmodel · accountand the icon gets the account's accent dot. Lineage and timeline both renderSubagentTooltipContent, 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. Acodex_workinstance read as "Codex". They now useresolveProviderInstanceDisplayNamelike every other surface.Users with one account per provider see no change.
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
shouldShowInstanceBadgeandresolveProviderInstanceDisplayNamefromclient-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 tomain.GPT-6-Astra,Claude Opus 5.5. After:GPT-6-Astra · Codex Personalwith the blue dot, andClaude Opus 5.5 · Claude.CLbadge, same as the composer.tsc --noEmitinapps/webandapps/mobile: clean.vp lintandvp fmt --checkon the touched files: no errors (only existingChatView.tsxcompiler warnings).Full after view for context:
Not checked: the timeline subagent row hover (it renders the same
SubagentTooltipContent, with providers passed fromV2LifecycleRow), 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