Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ All notable changes to FlyBot (earlier: DS Bot) are listed here. The format foll

### Changed

- **Face-to-face group lives under + Add (#92).** Friends' Bots no longer has an inline **Join with a number** form. **+ Add** opens a **Face-to-face group** screen: pick one or more of your Bots (multi-select; default: the Main Bot), type the 6-digit number, and join at once (no preview). Several selected Bots join the same room (one `social/face-join` per Bot; partial failures stay on screen). A live waiting room lists who joined (Bot and owner; yours marked **mine**) with the countdown, **Enter chat** (starts the room and opens it), and **Leave**. If someone else starts the chat, this screen opens it. Joining an unregistered Bot still registers it for that room only; the screen does not mention published. ([#92](https://github.com/ThinkFlowLab/FlyBot/issues/92))
- **Friends' Bots on a high-latency link.** The panel no longer blocks on `Loading…`. It paints a cached roster immediately (stale-while-revalidate) with a small **Refreshing…** mark, and the mount path starts `social/remote-bots`, `social/settings`, and `social/status` together. Grant listing no longer holds the roster (and runs with a concurrency cap). MCP/REST share a keep-alive HTTP agent instead of a new TLS handshake per call. Approvals poll every 15s and pause while the panel is collapsed or the window is hidden; face-room cards do not hammer `GET /v1/face-rooms` unless a room is still a candidate. ([#96](https://github.com/ThinkFlowLab/FlyBot/pull/96) follow-up)
- **Face-to-face group lives on the sidebar + menu (#92).** The global **+** (next to Search) opens the new-chat picker with **Face-to-face group** / **面对面建群** right after **Create group chat** / **新建群聊**. That row uses the same `t()` map as its neighbours (`flybot.new-chat.action`). It still appears under Friends' Bots **+ Add**, including while the roster is loading. ([#92](https://github.com/ThinkFlowLab/FlyBot/issues/92))
- **Face-to-face group join screen (#92).** Friends' Bots no longer has an inline **Join with a number** form. **Face-to-face group** opens a screen: pick one or more of your Bots (multi-select; default: the Main Bot), type the 6-digit number, and join at once (no preview). Several selected Bots join the same room (one `social/face-join` per Bot; partial failures stay on screen). A live waiting room lists who joined (Bot and owner; yours marked **mine**) with the countdown, **Enter chat** (starts the room and opens it), and **Leave**. If someone else starts the chat, this screen opens it. Joining an unregistered Bot still registers it for that room only; the screen does not mention published. ([#92](https://github.com/ThinkFlowLab/FlyBot/issues/92))
- **Per-Bot grants replace `published` (#90).** There is no global “Published to friends” toggle and no “publish all my Bots” concept. Every access is an independent grant: one of my Bots → one person (optionally scoped to a group). Default deny, Chief included. Accepting **Invite to this Bot** creates the grant; **Manage access** on that Bot lists who has it, in which groups, and **Revoke**. Friends' Bots lists only Bots granted to me. A granted Bot can be chatted with and added to a group; inside that group every human may talk to it only there and only within the Bot's own authority. Bringing my own Bot into a face-to-face room by its 6-digit number is an implicit room-scoped grant (room-only auto-registration from #89), never visible outside the room. Upgrading means no Bot is shared until it is granted. Core `reach()` is grant-based; `@flybot/social` isolates grant/invite server calls in `src/mcp-client.js`. ([#90](https://github.com/ThinkFlowLab/FlyBot/issues/90))

### Added
Expand All @@ -20,6 +22,7 @@ All notable changes to FlyBot (earlier: DS Bot) are listed here. The format foll

### Fixed

- **Remove this Bot** no longer comes back after ×. A hide is forgotten only after two consecutive successful `list_remote_bots` results without that handle (or a real revoke), never on a failed, partial, or legacy `list_friends` fetch. Hidden handles stay out of `flybot.remote.publish`; gone and home-level remotes (`Friend` at `@something.home`) are hidden in the sidebar and the **发给 / 和谁聊…** picker, with history kept. Picker rows use the same owner label as the sidebar (`<Bot> · <owner>'s Bot`, Chief → `<owner>'s Chief`).
- **Remove this Bot** no longer waits for room leave or a roster refetch: the hide is saved and the filtered list returns immediately; rooms leave in parallel and a fresh fetch continues in the background. Concurrent removes keep their own “Removing…” state. The control is a compact × on row hover/focus (keyboard and the right-click menu still reach it).
- Peer-published Bot labels (`name`, `homeName`, `owner`) are sanitized at `cleanRemote`: `@` and control characters/newlines are stripped, then the 60-character cap still applies, so a display name cannot impersonate another member's handle. ([#75](https://github.com/ThinkFlowLab/FlyBot/issues/75))
- A chat with a friend's Bot that Bot Social has paused (turn budget reached, loop suspicion, emergency stop) now says so and points at the Bot Social console, instead of failing with a bare "Not sent: …" card. A paused conversation is no longer retried with the friendship's other Bots. ([#72](https://github.com/ThinkFlowLab/FlyBot/issues/72))
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ Every local Bot can chat with friends' Bots through a [Bot Social](https://githu

- **One-click onboarding.** On first start with a `server` configured, FlyBot calls `POST <server>/v1/onboard/flybot`, creates your home (`@<name>.home`), and stores credentials in `$DSH_HOME/bot/flybot-social.json` (mode 600).
- **Members.** Access is a per-Bot **grant** (default deny, Chief included). A local Bot becomes `@<bot>.<home>` on the server when you invite someone to that Bot, when it joins an invite, or when you bring it into a face-to-face room. Friends' Bots lists only Bots granted to you. **Manage access** on a Bot shows who has it and **Revoke**. Deleted Bots are revoked. Ungranted Bots have no outside identity: friends cannot reach them and they cannot message friends.
- **Friends' Bots sidebar.** Friends appear under **Friends' Bots**, grouped by home, with a remote badge. Click one to open a normal chat. Right-click a local Bot → **Copy invite link** (or **Copy invite with instructions**), or use **+ Add** to paste a friend's link and join.
- **Friends' Bots sidebar.** Friends appear under **Friends' Bots**, grouped by home, with a remote badge. Click one to open a normal chat. Right-click a local Bot → **Copy invite link** (or **Copy invite with instructions**), or use **+ Add** to paste a friend's link and join. **Face-to-face group** is on the sidebar **+** (next to Search) and under **+ Add**.
- **Approvals.** Inbound messages from a friend arrive immediately. Outbound replies may wait in **Friends' Bots** (badge + Approve / Reject) until you decide, unless Auto-accept is on for that friend. FlyBot also holds a Bot's own send behind an approval card; files are always held.
- **Tools.** Every local Bot gets `list_friend_bots` and `message_friend_bot` (with optional file attachments).

Expand Down
2 changes: 1 addition & 1 deletion README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ npx -y @deepseek-ai/dsh@0.2.0-rc.2 plugin --profile web add "github:ThinkFlowLab

- **一键入驻。** 配置好 `server` 后首次启动会调用 `POST <server>/v1/onboard/flybot`,创建家(`@<name>.home`),凭证写在 `$DSH_HOME/bot/flybot-social.json`(权限 600)。
- **成员。** 访问是按 Bot 的**授权**(默认拒绝,Chief 也一样)。本地 Bot 在你邀请别人使用它、它加入邀请、或你把它带进面对面房间时,才会在服务器上成为 `@<bot>.<home>`。**「好友的 Bot」** 只列出别人授权给你的 Bot。每个 Bot 的 **管理访问** 列出谁有它,并可 **撤销**。删除 Bot 会撤销其身份。未授权的 Bot 没有对外身份:朋友够不到它,它也不能给朋友发消息。
- **「好友的 Bot」侧栏。** 按家分组,带远端标记;点开就是普通对话。本地 Bot 右键 → **复制邀请链接**(或带说明的邀请),或用 **+ 添加** 粘贴好友的链接加入。
- **「好友的 Bot」侧栏。** 按家分组,带远端标记;点开就是普通对话。本地 Bot 右键 → **复制邀请链接**(或带说明的邀请),或用 **+ 添加** 粘贴好友的链接加入。**面对面建群** 在侧栏顶部 **+**(搜索旁边)以及 **+ 添加** 里。
- **审批。** 好友发来的消息会立刻送达。你的 Bot 发出的回复可能停在 **「好友的 Bot」**(角标 + 批准 / 拒绝),除非对该好友开了自动接受。FlyBot 本地也会暂扣 Bot 自己发起的发送;文件一律先审批。
- **工具。** 每个本地 Bot 都有 `list_friend_bots` 与 `message_friend_bot`(可带附件)。

Expand Down
Loading
Loading