From 8a7a761debd37995badd601edfb384352b72d2dd Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Tue, 3 Feb 2026 17:04:09 +0100 Subject: [PATCH] fix(coding-agent): resolve npm.cmd on Windows closes #1220 --- packages/coding-agent/src/core/package-manager.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/coding-agent/src/core/package-manager.ts b/packages/coding-agent/src/core/package-manager.ts index d21d7009..e62039b9 100644 --- a/packages/coding-agent/src/core/package-manager.ts +++ b/packages/coding-agent/src/core/package-manager.ts @@ -1595,9 +1595,17 @@ export class DefaultPackageManager implements PackageManager { }; } + private resolveCommand(command: string): string { + if (process.platform === "win32" && command === "npm") { + return "npm.cmd"; + } + return command; + } + private runCommand(command: string, args: string[], options?: { cwd?: string }): Promise { + const resolvedCommand = this.resolveCommand(command); return new Promise((resolvePromise, reject) => { - const child = spawn(command, args, { + const child = spawn(resolvedCommand, args, { cwd: options?.cwd, stdio: "inherit", }); @@ -1613,7 +1621,8 @@ export class DefaultPackageManager implements PackageManager { } private runCommandSync(command: string, args: string[]): string { - const result = spawnSync(command, args, { stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" }); + const resolvedCommand = this.resolveCommand(command); + const result = spawnSync(resolvedCommand, args, { stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" }); if (result.status !== 0) { throw new Error(`Failed to run ${command} ${args.join(" ")}: ${result.stderr || result.stdout}`); }