Skip to content

Approve held replies in the open chat; compact Friends' Bots panels; Add friend moved into the + menu - #116

Merged
Birfy merged 2 commits into
ThinkFlowLab:mainfrom
Birfy:cursor/inline-approvals-compact-panels-dae8
Oct 16, 2026
Merged

Birfy merged 2 commits into
ThinkFlowLab:mainfrom
Birfy:cursor/inline-approvals-compact-panels-dae8

Conversation

@Birfy

@Birfy Birfy commented Oct 16, 2026

Copy link
Copy Markdown
Collaborator

Why

Approving a Bot Social hold meant leaving the conversation for a bloated sidebar card, and the Friends' Bots panel (approvals, Auto-send, Face-to-face rooms, "+ Add") had grown heavy. Creation actions belong in the single top-level "+" menu.

What

Fixes #114
Fixes #115

Verification

  • ARCH_DOCS_BASE=upstream/main npm run verify exit 0 at 906205b; patches generate/check and changelog check pass.
  • Not run: smoke, live click-through.

cursoragent and others added 2 commits October 16, 2026 04:22
Approving a Bot Social hold required leaving the conversation for a
bloated sidebar card. The in-chat dock now shows the draft with Approve
/ Reject for the owner (Waiting for the owner's approval for others),
Approve all when several, and a gold wait badge on the chat row. Friends'
Bots is a one-line jump list; Auto-send is one compact tooltip toggle.
Face-to-face rooms are one row each, with closed/left under Past rooms.

Fixes ThinkFlowLab#114
Fixes ThinkFlowLab#115

Co-authored-by: Danyang Chen <birfychen@gmail.com>
The section header + Add control is gone. Add friend and Friend requests
are flybot.new-chat.action rows next to Face-to-face group; they still
open the same join / Accept / Decline panel in Friends' Bots. The header
is title, count, and the approvals chip.

Fixes ThinkFlowLab#115

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-16T04:36:52.636776Z 906205b 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: 906205b230

ℹ️ 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
from: approval.senderName,
to,
toName: approval.targetName || to,
text: approval.request?.text || approval.reason,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Show attached files in the in-chat approval card

Whenever a Bot-originated local hold contains attachments, this projection drops approval.request.attachments, yet the resulting in-chat card still exposes Approve. The social send policy deliberately holds Bot attachments so the owner can inspect them before they leave, and the global approval card shows their names and sizes; approving through this new path can therefore release files without showing what is being sent. Carry safe attachment metadata into localHoldView and render it before allowing the decision.

Useful? React with 👍 / 👎.

Comment thread plugins/social/client.js
Comment on lines +663 to +665
if (item.source === 'local') await call('decide', { id: item.id, decision })
else await call('social/decide-approval', { approvalId: item.id, decision })
const status = decision === 'reject' || decision === 'rejected' ? 'rejected' : 'approved'

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 Honor failed outcomes from local approval decisions

When a local approval's downstream dispatch fails (for example, Bot Social is unreachable), flybot/decide resolves with the approval in failed state rather than throwing, but this code ignores that result and hard-codes the item as approved, falsely indicating that the send succeeded. The next poll also includes failed records while localHoldView drops their status, so they return as Approve/Reject cards even though core/src/host/hooks.js permits only retry for a failed approval. Preserve the returned status and present a Retry action for failed sends.

Useful? React with 👍 / 👎.

Comment on lines +1451 to +1452
rememberPastFace(viewHostedFace(hosted, { faceRoomId: serverId, localRoomId: meta?.localRoomId, status: 'closed' })
|| { faceRoomId: serverId, roomId: meta?.localRoomId, name: 'Face-to-face room', status: 'closed', members: [] })

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 Persist rooms moved into the Past rooms list

When Bot Social stops returning the only tracked face room, these lines capture its past-room snapshot and then remove it from settings.faceRooms, but the save guard at line 1460 compares the listed count with the already-pruned map (0 === 0) and does not save. On restart the settings file still treats the room as live; because the core room was already deleted, polling can only reconstruct the generic fallback, losing the captured room name and members. Save settings whenever this loop archives a room.

Useful? React with 👍 / 👎.

Comment thread plugins/social/client.js
h('span', { className: 'fs-chev', 'aria-hidden': true, 'data-closed': pastOpen ? undefined : true }, '▾'),
'Past rooms',
h('span', { className: 'fs-count' }, String(past.length))),
pastOpen ? past.map(card) : null) : null)

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 Suppress Leave on past room rows

For every closed or left item expanded under Past rooms, past.map(card) reuses the live FaceRoomCard, including its Leave button. These records are created only after the live settings.faceRooms entry is deleted and the server no longer lists the room, so clicking Leave calls social/face-leave again with a stale room id and either errors or no-ops while the row remains. Render past entries as history rows without the live Leave action.

Useful? React with 👍 / 👎.

@Birfy
Birfy added this pull request to the merge queue Oct 16, 2026
Merged via the queue into ThinkFlowLab:main with commit 28ca0a6 Oct 16, 2026
6 checks passed
@Birfy
Birfy deleted the cursor/inline-approvals-compact-panels-dae8 branch October 16, 2026 05:06
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