Files
mcp_web_dev_server/dist/lib/runCommand.js
T
2026-07-31 13:12:54 -04:00

37 lines
1.3 KiB
JavaScript

import { execa } from 'execa';
import { config } from '../config.js';
import { assertAllowedBinary } from './sandbox.js';
/**
* Runs a command to completion (foreground) and returns its combined,
* length-capped output. Intended for install/build/lint/test-style commands
* that the agent needs the final result of, as opposed to long-running dev
* servers (see processManager.ts for those).
*/
export async function runCommand(command, args, options) {
assertAllowedBinary(command);
const timeoutMs = options.timeoutMs ?? config.defaultCommandTimeoutMs;
const result = await execa(command, args, {
cwd: options.cwd,
env: options.env,
timeout: timeoutMs,
reject: false,
all: true,
});
const rawOutput = result.all ?? [result.stdout, result.stderr].filter(Boolean).join('\n');
return {
command,
args,
cwd: options.cwd,
exitCode: result.exitCode ?? null,
timedOut: result.timedOut,
failed: result.failed,
output: truncate(String(rawOutput ?? ''), config.maxToolOutputChars),
};
}
function truncate(text, max) {
if (text.length <= max)
return text;
const omitted = text.length - max;
return `${text.slice(0, max)}\n... [truncated ${omitted} more characters] ...`;
}
//# sourceMappingURL=runCommand.js.map