Repository navigation
fix(ui): show primary user in multi-agent profile hero - #136736
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ded15303a2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Codex review: needs maintainer review before merge. Reviewed September 5, 2026, 7:21 PM ET / 23:21 UTC. ClawSweeper reviewWhat this changesThe Profile header displays the connected person's live identity, preserves unidentified agent previews, and wraps long names and emails, with regression coverage and CI registration. Merge readiness✅ Ready for maintainer review The repair remains necessary: current main and the latest release still show the agent in the Profile header. Earlier findings are resolved, and the updated proof resolution supports proceeding without another contributor follow-up. Priority: P2 Review scores
Verification
How this fits togetherThe Control UI Profile page receives identity updates from the Gateway and displays account information alongside profile-editing controls. Its header now uses that live identity while leaving unsaved editor fields independent. flowchart TD
A[Gateway identity updates] --> B[Profile page]
C[Agent roster] --> B
B --> D{Identified connection?}
D -->|Yes| E[Person name and shared avatar]
D -->|No| F[Default agent preview]
E --> G[Responsive Profile header]
F --> G
Before mergeNone. Agent review detailsSecurityNone. PR surfaceSource -6, Tests +383, Docs 0, Config +1. Total +378 across 12 files. View PR surface stats
Review metricsNone. Technical reviewBest possible solution: Keep live Gateway identity authoritative for the header, reuse shared avatar ownership, and preserve editor drafts and unidentified previews. Do we have a high-confidence way to reproduce the issue? Yes: current main selects the default agent for the Profile header even when a different person is connected. Source inspection establishes the path; this review did not execute it. Is this the best way to solve the issue? Yes: the patch repairs the existing header owner and reuses established identity and avatar components without changing stored preferences or authorization. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against d3f01d9851f4. LabelsLabel changes:
Label justifications:
EvidenceWhat I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (7 earlier review cycles)
|
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
Maintainer-requested review/landing follow-up for head The authenticated-user hero is the right behavior, but review found four items to repair before landing:
Exact-head evidence: https://github.com/openclaw/openclaw/actions/runs/33706658094 . UI unit shards passed; the real-Gateway job stopped at its build-budget gate before tests. I am adapting the fix to current main’s extracted Work is tracked in https://team.openclaw.ai/chat/roboclaw/clawtributor-review-pr-136736 . |
Integrate the existing hero owner and shared authenticated avatar lifecycle while retaining unidentified agent previews. Preserve live user name updates and wrap long profile emails on narrow screens. Co-authored-by: Jacqueline Henriksen <179184921+jjjhenriksen@users.noreply.github.com>
|
🦞🧹 I asked ClawSweeper to review this item again. |
Keep the Profile real-Gateway test in the explicit CI command and serial inventory. Extract the connected page fixture without removing coverage so the Profile unit suite stays within the file-size limit.
Chromium did not attach browser extra HTTP headers to its WebSocket upgrade in CI. Use a loopback reverse proxy rooted in the isolated test workspace so the existing trusted-proxy authentication receives its required headers.
|
The final candidate preserves the reviewed production repair at net -1. Local changed-file checks, the regression, inspected desktop/phone captures, and independent review pass. CI integration now includes the real-Gateway fixture; its Chromium WebSocket header issue was repaired with a loopback reverse proxy and verified through an actual browser-to-WebSocket probe. Exact-head CI is rerunning. The two historical review threads are resolved with evidence in the body. @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
Use the live identity for the Profile header, including cleared names and the localized owner label. Keep editor drafts separate and wrap unnamed email titles within the card. Reuse the canonical agent summary type. Co-authored-by: Jacqueline Henriksen <179184921+jjjhenriksen@users.noreply.github.com>
Keep both Profile and device-alias proofs in the CI command and independent serial inventory while preserving contributor ancestry. Co-authored-by: Jacqueline Henriksen <179184921+jjjhenriksen@users.noreply.github.com>
|
Both new P2 findings are repaired on the current head. The live name-clear regression failed with stale Ada and now passes; unnamed owners use the localized Owner label. A valid unbroken email reproduced an 838px title in a 334px card and now fits at 302px, with inspected before/after captures in the body. Production is net -6. Main's new real-Gateway registration is preserved alongside Profile, and all 50 focused unit/inventory/workflow cases pass. The real-Gateway test now covers a second-tab rename and clear while keeping the first tab's draft. Exact-head CI is running. @clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
Check full viewport visibility and horizontal text fit for both hero fields in one loop, retaining the unnamed-email regression while keeping the suite under the file-size limit. Co-authored-by: Jacqueline Henriksen <179184921+jjjhenriksen@users.noreply.github.com>
|
Maintainer resolution for the remaining review note: the reviewer environment could not fetch the linked screenshots. I generated and inspected the exact attached synthetic PNGs before upload. The unnamed-title reproduction measured 838px inside a 334px card before repair and 302px after; the viewport containment probe also fails before and passes after. This resolves the media-retrieval limitation through retained maintainer inspection and executable evidence. The two-tab real-Gateway rename/clear/draft test passed on the exact current head: https://github.com/openclaw/openclaw/actions/runs/33997290487/job/101390016134 . The code findings are addressed in the body and regression tests. CI's remaining failure is an unchanged browser-route-handoff timeout, now receiving a failed-jobs rerun. |
|
Merged via squash.
|
* origin/main: (95 commits) perf(build): avoid unrelated gateway artifact scans (#127757) fix(update): deliver terminal progress after long updates (#139289) fix(ui): show session hover cards for local chat URLs (#139384) perf(ui): reuse unchanged transcript key snapshots (#139400) fix(ui): make subagent sessions view-only (#139381) fix: open agent state on SQLite builds without extensions (#139487) perf(skills): detach cached metadata from source strings (#139478) fix(ui): show primary user in multi-agent profile hero (#136736) perf(sessions): stop decoding the session row four times per SQLite entry patch (#136361) refactor(exec): share package-manager option scans (#139482) fix(ci): authorize frozen mobile release candidates (#139441) fix: avoid session deletion slowdown in large session stores (#139467) perf(gateway): reuse node invocation idle timers (#139354) fix(auth): preserve selected profiles across plugin scopes (#139413) fix(discord): retain voice input until transcription completes (#139484) fix(agents): name Gateway storage failures in run-failure copy (#139409) fix: keep subagent checks responsive in large session stores (#139450) fix(memory): index notes when optional embeddings cannot start (#139463) fix: refresh pending approvals when reopening chat (#139457) fix(tooling): preserve Git hook choices during install (#139461) ...
* fix(ui): show primary user in profile hero * test(ui): exercise profile hero with multi-agent fixture * fix(ui): cover live profile identity behavior * test(ui): preserve complete profile presence fixtures * test(ui): register profile Gateway proof in CI Keep the Profile real-Gateway test in the explicit CI command and serial inventory. Extract the connected page fixture without removing coverage so the Profile unit suite stays within the file-size limit. * test(ui): forward profile proof identity through a real proxy Chromium did not attach browser extra HTTP headers to its WebSocket upgrade in CI. Use a loopback reverse proxy rooted in the isolated test workspace so the existing trusted-proxy authentication receives its required headers. * fix(ui): honor cleared profile names and bound hero titles Use the live identity for the Profile header, including cleared names and the localized owner label. Keep editor drafts separate and wrap unnamed email titles within the card. Reuse the canonical agent summary type. Co-authored-by: Jacqueline Henriksen <179184921+jjjhenriksen@users.noreply.github.com> * test(ui): share profile text containment assertions Check full viewport visibility and horizontal text fit for both hero fields in one loop, retaining the unnamed-email regression while keeping the suite under the file-size limit. Co-authored-by: Jacqueline Henriksen <179184921+jjjhenriksen@users.noreply.github.com> --------- Co-authored-by: Peter Steinberger <steipete@gmail.com> Co-authored-by: Jacqueline Henriksen <179184921+jjjhenriksen@users.noreply.github.com>
Related: #138670
What Problem This Solves
Fixes an issue where users opening Settings → Profile on a multi-agent Gateway see the default assistant instead of the connected person. It also fixes stale names after another client clears a profile name and clipped email titles for unnamed people on narrow screens.
Why This Change Was Made
Live Gateway identity owns the header, including an absent name after a remote clear. Fetched profile data stays with the editor and its unsaved drafts. The extracted
profile-hero.tsrenders the person through the shared viewer avatar, andprofile-page.tsuses the existingIdentityAvatarControllerfor authenticated image ownership. Unidentified connections retain the agent preview and its image/text/mascot fallbacks. Unnamed owners without email use the existing localized Owner label.A second hero template and a page-owned credential cache duplicate existing owners. Synchronizing editor fields from presence would couple live identity updates to in-progress editing. The repair removes those alternatives and reuses the canonical agent-summary type.
User Impact
The header shows the connected person's name, email, and avatar independently of the agent roster. Remote renames and name clears update the header while local drafts remain intact. Long names and email fallbacks wrap within the card. Existing connected-account controls and identity permissions retain their behavior.
Evidence
Head:
5b2f4232c9ef388817ef647f662e0d964f4844a1.node scripts/run-vitest.mjs ui/src/pages/profile/profile-hero.test.ts: 2 tests pass, covering identified/unidentified rendering, live rename/clear, stale editor data, and the localized owner fallback. Before repair, the name-clear case returned Ada instead of the email, and the unnamed-owner case returned the internal ID instead of Owner. The original multi-agent regression returned Clipper instead of Ada on main.node scripts/run-vitest.mjs test/vitest-ui-e2e-config.test.ts: 43 tests pass after preserving both the new Profile and main's device-alias real-Gateway registrations.node scripts/run-vitest.mjs test/scripts/ci-workflow-guards.test.ts -t 'selects the complete real-Gateway command': 5 cases pass.git diff --checkpasses. The final full changed-file check passed. Exact-head CI passed in run 33997290487, attempt 2; the unchanged browser-route-handoff timeout passed on rerun without source changes.Named profile before:
Named profile after:
Unnamed email before:
Unnamed email after:
Production: +52/-58 (net -6). Tests/support, including the CI test-selection line: +490/-106 (net +384). Documentation: +2/-2. Contributor delta: production +53/-1 (net +52), tests/support +233/-21 (net +212). Maintainer delta excluding unrelated main integration: production net -58, tests/support net +172.
Credit: Jacqueline Henriksen (@jjjhenriksen). Original contributor commits and authorship remain in the branch ancestry.
Co-authored-by: Jacqueline Henriksen 179184921+jjjhenriksen@users.noreply.github.com
The latest ClawSweeper review has no remaining code findings. Its attachment-fetch limitation is resolved by maintainer inspection of the exact uploaded synthetic captures plus the executable before/after and real-Gateway evidence (resolution).