You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.