Repository navigation
feat(desktop): Fleet Sync — push a path from one host to many at once - #50
Merged
Merged
Conversation
…at once Adds a "Fleet Sync" tab: pick a source (a server or this machine) + a path, tick destination servers, and it syncs that path out to all of them at once — e.g. a dir on dev1 to the other 7 servers. It is pure orchestration over the existing transfer engine: one transfer per destination (server-to-server when the source is remote, local-to-remote when it is this machine), run with bounded concurrency, each streaming its rsync progress on a per-connection channel. No new transfer logic — buildPlan/runPlan are reused wholesale. - contract: `fleet:sync` + `fleet:sync-cancel` channels, `event:fleet-sync`, `FleetSyncRequestSchema` (source EndpointRef, destinationConnectionIds, destinationPath, options, concurrency). `delete` is intentionally not exposed — a pruning mirror is a per-host previewed decision, not a fan-out default. - main: `services/fleet-sync.ts` `startFleetSync`/`cancelFleetSync`; a worker pool drains the destination queue, a per-destination failure never takes the fan-out down. `buildPlan` is exported from transfers.ts for reuse. - preload: `fleet.sync` / `fleet.cancelSync` / `events.onFleetSync`. - renderer: self-contained `FleetSyncPanel` (source + path, destination checklist, dest path, per-destination progress rows) on a new tab; the existing FleetView is untouched. Tests: fleet-sync.test.ts (schema validation + orchestration: one transfer per dest, per-connection begin/exit events, a done marker), with buildPlan/runPlan stubbed. Desktop suite 165 pass; renderer + electron typecheck clean. The UI is typecheck-verified, not yet visually verified in a running app. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
A new Fleet Sync tab in the desktop app: pick a source (a server or this machine) + a path, tick the destination servers, and it syncs that path out to all of them at once — e.g. a directory on dev1 → the other 7 servers.
How
Pure orchestration over the existing transfer engine — one transfer per destination (server-to-server when the source is remote, local-to-remote when it's this machine), run with bounded concurrency, each streaming its rsync progress on a per-connection channel.
buildPlan/runPlanare reused wholesale; no new transfer logic.fleet:sync+fleet:sync-cancel,event:fleet-sync,FleetSyncRequestSchema(sourceEndpointRef,destinationConnectionIds,destinationPath, options, concurrency).deleteis intentionally not exposed — a pruning mirror is a per-host previewed decision, not a fan-out default.services/fleet-sync.ts(startFleetSync/cancelFleetSync); a worker pool drains the destination queue and a per-destination failure never takes the fan-out down.fleet.sync/fleet.cancelSync/events.onFleetSync.FleetSyncPanel(source + path, destination checklist, dest path, per-destination progress rows) on its own tab; the existing FleetView is untouched.Tests
fleet-sync.test.ts— schema validation + orchestration (one transfer per dest, per-connectionbegin/exitevents, adonemarker), withbuildPlan/runPlanstubbed. Desktop suite 165 pass; renderer + electron typecheck clean.Note
The backend is fully tested; the UI is typecheck-verified, not yet visually verified in a running app — worth a quick look after merge.
🤖 Generated with Claude Code