driftdetect-core 0.1.0

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 (221) hide show
  1. package/dist/analyzers/ast-analyzer.d.ts +251 -0
  2. package/dist/analyzers/ast-analyzer.d.ts.map +1 -0
  3. package/dist/analyzers/ast-analyzer.js +548 -0
  4. package/dist/analyzers/ast-analyzer.js.map +1 -0
  5. package/dist/analyzers/flow-analyzer.d.ts +241 -0
  6. package/dist/analyzers/flow-analyzer.d.ts.map +1 -0
  7. package/dist/analyzers/flow-analyzer.js +1219 -0
  8. package/dist/analyzers/flow-analyzer.js.map +1 -0
  9. package/dist/analyzers/index.d.ts +18 -0
  10. package/dist/analyzers/index.d.ts.map +1 -0
  11. package/dist/analyzers/index.js +19 -0
  12. package/dist/analyzers/index.js.map +1 -0
  13. package/dist/analyzers/semantic-analyzer.d.ts +252 -0
  14. package/dist/analyzers/semantic-analyzer.d.ts.map +1 -0
  15. package/dist/analyzers/semantic-analyzer.js +1182 -0
  16. package/dist/analyzers/semantic-analyzer.js.map +1 -0
  17. package/dist/analyzers/type-analyzer.d.ts +289 -0
  18. package/dist/analyzers/type-analyzer.d.ts.map +1 -0
  19. package/dist/analyzers/type-analyzer.js +1269 -0
  20. package/dist/analyzers/type-analyzer.js.map +1 -0
  21. package/dist/analyzers/types.d.ts +537 -0
  22. package/dist/analyzers/types.d.ts.map +1 -0
  23. package/dist/analyzers/types.js +11 -0
  24. package/dist/analyzers/types.js.map +1 -0
  25. package/dist/config/config-loader.d.ts +166 -0
  26. package/dist/config/config-loader.d.ts.map +1 -0
  27. package/dist/config/config-loader.js +429 -0
  28. package/dist/config/config-loader.js.map +1 -0
  29. package/dist/config/config-validator.d.ts +204 -0
  30. package/dist/config/config-validator.d.ts.map +1 -0
  31. package/dist/config/config-validator.js +632 -0
  32. package/dist/config/config-validator.js.map +1 -0
  33. package/dist/config/defaults.d.ts +8 -0
  34. package/dist/config/defaults.d.ts.map +1 -0
  35. package/dist/config/defaults.js +26 -0
  36. package/dist/config/defaults.js.map +1 -0
  37. package/dist/config/index.d.ts +10 -0
  38. package/dist/config/index.d.ts.map +1 -0
  39. package/dist/config/index.js +10 -0
  40. package/dist/config/index.js.map +1 -0
  41. package/dist/config/types.d.ts +47 -0
  42. package/dist/config/types.d.ts.map +1 -0
  43. package/dist/config/types.js +7 -0
  44. package/dist/config/types.js.map +1 -0
  45. package/dist/index.d.ts +37 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +39 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/manifest/exporter.d.ts +21 -0
  50. package/dist/manifest/exporter.d.ts.map +1 -0
  51. package/dist/manifest/exporter.js +339 -0
  52. package/dist/manifest/exporter.js.map +1 -0
  53. package/dist/manifest/index.d.ts +14 -0
  54. package/dist/manifest/index.d.ts.map +1 -0
  55. package/dist/manifest/index.js +15 -0
  56. package/dist/manifest/index.js.map +1 -0
  57. package/dist/manifest/manifest-store.d.ts +111 -0
  58. package/dist/manifest/manifest-store.d.ts.map +1 -0
  59. package/dist/manifest/manifest-store.js +418 -0
  60. package/dist/manifest/manifest-store.js.map +1 -0
  61. package/dist/manifest/types.d.ts +238 -0
  62. package/dist/manifest/types.d.ts.map +1 -0
  63. package/dist/manifest/types.js +11 -0
  64. package/dist/manifest/types.js.map +1 -0
  65. package/dist/matcher/confidence-scorer.d.ts +188 -0
  66. package/dist/matcher/confidence-scorer.d.ts.map +1 -0
  67. package/dist/matcher/confidence-scorer.js +302 -0
  68. package/dist/matcher/confidence-scorer.js.map +1 -0
  69. package/dist/matcher/index.d.ts +24 -0
  70. package/dist/matcher/index.d.ts.map +1 -0
  71. package/dist/matcher/index.js +26 -0
  72. package/dist/matcher/index.js.map +1 -0
  73. package/dist/matcher/outlier-detector.d.ts +252 -0
  74. package/dist/matcher/outlier-detector.d.ts.map +1 -0
  75. package/dist/matcher/outlier-detector.js +544 -0
  76. package/dist/matcher/outlier-detector.js.map +1 -0
  77. package/dist/matcher/pattern-matcher.d.ts +169 -0
  78. package/dist/matcher/pattern-matcher.d.ts.map +1 -0
  79. package/dist/matcher/pattern-matcher.js +692 -0
  80. package/dist/matcher/pattern-matcher.js.map +1 -0
  81. package/dist/matcher/types.d.ts +476 -0
  82. package/dist/matcher/types.d.ts.map +1 -0
  83. package/dist/matcher/types.js +36 -0
  84. package/dist/matcher/types.js.map +1 -0
  85. package/dist/parsers/base-parser.d.ts +282 -0
  86. package/dist/parsers/base-parser.d.ts.map +1 -0
  87. package/dist/parsers/base-parser.js +421 -0
  88. package/dist/parsers/base-parser.js.map +1 -0
  89. package/dist/parsers/css-parser.d.ts +225 -0
  90. package/dist/parsers/css-parser.d.ts.map +1 -0
  91. package/dist/parsers/css-parser.js +477 -0
  92. package/dist/parsers/css-parser.js.map +1 -0
  93. package/dist/parsers/index.d.ts +15 -0
  94. package/dist/parsers/index.d.ts.map +1 -0
  95. package/dist/parsers/index.js +15 -0
  96. package/dist/parsers/index.js.map +1 -0
  97. package/dist/parsers/json-parser.d.ts +219 -0
  98. package/dist/parsers/json-parser.d.ts.map +1 -0
  99. package/dist/parsers/json-parser.js +602 -0
  100. package/dist/parsers/json-parser.js.map +1 -0
  101. package/dist/parsers/markdown-parser.d.ts +276 -0
  102. package/dist/parsers/markdown-parser.d.ts.map +1 -0
  103. package/dist/parsers/markdown-parser.js +731 -0
  104. package/dist/parsers/markdown-parser.js.map +1 -0
  105. package/dist/parsers/parser-manager.d.ts +294 -0
  106. package/dist/parsers/parser-manager.d.ts.map +1 -0
  107. package/dist/parsers/parser-manager.js +738 -0
  108. package/dist/parsers/parser-manager.js.map +1 -0
  109. package/dist/parsers/python-parser.d.ts +204 -0
  110. package/dist/parsers/python-parser.d.ts.map +1 -0
  111. package/dist/parsers/python-parser.js +517 -0
  112. package/dist/parsers/python-parser.js.map +1 -0
  113. package/dist/parsers/types.d.ts +43 -0
  114. package/dist/parsers/types.d.ts.map +1 -0
  115. package/dist/parsers/types.js +7 -0
  116. package/dist/parsers/types.js.map +1 -0
  117. package/dist/parsers/typescript-parser.d.ts +264 -0
  118. package/dist/parsers/typescript-parser.d.ts.map +1 -0
  119. package/dist/parsers/typescript-parser.js +658 -0
  120. package/dist/parsers/typescript-parser.js.map +1 -0
  121. package/dist/rules/evaluator.d.ts +305 -0
  122. package/dist/rules/evaluator.d.ts.map +1 -0
  123. package/dist/rules/evaluator.js +579 -0
  124. package/dist/rules/evaluator.js.map +1 -0
  125. package/dist/rules/index.d.ts +13 -0
  126. package/dist/rules/index.d.ts.map +1 -0
  127. package/dist/rules/index.js +13 -0
  128. package/dist/rules/index.js.map +1 -0
  129. package/dist/rules/quick-fix-generator.d.ts +334 -0
  130. package/dist/rules/quick-fix-generator.d.ts.map +1 -0
  131. package/dist/rules/quick-fix-generator.js +1075 -0
  132. package/dist/rules/quick-fix-generator.js.map +1 -0
  133. package/dist/rules/rule-engine.d.ts +241 -0
  134. package/dist/rules/rule-engine.d.ts.map +1 -0
  135. package/dist/rules/rule-engine.js +585 -0
  136. package/dist/rules/rule-engine.js.map +1 -0
  137. package/dist/rules/severity-manager.d.ts +394 -0
  138. package/dist/rules/severity-manager.d.ts.map +1 -0
  139. package/dist/rules/severity-manager.js +619 -0
  140. package/dist/rules/severity-manager.js.map +1 -0
  141. package/dist/rules/types.d.ts +370 -0
  142. package/dist/rules/types.d.ts.map +1 -0
  143. package/dist/rules/types.js +133 -0
  144. package/dist/rules/types.js.map +1 -0
  145. package/dist/rules/variant-manager.d.ts +388 -0
  146. package/dist/rules/variant-manager.d.ts.map +1 -0
  147. package/dist/rules/variant-manager.js +777 -0
  148. package/dist/rules/variant-manager.js.map +1 -0
  149. package/dist/scanner/change-detector.d.ts +164 -0
  150. package/dist/scanner/change-detector.d.ts.map +1 -0
  151. package/dist/scanner/change-detector.js +263 -0
  152. package/dist/scanner/change-detector.js.map +1 -0
  153. package/dist/scanner/dependency-graph.d.ts +270 -0
  154. package/dist/scanner/dependency-graph.d.ts.map +1 -0
  155. package/dist/scanner/dependency-graph.js +436 -0
  156. package/dist/scanner/dependency-graph.js.map +1 -0
  157. package/dist/scanner/file-walker.d.ts +127 -0
  158. package/dist/scanner/file-walker.d.ts.map +1 -0
  159. package/dist/scanner/file-walker.js +526 -0
  160. package/dist/scanner/file-walker.js.map +1 -0
  161. package/dist/scanner/index.d.ts +12 -0
  162. package/dist/scanner/index.d.ts.map +1 -0
  163. package/dist/scanner/index.js +12 -0
  164. package/dist/scanner/index.js.map +1 -0
  165. package/dist/scanner/types.d.ts +218 -0
  166. package/dist/scanner/types.d.ts.map +1 -0
  167. package/dist/scanner/types.js +10 -0
  168. package/dist/scanner/types.js.map +1 -0
  169. package/dist/scanner/worker-pool.d.ts +317 -0
  170. package/dist/scanner/worker-pool.d.ts.map +1 -0
  171. package/dist/scanner/worker-pool.js +571 -0
  172. package/dist/scanner/worker-pool.js.map +1 -0
  173. package/dist/store/cache-manager.d.ts +179 -0
  174. package/dist/store/cache-manager.d.ts.map +1 -0
  175. package/dist/store/cache-manager.js +391 -0
  176. package/dist/store/cache-manager.js.map +1 -0
  177. package/dist/store/history-store.d.ts +314 -0
  178. package/dist/store/history-store.d.ts.map +1 -0
  179. package/dist/store/history-store.js +707 -0
  180. package/dist/store/history-store.js.map +1 -0
  181. package/dist/store/index.d.ts +20 -0
  182. package/dist/store/index.d.ts.map +1 -0
  183. package/dist/store/index.js +26 -0
  184. package/dist/store/index.js.map +1 -0
  185. package/dist/store/lock-file-manager.d.ts +202 -0
  186. package/dist/store/lock-file-manager.d.ts.map +1 -0
  187. package/dist/store/lock-file-manager.js +475 -0
  188. package/dist/store/lock-file-manager.js.map +1 -0
  189. package/dist/store/pattern-store.d.ts +289 -0
  190. package/dist/store/pattern-store.d.ts.map +1 -0
  191. package/dist/store/pattern-store.js +936 -0
  192. package/dist/store/pattern-store.js.map +1 -0
  193. package/dist/store/schema-validator.d.ts +159 -0
  194. package/dist/store/schema-validator.d.ts.map +1 -0
  195. package/dist/store/schema-validator.js +1096 -0
  196. package/dist/store/schema-validator.js.map +1 -0
  197. package/dist/store/types.d.ts +585 -0
  198. package/dist/store/types.d.ts.map +1 -0
  199. package/dist/store/types.js +82 -0
  200. package/dist/store/types.js.map +1 -0
  201. package/dist/types/analysis.d.ts +19 -0
  202. package/dist/types/analysis.d.ts.map +1 -0
  203. package/dist/types/analysis.js +5 -0
  204. package/dist/types/analysis.js.map +1 -0
  205. package/dist/types/common.d.ts +7 -0
  206. package/dist/types/common.d.ts.map +1 -0
  207. package/dist/types/common.js +5 -0
  208. package/dist/types/common.js.map +1 -0
  209. package/dist/types/index.d.ts +12 -0
  210. package/dist/types/index.d.ts.map +1 -0
  211. package/dist/types/index.js +10 -0
  212. package/dist/types/index.js.map +1 -0
  213. package/dist/types/patterns.d.ts +40 -0
  214. package/dist/types/patterns.d.ts.map +1 -0
  215. package/dist/types/patterns.js +7 -0
  216. package/dist/types/patterns.js.map +1 -0
  217. package/dist/types/violations.d.ts +7 -0
  218. package/dist/types/violations.d.ts.map +1 -0
  219. package/dist/types/violations.js +7 -0
  220. package/dist/types/violations.js.map +1 -0
  221. package/package.json +46 -0
@@ -0,0 +1,111 @@
1
+ /**
2
+ * ManifestStore - Storage and management for the pattern manifest
3
+ *
4
+ * The manifest provides a complete architectural map of a codebase.
5
+ * This store handles:
6
+ * - Loading/saving the manifest
7
+ * - Incremental updates (only re-scan changed files)
8
+ * - Forward and reverse index queries
9
+ *
10
+ * @requirements PATTERN-LOCATION-DISCOVERY.md
11
+ */
12
+ import type { Manifest, ManifestPattern, ManifestSummary, SemanticLocation, PatternQuery, PatternQueryResult, FileQuery, FileQueryResult } from './types.js';
13
+ import type { PatternCategory } from '../store/types.js';
14
+ /**
15
+ * ManifestStore manages the pattern location manifest
16
+ */
17
+ export declare class ManifestStore {
18
+ private manifest;
19
+ private manifestPath;
20
+ private projectRoot;
21
+ private dirty;
22
+ constructor(projectRoot: string, manifestPath?: string);
23
+ /**
24
+ * Load manifest from disk
25
+ */
26
+ load(): Promise<Manifest | null>;
27
+ /**
28
+ * Save manifest to disk (atomic write)
29
+ */
30
+ save(): Promise<void>;
31
+ /**
32
+ * Create a new empty manifest
33
+ */
34
+ create(): Manifest;
35
+ /**
36
+ * Get the current manifest (load if not loaded)
37
+ */
38
+ get(): Promise<Manifest>;
39
+ /**
40
+ * Check if a file has changed since last scan
41
+ */
42
+ hasFileChanged(filePath: string): Promise<boolean>;
43
+ /**
44
+ * Get files that have changed since last scan
45
+ */
46
+ getChangedFiles(files: string[]): Promise<string[]>;
47
+ /**
48
+ * Update manifest with new pattern data
49
+ */
50
+ updatePattern(pattern: ManifestPattern): void;
51
+ /**
52
+ * Update manifest with multiple patterns
53
+ */
54
+ updatePatterns(patterns: ManifestPattern[]): void;
55
+ /**
56
+ * Remove patterns for a file (before re-scanning)
57
+ */
58
+ clearFilePatterns(filePath: string): void;
59
+ /**
60
+ * Query patterns by various criteria
61
+ */
62
+ queryPatterns(query: PatternQuery): PatternQueryResult[];
63
+ /**
64
+ * Query patterns in a specific file
65
+ */
66
+ queryFile(query: FileQuery): FileQueryResult | null;
67
+ /**
68
+ * Get pattern by ID
69
+ */
70
+ getPattern(patternId: string): ManifestPattern | null;
71
+ /**
72
+ * Get all patterns
73
+ */
74
+ getAllPatterns(): ManifestPattern[];
75
+ /**
76
+ * Get patterns by category
77
+ */
78
+ getPatternsByCategory(category: PatternCategory): ManifestPattern[];
79
+ /**
80
+ * Check if manifest needs saving
81
+ */
82
+ isDirty(): boolean;
83
+ /**
84
+ * Get manifest summary
85
+ */
86
+ getSummary(): ManifestSummary | null;
87
+ private addFilePattern;
88
+ private calculateSummary;
89
+ private calculateCodebaseHash;
90
+ private hashFile;
91
+ private matchGlob;
92
+ }
93
+ /**
94
+ * Hash file content for change detection
95
+ */
96
+ export declare function hashContent(content: string): string;
97
+ /**
98
+ * Create a semantic location from basic location data
99
+ */
100
+ export declare function createSemanticLocation(file: string, range: {
101
+ start: number;
102
+ end: number;
103
+ }, type: SemanticLocation['type'], name: string, options?: {
104
+ signature?: string;
105
+ confidence?: number;
106
+ snippet?: string;
107
+ language?: string;
108
+ hash?: string;
109
+ members?: SemanticLocation[];
110
+ }): SemanticLocation;
111
+ //# sourceMappingURL=manifest-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-store.d.ts","sourceRoot":"","sources":["../../src/manifest/manifest-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,SAAS,EACT,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAQzD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAS;gBAEV,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;IAKtD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAetC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B;;OAEG;IACH,MAAM,IAAI,QAAQ;IAqBlB;;OAEG;IACG,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;IAU9B;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBxD;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAYzD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAc7C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,IAAI;IAMjD;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IA2BzC;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,kBAAkB,EAAE;IAsDxD;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,eAAe,GAAG,IAAI;IA+CnD;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAIrD;;OAEG;IACH,cAAc,IAAI,eAAe,EAAE;IAKnC;;OAEG;IACH,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,eAAe,EAAE;IAKnE;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,UAAU,IAAI,eAAe,GAAG,IAAI;IAQpC,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,qBAAqB;YAYf,QAAQ;IAStB,OAAO,CAAC,SAAS;CAWlB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACrC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC9B,GACA,gBAAgB,CAwBlB"}
@@ -0,0 +1,418 @@
1
+ /**
2
+ * ManifestStore - Storage and management for the pattern manifest
3
+ *
4
+ * The manifest provides a complete architectural map of a codebase.
5
+ * This store handles:
6
+ * - Loading/saving the manifest
7
+ * - Incremental updates (only re-scan changed files)
8
+ * - Forward and reverse index queries
9
+ *
10
+ * @requirements PATTERN-LOCATION-DISCOVERY.md
11
+ */
12
+ import { createHash } from 'crypto';
13
+ import { promises as fs } from 'fs';
14
+ import * as path from 'path';
15
+ /** Current manifest format version */
16
+ const MANIFEST_VERSION = '2.0.0';
17
+ /** Default manifest file path */
18
+ const DEFAULT_MANIFEST_PATH = '.drift/index/manifest.json';
19
+ /**
20
+ * ManifestStore manages the pattern location manifest
21
+ */
22
+ export class ManifestStore {
23
+ manifest = null;
24
+ manifestPath;
25
+ projectRoot;
26
+ dirty = false;
27
+ constructor(projectRoot, manifestPath) {
28
+ this.projectRoot = projectRoot;
29
+ this.manifestPath = manifestPath || path.join(projectRoot, DEFAULT_MANIFEST_PATH);
30
+ }
31
+ /**
32
+ * Load manifest from disk
33
+ */
34
+ async load() {
35
+ try {
36
+ const content = await fs.readFile(this.manifestPath, 'utf-8');
37
+ this.manifest = JSON.parse(content);
38
+ this.dirty = false;
39
+ return this.manifest;
40
+ }
41
+ catch (error) {
42
+ if (error.code === 'ENOENT') {
43
+ // File doesn't exist, return null
44
+ return null;
45
+ }
46
+ throw error;
47
+ }
48
+ }
49
+ /**
50
+ * Save manifest to disk (atomic write)
51
+ */
52
+ async save() {
53
+ if (!this.manifest) {
54
+ throw new Error('No manifest to save');
55
+ }
56
+ // Update generated timestamp
57
+ this.manifest.generated = new Date().toISOString();
58
+ // Recalculate summary
59
+ this.manifest.summary = this.calculateSummary();
60
+ // Recalculate codebase hash
61
+ this.manifest.codebaseHash = this.calculateCodebaseHash();
62
+ // Ensure directory exists
63
+ const dir = path.dirname(this.manifestPath);
64
+ await fs.mkdir(dir, { recursive: true });
65
+ // Atomic write: write to temp file, then rename
66
+ const tempPath = `${this.manifestPath}.tmp`;
67
+ const content = JSON.stringify(this.manifest, null, 2);
68
+ await fs.writeFile(tempPath, content, 'utf-8');
69
+ await fs.rename(tempPath, this.manifestPath);
70
+ this.dirty = false;
71
+ }
72
+ /**
73
+ * Create a new empty manifest
74
+ */
75
+ create() {
76
+ this.manifest = {
77
+ version: MANIFEST_VERSION,
78
+ generated: new Date().toISOString(),
79
+ codebaseHash: '',
80
+ projectRoot: this.projectRoot,
81
+ summary: {
82
+ totalPatterns: 0,
83
+ patternsByStatus: { discovered: 0, approved: 0, ignored: 0 },
84
+ patternsByCategory: {},
85
+ totalFiles: 0,
86
+ totalLocations: 0,
87
+ totalOutliers: 0,
88
+ },
89
+ patterns: {},
90
+ files: {},
91
+ };
92
+ this.dirty = true;
93
+ return this.manifest;
94
+ }
95
+ /**
96
+ * Get the current manifest (load if not loaded)
97
+ */
98
+ async get() {
99
+ if (!this.manifest) {
100
+ const loaded = await this.load();
101
+ if (!loaded) {
102
+ return this.create();
103
+ }
104
+ }
105
+ return this.manifest;
106
+ }
107
+ /**
108
+ * Check if a file has changed since last scan
109
+ */
110
+ async hasFileChanged(filePath) {
111
+ if (!this.manifest) {
112
+ return true;
113
+ }
114
+ const relativePath = path.relative(this.projectRoot, filePath);
115
+ const fileEntry = this.manifest.files[relativePath];
116
+ if (!fileEntry) {
117
+ return true; // New file
118
+ }
119
+ const currentHash = await this.hashFile(filePath);
120
+ return currentHash !== fileEntry.hash;
121
+ }
122
+ /**
123
+ * Get files that have changed since last scan
124
+ */
125
+ async getChangedFiles(files) {
126
+ const changed = [];
127
+ for (const file of files) {
128
+ if (await this.hasFileChanged(file)) {
129
+ changed.push(file);
130
+ }
131
+ }
132
+ return changed;
133
+ }
134
+ /**
135
+ * Update manifest with new pattern data
136
+ */
137
+ updatePattern(pattern) {
138
+ if (!this.manifest) {
139
+ this.create();
140
+ }
141
+ this.manifest.patterns[pattern.id] = pattern;
142
+ this.dirty = true;
143
+ // Update reverse index for each location
144
+ for (const location of pattern.locations) {
145
+ this.addFilePattern(location.file, pattern.id, location.hash);
146
+ }
147
+ }
148
+ /**
149
+ * Update manifest with multiple patterns
150
+ */
151
+ updatePatterns(patterns) {
152
+ for (const pattern of patterns) {
153
+ this.updatePattern(pattern);
154
+ }
155
+ }
156
+ /**
157
+ * Remove patterns for a file (before re-scanning)
158
+ */
159
+ clearFilePatterns(filePath) {
160
+ if (!this.manifest)
161
+ return;
162
+ const relativePath = path.relative(this.projectRoot, filePath);
163
+ const fileEntry = this.manifest.files[relativePath];
164
+ if (!fileEntry)
165
+ return;
166
+ // Remove this file's locations from each pattern
167
+ for (const patternId of fileEntry.patterns) {
168
+ const pattern = this.manifest.patterns[patternId];
169
+ if (pattern) {
170
+ pattern.locations = pattern.locations.filter(loc => loc.file !== relativePath);
171
+ pattern.outliers = pattern.outliers.filter(loc => loc.file !== relativePath);
172
+ // Remove pattern if no locations left
173
+ if (pattern.locations.length === 0 && pattern.outliers.length === 0) {
174
+ delete this.manifest.patterns[patternId];
175
+ }
176
+ }
177
+ }
178
+ // Clear file entry
179
+ delete this.manifest.files[relativePath];
180
+ this.dirty = true;
181
+ }
182
+ /**
183
+ * Query patterns by various criteria
184
+ */
185
+ queryPatterns(query) {
186
+ if (!this.manifest)
187
+ return [];
188
+ const results = [];
189
+ for (const [id, pattern] of Object.entries(this.manifest.patterns)) {
190
+ // Filter by pattern name/id
191
+ if (query.pattern) {
192
+ const searchTerm = query.pattern.toLowerCase();
193
+ if (!id.toLowerCase().includes(searchTerm) &&
194
+ !pattern.name.toLowerCase().includes(searchTerm)) {
195
+ continue;
196
+ }
197
+ }
198
+ // Filter by category
199
+ if (query.category && pattern.category !== query.category) {
200
+ continue;
201
+ }
202
+ // Filter by status
203
+ if (query.status && pattern.status !== query.status) {
204
+ continue;
205
+ }
206
+ // Filter by confidence
207
+ if (query.minConfidence !== undefined && pattern.confidence < query.minConfidence) {
208
+ continue;
209
+ }
210
+ // Filter by file path
211
+ let locations = pattern.locations;
212
+ if (query.filePath) {
213
+ const pathPattern = query.filePath;
214
+ locations = locations.filter(loc => this.matchGlob(loc.file, pathPattern));
215
+ }
216
+ if (locations.length === 0)
217
+ continue;
218
+ // Apply limit
219
+ const limitedLocations = query.limit ? locations.slice(0, query.limit) : locations;
220
+ results.push({
221
+ patternId: id,
222
+ patternName: pattern.name,
223
+ category: pattern.category,
224
+ locations: limitedLocations,
225
+ totalCount: locations.length,
226
+ });
227
+ }
228
+ return results;
229
+ }
230
+ /**
231
+ * Query patterns in a specific file
232
+ */
233
+ queryFile(query) {
234
+ if (!this.manifest)
235
+ return null;
236
+ // Handle glob patterns
237
+ const matchingFiles = Object.keys(this.manifest.files).filter(f => this.matchGlob(f, query.path));
238
+ if (matchingFiles.length === 0)
239
+ return null;
240
+ // For now, return first matching file
241
+ const filePath = matchingFiles[0];
242
+ if (!filePath)
243
+ return null;
244
+ const fileEntry = this.manifest.files[filePath];
245
+ if (!fileEntry)
246
+ return null;
247
+ const patterns = [];
248
+ for (const patternId of fileEntry.patterns) {
249
+ const pattern = this.manifest.patterns[patternId];
250
+ if (!pattern)
251
+ continue;
252
+ // Filter by category
253
+ if (query.category && pattern.category !== query.category) {
254
+ continue;
255
+ }
256
+ // Get locations in this file
257
+ const locations = pattern.locations.filter(loc => loc.file === filePath);
258
+ patterns.push({
259
+ id: patternId,
260
+ name: pattern.name,
261
+ category: pattern.category,
262
+ locations,
263
+ });
264
+ }
265
+ return {
266
+ file: filePath,
267
+ patterns,
268
+ metadata: fileEntry,
269
+ };
270
+ }
271
+ /**
272
+ * Get pattern by ID
273
+ */
274
+ getPattern(patternId) {
275
+ return this.manifest?.patterns[patternId] || null;
276
+ }
277
+ /**
278
+ * Get all patterns
279
+ */
280
+ getAllPatterns() {
281
+ if (!this.manifest)
282
+ return [];
283
+ return Object.values(this.manifest.patterns);
284
+ }
285
+ /**
286
+ * Get patterns by category
287
+ */
288
+ getPatternsByCategory(category) {
289
+ if (!this.manifest)
290
+ return [];
291
+ return Object.values(this.manifest.patterns).filter(p => p.category === category);
292
+ }
293
+ /**
294
+ * Check if manifest needs saving
295
+ */
296
+ isDirty() {
297
+ return this.dirty;
298
+ }
299
+ /**
300
+ * Get manifest summary
301
+ */
302
+ getSummary() {
303
+ return this.manifest?.summary || null;
304
+ }
305
+ // ============================================================================
306
+ // Private Methods
307
+ // ============================================================================
308
+ addFilePattern(filePath, patternId, hash) {
309
+ if (!this.manifest)
310
+ return;
311
+ if (!this.manifest.files[filePath]) {
312
+ this.manifest.files[filePath] = {
313
+ hash,
314
+ patterns: [],
315
+ lastScanned: new Date().toISOString(),
316
+ };
317
+ }
318
+ const fileEntry = this.manifest.files[filePath];
319
+ if (!fileEntry.patterns.includes(patternId)) {
320
+ fileEntry.patterns.push(patternId);
321
+ }
322
+ fileEntry.hash = hash;
323
+ fileEntry.lastScanned = new Date().toISOString();
324
+ }
325
+ calculateSummary() {
326
+ if (!this.manifest) {
327
+ return {
328
+ totalPatterns: 0,
329
+ patternsByStatus: { discovered: 0, approved: 0, ignored: 0 },
330
+ patternsByCategory: {},
331
+ totalFiles: 0,
332
+ totalLocations: 0,
333
+ totalOutliers: 0,
334
+ };
335
+ }
336
+ const patterns = Object.values(this.manifest.patterns);
337
+ const patternsByStatus = { discovered: 0, approved: 0, ignored: 0 };
338
+ const patternsByCategory = {};
339
+ let totalLocations = 0;
340
+ let totalOutliers = 0;
341
+ for (const pattern of patterns) {
342
+ patternsByStatus[pattern.status]++;
343
+ patternsByCategory[pattern.category] = (patternsByCategory[pattern.category] || 0) + 1;
344
+ totalLocations += pattern.locations.length;
345
+ totalOutliers += pattern.outliers.length;
346
+ }
347
+ return {
348
+ totalPatterns: patterns.length,
349
+ patternsByStatus,
350
+ patternsByCategory,
351
+ totalFiles: Object.keys(this.manifest.files).length,
352
+ totalLocations,
353
+ totalOutliers,
354
+ };
355
+ }
356
+ calculateCodebaseHash() {
357
+ if (!this.manifest)
358
+ return '';
359
+ // Hash all file hashes together
360
+ const fileHashes = Object.values(this.manifest.files)
361
+ .map(f => f.hash)
362
+ .sort()
363
+ .join('');
364
+ return createHash('sha256').update(fileHashes).digest('hex').substring(0, 12);
365
+ }
366
+ async hashFile(filePath) {
367
+ try {
368
+ const content = await fs.readFile(filePath, 'utf-8');
369
+ return createHash('sha256').update(content).digest('hex').substring(0, 12);
370
+ }
371
+ catch {
372
+ return '';
373
+ }
374
+ }
375
+ matchGlob(filePath, pattern) {
376
+ // Simple glob matching (supports * and **)
377
+ const regexPattern = pattern
378
+ .replace(/\*\*/g, '{{GLOBSTAR}}')
379
+ .replace(/\*/g, '[^/]*')
380
+ .replace(/{{GLOBSTAR}}/g, '.*')
381
+ .replace(/\?/g, '.');
382
+ const regex = new RegExp(`^${regexPattern}$`);
383
+ return regex.test(filePath);
384
+ }
385
+ }
386
+ /**
387
+ * Hash file content for change detection
388
+ */
389
+ export function hashContent(content) {
390
+ return createHash('sha256').update(content).digest('hex').substring(0, 12);
391
+ }
392
+ /**
393
+ * Create a semantic location from basic location data
394
+ */
395
+ export function createSemanticLocation(file, range, type, name, options) {
396
+ const result = {
397
+ file,
398
+ hash: options?.hash || '',
399
+ range,
400
+ type,
401
+ name,
402
+ confidence: options?.confidence ?? 0.9,
403
+ };
404
+ if (options?.signature) {
405
+ result.signature = options.signature;
406
+ }
407
+ if (options?.snippet) {
408
+ result.snippet = options.snippet;
409
+ }
410
+ if (options?.language) {
411
+ result.language = options.language;
412
+ }
413
+ if (options?.members) {
414
+ result.members = options.members;
415
+ }
416
+ return result;
417
+ }
418
+ //# sourceMappingURL=manifest-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-store.js","sourceRoot":"","sources":["../../src/manifest/manifest-store.ts"],"names":[],"mappings":"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"}