From 2b656c266bdbb85e913f86f5ce2a55ada1d2ee0b Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Wed, 21 Jan 2026 16:43:21 +0100 Subject: [PATCH] feat(coding-agent): add .gitignore to package manager install roots --- .../coding-agent/src/core/package-manager.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/coding-agent/src/core/package-manager.ts b/packages/coding-agent/src/core/package-manager.ts index 9a6d15d2..52af805c 100644 --- a/packages/coding-agent/src/core/package-manager.ts +++ b/packages/coding-agent/src/core/package-manager.ts @@ -92,6 +92,7 @@ export class DefaultPackageManager implements PackageManager { this.cwd = options.cwd; this.agentDir = options.agentDir; this.settingsManager = options.settingsManager; + this.ensureGitIgnoreDirs(); } setProgressCallback(callback: ProgressCallback | undefined): void { @@ -436,6 +437,7 @@ export class DefaultPackageManager implements PackageManager { if (!existsSync(installRoot)) { mkdirSync(installRoot, { recursive: true }); } + this.ensureGitIgnore(installRoot); const packageJsonPath = join(installRoot, "package.json"); if (!existsSync(packageJsonPath)) { const pkgJson = { name: "pi-extensions", private: true }; @@ -443,6 +445,23 @@ export class DefaultPackageManager implements PackageManager { } } + private ensureGitIgnoreDirs(): void { + this.ensureGitIgnore(join(this.agentDir, "git")); + this.ensureGitIgnore(join(this.agentDir, "npm")); + this.ensureGitIgnore(join(this.cwd, CONFIG_DIR_NAME, "git")); + this.ensureGitIgnore(join(this.cwd, CONFIG_DIR_NAME, "npm")); + } + + private ensureGitIgnore(dir: string): void { + if (!existsSync(dir)) { + mkdirSync(dir, { recursive: true }); + } + const ignorePath = join(dir, ".gitignore"); + if (!existsSync(ignorePath)) { + writeFileSync(ignorePath, "*\n!.gitignore\n", "utf-8"); + } + } + private getNpmInstallRoot(scope: SourceScope, temporary: boolean): string { if (temporary) { return this.getTemporaryDir("npm");