Skip to content

fix(social): face-to-face tile UI, message sync and simpler + menu (#124 #125 #126) - #127

Merged
Birfy merged 1 commit into
ThinkFlowLab:mainfrom
Birfy:cursor/face-social-ui-fixes-dae8
Oct 16, 2026
Merged

Birfy merged 1 commit into
ThinkFlowLab:mainfrom
Birfy:cursor/face-social-ui-fixes-dae8

Conversation

@Birfy

@Birfy Birfy commented Oct 16, 2026

Copy link
Copy Markdown
Collaborator

Fixes #124
Fixes #125
Fixes #126

Found in a two-instance cloud UI self-test on 87c6940.

#124 Face-room human messages now go through the room post path (implicit owner when not signed in) with a quiet local notice, and skip the local Bot turn unless a local Bot is @mentioned. The other instance receives it via FLYBOT-FACE-HUMAN.

#125 The waiting screen is a tile grid (avatar above name, with owner), Leave and Enter chat on one row, live member count, and owner + Bot name in join lines. Leaving after the matching window ended moves the room to Past rooms. Past rows are unique with a single Open; live rows are click-to-open with Leave.

#126 The sidebar + is a short action menu. Add friend has one-click Copy invite link. Hold approvals show as Chief → the room instead of raw ids, and the Friends' Bots column no longer stacks jump lists. Softened "matching window" and "Add Agent" wording in the social +.

Deferred: grant-tied briefAllowed; envelope who is still taken from JSON rather than the sending member record; DSH core still says "Add DSH Agent" outside the social +.

ARCH_DOCS_BASE=upstream/main npm run verify passes. Smoke bench not run (no Harness checkout).

Face-room send posts a human line instead of a local bot prompt so
the other FlyBot instance sees it. Waiting UI is a tile grid; leave
after joining ends still goes to Past rooms; live rows stop stacking
Open/Start/Leave. The sidebar + is a short menu, Add friend mints
an invite, and in-chat holds use readable names.

Fixes ThinkFlowLab#124
Fixes ThinkFlowLab#125
Fixes ThinkFlowLab#126

Co-authored-by: Danyang Chen <birfychen@gmail.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 16, 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-16T10:43:13.264767Z 1dbadf3 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.

@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: 1dbadf3381

ℹ️ 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 core/src/host/channel.js
Comment on lines +372 to +373
const named = mentionSpans(text, bots).some(span => span.bot)
if (!named) return ok(true)

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 Treat @ALL as a local Bot mention

When a face-room owner sends @all (or another word from ALL_WORDS), mentionSpans returns a span with all: true, not bot, so named stays false and this branch returns without starting the local round. The line is displayed and fanned out, but none of the owner's local Bots answer even though group-chat mention semantics define @all as calling everyone; include span.all in this decision.

Useful? React with 👍 / 👎.

actions.openSession(room.id)
close()
})
const menuOnly = mode === 'new' && !compose && !group && picked.length === 0 && wanted === ''

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 Exclude Bot matches from the initial action menu

On the initial mode === 'new' render, wanted is empty, so matches contains every listed Bot. Although menuOnly hides the recipient field/composer and adds a New chat action, the unconditional loop at lines 133-135 still appends the whole roster, meaning the sidebar + opens a potentially long recipient picker rather than the intended short action-only menu (and the new unbounded menu styling can run past the pane for large teams). Suppress Bot matches until New chat switches compose on.

Useful? React with 👍 / 👎.

Comment thread plugins/social/client.js
const mint = () => run('Invite', async () => {
const botId = joiner || mine.find(bot => bot.isMain)?.id || mine[0]?.id
if (!botId) throw new Error('Choose one of your Bots to invite a friend to')
const invite = await call('social/create-invite', { botId })

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 user activation before copying the invite

In browsers that require transient user activation for navigator.clipboard.writeText (notably Safari/Firefox), awaiting the network-backed social/create-invite call before invoking the clipboard API loses the click activation, so the new one-click Copy invite link action mints a single-use invite but consistently falls back to “Could not copy.” The existing InviteToBot.copy path later in this bundle explicitly performs the clipboard write directly from a click for this reason; this flow needs a second user-initiated copy step or a selectable link.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants