Skip to content

FlyBot v0.2.2

Choose a tag to compare

@github-actions github-actions released this 20 Oct 18:07
· 586 commits to main since this release
7ebe054

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).
  • 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, covers start, stop, upgrade, roll back and back up; CI builds the image and runs a start check, and nothing is published (#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: <reason>), 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).
  • 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).
  • 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).
  • 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).
  • 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).
  • 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).
  • A guide, Set a DeepSeek API key, 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).
  • 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).
  • 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).
  • 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).
  • 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).
  • 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).
  • Opt-in state journal for debugging multi-Bot bugs (#511): with stateJournal: true in the bot config, every change to the saved team is recorded on this computer only (<home>/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).
  • 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).
  • 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).
  • 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).
  • 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).
  • 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).
  • 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).
  • 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).
  • 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).
  • 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).
  • 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).
  • 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).
  • 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).
  • 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).
  • 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 <id>) 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).
  • 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).
  • 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).
  • 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).
  • 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).