Skip to content

Face-to-face: per-Bot avatars and a tile-grid waiting room - #107

Merged
Birfy merged 4 commits into
ThinkFlowLab:mainfrom
Birfy:cursor/face-to-face-avatars-dae8
Oct 15, 2026
Merged

Birfy merged 4 commits into
ThinkFlowLab:mainfrom
Birfy:cursor/face-to-face-avatars-dae8

Conversation

@Birfy

@Birfy Birfy commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator

Follow-up to #100 (owner feedback).

  • Each Bot shows its own distinct avatar in the Face-to-face Bot picker and in the waiting room.
  • The waiting room is a wrapping tile grid (avatar on top, name below), no owner subtitle or heavy badge.
  • Leave and Enter chat share one footer row.
  • Tests updated; local verify passed.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-15T16:12:34.523142Z dc43729 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

cursoragent and others added 4 commits October 15, 2026 16:09
The picker and waiting roster used a shared first-letter badge, so every
Bot looked the same. Reuse the host BotAvatar (configured image/shape/color,
else a stable look from the Bot id or a friend's handle).

Co-authored-by: Danyang Chen <birfychen@gmail.com>
Roster rows are one line (avatar + name, muted mine/owner hint). Leave
and Enter chat share a fixed footer so a long list can scroll under the
countdown.

Co-authored-by: Danyang Chen <birfychen@gmail.com>
One Bot per row was the wrong waiting-room shape. Tiles match a
WeChat group-member grid: avatar on top, name centered below,
several columns wrapping. Mine is a tiny accent dot, not a badge
or owner subtitle. The picker uses the same tiles with a check
overlay. Footer still keeps countdown at the top and Leave +
Enter chat on one row.

Co-authored-by: Danyang Chen <birfychen@gmail.com>
Take main's generated patches/ds-bot and rewrite them from core/. New
files stay in files/; CHANGELOG.md is untouched (fragment in changelog.d/).
The BotAvatar host-look note is a heading on plugin-runtime.md so it does
not share the numbered invariant list.

Co-authored-by: Danyang Chen <birfychen@gmail.com>
@cursor
cursor Bot force-pushed the cursor/face-to-face-avatars-dae8 branch from dc43729 to 8dcaf60 Compare October 15, 2026 16:11
@Birfy
Birfy enabled auto-merge October 15, 2026 16:12

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dc43729939

ℹ️ 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".

Comment thread plugins/social/client.js
return full ? { ...local, ...full } : local
}
if (!member) return undefined
const mine = (bots ?? []).find(bot => bot.handle && bot.handle === member.handle)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Resolve newly registered Bots by their local identity

When a selected Bot had no Bot Social identity when the dialog loaded, bots contains no handle; social/face-join creates the handle later, but this state is never refreshed. This handle-only lookup therefore misses the owner's Bot (even though the post-poll viewHostedFace member carries its local id) and faceLook treats it as remote, so its waiting-room tile changes from the configured roster avatar shown in the picker to a handle-seeded avatar. Match the local member id/join result or refresh the mapping after registration.

Useful? React with 👍 / 👎.

ownerName: cleanFaceName(member.owner_name || member.ownerName, ''),
roomOnly: member.roomOnly === true || member.published !== true,
label: cleanFaceName(member.label, '') || faceMemberLabel(member),
...faceMemberLook(member),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve payload avatars when polling face rooms

When a face-room member supplies a color/avatar, this spread preserves it only in the raw join snapshot. The waiting-room effect immediately calls social/face-rooms, whose applyFaceSnapshot maps members into the hosted room without color or avatar; viewHostedFace then reconstructs stripped members and setRoom replaces the array. As a result, the peer's supplied profile look disappears on the first poll, so these fields need to be carried through the hosted-room path or merged from the prior snapshot.

Useful? React with 👍 / 👎.

@Birfy
Birfy disabled auto-merge October 15, 2026 16:13
@Birfy
Birfy added this pull request to the merge queue Oct 15, 2026
Merged via the queue into ThinkFlowLab:main with commit edc66db Oct 15, 2026
6 checks passed
@Birfy
Birfy deleted the cursor/face-to-face-avatars-dae8 branch October 15, 2026 16:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants