import { execFile } from 'node:child_process'; import { promisify } from 'node:util'; const execFileAsync = promisify(execFile); export async function runCommand(command: string, args: string[], cwd?: string) { try { const result = await execFileAsync(command, args, { cwd, maxBuffer: 1024 * 1024 * 8, env: process.env, }); return { stdout: result.stdout.trim(), stderr: result.stderr.trim() }; } catch (error) { const failure = error as { stdout?: string; stderr?: string; message?: string }; const details = (failure.stderr || failure.stdout || failure.message || 'command_failed').trim(); throw new Error(`${command}_failed:${details}`); } } export async function runJsonCommand(command: string, args: string[], cwd?: string): Promise { const result = await runCommand(command, args, cwd); return JSON.parse(result.stdout) as T; }