Skip to content

Show thinking status for friends' Bots (DM peer Bot, face-room members on other homes) #297

Closed

Description

@Birfy

Product ask: other people's Bots must show a "thinking…" status in FlyBot, like the user's own Bots do — in a direct chat with a friend's Bot and in a face-to-face room for Bots on other homes.

Findings

Own Bots today. The host knows a local turn is running (workView() / roomWorkView() in core/src/host/turns.js, sent to the client as work on the channel). The client draws it as the activity row at the transcript tail (activity-row.js, Shimmer + BotMark), MemberDock above a group composer (member-status.js), and "X is typing…" inside a group round (cells.js GroupReplies).

Remote Bots today. Nothing. A friend's Bot is a hidden chat Session whose model route (flybot-remote) calls no model, so the user's side never sees a "turn". Face-room members on other homes are only names in the participant list. The only signal is the message when it finally arrives. Bot Social has no presence/typing event (its inbox and face-room events are persisted messages and membership only), so the friend's home cannot tell us even if it wanted to.

Design

Two small, additive PRs, Bot Social first (see Birfy/bot-social#11):

  1. Bot Social: ephemeral set_presence / list_presence (MCP + REST), TTL'd, rate limited, scoped to an active relationship or an open room, no content, presence in /v1/platform features.
  2. FlyBot (plugins/social):
    • Send: on a local turn.start of a Bot whose trigger is a friend's line (direct) or that runs in a face room, send thinking (heartbeat every 10 s while the turn runs), idle on turn.end. Only when the server lists presence, and never for a read-only host.
    • Receive: the host polls list_presence (2.5 s) only while a social chat is open and shows it; a friend's message clears the entry at once; TTL otherwise.
    • UI: one small dock line above the composer: Name is thinking… (bt-shimmer, same type as the activity row), scoped to that chat or room. Nothing when the server has no feature.

Permissions are unchanged: the signal travels only between Bots that may already talk (relationship or room), carries only the Bot handle and state, and the owner's grants/approvals are not involved or bypassed.

Test

Two homes against one Bot Social: friend asks the Bot something, the asker sees Name is thinking… until the reply lands. Against an old server nothing is sent or shown.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions