Repository navigation
Closed
Labels
area:socialFriends, invites, grants, Bot SocialFriends, invites, grants, Bot Socialarea:uiWeb/desktop UI and copyWeb/desktop UI and copybugSomething isn't workingSomething isn't workingself-testFiled by the product self-test routine (issues only)Filed by the product self-test routine (issues only)
Description
Summary
In B's chat with a friend's Bot (A's Chief), the chat shows things that mean nothing to a person talking to a friend's Bot: an internal Tool removed: … line, a local run-stats footer (9 turns 9 steps · 0 tok/s · 0%, and 1 turns), and after the first send the composer placeholder switches from Message SelfA1238's Chief to the coding-agent copy Message or run a task, / commands, @ files or sessions.
Environment
- FlyBot main
a7f51e83ffacc4a6e803669d25fdc9e40eef6c44(Add friend: accept and invite as two labelled groups, Done at the bottom #416), core + plugins/social + plugins/tree on@deepseek-ai/dsh@0.2.0-rc.2, Node 24.21.0. - Two fresh installs on one Linux box: A
:3090(owner SelfA1238,@selfa1238.home) and B:3091(owner SelfB1238,@selfb1238.home). Bot Social prodhttps://47-80-69-220.sslip.io. Both Chiefs onark/deepseek-v4-flash(real model). - Friend link: A made a per-Bot invite for A's Chief; B joined it, talking through B's Chief (relationship
rel_01M597ETM4MFYM90M80ER53J8G, grantgrt_01M597ETM5PK3PNKGZ09R7PC96→@selfb1238.home). B's Chief is not shared back (one-way per-Bot grant, by design Per-Bot grants leak: accepting a Helper invite exposes the joiner's Chief; face-room Chief shows in Friends' Bots; Manage access wrong/raw #138/Regression of #138: joining a friend's invite still puts the joiner's Chief on the inviter's main list #161). A's Chief =@chief.selfa1238.home, B's talk-through Bot =@chief.selfb1238.home. - Auto-send was off on both homes at the start.
- Found by product self-test 2026-10-19 12:38 Asia/Shanghai, focus A Friend DM (browser run about 12:41–12:50 Asia/Shanghai). Screenshots stayed on the test machine; what they show is written out below.
Common setup (B talks to A's Chief)
On B, open the sidebar row for A's Chief (Chief + grey SelfA1238 + globe) and send, one at a time, waiting for each answer:
Hi Chief, this is B. What is 2+2? Reply in one short line.→ A's Chief drafts4.; on A click Reject.Second test: what is 3+3? One line.→ draft6.; on A click Approve.Third test: what is 4+4? One line.→ draft8.; on A click Always approve.Fourth test: 5+5? One line.andFifth test: 6+6? One line.→10.and12.go out without a card.
Repro
- On B, open the
Chief SelfA1238row (A's Chief). Read the composer placeholder and the footer under the composer. - Run the common setup (send the five lines). After the first send, read the placeholder again, the line above the first reply, and the footer after each reply.
Actual (B)
- Leaked tool-mask line. Once, between B's second line and the first reply, a centred grey system line:
Tool removed: create_child_bot · Tool removed: list_children. Screenshot11-B-view-of-replies.png: B's chat titledSelfA1238's Chief; B's five black bubbles on the right, replies6.,8.,10.,12.on the left, and theTool removed: …line right above6.. Polish: Tool added/removed lines every turn, Chief self-intro wording differs, friend's Bot offered as a Main Bot, gear hover inconsistent #276 fixed the per-turn flip; this is the remaining first-time line, shown in a friend chat where those tools are not even this home's. - Run-stats footer. Under the composer:
1 turns 1 steps · 0%after the first reply, later9 turns 9 steps · 0 tok/s · 0%(shot 11). The friend's Bot runs on A, so tokens/speed/cache here are always 0 and the counts are not something a person needs in a friend chat.1 turns/1 stepsis also wrong English. - Placeholder changes. Before the first send:
Message SelfA1238's Chief. After the first send it becameMessage or run a task, / commands, @ files or sessions(coding/dev copy;/commands and@ files or sessionsare not offered for a friend's Bot). It came back toMessage SelfA1238's Chieflater in the run (shot 11), so it flips. - Minor, consistency: the replies are small grey left bubbles with no avatar or name. This matches own 1:1 chats (A's own Chief replies look the same, shot 04), so it is only a problem together with Friend's Bot rows: two name formats ('Helper · SelfB0023's Bot' vs 'SelfA0023's Chief'), two-line wrap, no preview, inset highlight, faint marker, same avatar as own Chief #384 naming; listed for completeness, maintainer call.
Why (code read on a7f51e8; hunches)
- Tool line:
ContextCell(core/src/client/cells.jsL573–583) shows everytool-removal/tool-additionblock exceptHIDDEN_REMOVED_TOOLS(ask_user_question). The firsthidePluginToolsmask (core/src/host/hooks.jsL652–669) on the remote chat's agent writes oneTool removedfor the tree tools (plugins/tree/src/tools.js,visibleTo: inTree). - Footer: the DSH session stats line is drawn for every session, including
flybot-remote/<handle>sessions (remote-chat,core/src/host/remote-chat.js), whose turns are local relay turns. - Placeholder: FlyBot sets
--bt-placeholderfromMessage {name}(patches/ds-bot/0012-room-membership.patch~L440,core/client.jsL6968). After a turn the DSH composer's own default placeholder seems to win until the next re-render.
Expected (simplicity, consistency, English only)
- No
Tool added/Tool removedlines from plugin tool masks in any chat (hide them likeask_user_question, or apply the mask before the first turn so no block is written). At least never in a friend's Bot chat. - No run-stats footer in a friend's Bot chat (remote session); in own chats, correct plurals (
1 turn · 1 step). - The composer placeholder stays
Message <friend Bot name>in a friend's Bot chat (name per Friend's Bot rows: two name formats ('Helper · SelfB0023's Bot' vs 'SelfA0023's Chief'), two-line wrap, no preview, inset highlight, faint marker, same avatar as own Chief #384:Message Chief (SelfA1238)), never the coding copy.
Suggested scope / files
core/src/client/cells.js(ContextCell,HIDDEN_REMOVED_TOOLSor a check for plugin-gated tool names),core/src/host/hooks.js(hidePluginToolson first resolve).- The stats footer render for remote sessions (FlyBot core client / DSH patch where the footer is drawn).
patches/ds-bot/0012-room-membership.patch/core/client.jscomposer label.- Tests for: no tool-mask cell in a remote chat; stats footer hidden for
flybot-remote/*; placeholder unchanged after a turn.
Acceptance criteria
- A fresh friend chat on B never shows
Tool removed:/Tool added:lines. - No turns/steps/tok/s footer in a friend's Bot chat;
1 turn/1 stepgrammar in own chats. - Placeholder stays
Message <friend Bot>before and after sends.
Related: #276 (closed; per-turn flip fixed, first line remains), #140, #384.
Metadata
Metadata
Assignees
Labels
area:socialFriends, invites, grants, Bot SocialFriends, invites, grants, Bot Socialarea:uiWeb/desktop UI and copyWeb/desktop UI and copybugSomething isn't workingSomething isn't workingself-testFiled by the product self-test routine (issues only)Filed by the product self-test routine (issues only)
Activity
Birfy commentedon Oct 19, 2026
Triage on main
a7f51e8, 2026-10-19 ~14:15 Asia/Shanghai: design conflicts resolved, spec clear; ready to develop. Checked: #276 (per-turn flip already fixed), #384 (placeholder name follows the decidedChief (SelfA1238)format), English UI and simplicity rules. Owner-delegated decision on the minor item: the small grey left bubbles with no avatar stay as they are (they match own 1:1 chats); not part of this issue.Birfy commentedon Oct 19, 2026
Claimed by the maintenance routine (2026-10-19 ~14:40 Asia/Shanghai): working on branch
Birfy:fix/419-friend-chat-clutter.Plugin tool names ride every state answer; context rows follow them (T…
Birfy commentedon Oct 19, 2026
Status after #424 (merged, main
73aae3b; checked on main0852b3f, 2026-10-19 16:59 Asia/Shanghai):Done
Tool added/Tool removedlines from plugin tool masks in any chat (Friend's Bot chat: no plugin tool-mask lines, no stats footer, composer keeps Message <Bot> #424).Message <Bot>after a send (Friend's Bot chat: no plugin tool-mask lines, no stats footer, composer keeps Message <Bot> #424). The name uses theChief (SelfA1238)format from One name for a friend's Bot: Bot (owner), everywhere #425 (header.jsbuilds it withremoteBotTitle).Still left
1 turns 1 stepsgrammar in own chats. This is DSH's ownstats.countsstring, and FlyBot does not patch DSH.Owner-delegated decision: fix the plural in FlyBot only if it can be done without patching DSH, e.g. a FlyBot locale override or shadowing the node, like
TurnErrorCellshadows DSH'sturn-error. If no clean way exists, drop the plural item and close this issue. No upstream DSH request for now (same call as #422). The next friend-DM self-test should check the three done items on a fresh friend chat.Unassigned and
agent-workingremoved so a later run can take the plural item. Keepingagent-ready.Birfy commentedon Oct 19, 2026
Claimed by Birfy's maintenance Bot at 2026-10-19 17:59 Asia/Shanghai. Working on branch
fix/419(Birfy/FlyBot) off main 245be0b.Birfy commentedon Oct 19, 2026
Decision (2026-10-19 18:06 Asia/Shanghai, owner-delegated): the plural item can be done cleanly without patching DSH, so it is fixed in #438 rather than dropped. FlyBot shadows DSH's
conversation.composer.dockentrystatsone priority lower and renders the shell's own footer component with its own inject andchatlocale, only swapping in atthat turns the exact English{turns} turns {steps} stepsinto1 turn/1 step. Kept DSH's format (no new separator), Chinese passes through, and a test flags it if DSH changes the template or dock id. The other three items were done by #424; the live two-home check stays for the next friend-DM self-test.Polish invites and friend chats: friend Bot placeholder, one invite c…
fix(client): wrap the run-counts pill on shells that split the footer (…
Keep the header's Session effects off the pill's seat (ThinkFlowLab#803)