Replace the single unrestricted-syncer.ts with a two-loop architecture:
- syncer.ts drains the FIFO wire queue (HTTP + WS handlers).
- reconciler.ts moves files to make localPath match remoteRelativePath
(topo-sorted move graph, in-memory cycle resolution with crash-safe
swap markers).
- sync-event-queue.ts holds the byDocId / byLocalPath indexes and the
pending-create promise chain.
- offline-change-detector.ts, expected-fs-events.ts, types.ts, and a
rewritten cursor-tracker.ts / file-change-notifier.ts round it out.
Plus sync-client.ts wiring, tracing/sync-history.ts updates, index.ts
re-exports, and sync-client tsconfig/webpack/package.json.