fix: align flow with README, add Step4 exclusions filter, fix step numbers

This commit is contained in:
2026-05-12 01:35:57 +00:00
parent ba46224209
commit baa5d0cb64
4 changed files with 64 additions and 20 deletions
+38 -1
View File
@@ -1,7 +1,7 @@
import fs from 'fs';
import path from 'path';
import { chatJSON } from './llm.js';
import { FINDINGS_PATH } from './config.js';
import { FINDINGS_PATH, EXCLUSIONS_PATH } from './config.js';
const LEVELS = ['critical', 'warning', 'info'];
@@ -93,3 +93,40 @@ export async function deduplicateWithAI(findings) {
return findings;
}
}
/**
* 讀取排除問題檔案(從 workspace 的 EXCLUSIONS_PATH
* 格式:[{ role, location, suggestion }],欄位可部分省略,省略表示萬用
*/
export function loadExclusions(workspace) {
const fullPath = path.join(workspace, EXCLUSIONS_PATH);
if (!fs.existsSync(fullPath)) {
console.log(' 排除問題檔案不存在,跳過過濾');
return [];
}
try {
const data = JSON.parse(fs.readFileSync(fullPath, 'utf8'));
const exclusions = Array.isArray(data) ? data : [];
console.log(` 讀取排除問題: ${exclusions.length}`);
return exclusions;
} catch (e) {
console.log(` ⚠️ 讀取排除問題失敗: ${e.message},跳過過濾`);
return [];
}
}
/**
* 套用排除規則,過濾掉符合排除條件的 findings
* 排除條件:role/location/suggestion 皆符合(省略的欄位視為萬用)
*/
export function applyExclusions(findings, exclusions) {
if (exclusions.length === 0) return findings;
const before = findings.length;
const filtered = findings.filter(f => !exclusions.some(ex =>
(!ex.role || ex.role === f.role) &&
(!ex.location || ex.location === f.location) &&
(!ex.suggestion || String(f.suggestion).startsWith(String(ex.suggestion).slice(0, 50)))
));
console.log(` 排除過濾: ${before} -> ${filtered.length} 筆(排除 ${before - filtered.length} 筆)`);
return filtered;
}