fix: align flow with README, add Step4 exclusions filter, fix step numbers
This commit is contained in:
+38
-1
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user