diff --git a/plugins/llm-security/scanners/scan-orchestrator.mjs b/plugins/llm-security/scanners/scan-orchestrator.mjs index 8a1edc3..c4028e7 100644 --- a/plugins/llm-security/scanners/scan-orchestrator.mjs +++ b/plugins/llm-security/scanners/scan-orchestrator.mjs @@ -271,10 +271,11 @@ async function main() { `[deep-scan] Duration: ${totalDuration}ms\n` ); - // Exit code based on verdict - if (agg.verdict === 'BLOCK') process.exit(2); - if (agg.verdict === 'WARNING') process.exit(1); - process.exit(0); + // Exit code based on verdict — use exitCode instead of exit() to allow + // stdout pipe buffers to drain fully (process.exit() truncates >64KB on macOS) + if (agg.verdict === 'BLOCK') process.exitCode = 2; + else if (agg.verdict === 'WARNING') process.exitCode = 1; + else process.exitCode = 0; } main().catch(err => { diff --git a/plugins/llm-security/scanners/supply-chain-recheck-cli.mjs b/plugins/llm-security/scanners/supply-chain-recheck-cli.mjs index 2c11baf..676d73c 100644 --- a/plugins/llm-security/scanners/supply-chain-recheck-cli.mjs +++ b/plugins/llm-security/scanners/supply-chain-recheck-cli.mjs @@ -32,6 +32,6 @@ result.aggregate = { risk_score: score, verdict: verd }; process.stdout.write(JSON.stringify(result, null, 2) + '\n'); -if (verd === 'BLOCK') process.exit(2); -if (verd === 'WARNING') process.exit(1); -process.exit(0); +if (verd === 'BLOCK') process.exitCode = 2; +else if (verd === 'WARNING') process.exitCode = 1; +else process.exitCode = 0;