thuban 0.3.2 → 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 (59) hide show
  1. package/README.md +137 -102
  2. package/dist/LICENSE +21 -0
  3. package/dist/README.md +185 -0
  4. package/dist/cli.js +2 -0
  5. package/dist/packages/scanner/ai-confidence-scorer.js +1 -0
  6. package/dist/packages/scanner/alert-manager.js +1 -0
  7. package/dist/packages/scanner/baseline-manager.js +1 -0
  8. package/dist/packages/scanner/code-scanner.js +1 -0
  9. package/dist/packages/scanner/codebase-passport.js +1 -0
  10. package/dist/packages/scanner/copy-paste-detector.js +1 -0
  11. package/dist/packages/scanner/dependency-graph.js +1 -0
  12. package/dist/packages/scanner/drift-detector.js +1 -0
  13. package/dist/packages/scanner/executive-report.js +1 -0
  14. package/dist/packages/scanner/file-collector.js +1 -0
  15. package/dist/packages/scanner/file-watcher.js +1 -0
  16. package/dist/packages/scanner/ghost-code-detector.js +1 -0
  17. package/dist/packages/scanner/hallucination-detector.js +1 -0
  18. package/dist/packages/scanner/health-checker.js +1 -0
  19. package/dist/packages/scanner/html-report.js +1 -0
  20. package/dist/packages/scanner/index.js +1 -0
  21. package/dist/packages/scanner/license-manager.js +1 -0
  22. package/dist/packages/scanner/master-health-checker.js +1 -0
  23. package/dist/packages/scanner/monitor-notifier.js +1 -0
  24. package/dist/packages/scanner/monitor-service.js +1 -0
  25. package/dist/packages/scanner/monitor-store.js +1 -0
  26. package/dist/packages/scanner/pre-commit-gate.js +1 -0
  27. package/dist/packages/scanner/scan-diff.js +1 -0
  28. package/dist/packages/scanner/scan-runner.js +1 -0
  29. package/dist/packages/scanner/secret-scanner.js +1 -0
  30. package/dist/packages/scanner/sentinel-core.js +1 -0
  31. package/dist/packages/scanner/sentinel-knowledge.js +1 -0
  32. package/dist/packages/scanner/tech-debt-analyzer.js +1 -0
  33. package/dist/packages/scanner/tech-debt-cost.js +1 -0
  34. package/dist/packages/scanner/widget-generator.js +1 -0
  35. package/package.json +16 -8
  36. package/cli.js +0 -2412
  37. package/packages/scanner/ai-confidence-scorer.js +0 -260
  38. package/packages/scanner/alert-manager.js +0 -398
  39. package/packages/scanner/baseline-manager.js +0 -109
  40. package/packages/scanner/code-scanner.js +0 -713
  41. package/packages/scanner/codebase-passport.js +0 -299
  42. package/packages/scanner/copy-paste-detector.js +0 -250
  43. package/packages/scanner/dependency-graph.js +0 -536
  44. package/packages/scanner/drift-detector.js +0 -423
  45. package/packages/scanner/executive-report.js +0 -774
  46. package/packages/scanner/file-watcher.js +0 -323
  47. package/packages/scanner/ghost-code-detector.js +0 -226
  48. package/packages/scanner/hallucination-detector.js +0 -652
  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 -92
  52. package/packages/scanner/license-manager.js +0 -318
  53. package/packages/scanner/master-health-checker.js +0 -513
  54. package/packages/scanner/pre-commit-gate.js +0 -216
  55. package/packages/scanner/sentinel-core.js +0 -608
  56. package/packages/scanner/sentinel-knowledge.js +0 -322
  57. package/packages/scanner/tech-debt-analyzer.js +0 -565
  58. package/packages/scanner/tech-debt-cost.js +0 -194
  59. 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;