This commit is contained in:
Burak Sormageç 2026-01-30 16:31:47 +00:00 committed by GitHub
commit 3adb619546
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 25 additions and 13 deletions

View File

@ -77,13 +77,16 @@ 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) {
try { const candidate = path.join(part, bin + ext);
fs.accessSync(candidate, fs.constants.X_OK); try {
return true; fs.accessSync(candidate, fs.constants.X_OK);
} catch { return true;
// keep scanning } catch {
// keep scanning
}
} }
} }
return false; return false;

View File

@ -54,13 +54,16 @@ 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) {
try { const candidate = path.join(part, bin + ext);
fs.accessSync(candidate, fs.constants.X_OK); try {
return true; fs.accessSync(candidate, fs.constants.X_OK);
} catch { return true;
// keep scanning } catch {
// keep scanning
}
} }
} }
return false; return false;

View File

@ -73,7 +73,12 @@ export async function runCommandWithTimeout(
return false; return false;
})(); })();
const resolvedEnv = env ? { ...process.env, ...env } : { ...process.env }; const mergedEnv = env ? { ...process.env, ...env } : { ...process.env };
const resolvedEnv = Object.fromEntries(
Object.entries(mergedEnv)
.filter(([, value]) => value !== undefined)
.map(([key, value]) => [key, String(value)]),
);
if (shouldSuppressNpmFund) { if (shouldSuppressNpmFund) {
if (resolvedEnv.NPM_CONFIG_FUND == null) resolvedEnv.NPM_CONFIG_FUND = "false"; if (resolvedEnv.NPM_CONFIG_FUND == null) resolvedEnv.NPM_CONFIG_FUND = "false";
if (resolvedEnv.npm_config_fund == null) resolvedEnv.npm_config_fund = "false"; if (resolvedEnv.npm_config_fund == null) resolvedEnv.npm_config_fund = "false";
@ -85,6 +90,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) => {