thuban 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/LICENSE +21 -0
- package/dist/README.md +185 -0
- package/dist/cli.js +2 -0
- package/dist/packages/scanner/ai-confidence-scorer.js +1 -0
- package/dist/packages/scanner/alert-manager.js +1 -0
- package/dist/packages/scanner/baseline-manager.js +1 -0
- package/dist/packages/scanner/code-scanner.js +1 -0
- package/dist/packages/scanner/codebase-passport.js +1 -0
- package/dist/packages/scanner/copy-paste-detector.js +1 -0
- package/dist/packages/scanner/dependency-graph.js +1 -0
- package/dist/packages/scanner/drift-detector.js +1 -0
- package/dist/packages/scanner/executive-report.js +1 -0
- package/dist/packages/scanner/file-collector.js +1 -0
- package/dist/packages/scanner/file-watcher.js +1 -0
- package/dist/packages/scanner/ghost-code-detector.js +1 -0
- package/dist/packages/scanner/hallucination-detector.js +1 -0
- package/dist/packages/scanner/health-checker.js +1 -0
- package/dist/packages/scanner/html-report.js +1 -0
- package/dist/packages/scanner/index.js +1 -0
- package/dist/packages/scanner/license-manager.js +1 -0
- package/dist/packages/scanner/master-health-checker.js +1 -0
- package/dist/packages/scanner/monitor-notifier.js +1 -0
- package/dist/packages/scanner/monitor-service.js +1 -0
- package/dist/packages/scanner/monitor-store.js +1 -0
- package/dist/packages/scanner/pre-commit-gate.js +1 -0
- package/dist/packages/scanner/scan-diff.js +1 -0
- package/dist/packages/scanner/scan-runner.js +1 -0
- package/dist/packages/scanner/secret-scanner.js +1 -0
- package/dist/packages/scanner/sentinel-core.js +1 -0
- package/dist/packages/scanner/sentinel-knowledge.js +1 -0
- package/dist/packages/scanner/tech-debt-analyzer.js +1 -0
- package/dist/packages/scanner/tech-debt-cost.js +1 -0
- package/dist/packages/scanner/widget-generator.js +1 -0
- package/package.json +12 -7
- package/cli.js +0 -2627
- package/packages/scanner/ai-confidence-scorer.js +0 -260
- package/packages/scanner/alert-manager.js +0 -398
- package/packages/scanner/baseline-manager.js +0 -109
- package/packages/scanner/code-scanner.js +0 -758
- package/packages/scanner/codebase-passport.js +0 -299
- package/packages/scanner/copy-paste-detector.js +0 -276
- package/packages/scanner/dependency-graph.js +0 -541
- package/packages/scanner/drift-detector.js +0 -423
- package/packages/scanner/executive-report.js +0 -774
- package/packages/scanner/file-collector.js +0 -64
- package/packages/scanner/file-watcher.js +0 -323
- package/packages/scanner/ghost-code-detector.js +0 -301
- package/packages/scanner/hallucination-detector.js +0 -822
- package/packages/scanner/health-checker.js +0 -586
- package/packages/scanner/html-report.js +0 -634
- package/packages/scanner/index.js +0 -100
- package/packages/scanner/license-manager.js +0 -331
- package/packages/scanner/master-health-checker.js +0 -513
- package/packages/scanner/monitor-notifier.js +0 -64
- package/packages/scanner/monitor-service.js +0 -103
- package/packages/scanner/monitor-store.js +0 -117
- package/packages/scanner/pre-commit-gate.js +0 -216
- package/packages/scanner/scan-diff.js +0 -50
- package/packages/scanner/scan-runner.js +0 -172
- package/packages/scanner/secret-scanner.js +0 -612
- package/packages/scanner/secret-scanner.test.js +0 -103
- package/packages/scanner/sentinel-core.js +0 -616
- package/packages/scanner/sentinel-knowledge.js +0 -322
- package/packages/scanner/tech-debt-analyzer.js +0 -583
- package/packages/scanner/tech-debt-cost.js +0 -194
- package/packages/scanner/widget-generator.js +0 -415
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Thuban Baseline Manager
|
|
3
|
-
*
|
|
4
|
-
* @purpose Track known issues so CI only fails on NEW issues, not existing ones
|
|
5
|
-
* @module thuban
|
|
6
|
-
* @layer core
|
|
7
|
-
* @exports-to cli
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
const fs = require('fs');
|
|
11
|
-
const path = require('path');
|
|
12
|
-
const crypto = require('crypto');
|
|
13
|
-
|
|
14
|
-
const BASELINE_FILE = '.thuban-baseline.json';
|
|
15
|
-
|
|
16
|
-
class BaselineManager {
|
|
17
|
-
constructor(rootPath) {
|
|
18
|
-
this.rootPath = rootPath;
|
|
19
|
-
this.baselinePath = path.join(rootPath, BASELINE_FILE);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Create a baseline from current scan results
|
|
24
|
-
*/
|
|
25
|
-
create(issues) {
|
|
26
|
-
const baseline = {
|
|
27
|
-
version: 1,
|
|
28
|
-
created: new Date().toISOString(),
|
|
29
|
-
generator: 'thuban',
|
|
30
|
-
issueCount: issues.length,
|
|
31
|
-
issues: issues.map(issue => ({
|
|
32
|
-
fingerprint: this._fingerprint(issue),
|
|
33
|
-
file: issue.file,
|
|
34
|
-
category: issue.category || 'unknown',
|
|
35
|
-
severity: issue.severity || 'unknown',
|
|
36
|
-
id: issue.id || null,
|
|
37
|
-
message: (issue.message || '').substring(0, 200),
|
|
38
|
-
})),
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
fs.writeFileSync(this.baselinePath, JSON.stringify(baseline, null, 2), 'utf-8');
|
|
42
|
-
return { path: this.baselinePath, count: issues.length };
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Load existing baseline
|
|
47
|
-
*/
|
|
48
|
-
load() {
|
|
49
|
-
try {
|
|
50
|
-
return JSON.parse(fs.readFileSync(this.baselinePath, 'utf-8'));
|
|
51
|
-
} catch (e) {
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Filter issues — return only NEW issues not in baseline
|
|
58
|
-
*/
|
|
59
|
-
filterNew(issues) {
|
|
60
|
-
const baseline = this.load();
|
|
61
|
-
if (!baseline || !baseline.issues) {
|
|
62
|
-
return { newIssues: issues, baselinedIssues: [], baselineExists: false };
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
const baselineFingerprints = new Set(baseline.issues.map(i => i.fingerprint));
|
|
66
|
-
const newIssues = [];
|
|
67
|
-
const baselinedIssues = [];
|
|
68
|
-
|
|
69
|
-
for (const issue of issues) {
|
|
70
|
-
const fp = this._fingerprint(issue);
|
|
71
|
-
if (baselineFingerprints.has(fp)) {
|
|
72
|
-
baselinedIssues.push(issue);
|
|
73
|
-
} else {
|
|
74
|
-
newIssues.push(issue);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return {
|
|
79
|
-
newIssues,
|
|
80
|
-
baselinedIssues,
|
|
81
|
-
baselineExists: true,
|
|
82
|
-
baselineDate: baseline.created,
|
|
83
|
-
baselineCount: baseline.issueCount,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Check if baseline exists
|
|
89
|
-
*/
|
|
90
|
-
exists() {
|
|
91
|
-
return fs.existsSync(this.baselinePath);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Generate a stable fingerprint for an issue (survives line number shifts)
|
|
96
|
-
*/
|
|
97
|
-
_fingerprint(issue) {
|
|
98
|
-
const parts = [
|
|
99
|
-
issue.file || '',
|
|
100
|
-
issue.category || '',
|
|
101
|
-
issue.id || '',
|
|
102
|
-
(issue.message || '').substring(0, 100),
|
|
103
|
-
].join('|');
|
|
104
|
-
|
|
105
|
-
return crypto.createHash('sha256').update(parts).digest('hex').substring(0, 16);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
module.exports = BaselineManager;
|