From f341dc6e07fa326406e3b6cc6e3654959dc1f0ca Mon Sep 17 00:00:00 2001 From: Jeffery Date: Mon, 20 Jul 2026 16:01:05 +0800 Subject: [PATCH] =?UTF-8?q?perf(AI=20=E5=A4=B1=E6=95=97=E8=A8=BA=E6=96=B7)?= =?UTF-8?q?:=20=E9=99=A4=E9=8C=AF=E8=BC=B8=E5=87=BA=E5=85=88=E6=88=AA?= =?UTF-8?q?=E9=95=B7=E5=BA=A6=E4=B8=8A=E9=99=90=E5=86=8D=E9=81=AE=E7=BD=A9?= =?UTF-8?q?=E9=99=8D=E4=BD=8E=E6=8E=83=E6=8F=8F=E6=88=90=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- src/lib/review.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/lib/review.js b/src/lib/review.js index b6a69ea..172f22c 100644 --- a/src/lib/review.js +++ b/src/lib/review.js @@ -67,9 +67,12 @@ function agentFailureDetail(res) { // 僅在明確開啟 Actions step debug 時,附上「已遮罩+去控制字元」的片段作為診斷。 const verbose = String(process.env.ACTIONS_STEP_DEBUG || '').trim().toLowerCase() === 'true'; if (verbose) { - const stderr = redactSecrets((res && res.stderr) || ''); + // 先截去過長輸入再遮罩,避免對數 MB 的失敗輸出跑整份 O(k×n) 正規掃描; + // 2000 字上限已足以涵蓋跨界機密樣式,最終仍截為 500 字。 + const DEBUG_INPUT_LIMIT = 2_000; + const stderr = redactSecrets(String((res && res.stderr) || '').slice(0, DEBUG_INPUT_LIMIT)); if (stderr) parts.push(`stderr:${stderr.slice(0, 500)}`); - const stdout = redactSecrets((res && res.output) || ''); + const stdout = redactSecrets(String((res && res.output) || '').slice(0, DEBUG_INPUT_LIMIT)); if (stdout) parts.push(`stdout:${stdout.slice(0, 500)}`); } if (parts.length === 0) {