From ee7d03cf5274e3df1428f64aa2cd8f1470c7f5c0 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Mon, 26 Jan 2026 23:58:03 +0100 Subject: [PATCH] fix(coding-agent): prune empty git dirs on remove --- .../coding-agent/src/core/package-manager.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/packages/coding-agent/src/core/package-manager.ts b/packages/coding-agent/src/core/package-manager.ts index deef8702..a91c587b 100644 --- a/packages/coding-agent/src/core/package-manager.ts +++ b/packages/coding-agent/src/core/package-manager.ts @@ -955,6 +955,29 @@ export class DefaultPackageManager implements PackageManager { const targetDir = this.getGitInstallPath(source, scope); if (!existsSync(targetDir)) return; rmSync(targetDir, { recursive: true, force: true }); + this.pruneEmptyGitParents(targetDir, this.getGitInstallRoot(scope)); + } + + private pruneEmptyGitParents(targetDir: string, installRoot: string | undefined): void { + if (!installRoot) return; + const resolvedRoot = resolve(installRoot); + let current = dirname(targetDir); + while (current.startsWith(resolvedRoot) && current !== resolvedRoot) { + if (!existsSync(current)) { + current = dirname(current); + continue; + } + const entries = readdirSync(current); + if (entries.length > 0) { + break; + } + try { + rmSync(current, { recursive: true, force: true }); + } catch { + break; + } + current = dirname(current); + } } private ensureNpmProject(installRoot: string): void {