feat: enhance findings and exclusions handling with repo state logging

This commit is contained in:
2026-05-15 09:39:11 +00:00
parent 8bf791a829
commit 222de4b369
5 changed files with 107 additions and 10 deletions
+33 -6
View File
@@ -40,11 +40,24 @@ function normalizeExclusions(data) {
return [];
}
function formatFileTime(mtimeMs) {
if (!Number.isFinite(mtimeMs)) return 'unknown';
return new Date(mtimeMs).toISOString();
}
/**
* 讀取舊 findings(從來源分支的 cloned repoDir 中的 FINDINGS_PATH
*/
export function loadOldFindings(workspace) {
const old = readJSONArray(path.join(workspace, FINDINGS_PATH), '舊 findings ').map(f => ({ ...f, is_new: false }));
const fullPath = path.join(workspace, FINDINGS_PATH);
const old = readJSONArray(fullPath, '舊 findings ').map(f => ({ ...f, is_new: false }));
if (fs.existsSync(fullPath)) {
const stat = fs.statSync(fullPath);
console.log(` 讀取舊 findings 檔案: ${fullPath}`);
console.log(` 舊 findings 檔案資訊: bytes=${stat.size} mtime=${formatFileTime(stat.mtimeMs)} path=${path.relative(workspace, fullPath) || fullPath}`);
} else {
console.log(` 舊 findings 檔案不存在: ${fullPath}`);
}
console.log(` 讀取舊 findings: ${old.length}`);
return old;
}
@@ -112,23 +125,37 @@ export async function deduplicateWithAI(findings) {
/**
* 讀取排除問題檔案(從來源分支的 cloned repoDir 中的 EXCLUSIONS_PATH
*/
export function loadExclusions(workspace) {
export function loadExclusions(workspace, repoState = null) {
const fullPath = path.join(workspace, EXCLUSIONS_PATH);
if (!fs.existsSync(fullPath)) {
console.log(' 排除問題檔案不存在,視為空');
console.log(' 讀取排除問題: 0 筆');
console.log(` 排除問題檔案不存在,視為空: ${fullPath}`);
if (repoState) {
const branch = repoState.branch || 'detached';
const shortSha = repoState.shortSha || repoState.headSha || 'unknown';
console.log(` 來源分支狀態: branch=${branch} commit=${shortSha} commit_time=${repoState.commitTime || 'unknown'}`);
}
console.log(' 讀取排除問題: raw=0 normalized=0 筆');
return [];
}
let exclusions = [];
let rawCount = 0;
try {
const stat = fs.statSync(fullPath);
const data = JSON.parse(fs.readFileSync(fullPath, 'utf8'));
rawCount = Array.isArray(data) ? data.length : Array.isArray(data?.excluded_findings) ? data.excluded_findings.length : 0;
exclusions = normalizeExclusions(data);
const branch = repoState?.branch || 'detached';
const shortSha = repoState?.shortSha || repoState?.headSha || 'unknown';
const commitTime = repoState?.commitTime || 'unknown';
console.log(` 讀取排除問題檔案: ${fullPath}`);
console.log(` 來源分支狀態: branch=${branch} commit=${shortSha} commit_time=${commitTime}`);
console.log(` 檔案資訊: bytes=${stat.size} mtime=${formatFileTime(stat.mtimeMs)} raw=${rawCount} normalized=${exclusions.length} path=${path.relative(workspace, fullPath) || fullPath}`);
} catch (e) {
console.log(` ⚠️ 讀取排除問題失敗: ${e.message},視為空`);
console.log(` ⚠️ 讀取排除問題失敗: ${e.message},視為空: ${fullPath}`);
exclusions = [];
}
console.log(` 讀取排除問題: ${exclusions.length}`);
console.log(` 讀取排除問題: raw=${rawCount} normalized=${exclusions.length}`);
return exclusions;
}