Repository navigation
Face room @ picker: each Bot in the room once, named Person · Bot, no outside friends' Bots - #339
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e37e3ac81d
ℹ️ 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".
| ...here.room.members.map(id => roster.byId[id]).filter(Boolean), | ||
| ...(here.room.participants ?? []).filter(p => p.kind === 'human' && p.leftSeq === undefined) | ||
| ...here.room.members.map(id => roster.byId[id]).filter(Boolean) | ||
| .map(bot => (face ? { ...bot, label: faceLabel(cleanPeerName(roster.self?.displayName, ''), bot.name, true) } : bot)), |
There was a problem hiding this comment.
Read local face-room owner names from participants
When the UI uses the supported legacy single-human path without a member-session actor, channel.js serializes roster.self as null even though each local face participant carries Bot Social's ownerName. This line therefore labels local candidates only Chief, while faceSeats in group-settings.js correctly shows <owner> (you) · Chief, so the picker breaks its same-as-Members contract and owner-name filtering; resolve the matching live participant and only fall back to roster.self.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Fixed in 7a5c44b: the label reads the matching live seat's ownerName first, then roster.self, like faceSeats.
…ots (ThinkFlowLab#431) Fixes ThinkFlowLab#305 What is left of ThinkFlowLab#305 after ThinkFlowLab#425 (one name per Bot): - **Face room `@` menu without DSH's Sessions rows** (owner decision: filter in FlyBot for now; ThinkFlowLab#422 stays open for a DSH API). DSH's built-in `reference` source cannot be dropped for one Session, so for a face-to-face room `HeaderPill` starts `actions.filterFaceAtMenu`, which watches that Session's trigger controller (`inputTriggers.sessionOf`, the one the composer uses; FlyBot already uses it for "Reference a chat"). New `face-at-filter.js`: a `<style data-bt-face-at>` hides the `reference` rows whose icon is `session` (Sessions and Subagents) and their section title, by MenuView's option ids; `controller.hover` moves the highlight past them in the direction of the key, so arrow keys skip them and Enter never picks a hidden row; a menu with nothing else left is `dismiss()`ed, so Enter sends. File rows stay. No DSH patch. - **Everyone's count** in a group now counts the Bots it reaches (local members plus seated friends' Bots), with singular/plural: `1 member` / `2 members` (also the palette's group subtitle). Face rooms keep `Every Bot in this room`. - Already on main, checked: one row per Bot in a face room (ThinkFlowLab#339), `Bot (owner)` naming (ThinkFlowLab#425), the mention chip with `@`, the same label on both homes and no doubled space (ThinkFlowLab#367/ThinkFlowLab#368, test `mention-rule.test.js`). Tests: `core/test/face-at-filter.test.js` (rows and titles hidden, files and Bots kept, highlight steering both ways, dismiss when only Session rows are left, watcher clean-up), `core/test/at-menu.test.js` (Everyone count). Docs: `docs/subsystems/core-client.md`. Changelog: `changelog.d/305-face-room-at-menu.fixed.md`. Ran: `ARCH_DOCS_BASE=origin/main TZ=UTC npm run verify` at 592d535 (core 966+ tests, social, tree, timeline, scripts, interop, live-e2e: all pass); `node core/scripts/build-client.mjs --check`; `node scripts/ds-bot-patches.mjs check`. Not run: smoke bench; a live two-home browser check of the face-room `@` menu in DSH Desktop (the CSS relies on MenuView's `dsh-slash-option-<source>-<index>` ids and `:has()`, checked against DSH 0.2.0-rc.2).
Part of #305 (the
@picker; the remaining items stay on the issue, see below).In a Face-to-face room the composer's
@now offers:SelfA · Chief,SelfB (you) · Chief;Every Bot in this room(the room's local member list holds only this home's Bots, so the old1 memberscount was wrong);remoteMentionRows, which inserted a raw handle) and no plugin rows (the socialFriends' Botssection): only Bots in the room can be reached in it.Only the label changes; the inserted text is still the
@Namethe room routes on (@SelfA's Chief), never a handle. Group chats and Bot chats are unchanged.Still open on #305 (not in this PR): DSH's own
Sessionsrows in the same menu (a shell source; ds-bot cannot hide it per Session without patching DSH), the sender chip without@/ double space, the receiver drawing the attestedmentionsas the same chip, and one Bot naming rule for the bubble header / details / tiles.Ran at tip:
TZ=UTC ARCH_DOCS_BASE=upstream/main npm run verify(core 868/868, social 220/220, tree, timeline and other suites pass;build-client --check,ds-bot-patches check, arch-docs ok). New test#305incore/test/at-menu.test.jsfails on main. Not run: smoke, a real browser.