Skip to content

improve(ui): show real machine identity in the place picker#112162

Merged
steipete merged 2 commits into
mainfrom
steipete/place-identity
Jul 21, 2026
Merged

improve(ui): show real machine identity in the place picker#112162
steipete merged 2 commits into
mainfrom
steipete/place-identity

Conversation

@steipete

Copy link
Copy Markdown
Contributor

What Problem This Solves

The place picker introduced in #112035 labels the gateway destination with a hardcoded "Gateway · local" — it never shows the machine's real name, and "local" is misleading when the Control UI is opened from another device (the Gateway is local to itself, not to the viewer). Duplicate device names also collide with no disambiguation: two Macs named "Mac Studio" render as identical rows, and two recent folders with the same basename are indistinguishable, so picking the wrong machine or checkout is one click away.

Why This Change Was Made

Identity should be honest without leaking transport noise:

  • The gateway destination now shows the host's real machine name via the existing system.info method (machineName, hostname fallback), rendered as "Gateway · Peters-Mac-Studio" everywhere the destination appears — chip, Places row, runs-on note, browse header. When the method is unavailable or unadvertised, the previous "Gateway · local" fallback renders unchanged.
  • Duplicate labels get a deterministic, collision-only muted suffix: the first fact that fully separates the group — for devices modelIdentifier, then remoteIp, then a node-id prefix; for recent folders the parent directory, then the full path, then node facts (two recents can share a path while targeting different same-named nodes). Unique labels stay exactly as before.
  • Node rows carry a fact tooltip (platform · model · IP); phone-family nodes get a phone chip icon. IP addresses never render inline by default — they appear only in tooltips or as a collision tiebreaker when better facts tie.

User Impact

Multi-machine fleets can tell their places apart: the Gateway names the actual host, same-named devices show the fact that differs, and same-named checkouts show where they live. Single-machine setups see no change beyond the honest gateway name. The mock dev harness demos all of it (named gateway, colliding Mac Studios, colliding recents).

Before:

After — named gateway, model-suffixed duplicate devices, parent-suffixed duplicate recents:

Evidence

  • Unit: node scripts/run-vitest.mjs ui/src/pages/new-session — 12 files, 82 passed (new place-labels.test.ts covers the full-distinctness rule: A/A/B model groups advance to the next separating fact, exhausted candidates fall back to the guaranteed-unique last candidate).
  • E2E (mock gateway, Playwright): 35 passed, including three new tests — named gateway via mocked system.info (with the existing fallback test passing unchanged), two same-named nodes rendering distinct model suffixes with IP tooltips, and colliding recents applying the correct sessions.create payload.
  • Structured review (Codex gpt-5.6-sol) ran to clean over two cycles; the accepted findings (partial-group ambiguity in the disambiguation predicate, recents colliding across same-named nodes) are fixed in this diff.
  • No protocol changes; system.info is an existing method, gated on advertisement like its other UI call site. canSubmit/cloud/worktree machinery untouched.

The place picker labeled the gateway destination with a hardcoded
'Gateway · local' and let duplicate device names collide. The gateway
destination now shows the host's machine name via the existing
system.info method (falling back when unavailable), node rows carry
platform/model/IP facts as tooltips, and duplicate labels — same-named
devices and same-basename recent folders — get a deterministic muted
suffix chosen collision-only (model, then IP, then id; parent folder,
then path, then node facts for recents). IP addresses never render
inline by default. Phone-family nodes get a phone chip icon.
@openclaw-barnacle openclaw-barnacle Bot added app: web-ui App: web-ui scripts Repository scripts labels Jul 21, 2026
@steipete
steipete marked this pull request as ready for review July 21, 2026 05:58
@openclaw-barnacle openclaw-barnacle Bot added size: L maintainer Maintainer-authored PR labels Jul 21, 2026
@clawsweeper

clawsweeper Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper status: review started.

I am starting a fresh review of this pull request: improve(ui): show real machine identity in the place picker This is item 1/1 in the current shard. Shard 0/1.

This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking.

Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted.

@clawsweeper

clawsweeper Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

ClawSweeper status: review started.

I am starting a fresh review of this pull request: improve(ui): show real machine identity in the place picker This is item 1/1 in the current shard. Shard 0/1.

This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking.

Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted.

@steipete
steipete merged commit dd6e366 into main Jul 21, 2026
102 checks passed
@steipete
steipete deleted the steipete/place-identity branch July 21, 2026 07:12
@steipete

Copy link
Copy Markdown
Contributor Author

Merged via squash.

vincentkoc added a commit that referenced this pull request Jul 21, 2026
* origin/main: (24 commits)
  fix(agents): keep compaction on live session model (#95713)
  fix(plugin-sdk): guard provider catalog live URL parsing against malformed responses (#109986)
  chore(cli): drop dead classifiers and single-use wrappers left by fallback removal (#112191)
  feat(ui): expand the lobster pet's random universe (#112073)
  chore(ci): audit dependency fingerprint exports (#112190)
  fix(ui): preserve graphemes in provider icons (#109509)
  fix(ui): align settings search with navigation rows (#112172)
  fix(agents): allow configless gateway rebind to activate standalone owner (#111841)
  fix(secrets): register secret targets for installed-origin plugins (#104347)
  improve(ui): show real machine identity in the place picker (#112162)
  fix: webChat scrollback history is too limited — older assistant replies and tool outputs disappear when scrolling… (#104250)
  test(ui): run DOM-free suites in Node (#112031)
  feat(nodes): make computer.act eligibility capability-based for desktop nodes (#112107)
  fix(apps): harden mobile gateway and watch state
  fix(ci): restore Z.AI API Platform validation (#112171)
  fix(ui): prevent Logs controls from overlapping (#112170)
  fix #95291: message tool fails to deliver files/images on Feishu (400 volc-dcdn / write ECONNRESET) while same Lark SDK upload succeeds standalone (#95514)
  refactor(cli)!: remove automatic gateway→embedded fallback from openclaw agent (#112074)
  refactor: move provider transports into packages/ai behind a typed host port (#111669)
  fix(anthropic): complete transcript reverse-scan windows across short reads (#109431)
  ...
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 22, 2026
…#112162)

* improve(ui): show real machine identity in the place picker

The place picker labeled the gateway destination with a hardcoded
'Gateway · local' and let duplicate device names collide. The gateway
destination now shows the host's machine name via the existing
system.info method (falling back when unavailable), node rows carry
platform/model/IP facts as tooltips, and duplicate labels — same-named
devices and same-basename recent folders — get a deterministic muted
suffix chosen collision-only (model, then IP, then id; parent folder,
then path, then node facts for recents). IP addresses never render
inline by default. Phone-family nodes get a phone chip icon.

* fix(ui): appease prod-type and no-shadow gates in place identity helpers
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: web-ui App: web-ui maintainer Maintainer-authored PR scripts Repository scripts size: L

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant