fix(diagnostics): 處理 ai review findings #32
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user