fix(diagnostics): 限縮 debug 診斷輸出並擴充遮罩

This commit is contained in:
Jeffery
2026-07-28 14:02:01 +08:00
parent cce35b3bef
commit 3c1cd55444
+5 -5
View File
@@ -2,8 +2,6 @@
// AI CLI 失敗診斷與機密遮罩工具:供 review 流程記錄安全、限長的一行錯誤摘要。 // AI CLI 失敗診斷與機密遮罩工具:供 review 流程記錄安全、限長的一行錯誤摘要。
// 遮罩前先截去的輸入上限,避免對數 MB 失敗輸出跑整份 O(k*n) 正規掃描。
const AGENT_DIAGNOSTIC_INPUT_LIMIT = 2_000;
// 每段診斷片段(stderr/stdout)寫入日誌的字元上限。 // 每段診斷片段(stderr/stdout)寫入日誌的字元上限。
const AGENT_DIAGNOSTIC_OUTPUT_LIMIT = 500; const AGENT_DIAGNOSTIC_OUTPUT_LIMIT = 500;
@@ -24,6 +22,9 @@ function redactSecrets(text) {
.replace(/(authorization\s*[:=]\s*)(?:bearer\s+)?\S+/gi, '$1***') .replace(/(authorization\s*[:=]\s*)(?:bearer\s+)?\S+/gi, '$1***')
.replace(/((?:api[_-]?key|token|password|secret|bearer)\s*[:=]\s*)\S+/gi, '$1***') .replace(/((?:api[_-]?key|token|password|secret|bearer)\s*[:=]\s*)\S+/gi, '$1***')
.replace(/(https?:\/\/)[^\s/:@]+:[^\s/@]+@/gi, '$1***:***@') .replace(/(https?:\/\/)[^\s/:@]+:[^\s/@]+@/gi, '$1***:***@')
.replace(/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g, '***')
.replace(/\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g, '***')
.replace(/-----BEGIN [^-]+ PRIVATE KEY-----[\s\S]*?-----END [^-]+ PRIVATE KEY-----/g, '***')
.replace(/\bgh[pousr]_[A-Za-z0-9]{16,}\b/g, '***') .replace(/\bgh[pousr]_[A-Za-z0-9]{16,}\b/g, '***')
.replace(/\b[A-Za-z0-9_-]{40,}\b/g, '***') .replace(/\b[A-Za-z0-9_-]{40,}\b/g, '***')
.trim(); .trim();
@@ -38,8 +39,8 @@ function redactSecrets(text) {
* @returns {void} * @returns {void}
*/ */
function appendRedactedOutput(parts, label, value) { function appendRedactedOutput(parts, label, value) {
const redacted = redactSecrets(String(value || '').slice(0, AGENT_DIAGNOSTIC_INPUT_LIMIT)); const redacted = redactSecrets(String(value || '').slice(0, AGENT_DIAGNOSTIC_OUTPUT_LIMIT));
if (redacted) parts.push(`${label}${redacted.slice(0, AGENT_DIAGNOSTIC_OUTPUT_LIMIT)}`); if (redacted) parts.push(`${label}${redacted}`);
} }
/** /**
@@ -75,7 +76,6 @@ function agentFailureDetail(agentResult) {
} }
module.exports = { module.exports = {
AGENT_DIAGNOSTIC_INPUT_LIMIT,
AGENT_DIAGNOSTIC_OUTPUT_LIMIT, AGENT_DIAGNOSTIC_OUTPUT_LIMIT,
redactSecrets, redactSecrets,
agentFailureDetail, agentFailureDetail,