From 533331d6aea70815ec6bbe6507055ac32d321e36 Mon Sep 17 00:00:00 2001 From: ciregenz Date: Mon, 17 Aug 2026 18:18:22 -0700 Subject: [PATCH] [eric] electron: the boot cache sweep drops already-applied updater packages; a 308MB installed zip was squatting in every user's cache --- electron/main.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/electron/main.js b/electron/main.js index 3b7c0c38..9bb52f30 100644 --- a/electron/main.js +++ b/electron/main.js @@ -2004,8 +2004,31 @@ function dirSizeMb(dir) { } } +// The updater cache keeps the downloaded installer AFTER it has been applied (589MB measured, a +// 308MB zip for the version already running). A pending package at or below the running version +// can never be installed again, so it is pure dead weight; anything NEWER stays untouched. +function sweepStaleUpdaterCache() { + try { + const semver = require('semver'); + const pendingDir = path.join(app.getPath('home'), 'Library', 'Caches', 'openswarm-updater', 'pending'); + if (process.platform !== 'darwin' || !fs.existsSync(pendingDir)) return; + const cur = app.getVersion(); + for (const f of fs.readdirSync(pendingDir)) { + const m = f.match(/OpenSwarm-(\d+\.\d+\.\d+(?:-[0-9A-Za-z.]+)?)/); + if (!m || !semver.valid(m[1])) continue; + if (semver.lte(m[1], cur)) { + fs.rmSync(path.join(pendingDir, f), { force: true }); + console.log(`[cache] dropped applied update package ${f} (running ${cur})`); + } + } + } catch (err) { + console.warn('[cache] sweepStaleUpdaterCache failed:', err && err.message); + } +} + async function sweepOversizedCaches() { try { + sweepStaleUpdaterCache(); const root = app.getPath('userData'); const before = dirSizeMb(path.join(root, 'Partitions')) + dirSizeMb(path.join(root, 'Code Cache')); if (before < DISK_CACHE_CAP_MB) {