From c914a2714a046ab21318d2c7a059a0c1b5bb490d Mon Sep 17 00:00:00 2001 From: "A.Adarsh Jagannath" Date: Fri, 17 Jul 2026 11:12:56 +0530 Subject: [PATCH] fix(cli): use `where` on Windows in commandExists helper Closes #904 - Replace POSIX-only `command -v` with a cross-platform check: use `where` on win32, `command -v` on all other platforms - Apply the same single-line fix to all three setup utilities: local.ts, docker.ts, and railway.ts --- packages/cli/src/utils/setup/docker.ts | 2 +- packages/cli/src/utils/setup/local.ts | 2 +- packages/cli/src/utils/setup/railway.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/utils/setup/docker.ts b/packages/cli/src/utils/setup/docker.ts index cdd8cf7d..2bdc46f2 100644 --- a/packages/cli/src/utils/setup/docker.ts +++ b/packages/cli/src/utils/setup/docker.ts @@ -26,7 +26,7 @@ function safeDirName(name: string): string { async function commandExists(cmd: string): Promise { try { - await exec(`command -v ${cmd}`); + await exec(`${process.platform === 'win32' ? 'where' : 'command -v'} ${cmd}`); return true; } catch { return false; diff --git a/packages/cli/src/utils/setup/local.ts b/packages/cli/src/utils/setup/local.ts index 51e38f67..196e127d 100644 --- a/packages/cli/src/utils/setup/local.ts +++ b/packages/cli/src/utils/setup/local.ts @@ -21,7 +21,7 @@ const exec = promisify(execCb); async function commandExists(cmd: string): Promise { try { - await exec(`command -v ${cmd}`); + await exec(`${process.platform === 'win32' ? 'where' : 'command -v'} ${cmd}`); return true; } catch { return false; diff --git a/packages/cli/src/utils/setup/railway.ts b/packages/cli/src/utils/setup/railway.ts index 8d0cc769..39a95abe 100644 --- a/packages/cli/src/utils/setup/railway.ts +++ b/packages/cli/src/utils/setup/railway.ts @@ -15,7 +15,7 @@ const exec = promisify(execCb); async function commandExists(cmd: string): Promise { try { - await exec(`command -v ${cmd}`); + await exec(`${process.platform === 'win32' ? 'where' : 'command -v'} ${cmd}`); return true; } catch { return false;