fix(windows): resolve command execution and binary detection issues

This commit is contained in:
Burak Sormageç
2026-01-30 14:56:46 +00:00
committed by Peter Steinberger
parent 1eccfa8934
commit d7fb01afad
3 changed files with 19 additions and 12 deletions

View File

@@ -99,8 +99,10 @@ export function isBundledSkillAllowed(entry: SkillEntry, allowlist?: string[]):
export function hasBinary(bin: string): boolean { export function hasBinary(bin: string): boolean {
const pathEnv = process.env.PATH ?? ""; const pathEnv = process.env.PATH ?? "";
const parts = pathEnv.split(path.delimiter).filter(Boolean); const parts = pathEnv.split(path.delimiter).filter(Boolean);
const extensions = process.platform === "win32" ? [".exe", ".cmd", ".bat", ""] : [""];
for (const part of parts) { for (const part of parts) {
const candidate = path.join(part, bin); for (const ext of extensions) {
const candidate = path.join(part, bin + ext);
try { try {
fs.accessSync(candidate, fs.constants.X_OK); fs.accessSync(candidate, fs.constants.X_OK);
return true; return true;
@@ -108,6 +110,7 @@ export function hasBinary(bin: string): boolean {
// keep scanning // keep scanning
} }
} }
}
return false; return false;
} }

View File

@@ -68,8 +68,10 @@ export function resolveRuntimePlatform(): string {
export function hasBinary(bin: string): boolean { export function hasBinary(bin: string): boolean {
const pathEnv = process.env.PATH ?? ""; const pathEnv = process.env.PATH ?? "";
const parts = pathEnv.split(path.delimiter).filter(Boolean); const parts = pathEnv.split(path.delimiter).filter(Boolean);
const extensions = process.platform === "win32" ? [".exe", ".cmd", ".bat", ""] : [""];
for (const part of parts) { for (const part of parts) {
const candidate = path.join(part, bin); for (const ext of extensions) {
const candidate = path.join(part, bin + ext);
try { try {
fs.accessSync(candidate, fs.constants.X_OK); fs.accessSync(candidate, fs.constants.X_OK);
return true; return true;
@@ -77,6 +79,7 @@ export function hasBinary(bin: string): boolean {
// keep scanning // keep scanning
} }
} }
}
return false; return false;
} }

View File

@@ -116,6 +116,7 @@ export async function runCommandWithTimeout(
cwd, cwd,
env: resolvedEnv, env: resolvedEnv,
windowsVerbatimArguments, windowsVerbatimArguments,
shell: process.platform === "win32",
}); });
// Spawn with inherited stdin (TTY) so tools like `pi` stay interactive when needed. // Spawn with inherited stdin (TTY) so tools like `pi` stay interactive when needed.
return await new Promise((resolve, reject) => { return await new Promise((resolve, reject) => {