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.
Files changed (66) hide show
  1. package/dist/LICENSE +21 -0
  2. package/dist/README.md +185 -0
  3. package/dist/cli.js +2 -0
  4. package/dist/packages/scanner/ai-confidence-scorer.js +1 -0
  5. package/dist/packages/scanner/alert-manager.js +1 -0
  6. package/dist/packages/scanner/baseline-manager.js +1 -0
  7. package/dist/packages/scanner/code-scanner.js +1 -0
  8. package/dist/packages/scanner/codebase-passport.js +1 -0
  9. package/dist/packages/scanner/copy-paste-detector.js +1 -0
  10. package/dist/packages/scanner/dependency-graph.js +1 -0
  11. package/dist/packages/scanner/drift-detector.js +1 -0
  12. package/dist/packages/scanner/executive-report.js +1 -0
  13. package/dist/packages/scanner/file-collector.js +1 -0
  14. package/dist/packages/scanner/file-watcher.js +1 -0
  15. package/dist/packages/scanner/ghost-code-detector.js +1 -0
  16. package/dist/packages/scanner/hallucination-detector.js +1 -0
  17. package/dist/packages/scanner/health-checker.js +1 -0
  18. package/dist/packages/scanner/html-report.js +1 -0
  19. package/dist/packages/scanner/index.js +1 -0
  20. package/dist/packages/scanner/license-manager.js +1 -0
  21. package/dist/packages/scanner/master-health-checker.js +1 -0
  22. package/dist/packages/scanner/monitor-notifier.js +1 -0
  23. package/dist/packages/scanner/monitor-service.js +1 -0
  24. package/dist/packages/scanner/monitor-store.js +1 -0
  25. package/dist/packages/scanner/pre-commit-gate.js +1 -0
  26. package/dist/packages/scanner/scan-diff.js +1 -0
  27. package/dist/packages/scanner/scan-runner.js +1 -0
  28. package/dist/packages/scanner/secret-scanner.js +1 -0
  29. package/dist/packages/scanner/sentinel-core.js +1 -0
  30. package/dist/packages/scanner/sentinel-knowledge.js +1 -0
  31. package/dist/packages/scanner/tech-debt-analyzer.js +1 -0
  32. package/dist/packages/scanner/tech-debt-cost.js +1 -0
  33. package/dist/packages/scanner/widget-generator.js +1 -0
  34. package/package.json +12 -7
  35. package/cli.js +0 -2627
  36. package/packages/scanner/ai-confidence-scorer.js +0 -260
  37. package/packages/scanner/alert-manager.js +0 -398
  38. package/packages/scanner/baseline-manager.js +0 -109
  39. package/packages/scanner/code-scanner.js +0 -758
  40. package/packages/scanner/codebase-passport.js +0 -299
  41. package/packages/scanner/copy-paste-detector.js +0 -276
  42. package/packages/scanner/dependency-graph.js +0 -541
  43. package/packages/scanner/drift-detector.js +0 -423
  44. package/packages/scanner/executive-report.js +0 -774
  45. package/packages/scanner/file-collector.js +0 -64
  46. package/packages/scanner/file-watcher.js +0 -323
  47. package/packages/scanner/ghost-code-detector.js +0 -301
  48. package/packages/scanner/hallucination-detector.js +0 -822
  49. package/packages/scanner/health-checker.js +0 -586
  50. package/packages/scanner/html-report.js +0 -634
  51. package/packages/scanner/index.js +0 -100
  52. package/packages/scanner/license-manager.js +0 -331
  53. package/packages/scanner/master-health-checker.js +0 -513
  54. package/packages/scanner/monitor-notifier.js +0 -64
  55. package/packages/scanner/monitor-service.js +0 -103
  56. package/packages/scanner/monitor-store.js +0 -117
  57. package/packages/scanner/pre-commit-gate.js +0 -216
  58. package/packages/scanner/scan-diff.js +0 -50
  59. package/packages/scanner/scan-runner.js +0 -172
  60. package/packages/scanner/secret-scanner.js +0 -612
  61. package/packages/scanner/secret-scanner.test.js +0 -103
  62. package/packages/scanner/sentinel-core.js +0 -616
  63. package/packages/scanner/sentinel-knowledge.js +0 -322
  64. package/packages/scanner/tech-debt-analyzer.js +0 -583
  65. package/packages/scanner/tech-debt-cost.js +0 -194
  66. 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;