diff --git a/CHANGELOG.md b/CHANGELOG.md index 48e78dec..366bacb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,53 @@ New entries are written as one fragment file per change in [changelog.d/](change ## [Unreleased] +## [0.2.2] - 2026-10-21 + +### Added + +- An **Inbox** row at the top of the sidebar opens one list of your own Bots' work: **Needs you** (tool approvals, held messages, tasks waiting for you or failed), **In progress** (running turns and tasks) and **Done** (the last 7 days). Each card has one clear status and an **Open** button to its chat; tool approvals from a group chat can be answered right there with the same buttons as in the chat ([#349](https://github.com/ThinkFlowLab/FlyBot/issues/349)). +- FlyBot can run in a container that you build yourself: a `Dockerfile` and `compose.yaml` start `dsh web` with the FlyBot core and plugins as a normal user, with one data volume, no keys in the image, the port on the host's `127.0.0.1` only and a health check. A guide in English and Chinese, [Run FlyBot in Docker](docs/docker.md), covers start, stop, upgrade, roll back and back up; CI builds the image and runs a start check, and nothing is published ([#352](https://github.com/ThinkFlowLab/FlyBot/issues/352)). +- FlyBot now sends a system notification when one of your own Bots finishes or fails a turn while you are in another chat or app (`Coder finished`, `Coder failed: `), alongside the existing approval-waiting one; clicking it opens that chat, and it never approves, rejects or sends anything. Settings → General has a **Notifications** switch, on by default, that turns all of them off ([#353](https://github.com/ThinkFlowLab/FlyBot/issues/353)). +- Scheduled tasks can be edited and paused: in Settings → Scheduled tasks and a Bot's card, **Edit** opens the task in its form, filled in, and **Pause** / **Resume** stop and restart a task without deleting it. The docs now say what happens to a run missed while the app was closed: a recurring task runs once, for its latest missed time, never once per missed time ([#354](https://github.com/ThinkFlowLab/FlyBot/issues/354)). +- Settings → Connectors: pick Composio apps by searching Composio's app list instead of typing app names, and see for each picked app whether it is ready or still needs a sign-in ([#359](https://github.com/ThinkFlowLab/FlyBot/issues/359)). +- On a phone browser (about 400px wide) you can skim a chat, press **Approve** / **Reject** on a held reply and work the Agent inbox: approval buttons become full-size touch targets, floating approval cards span the screen beside the icon rail, and inbox cards put their buttons under the text so titles stay readable. Wider screens are unchanged ([#362](https://github.com/ThinkFlowLab/FlyBot/issues/362)). +- You can now see which model each turn used and which model each Bot runs on: a Timeline turn's tooltip ends with the model that turn ran on (`· deepseek-v4-pro`), and hovering a Bot in the sidebar tree or Bot list shows its model (`Coder · DeepSeek V4 Pro`). Nothing new stores keys; models are still chosen per Bot in its settings ([#366](https://github.com/ThinkFlowLab/FlyBot/issues/366)). +- Chief now places new Bots sensibly up front instead of piling them flat under itself. Before creating a Bot it can search the whole tree with `find_bots` and reuses a Bot that already has the same role, at any depth, instead of making a duplicate. `create_team` sets up a project as one lead with its roles under it (for example Chief → FlyBot Lead → Dev, Test, Maintenance, Repo), which takes one slot under Chief, and `create_child_bot` can put a Bot under one of the caller's own descendants; a later Bot of a group goes under that group's lead. A Bot whose parent is gone is moved back into the tree by role. A full level, orphans and duplicates stay the job of the tree's automatic reorganization ([#447](https://github.com/ThinkFlowLab/FlyBot/issues/447)). +- A guide, [Set a DeepSeek API key](docs/deepseek-api-key.md), explains the ways to give DeepSeek Harness your key (the key dialog, its credentials file, or `DEEPSEEK_API_KEY`), and the missing-key error and the no-model setup choices link to it ([#451](https://github.com/ThinkFlowLab/FlyBot/issues/451)). +- Notifications go further: an approval that is still waiting after 15 minutes gets one reminder (`Coder has waited 15 min for your approval`), Settings → General → **Notifications** has a separate switch for waiting approvals, finished turns and failed turns, and each chat keeps a single notification that a newer one replaces and that counts its updates ([#469](https://github.com/ThinkFlowLab/FlyBot/issues/469)). +- The Agent inbox now lists a turn of your own Bot that failed under **Needs you**, with the reason, until the Bot finishes a turn in that chat again, from the same events as the finished/failed notifications; and each inbox card shows a one-line **Latest:** row with what happened last in its chat ([#471](https://github.com/ThinkFlowLab/FlyBot/issues/471)). +- Each scheduled task in Settings → Scheduled tasks now says when it last ran and how it went (still running, finished, stopped, or failed with the reason). A run fails only when DSH could not deliver it or the Bot's turn errored; a failed run gets **Retry**, which runs the task once now with the same prompt, and the failure also shows up in notifications ([#473](https://github.com/ThinkFlowLab/FlyBot/issues/473)). +- Face-to-face rooms have one room lead (总负责人), a Bot from any home. The person who created the room picks it with the Room lead button in the room's details; until then it is the first Bot of the creator's home that joined, and everyone else sees it read-only. The lead sees everyone in the room with their roles, writes the one plan and gives out the parts; every other Bot, a Main Bot too, does only its own part or answers when named. With an older Bot Social server the default lead is used and cannot be changed ([#476](https://github.com/ThinkFlowLab/FlyBot/issues/476)). +- Share a Bot with an existing friend in one click from Sharing (no invite link); the new share appears in People with access and can be Revoked or declined as usual ([#500](https://github.com/ThinkFlowLab/FlyBot/issues/500)). +- Opt-in state journal for debugging multi-Bot bugs ([#511](https://github.com/ThinkFlowLab/FlyBot/issues/511)): with `stateJournal: true` in the `bot` config, every change to the saved team is recorded on this computer only (`/journal/state.jsonl`, private to the user, kept 7 days or 20 MB), and the dev script `core/scripts/replay.mjs` rebuilds the team as it was after any recorded step. Off by default. +- Tool approval cards in a group and in the Inbox add **Always allow for this Bot** and **Always allow for this group** next to Reject / Allow once, so a Bot stops asking for the same kind of permission (for example a `bash` sandbox escalation to full access). Standing approvals are kept across restarts and listed under **Always allowed** in Bot settings and Group settings, each with Remove ([#540](https://github.com/ThinkFlowLab/FlyBot/issues/540)). +- Memory recall now finds entries by meaning, and shows what memory links. `recall` gains `semantic: "true"`, which ranks entries with a local, dependency-free TF-IDF score over words, word stems and CJK n-grams, so an entry whose wording differs from the query still matches; and `related`, which lists the topics a `[[topic]]` links to and who wrote a memory. The default exact-word recall is unchanged. +- The Timeline plugin can now be asked for an export on demand. `timeline/export` returns the current trace as one OpenTelemetry OTLP/HTTP JSON payload — the same mapping the timer exporter uses — so a tool or the panel can pull it now instead of waiting for the next flush. It is read-only, sends Bot and room ids only unless the caller sets `names: true`, and needs no configuration. +- The Timeline plugin can now export its trace as OpenTelemetry spans. Set `exporter: "otlp"` with an `otlpUrl` (https, or http on localhost only) to POST OTLP/HTTP JSON to any collector (Jaeger, Phoenix, Langfuse…), or `exporter: "json"` to append `dir/export.jsonl`. Finished Bot turns become `invoke_agent` spans and their tool calls `execute_tool` spans beneath them. Off by default; it exports only the same metadata the panel shows (never message text, tool arguments or output), sends Bot and room ids only unless `exportNames: true`, and an open turn is held until it ends rather than exported as finished. +- A tree coordinator can now see how busy its children are. Each Bot's running turns are counted from the activity feed, shown as one line in the coordinator's prompt (`Child load right now — Work: busy (2 running), Travel: idle`) and a `load` count on each entry of `list_children`, so a new part goes to a free child instead of a busy one. Nothing is stored; the counts start from zero on each start. + +### Fixed + +- Face-to-face rooms: a Bot now looks the same on every home and in every place (waiting tiles, chat bubbles, Members, sidebar). A Bot with no look of its own sends the look its home generates for it to Bot Social, before it joins, so the other home no longer invents a different one; your own Bot in the waiting dialog uses its roster look right after joining; a friend's Bot speaks in the room with the look its owner gave it. Other people show their initial on a color picked from their name instead of a grey silhouette ([#182](https://github.com/ThinkFlowLab/FlyBot/issues/182)). +- Past rooms list everyone who was in a face-to-face room (a home that stayed no longer drops the person who left), each row shows when the room ended, clicking anywhere on the row opens it, and the Past rooms fold stays open or closed across a reload ([#304](https://github.com/ThinkFlowLab/FlyBot/issues/304)). +- Face-to-face rooms: another person's line, or another home's approved Bot reply, that arrives while your Bots are answering now shows right away as that person's or Bot's bubble, never as a queued "[Group post from …]" row above the composer that Cmd/Ctrl+Enter could steer; a person's line breaks are kept on the receiving side ([#455](https://github.com/ThinkFlowLab/FlyBot/issues/455)). +- Face-to-face rooms: a Bot reply held for your approval shows only on its approval card, greyed, and becomes a room bubble only after you approve it; a rejected reply collapses to one grey "Not sent" line, also after a reload and in Past rooms. A decided card leaves no "Approved" / "Rejected" stub, the card names the Bot with its person ("Researcher (Alice) → the room"), and each Bot answers a person's line at most once ([#456](https://github.com/ThinkFlowLab/FlyBot/issues/456)). +- Face-to-face rooms are person-first: one tile and one Members row per person (Members counts people, and only people are "(you)"), every Bot named "Bot (person)" including your own, a mention of a friend's Bot stays with that Bot after it leaves, bubble headers show just the name with the handle on hover, and your own typed line keeps your name and colour. Auto-send in a face room is now one switch per Bot, off by default ([#457](https://github.com/ThinkFlowLab/FlyBot/issues/457)). +- Face-to-face rooms: a number nobody is using no longer silently opens a room. Join says "Nobody is using 111111 yet." with Cancel and Start a room, and a room nobody else ever joined (left, or run out) leaves no Past rooms entry. A room stays open while two or more people are in it; when you are the last one, it reads "Room closed." with one Close button, and Leave (or Close) takes you back to the chat you were in without opening Bot settings. Both homes count down to Bot Social's one deadline, even when a device clock is off or a tab was in the background. A room's turns no longer take over its Bots' sidebar preview, the room row leads with its number ("482915 · Alice, Bob"), Enter chat steps aside while "Leave this room?" asks, Join waits for all 6 digits, and a click outside the dialog closes it like Escape ([#458](https://github.com/ThinkFlowLab/FlyBot/issues/458)). +- Face-to-face rooms: a friend's plain line is now answered like your own: your Bots decide who answers it (usually one, the Bot that spoke last first), and a Bot's @mention in its answer no longer calls another Bot on, so Bots in two homes cannot set each other off ([#462](https://github.com/ThinkFlowLab/FlyBot/issues/462)). +- Face-to-face rooms: when a friend's Bot has already answered or posted a plan for a line, your Bots no longer have to answer it again (no forced "nobody answered" reply), a Bot that still speaks to a line for everyone adds only its own part, and a friend's Bot writing `@all` / `@所有人` no longer wakes all of your Bots; its `@YourBot` still calls that Bot ([#475](https://github.com/ThinkFlowLab/FlyBot/issues/475)). +- **People with access** keeps listing a friend after the two of you joined each other's invite, so the owner can still see and **Revoke** that share on both homes; FlyBot now uses Bot Social's `reply_only` mark to tell a real share from a talk-through grant ([#495](https://github.com/ThinkFlowLab/FlyBot/issues/495)). +- Accepting an invite for a friend's Bot you already have no longer shows red error text claiming the Bot is back. It now says `You already have Chief (SelfA1233).` in neutral text, and says `… is back in your list.` only when a Bot you had removed really comes back. The **Remove this Bot** confirm now says what it does: `Remove Chief (SelfB1233) from your list? Your own Bots stay shared. SelfB1233 can share it again.` ([#496](https://github.com/ThinkFlowLab/FlyBot/issues/496)). +- A friend's message to one of your Bots, the reply waiting for your approval, the Inbox count and the unread badge now show up in an open FlyBot window within a few seconds, instead of up to 15 seconds later, which looked like it needed a reload ([#497](https://github.com/ThinkFlowLab/FlyBot/issues/497)). +- A friend's Bot now has one name everywhere in a friend chat, on both homes: the sidebar row, chat header, tab, composer placeholder and @ menu all read `Chief (SelfB1233)`, from one shared formatter, and the @ menu no longer shows the handle as the Bot's name. A held message's approval card names the person who gets it (`Chief → SelfB1233`), the same before and after a reload, instead of `Chief → Chief (SelfB1233)` ([#498](https://github.com/ThinkFlowLab/FlyBot/issues/498)). +- Invites and friend chats are tidier. A friend's Bot chat always reads **Message Chief (Alice)** in the composer, from the first open and after every send, never the coding-agent copy. **Add friend** and a Bot's **Sharing** use one invite control: **Copy invite link for Chief** makes and copies the link, which then shows with **Copy link**, **Copy with instructions** and **New link**, and every copy says which Bot it is for (`Invite link for Chief copied.`). The Add friend paste box wraps, so a whole pasted link is readable; typing clears an old error, and after an accepted invite the panel shows the result for a moment, then closes and opens the new friend's Bot. The Sharing hint mentions Revoke only once someone has access ([#499](https://github.com/ThinkFlowLab/FlyBot/issues/499)). +- Host and zh copy that still said **Bot settings → Invite to this Bot** after #499/#504 now point at **Bot settings → Sharing → Copy invite link**. +- A friend's Bot in a group chat or face-to-face room is now named like everywhere else, Bot name plus its owner's username: `Reviewer (flybot682b8a43)` instead of `Reviewer · FlyBot 682b8a43 (flybot682b8a43)`. An owner name made up from the install id (`FlyBot `) gives way to the username in member lists, message headers, @ menu labels and join, leave and room-lead lines; the full handle stays in the tooltip ([#526](https://github.com/ThinkFlowLab/FlyBot/issues/526)). +- A key you save, including the GitHub token and the Composio key a connector saves, is now for all of your Bots unless you narrow it; keys that were "No Bot" only because of the old connector default move to all of your Bots once. Settings → Secrets offers All my Bots, Chosen Bots or No Bot for each key ([#545](https://github.com/ThinkFlowLab/FlyBot/issues/545)). +- Group chats: every Bot at work shows as one row of the same shape in one place above the message box, the current speaker included, instead of one row on the left and another further right. Each row says what the Bot is doing and on what (for example `Running shell commands: npm test`), names a tool it has no phrase for instead of "On it", and keeps its elapsed time ([#546](https://github.com/ThinkFlowLab/FlyBot/issues/546)). +- Group chats: when a Bot works on something handed out in a group and needs to ask you a question, the question card now shows in that group instead of in the Bot's private chat. Answer it there and the Bot carries on with the work, reporting back in the group; the Bot's private chat stays untouched ([#550](https://github.com/ThinkFlowLab/FlyBot/issues/550)). +- Group chats and face rooms: the status rows above the message box and the member list show only work in that room, including work handed out from it. A Bot busy in another group or its own chat no longer shows there, and that room's commands no longer appear in a room with different members ([#553](https://github.com/ThinkFlowLab/FlyBot/issues/553)). + ## [0.2.1] - 2026-10-20 ### Added diff --git a/changelog.d/182-face-room-looks.fixed.md b/changelog.d/182-face-room-looks.fixed.md deleted file mode 100644 index 3f44c51a..00000000 --- a/changelog.d/182-face-room-looks.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Face-to-face rooms: a Bot now looks the same on every home and in every place (waiting tiles, chat bubbles, Members, sidebar). A Bot with no look of its own sends the look its home generates for it to Bot Social, before it joins, so the other home no longer invents a different one; your own Bot in the waiting dialog uses its roster look right after joining; a friend's Bot speaks in the room with the look its owner gave it. Other people show their initial on a color picked from their name instead of a grey silhouette ([#182](https://github.com/ThinkFlowLab/FlyBot/issues/182)). diff --git a/changelog.d/304-face-past-rooms.fixed.md b/changelog.d/304-face-past-rooms.fixed.md deleted file mode 100644 index c5054f8e..00000000 --- a/changelog.d/304-face-past-rooms.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Past rooms list everyone who was in a face-to-face room (a home that stayed no longer drops the person who left), each row shows when the room ended, clicking anywhere on the row opens it, and the Past rooms fold stays open or closed across a reload ([#304](https://github.com/ThinkFlowLab/FlyBot/issues/304)). diff --git a/changelog.d/349-agent-inbox.added.md b/changelog.d/349-agent-inbox.added.md deleted file mode 100644 index 30426a6e..00000000 --- a/changelog.d/349-agent-inbox.added.md +++ /dev/null @@ -1 +0,0 @@ -An **Inbox** row at the top of the sidebar opens one list of your own Bots' work: **Needs you** (tool approvals, held messages, tasks waiting for you or failed), **In progress** (running turns and tasks) and **Done** (the last 7 days). Each card has one clear status and an **Open** button to its chat; tool approvals from a group chat can be answered right there with the same buttons as in the chat ([#349](https://github.com/ThinkFlowLab/FlyBot/issues/349)). diff --git a/changelog.d/352-docker.added.md b/changelog.d/352-docker.added.md deleted file mode 100644 index d6841442..00000000 --- a/changelog.d/352-docker.added.md +++ /dev/null @@ -1 +0,0 @@ -FlyBot can run in a container that you build yourself: a `Dockerfile` and `compose.yaml` start `dsh web` with the FlyBot core and plugins as a normal user, with one data volume, no keys in the image, the port on the host's `127.0.0.1` only and a health check. A guide in English and Chinese, [Run FlyBot in Docker](docs/docker.md), covers start, stop, upgrade, roll back and back up; CI builds the image and runs a start check, and nothing is published ([#352](https://github.com/ThinkFlowLab/FlyBot/issues/352)). diff --git a/changelog.d/353-finish-fail-notifications.added.md b/changelog.d/353-finish-fail-notifications.added.md deleted file mode 100644 index f960040f..00000000 --- a/changelog.d/353-finish-fail-notifications.added.md +++ /dev/null @@ -1 +0,0 @@ -FlyBot now sends a system notification when one of your own Bots finishes or fails a turn while you are in another chat or app (`Coder finished`, `Coder failed: `), alongside the existing approval-waiting one; clicking it opens that chat, and it never approves, rejects or sends anything. Settings → General has a **Notifications** switch, on by default, that turns all of them off ([#353](https://github.com/ThinkFlowLab/FlyBot/issues/353)). diff --git a/changelog.d/354-schedule-edit-pause.added.md b/changelog.d/354-schedule-edit-pause.added.md deleted file mode 100644 index a1db6515..00000000 --- a/changelog.d/354-schedule-edit-pause.added.md +++ /dev/null @@ -1 +0,0 @@ -Scheduled tasks can be edited and paused: in Settings → Scheduled tasks and a Bot's card, **Edit** opens the task in its form, filled in, and **Pause** / **Resume** stop and restart a task without deleting it. The docs now say what happens to a run missed while the app was closed: a recurring task runs once, for its latest missed time, never once per missed time ([#354](https://github.com/ThinkFlowLab/FlyBot/issues/354)). diff --git a/changelog.d/359-composio-app-search.added.md b/changelog.d/359-composio-app-search.added.md deleted file mode 100644 index 55bc0929..00000000 --- a/changelog.d/359-composio-app-search.added.md +++ /dev/null @@ -1 +0,0 @@ -Settings → Connectors: pick Composio apps by searching Composio's app list instead of typing app names, and see for each picked app whether it is ready or still needs a sign-in ([#359](https://github.com/ThinkFlowLab/FlyBot/issues/359)). diff --git a/changelog.d/362-mobile-layout.added.md b/changelog.d/362-mobile-layout.added.md deleted file mode 100644 index 403356ea..00000000 --- a/changelog.d/362-mobile-layout.added.md +++ /dev/null @@ -1 +0,0 @@ -On a phone browser (about 400px wide) you can skim a chat, press **Approve** / **Reject** on a held reply and work the Agent inbox: approval buttons become full-size touch targets, floating approval cards span the screen beside the icon rail, and inbox cards put their buttons under the text so titles stay readable. Wider screens are unchanged ([#362](https://github.com/ThinkFlowLab/FlyBot/issues/362)). diff --git a/changelog.d/366-model-labels.added.md b/changelog.d/366-model-labels.added.md deleted file mode 100644 index 0e405020..00000000 --- a/changelog.d/366-model-labels.added.md +++ /dev/null @@ -1 +0,0 @@ -You can now see which model each turn used and which model each Bot runs on: a Timeline turn's tooltip ends with the model that turn ran on (`· deepseek-v4-pro`), and hovering a Bot in the sidebar tree or Bot list shows its model (`Coder · DeepSeek V4 Pro`). Nothing new stores keys; models are still chosen per Bot in its settings ([#366](https://github.com/ThinkFlowLab/FlyBot/issues/366)). diff --git a/changelog.d/447-tree-allocation.added.md b/changelog.d/447-tree-allocation.added.md deleted file mode 100644 index 9c12f463..00000000 --- a/changelog.d/447-tree-allocation.added.md +++ /dev/null @@ -1 +0,0 @@ -Chief now places new Bots sensibly up front instead of piling them flat under itself. Before creating a Bot it can search the whole tree with `find_bots` and reuses a Bot that already has the same role, at any depth, instead of making a duplicate. `create_team` sets up a project as one lead with its roles under it (for example Chief → FlyBot Lead → Dev, Test, Maintenance, Repo), which takes one slot under Chief, and `create_child_bot` can put a Bot under one of the caller's own descendants; a later Bot of a group goes under that group's lead. A Bot whose parent is gone is moved back into the tree by role. A full level, orphans and duplicates stay the job of the tree's automatic reorganization ([#447](https://github.com/ThinkFlowLab/FlyBot/issues/447)). diff --git a/changelog.d/451-deepseek-key-doc.added.md b/changelog.d/451-deepseek-key-doc.added.md deleted file mode 100644 index dfe9633c..00000000 --- a/changelog.d/451-deepseek-key-doc.added.md +++ /dev/null @@ -1 +0,0 @@ -A guide, [Set a DeepSeek API key](docs/deepseek-api-key.md), explains the ways to give DeepSeek Harness your key (the key dialog, its credentials file, or `DEEPSEEK_API_KEY`), and the missing-key error and the no-model setup choices link to it ([#451](https://github.com/ThinkFlowLab/FlyBot/issues/451)). diff --git a/changelog.d/455-face-room-other-home-lines.fixed.md b/changelog.d/455-face-room-other-home-lines.fixed.md deleted file mode 100644 index ed7676cb..00000000 --- a/changelog.d/455-face-room-other-home-lines.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Face-to-face rooms: another person's line, or another home's approved Bot reply, that arrives while your Bots are answering now shows right away as that person's or Bot's bubble, never as a queued "[Group post from …]" row above the composer that Cmd/Ctrl+Enter could steer; a person's line breaks are kept on the receiving side ([#455](https://github.com/ThinkFlowLab/FlyBot/issues/455)). diff --git a/changelog.d/456-face-held-replies.fixed.md b/changelog.d/456-face-held-replies.fixed.md deleted file mode 100644 index 655105b5..00000000 --- a/changelog.d/456-face-held-replies.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Face-to-face rooms: a Bot reply held for your approval shows only on its approval card, greyed, and becomes a room bubble only after you approve it; a rejected reply collapses to one grey "Not sent" line, also after a reload and in Past rooms. A decided card leaves no "Approved" / "Rejected" stub, the card names the Bot with its person ("Researcher (Alice) → the room"), and each Bot answers a person's line at most once ([#456](https://github.com/ThinkFlowLab/FlyBot/issues/456)). diff --git a/changelog.d/457-face-room-person-first.fixed.md b/changelog.d/457-face-room-person-first.fixed.md deleted file mode 100644 index 0e58a7b4..00000000 --- a/changelog.d/457-face-room-person-first.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Face-to-face rooms are person-first: one tile and one Members row per person (Members counts people, and only people are "(you)"), every Bot named "Bot (person)" including your own, a mention of a friend's Bot stays with that Bot after it leaves, bubble headers show just the name with the handle on hover, and your own typed line keeps your name and colour. Auto-send in a face room is now one switch per Bot, off by default ([#457](https://github.com/ThinkFlowLab/FlyBot/issues/457)). diff --git a/changelog.d/458-face-room-lifecycle.fixed.md b/changelog.d/458-face-room-lifecycle.fixed.md deleted file mode 100644 index 945e47b1..00000000 --- a/changelog.d/458-face-room-lifecycle.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Face-to-face rooms: a number nobody is using no longer silently opens a room. Join says "Nobody is using 111111 yet." with Cancel and Start a room, and a room nobody else ever joined (left, or run out) leaves no Past rooms entry. A room stays open while two or more people are in it; when you are the last one, it reads "Room closed." with one Close button, and Leave (or Close) takes you back to the chat you were in without opening Bot settings. Both homes count down to Bot Social's one deadline, even when a device clock is off or a tab was in the background. A room's turns no longer take over its Bots' sidebar preview, the room row leads with its number ("482915 · Alice, Bob"), Enter chat steps aside while "Leave this room?" asks, Join waits for all 6 digits, and a click outside the dialog closes it like Escape ([#458](https://github.com/ThinkFlowLab/FlyBot/issues/458)). diff --git a/changelog.d/462-friend-line-face-routing.fixed.md b/changelog.d/462-friend-line-face-routing.fixed.md deleted file mode 100644 index ffddb81e..00000000 --- a/changelog.d/462-friend-line-face-routing.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Face-to-face rooms: a friend's plain line is now answered like your own: your Bots decide who answers it (usually one, the Bot that spoke last first), and a Bot's @mention in its answer no longer calls another Bot on, so Bots in two homes cannot set each other off ([#462](https://github.com/ThinkFlowLab/FlyBot/issues/462)). diff --git a/changelog.d/469-waiting-reminder-toggles.added.md b/changelog.d/469-waiting-reminder-toggles.added.md deleted file mode 100644 index 24badeac..00000000 --- a/changelog.d/469-waiting-reminder-toggles.added.md +++ /dev/null @@ -1 +0,0 @@ -Notifications go further: an approval that is still waiting after 15 minutes gets one reminder (`Coder has waited 15 min for your approval`), Settings → General → **Notifications** has a separate switch for waiting approvals, finished turns and failed turns, and each chat keeps a single notification that a newer one replaces and that counts its updates ([#469](https://github.com/ThinkFlowLab/FlyBot/issues/469)). diff --git a/changelog.d/471-inbox-failed-turns.added.md b/changelog.d/471-inbox-failed-turns.added.md deleted file mode 100644 index 45dedb39..00000000 --- a/changelog.d/471-inbox-failed-turns.added.md +++ /dev/null @@ -1 +0,0 @@ -The Agent inbox now lists a turn of your own Bot that failed under **Needs you**, with the reason, until the Bot finishes a turn in that chat again, from the same events as the finished/failed notifications; and each inbox card shows a one-line **Latest:** row with what happened last in its chat ([#471](https://github.com/ThinkFlowLab/FlyBot/issues/471)). diff --git a/changelog.d/473-schedule-last-run-retry.added.md b/changelog.d/473-schedule-last-run-retry.added.md deleted file mode 100644 index 32eaaf4c..00000000 --- a/changelog.d/473-schedule-last-run-retry.added.md +++ /dev/null @@ -1 +0,0 @@ -Each scheduled task in Settings → Scheduled tasks now says when it last ran and how it went (still running, finished, stopped, or failed with the reason). A run fails only when DSH could not deliver it or the Bot's turn errored; a failed run gets **Retry**, which runs the task once now with the same prompt, and the failure also shows up in notifications ([#473](https://github.com/ThinkFlowLab/FlyBot/issues/473)). diff --git a/changelog.d/475-face-room-cross-home-answers.fixed.md b/changelog.d/475-face-room-cross-home-answers.fixed.md deleted file mode 100644 index 1b9aadaf..00000000 --- a/changelog.d/475-face-room-cross-home-answers.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Face-to-face rooms: when a friend's Bot has already answered or posted a plan for a line, your Bots no longer have to answer it again (no forced "nobody answered" reply), a Bot that still speaks to a line for everyone adds only its own part, and a friend's Bot writing `@all` / `@所有人` no longer wakes all of your Bots; its `@YourBot` still calls that Bot ([#475](https://github.com/ThinkFlowLab/FlyBot/issues/475)). diff --git a/changelog.d/476-face-room-lead.added.md b/changelog.d/476-face-room-lead.added.md deleted file mode 100644 index 0b761aee..00000000 --- a/changelog.d/476-face-room-lead.added.md +++ /dev/null @@ -1 +0,0 @@ -Face-to-face rooms have one room lead (总负责人), a Bot from any home. The person who created the room picks it with the Room lead button in the room's details; until then it is the first Bot of the creator's home that joined, and everyone else sees it read-only. The lead sees everyone in the room with their roles, writes the one plan and gives out the parts; every other Bot, a Main Bot too, does only its own part or answers when named. With an older Bot Social server the default lead is used and cannot be changed ([#476](https://github.com/ThinkFlowLab/FlyBot/issues/476)). diff --git a/changelog.d/495-share-reply-only.fixed.md b/changelog.d/495-share-reply-only.fixed.md deleted file mode 100644 index 99fbcbd2..00000000 --- a/changelog.d/495-share-reply-only.fixed.md +++ /dev/null @@ -1 +0,0 @@ -**People with access** keeps listing a friend after the two of you joined each other's invite, so the owner can still see and **Revoke** that share on both homes; FlyBot now uses Bot Social's `reply_only` mark to tell a real share from a talk-through grant ([#495](https://github.com/ThinkFlowLab/FlyBot/issues/495)). diff --git a/changelog.d/496-already-have-invite.fixed.md b/changelog.d/496-already-have-invite.fixed.md deleted file mode 100644 index 9f5b44cc..00000000 --- a/changelog.d/496-already-have-invite.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Accepting an invite for a friend's Bot you already have no longer shows red error text claiming the Bot is back. It now says `You already have Chief (SelfA1233).` in neutral text, and says `… is back in your list.` only when a Bot you had removed really comes back. The **Remove this Bot** confirm now says what it does: `Remove Chief (SelfB1233) from your list? Your own Bots stay shared. SelfB1233 can share it again.` ([#496](https://github.com/ThinkFlowLab/FlyBot/issues/496)). diff --git a/changelog.d/497-live-friend-line.fixed.md b/changelog.d/497-live-friend-line.fixed.md deleted file mode 100644 index 33e5d21d..00000000 --- a/changelog.d/497-live-friend-line.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A friend's message to one of your Bots, the reply waiting for your approval, the Inbox count and the unread badge now show up in an open FlyBot window within a few seconds, instead of up to 15 seconds later, which looked like it needed a reload ([#497](https://github.com/ThinkFlowLab/FlyBot/issues/497)). diff --git a/changelog.d/498-friend-bot-name.fixed.md b/changelog.d/498-friend-bot-name.fixed.md deleted file mode 100644 index ce79edf4..00000000 --- a/changelog.d/498-friend-bot-name.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A friend's Bot now has one name everywhere in a friend chat, on both homes: the sidebar row, chat header, tab, composer placeholder and @ menu all read `Chief (SelfB1233)`, from one shared formatter, and the @ menu no longer shows the handle as the Bot's name. A held message's approval card names the person who gets it (`Chief → SelfB1233`), the same before and after a reload, instead of `Chief → Chief (SelfB1233)` ([#498](https://github.com/ThinkFlowLab/FlyBot/issues/498)). diff --git a/changelog.d/499-invite-friendchat-polish.fixed.md b/changelog.d/499-invite-friendchat-polish.fixed.md deleted file mode 100644 index 0092c2f3..00000000 --- a/changelog.d/499-invite-friendchat-polish.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Invites and friend chats are tidier. A friend's Bot chat always reads **Message Chief (Alice)** in the composer, from the first open and after every send, never the coding-agent copy. **Add friend** and a Bot's **Sharing** use one invite control: **Copy invite link for Chief** makes and copies the link, which then shows with **Copy link**, **Copy with instructions** and **New link**, and every copy says which Bot it is for (`Invite link for Chief copied.`). The Add friend paste box wraps, so a whole pasted link is readable; typing clears an old error, and after an accepted invite the panel shows the result for a moment, then closes and opens the new friend's Bot. The Sharing hint mentions Revoke only once someone has access ([#499](https://github.com/ThinkFlowLab/FlyBot/issues/499)). diff --git a/changelog.d/500-share-with-friend.added.md b/changelog.d/500-share-with-friend.added.md deleted file mode 100644 index bf65771e..00000000 --- a/changelog.d/500-share-with-friend.added.md +++ /dev/null @@ -1 +0,0 @@ -Share a Bot with an existing friend in one click from Sharing (no invite link); the new share appears in People with access and can be Revoked or declined as usual ([#500](https://github.com/ThinkFlowLab/FlyBot/issues/500)). diff --git a/changelog.d/506-invite-copy-leftovers.fixed.md b/changelog.d/506-invite-copy-leftovers.fixed.md deleted file mode 100644 index 343aa01a..00000000 --- a/changelog.d/506-invite-copy-leftovers.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Host and zh copy that still said **Bot settings → Invite to this Bot** after #499/#504 now point at **Bot settings → Sharing → Copy invite link**. diff --git a/changelog.d/511-state-journal.added.md b/changelog.d/511-state-journal.added.md deleted file mode 100644 index 85e3208e..00000000 --- a/changelog.d/511-state-journal.added.md +++ /dev/null @@ -1 +0,0 @@ -Opt-in state journal for debugging multi-Bot bugs ([#511](https://github.com/ThinkFlowLab/FlyBot/issues/511)): with `stateJournal: true` in the `bot` config, every change to the saved team is recorded on this computer only (`/journal/state.jsonl`, private to the user, kept 7 days or 20 MB), and the dev script `core/scripts/replay.mjs` rebuilds the team as it was after any recorded step. Off by default. diff --git a/changelog.d/526-group-bot-label.fixed.md b/changelog.d/526-group-bot-label.fixed.md deleted file mode 100644 index 44f77178..00000000 --- a/changelog.d/526-group-bot-label.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A friend's Bot in a group chat or face-to-face room is now named like everywhere else, Bot name plus its owner's username: `Reviewer (flybot682b8a43)` instead of `Reviewer · FlyBot 682b8a43 (flybot682b8a43)`. An owner name made up from the install id (`FlyBot `) gives way to the username in member lists, message headers, @ menu labels and join, leave and room-lead lines; the full handle stays in the tooltip ([#526](https://github.com/ThinkFlowLab/FlyBot/issues/526)). diff --git a/changelog.d/540-always-allow-approval.added.md b/changelog.d/540-always-allow-approval.added.md deleted file mode 100644 index 8fa0a425..00000000 --- a/changelog.d/540-always-allow-approval.added.md +++ /dev/null @@ -1 +0,0 @@ -Tool approval cards in a group and in the Inbox add **Always allow for this Bot** and **Always allow for this group** next to Reject / Allow once, so a Bot stops asking for the same kind of permission (for example a `bash` sandbox escalation to full access). Standing approvals are kept across restarts and listed under **Always allowed** in Bot settings and Group settings, each with Remove ([#540](https://github.com/ThinkFlowLab/FlyBot/issues/540)). diff --git a/changelog.d/545-secrets-all-my-bots.fixed.md b/changelog.d/545-secrets-all-my-bots.fixed.md deleted file mode 100644 index 0b75847a..00000000 --- a/changelog.d/545-secrets-all-my-bots.fixed.md +++ /dev/null @@ -1 +0,0 @@ -A key you save, including the GitHub token and the Composio key a connector saves, is now for all of your Bots unless you narrow it; keys that were "No Bot" only because of the old connector default move to all of your Bots once. Settings → Secrets offers All my Bots, Chosen Bots or No Bot for each key ([#545](https://github.com/ThinkFlowLab/FlyBot/issues/545)). diff --git a/changelog.d/546-group-status-rows.fixed.md b/changelog.d/546-group-status-rows.fixed.md deleted file mode 100644 index 3b86bd3e..00000000 --- a/changelog.d/546-group-status-rows.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Group chats: every Bot at work shows as one row of the same shape in one place above the message box, the current speaker included, instead of one row on the left and another further right. Each row says what the Bot is doing and on what (for example `Running shell commands: npm test`), names a tool it has no phrase for instead of "On it", and keeps its elapsed time ([#546](https://github.com/ThinkFlowLab/FlyBot/issues/546)). diff --git a/changelog.d/550-group-questions.fixed.md b/changelog.d/550-group-questions.fixed.md deleted file mode 100644 index 815568fb..00000000 --- a/changelog.d/550-group-questions.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Group chats: when a Bot works on something handed out in a group and needs to ask you a question, the question card now shows in that group instead of in the Bot's private chat. Answer it there and the Bot carries on with the work, reporting back in the group; the Bot's private chat stays untouched ([#550](https://github.com/ThinkFlowLab/FlyBot/issues/550)). diff --git a/changelog.d/553-room-scoped-dock.fixed.md b/changelog.d/553-room-scoped-dock.fixed.md deleted file mode 100644 index efc57902..00000000 --- a/changelog.d/553-room-scoped-dock.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Group chats and face rooms: the status rows above the message box and the member list show only work in that room, including work handed out from it. A Bot busy in another group or its own chat no longer shows there, and that room's commands no longer appear in a room with different members ([#553](https://github.com/ThinkFlowLab/FlyBot/issues/553)). diff --git a/changelog.d/semantic-memory.added.md b/changelog.d/semantic-memory.added.md deleted file mode 100644 index 408882e5..00000000 --- a/changelog.d/semantic-memory.added.md +++ /dev/null @@ -1 +0,0 @@ -Memory recall now finds entries by meaning, and shows what memory links. `recall` gains `semantic: "true"`, which ranks entries with a local, dependency-free TF-IDF score over words, word stems and CJK n-grams, so an entry whose wording differs from the query still matches; and `related`, which lists the topics a `[[topic]]` links to and who wrote a memory. The default exact-word recall is unchanged. diff --git a/changelog.d/timeline-export.added.md b/changelog.d/timeline-export.added.md deleted file mode 100644 index 7ff7ab13..00000000 --- a/changelog.d/timeline-export.added.md +++ /dev/null @@ -1 +0,0 @@ -The Timeline plugin can now be asked for an export on demand. `timeline/export` returns the current trace as one OpenTelemetry OTLP/HTTP JSON payload — the same mapping the timer exporter uses — so a tool or the panel can pull it now instead of waiting for the next flush. It is read-only, sends Bot and room ids only unless the caller sets `names: true`, and needs no configuration. diff --git a/changelog.d/timeline-otlp.added.md b/changelog.d/timeline-otlp.added.md deleted file mode 100644 index c5dcf617..00000000 --- a/changelog.d/timeline-otlp.added.md +++ /dev/null @@ -1 +0,0 @@ -The Timeline plugin can now export its trace as OpenTelemetry spans. Set `exporter: "otlp"` with an `otlpUrl` (https, or http on localhost only) to POST OTLP/HTTP JSON to any collector (Jaeger, Phoenix, Langfuse…), or `exporter: "json"` to append `dir/export.jsonl`. Finished Bot turns become `invoke_agent` spans and their tool calls `execute_tool` spans beneath them. Off by default; it exports only the same metadata the panel shows (never message text, tool arguments or output), sends Bot and room ids only unless `exportNames: true`, and an open turn is held until it ends rather than exported as finished. diff --git a/changelog.d/tree-load.added.md b/changelog.d/tree-load.added.md deleted file mode 100644 index 0dc0ce51..00000000 --- a/changelog.d/tree-load.added.md +++ /dev/null @@ -1 +0,0 @@ -A tree coordinator can now see how busy its children are. Each Bot's running turns are counted from the activity feed, shown as one line in the coordinator's prompt (`Child load right now — Work: busy (2 running), Travel: idle`) and a `load` count on each entry of `list_children`, so a new part goes to a free child instead of a busy one. Nothing is stored; the counts start from zero on each start. diff --git a/core/package-lock.json b/core/package-lock.json index b65b1e0e..bf5b4a3a 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -1,12 +1,12 @@ { "name": "ds-bot", - "version": "0.2.1", + "version": "0.2.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ds-bot", - "version": "0.2.1", + "version": "0.2.2", "license": "Apache-2.0", "devDependencies": { "esbuild": "0.28.2" diff --git a/core/package.json b/core/package.json index 27204ef0..7a4993f4 100644 --- a/core/package.json +++ b/core/package.json @@ -1,6 +1,6 @@ { "name": "ds-bot", - "version": "0.2.1", + "version": "0.2.2", "description": "DS Bot: a team of long-lived Bots for DeepSeek Harness, with Main Bots, Bot-to-Bot messages and group chats", "keywords": [ "dsh-plugin", diff --git a/patches/ds-bot/0007-version-and-tooling.patch b/patches/ds-bot/0007-version-and-tooling.patch index 6c989112..53d908f3 100644 --- a/patches/ds-bot/0007-version-and-tooling.patch +++ b/patches/ds-bot/0007-version-and-tooling.patch @@ -33,14 +33,14 @@ diff --git a/package-lock.json b/package-lock.json { "name": "ds-bot", - "version": "0.1.5", -+ "version": "0.2.1", ++ "version": "0.2.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ds-bot", - "version": "0.1.5", -+ "version": "0.2.1", ++ "version": "0.2.2", "license": "Apache-2.0", "devDependencies": { "esbuild": "0.28.2" @@ -51,7 +51,7 @@ diff --git a/package.json b/package.json { "name": "ds-bot", - "version": "0.1.5", -+ "version": "0.2.1", ++ "version": "0.2.2", "description": "DS Bot: a team of long-lived Bots for DeepSeek Harness, with Main Bots, Bot-to-Bot messages and group chats", "keywords": [ "dsh-plugin",