Skip to content

v1.81.0

Choose a tag to compare

@github-actions github-actions released this 01 Sep 17:31
· 8 commits to prod since this release

Changed

  • Pull all pulls what you can see, and Refresh is what goes looking — clicking ↓ on a folder of repositories used to fetch every one of them, one after another, before pulling anything. On ninety repos that is a minute of network spent almost entirely on repositories with nothing to bring, and the button said “Fetching” the whole time: one static word, no repository name, no count, second 1 and second 90 identical — indistinguishable from a click that did nothing. The two halves are separate controls now. ↓ pulls the repositories carrying a ↓ badge, in parallel, and nothing else — it never goes to a remote to look for work, so it finishes in about a second and does exactly what the panel showed you; with nothing badged it disables itself and says so instead of sweeping ninety remotes to find out. Refresh, at the foot of the panel, is the sweep: it fetches every repository in the folder in parallel, and its badges are what make the next ↓ complete. Both draw on a new progress row under the bar's controls — a track that fills as repositories finish, 12/38 at its end, and the batch's summary held there for a few seconds afterwards — so a sweep over a large tree shows its own movement instead of a spinner. Magic sync reports on the same row. Underneath, every git call that talks to a remote now carries a 20-second idle timeout (reset by any output, so a large fetch that is progressing is never cut off) and refuses to prompt for credentials, so one unreachable remote costs one repository instead of stalling the whole batch — and a fetch that fails is reported as failed rather than counting as “up to date”, which is the one answer that is certainly wrong.

Fixed

  • An app restart no longer silently cuts running agent tabs off from Clave's tools — an agent tab reads its MCP endpoint once at spawn and can never be re-pointed, so when a restart failed to rebind the persisted port (typically the previous instance still draining its long-lived agent connections during an update's relaunch) and silently fell back to a random one, every surviving tmux-backed tab lost clave_* for good — while the rewritten config files on disk read as perfectly healthy. Quit now drops those connections so the port is actually released; startup fights for the persisted port (probing the new unauthenticated GET /health to tell a live sibling instance — a dev run beside the installed app, which keeps its own port and is left alone — from a draining zombie, which gets up to 5 s of retries); and when the endpoint genuinely must move, the app says so: a native notification names how many running tabs are cut off and that restarting them reconnects. scripts/mcp-health.mjs is the companion diagnostic — run from any tab, it distinguishes "server down" from "this tab holds a dead endpoint", reading the tab's own MCP client log rather than the healed config file.