From 17b4c5e7e7c56a202fa670cd42c6dbf89a831291 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 24 Nov 2025 16:09:13 +0100 Subject: [PATCH] Log templated command argv and enforce timeout kill --- src/index.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index 9a990b8a1..aa9b0e509 100644 --- a/src/index.ts +++ b/src/index.ts @@ -397,11 +397,13 @@ async function getReplyFromConfig( const finalArgv = templatePrefix ? [argv[0], templatePrefix, ...argv.slice(1)] : argv; + logVerbose(`Resolved command argv: ${finalArgv.join(" ")}`); const started = Date.now(); try { const { stdout } = await execFileAsync(finalArgv[0], finalArgv.slice(1), { maxBuffer: 1024 * 1024, timeout: timeoutMs, + killSignal: "SIGKILL", }); const trimmed = stdout.trim(); logVerbose( @@ -410,10 +412,16 @@ async function getReplyFromConfig( logVerbose(`Command auto-reply finished in ${Date.now() - started}ms`); return trimmed || undefined; } catch (err) { - console.error( - `Command auto-reply failed after ${Date.now() - started}ms`, - err, - ); + const elapsed = Date.now() - started; + const anyErr = err as { killed?: boolean; signal?: string }; + const timeoutHit = anyErr.killed === true || anyErr.signal === "SIGKILL"; + if (timeoutHit) { + console.error( + `Command auto-reply timed out after ${elapsed}ms (limit ${timeoutMs}ms)`, + ); + } else { + console.error(`Command auto-reply failed after ${elapsed}ms`, err); + } return undefined; } }