Repository navigation
[Team] Remove a friend's Bot, and approve held Bot replies inside the chat #90
Copy link
Copy link
Closed
Description
Problem
A user cannot remove a friend's Bot from Friends' Bots. The group header only has the Auto-accept toggle, the Social plugin does not wire any remove action, and a Bot's pending outbound reply is only visible in the sidebar "to approve" list, not in the chat where it was produced.
Intended relationship model (owner's design, takes precedence)
- Grant. A Bot's owner publishes one Bot to a friend. It is a child Bot: it can only manage its own downstream in the owner's tree, nothing else. Grants are per Bot, not per person, and the owner can revoke them at any time.
- Use. The granted Bot shows up under Friends' Bots. The user can chat with it alone, add it to a group, or bring it into a face-to-face group (6-digit number, [Feature] Face-to-face group: Bots join one room by entering the same 6-digit number #83).
- Group. Every human in the group can talk to and operate these Bots. A Bot can never act beyond its grant (its own downstream). A member sees history only from their own join point; leaving withdraws access.
- Approval. Whether a Bot's reply goes out is decided by the Bot owner's outbound approval rules (auto-approve on/off), not by the group.
Scope
A. Remove a friend's Bot (my side)
- Right-click a friend's Bot (and a visible control in the row) -> Remove this Bot.
- Effect: removes it from my Friends' Bots list and from my groups. It does not unfriend the owner and does not touch their other Bots. If the Bot is still published to me, it can reappear after a refresh unless I hide it; define this clearly: removing = hide locally and leave all rooms it is in, and show it again if the owner re-shares it explicitly.
- No typed code needed (local action). Unfriending the whole owner is out of scope here (needs the server confirmation code) and must not be mixed into this action.
- Owner side: revoking a published Bot (the
publishedtoggle from [Team] Gate cross-owner agent routes by per-Bot grants (default deny; superseded the publication gate) #51/feat(social): face-to-face group: join a room by entering the same 6-digit number (#83) #88) makes it disappear for everyone; make sure the friend's list reflects that on next refresh.
B. Approval prompts inside the chat
- When a Bot reply is held for approval, render it in the chat (single or group) as a "Waiting for approval" message with Approve / Reject buttons and an inline Auto-send toggle. Approve sends it; Reject discards it and leaves a note in the chat.
- Who can approve: the Bot's owner (for my Bots, me). Other humans in the group see "Waiting for the owner's approval" without buttons.
- Keep the sidebar "to approve" badge, but it should just link to the same messages.
- Approve/Reject must go through the existing Bot Social approval path (
decide-approval), no new bypass. Auto-approve uses the existing setting.
Acceptance criteria
- Tests for: removing a remote Bot (leaves rooms, list updated, friend unaffected), re-share behaviour, in-chat approval rendering for owner vs non-owner, approve/reject, and the chat note after reject.
- Update
docs/subsystems/*.md,CHANGELOG.md; keepds-bot/pristine (usepatches/ds-bot/*.patchif a core change is needed); client bundle built withscripts/build-client.mjs --check; CI green.
Related: #50 (rooms with remote Bots), #51 (publishing), #83 (face-to-face groups), #69 (approvals not discoverable).
Metadata
Metadata
Assignees
Labels
No labels
Activity
Birfy commentedon Oct 15, 2026
Scope C (added): publish defaults to off for every Bot, Chief included
Publishing is only ever an explicit owner action. Existing Chiefs become unpublished after upgrade until re-enabled; call this out in the CHANGELOG/PR.
Birfy commentedon Oct 15, 2026
Design change (owner): no
publishedmechanism, per-Bot grants onlySupersedes scope C and the publish model of #51/#88. The global
publishedflag, its toggle and the reach() published gate are removed. Every access is an independent per-Bot grant (one Bot -> one person, scoped to a group when used in one). Default deny, Chief included. Friends' Bots lists only Bots granted to me. Grants are created through the existing per-Bot invite and revocable per Bot and person, with a 'Manage access' view. A granted Bot can be chatted with and added to groups by the grantee; group members operate it only inside that group and within its downstream authority. Face-to-face: bringing my own Bot by number is an implicit room-scoped grant. Server side tracked in Birfy/bot-social.Merge pull request #91 from Birfy/cursor/remove-friend-bot-inchat-app…