From b084d2fb395f0f1aa924cb07b14e5d0edab115e2 Mon Sep 17 00:00:00 2001 From: David Brailovsky Date: Mon, 13 Jul 2026 12:50:46 +0200 Subject: [PATCH] add legacy-peer-deps flag on pi uninstall when using npm (#6604) otherwise it would fail when there's conflicting peer dependencies in installed packages fixes: #6486 --- packages/coding-agent/src/core/package-manager.ts | 9 +++++++-- packages/coding-agent/test/package-manager.test.ts | 13 +++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/coding-agent/src/core/package-manager.ts b/packages/coding-agent/src/core/package-manager.ts index 6b546d86..9f11b750 100644 --- a/packages/coding-agent/src/core/package-manager.ts +++ b/packages/coding-agent/src/core/package-manager.ts @@ -1805,11 +1805,16 @@ export class DefaultPackageManager implements PackageManager { if (!existsSync(installRoot)) { return; } - if (this.getPackageManagerName() === "bun") { + const packageManagerName = this.getPackageManagerName(); + if (packageManagerName === "bun") { await this.runNpmCommand(["uninstall", source.name, "--cwd", installRoot]); return; } - await this.runNpmCommand(["uninstall", source.name, "--prefix", installRoot]); + const args = ["uninstall", source.name, "--prefix", installRoot]; + if (packageManagerName !== "pnpm") { + args.push("--legacy-peer-deps"); + } + await this.runNpmCommand(args); } private async installGit(source: GitSource, scope: SourceScope): Promise { diff --git a/packages/coding-agent/test/package-manager.test.ts b/packages/coding-agent/test/package-manager.test.ts index 19bda172..a4451e19 100644 --- a/packages/coding-agent/test/package-manager.test.ts +++ b/packages/coding-agent/test/package-manager.test.ts @@ -722,6 +722,19 @@ Content`, ); }); + it("should pass legacy peer deps when uninstalling npm packages", async () => { + mkdirSync(join(agentDir, "npm"), { recursive: true }); + const runCommandSpy = vi.spyOn(packageManager as any, "runCommand").mockResolvedValue(undefined); + + await packageManager.remove("npm:@scope/pkg"); + + expect(runCommandSpy).toHaveBeenCalledWith( + "npm", + ["uninstall", "@scope/pkg", "--prefix", join(agentDir, "npm"), "--legacy-peer-deps"], + undefined, + ); + }); + it("should use bun --cwd for npm package installs", async () => { settingsManager = SettingsManager.inMemory({ npmCommand: ["mise", "exec", "bun@1", "--", "bun"],