fix(coding-agent): disable managed extension peer resolution

closes #4907
This commit is contained in:
Armin Ronacher
2026-05-23 14:15:00 +02:00
parent 30f48feae7
commit 15f1dea8df
3 changed files with 57 additions and 9 deletions

View File

@@ -1706,13 +1706,25 @@ export class DefaultPackageManager implements PackageManager {
private getNpmInstallArgs(specs: string[], installRoot: string): string[] {
const packageManagerName = this.getPackageManagerName();
// Extension packages run inside pi and resolve pi APIs through loader aliases/virtual modules.
// Disable peer dependency resolution for managed installs (npm's --legacy-peer-deps, and
// equivalent bun/pnpm settings) so package managers do not install or solve host-provided
// @earendil-works/pi-* peers. Stale auto-installed pi peers can otherwise block updates.
if (packageManagerName === "bun") {
return ["install", ...specs, "--cwd", installRoot];
return ["install", ...specs, "--cwd", installRoot, "--omit=peer"];
}
if (packageManagerName === "pnpm") {
return ["install", ...specs, "--prefix", installRoot, "--config.strict-dep-builds=false"];
return [
"install",
...specs,
"--prefix",
installRoot,
"--config.auto-install-peers=false",
"--config.strict-peer-dependencies=false",
"--config.strict-dep-builds=false",
];
}
return ["install", ...specs, "--prefix", installRoot];
return ["install", ...specs, "--prefix", installRoot, "--legacy-peer-deps"];
}
private async installNpm(source: NpmSource, scope: SourceScope, temporary: boolean): Promise<void> {