Skip to content

FlyBot v0.2.10

Choose a tag to compare

@github-actions github-actions released this 27 Oct 00:49
· 128 commits to main since this release
59df158

Added

  • A group's board can now be a pull queue: the lead enqueues an item for a role (track_tasks with queue and role, no assignee), an idle member of that role claims it with claim and one item is handed to exactly one member, and a member that cannot finish returns it with a one-line reason and a retryAt; the room board shows one line per role with its depth and oldest wait (#1247).
  • The delivery board now reads the repository this instance actually works in, and the header says which one it read and where the name came from: delivery.repo in the instance settings first, then the workspace's git origin, then the package's own repository as a labelled default (#1250). An instance with none of the three refuses with no repository — set delivery.repo instead of showing another repository's numbers.
  • Feishu (Lark) connector, phase 1: paste a group's custom-bot webhook URL on Settings → Connectors and this instance can post a text message into that group. The row is a sender — no Bot tools, no per-Bot switch — it proves the webhook with one test message when you connect, shows the reason on the row when Feishu refuses, and sends on demand with the existing retry policy (a rate limit is retried, a refused signature is not). The URL is kept as a secret and never appears in state.json, the view or a log line. (#1263)
  • The Delivery board and the task board now draw their cards through one component, and a card says which side it came from: a repository card is keyed owner/name#number — one key for an issue and the pull request that closes it — and a task card task:<id> (#1265, first step).
  • The Delivery board can read more than one repository: delivery.repos names a list (the older delivery.repo still works as a list of one), every name resolves with its own source, and the page draws one block per repository with its own state. A repository that cannot be read leaves the others on a partial board instead of emptying it (#1265, step 4).
  • Feishu (Lark) connector, phase 2: a message the owner types in Feishu can start a turn here over the long connection. The app pair FEISHU_APP_ID / FEISHU_APP_SECRET is saved through secret-set and stays out of state.json and the view; the connection is off until feishu.enabled is true, dials only from an app pair that is complete, and only the owner's messages start a turn. A replayed event_id lands once — the id is remembered only after the message reached its chat, so a handover that failed is retried rather than dropped — the message arrives through the same chat seam a friend's Bot uses, and the answer leaves again on the same FEISHU_WEBHOOK the connector already posts with, so one chat has one way in and one way out. (#1266)

Changed

  • A group turn now shows who is working: one line per member that holds an open card on that room's board, with the card number, column, progress and how long it has been open, and an explicit idle (no open card) line for a member that holds none — read from the board at the turn, with nothing new written and no one having to post a status (#1213).
  • A Bot condenses its conversation earlier: the steward's check line is now 45% of the model's usable window instead of 80%. Every call re-sends the fixed block and the conversation is most of each prompt, so condensing sooner cuts the prompt of a long turn by about a quarter; the cost is that a checkpoint arrives sooner and a condensed conversation keeps less detail. checkRatio still overrides it in the profile (#1233).
  • A round-trip now exists to bring back a fact the room did not have: independent reads go in one call, a fact already read is quoted with its anchor instead of fetched again, and the same message carries the tip sha, the CI state and the files read, because every avoidable round-trip re-sends the whole context (#796, #1235).
  • A group chat now carries neither the composio tools nor the four schedule_* tools: eight tool schemas, about 20.4k characters re-sent on every call of every group turn, that a room round does not use. A Bot reaches an outside app and manages its schedules in its own chat, and the refusal says so. The github tools and every built-in tool stay in the group, and a Bot's own chat is unchanged (#1237).
  • A connector call refused in a group room now says the tool is not available there, instead of pointing the caller at its own chat — a friend's Bot has no composio tools in its chat either (#1271).

Fixed

  • The delivery header prints its "as of" time once while today is still running: the partial-day hint now follows the single time instead of repeating it from a second clock rendering, in both English and Chinese. A day whose runs the host could only count by their total now shows the same red share in the header row as the point drawn on the line beside it, instead of a dash next to a dot (#1244).
  • A part handoff keeps a repeating task exactly where it was: the same id, the same delivery history and the same instant it was already due, instead of re-anchoring the next run to the handoff and hiding the move in a reset history. (#1245)
  • The delivery board reads delivery.repo however the instance wrote it — nested (delivery: { repo: … }), as a literal dotted key, or flat (deliveryRepo) — instead of only the flat one, so the setting the page and the hint name really names the repository (#1258). A workspace that is a linked git worktree now resolves its origin through the worktree's commondir rather than falling back to the package default, and a repository name with a . or .. segment is refused instead of being turned into /repos/../../issues.
  • A line sent into a group chat while a member is speaking now reaches that member inside its turn: the round watches the same Session queue it drains, logs the line at once and steers it into the speaker's running turn with a header saying it arrived after the turn started, so the member's next step answers it instead of reading it after a long turn as if it had been there all along. The line leaves the relay queue, so it is neither logged nor answered twice. The one exception is an explicit stop (停, 停下, 停止, 别做了, 不要做了, stop, stop it): the speaking slot is marked stopped by the user, its turn is cancelled and its answer is not posted, and the line stays queued to be answered as a fresh line by the room (#1267).
  • A Bot whose tool list has to be rebuilt for a group room no longer ends up with every tool listed when one name in the mask cannot be restricted: the host keeps the narrowing it can enforce and warns, instead of dropping the whole mask after lifting it (#1271).
  • A turn no longer stays open because making room before its next step never returns: the pre-step compaction now carries a deadline (COMPACT_DEADLINE_MS, config.compactDeadlineMs, five minutes) beside the turn's own signal, and a summary request still retrying when it passes ends that turn with a warning instead of parking it — turn/end runs, the queued messages stay for the next turn, and stop_bot is no longer the only way out (#1285).