codexia 0.2.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 (224) hide show
  1. package/CHANGELOG.md +111 -0
  2. package/LICENSE +663 -0
  3. package/README.md +392 -0
  4. package/dist/adapters/github/index.d.ts +66 -0
  5. package/dist/adapters/github/index.d.ts.map +1 -0
  6. package/dist/adapters/github/index.js +84 -0
  7. package/dist/adapters/github/index.js.map +1 -0
  8. package/dist/adapters/index.d.ts +5 -0
  9. package/dist/adapters/index.d.ts.map +1 -0
  10. package/dist/adapters/index.js +5 -0
  11. package/dist/adapters/index.js.map +1 -0
  12. package/dist/cli/commands/changelog.d.ts +3 -0
  13. package/dist/cli/commands/changelog.d.ts.map +1 -0
  14. package/dist/cli/commands/changelog.js +221 -0
  15. package/dist/cli/commands/changelog.js.map +1 -0
  16. package/dist/cli/commands/check.d.ts +3 -0
  17. package/dist/cli/commands/check.d.ts.map +1 -0
  18. package/dist/cli/commands/check.js +35 -0
  19. package/dist/cli/commands/check.js.map +1 -0
  20. package/dist/cli/commands/complexity.d.ts +3 -0
  21. package/dist/cli/commands/complexity.d.ts.map +1 -0
  22. package/dist/cli/commands/complexity.js +103 -0
  23. package/dist/cli/commands/complexity.js.map +1 -0
  24. package/dist/cli/commands/graph.d.ts +3 -0
  25. package/dist/cli/commands/graph.d.ts.map +1 -0
  26. package/dist/cli/commands/graph.js +46 -0
  27. package/dist/cli/commands/graph.js.map +1 -0
  28. package/dist/cli/commands/history.d.ts +3 -0
  29. package/dist/cli/commands/history.d.ts.map +1 -0
  30. package/dist/cli/commands/history.js +127 -0
  31. package/dist/cli/commands/history.js.map +1 -0
  32. package/dist/cli/commands/hotpaths.d.ts +3 -0
  33. package/dist/cli/commands/hotpaths.d.ts.map +1 -0
  34. package/dist/cli/commands/hotpaths.js +153 -0
  35. package/dist/cli/commands/hotpaths.js.map +1 -0
  36. package/dist/cli/commands/impact.d.ts +3 -0
  37. package/dist/cli/commands/impact.d.ts.map +1 -0
  38. package/dist/cli/commands/impact.js +37 -0
  39. package/dist/cli/commands/impact.js.map +1 -0
  40. package/dist/cli/commands/init.d.ts +3 -0
  41. package/dist/cli/commands/init.d.ts.map +1 -0
  42. package/dist/cli/commands/init.js +167 -0
  43. package/dist/cli/commands/init.js.map +1 -0
  44. package/dist/cli/commands/invariants.d.ts +3 -0
  45. package/dist/cli/commands/invariants.d.ts.map +1 -0
  46. package/dist/cli/commands/invariants.js +176 -0
  47. package/dist/cli/commands/invariants.js.map +1 -0
  48. package/dist/cli/commands/mcp-server.d.ts +3 -0
  49. package/dist/cli/commands/mcp-server.d.ts.map +1 -0
  50. package/dist/cli/commands/mcp-server.js +64 -0
  51. package/dist/cli/commands/mcp-server.js.map +1 -0
  52. package/dist/cli/commands/monorepo.d.ts +3 -0
  53. package/dist/cli/commands/monorepo.d.ts.map +1 -0
  54. package/dist/cli/commands/monorepo.js +156 -0
  55. package/dist/cli/commands/monorepo.js.map +1 -0
  56. package/dist/cli/commands/pr-report.d.ts +3 -0
  57. package/dist/cli/commands/pr-report.d.ts.map +1 -0
  58. package/dist/cli/commands/pr-report.js +32 -0
  59. package/dist/cli/commands/pr-report.js.map +1 -0
  60. package/dist/cli/commands/scan.d.ts +3 -0
  61. package/dist/cli/commands/scan.d.ts.map +1 -0
  62. package/dist/cli/commands/scan.js +25 -0
  63. package/dist/cli/commands/scan.js.map +1 -0
  64. package/dist/cli/commands/signals.d.ts +3 -0
  65. package/dist/cli/commands/signals.d.ts.map +1 -0
  66. package/dist/cli/commands/signals.js +34 -0
  67. package/dist/cli/commands/signals.js.map +1 -0
  68. package/dist/cli/commands/tests.d.ts +3 -0
  69. package/dist/cli/commands/tests.d.ts.map +1 -0
  70. package/dist/cli/commands/tests.js +30 -0
  71. package/dist/cli/commands/tests.js.map +1 -0
  72. package/dist/cli/commands/watch.d.ts +3 -0
  73. package/dist/cli/commands/watch.d.ts.map +1 -0
  74. package/dist/cli/commands/watch.js +131 -0
  75. package/dist/cli/commands/watch.js.map +1 -0
  76. package/dist/cli/engine.d.ts +162 -0
  77. package/dist/cli/engine.d.ts.map +1 -0
  78. package/dist/cli/engine.js +564 -0
  79. package/dist/cli/engine.js.map +1 -0
  80. package/dist/cli/formatter.d.ts +39 -0
  81. package/dist/cli/formatter.d.ts.map +1 -0
  82. package/dist/cli/formatter.js +444 -0
  83. package/dist/cli/formatter.js.map +1 -0
  84. package/dist/cli/index.d.ts +2 -0
  85. package/dist/cli/index.d.ts.map +1 -0
  86. package/dist/cli/index.js +63 -0
  87. package/dist/cli/index.js.map +1 -0
  88. package/dist/cli/interactive.d.ts +7 -0
  89. package/dist/cli/interactive.d.ts.map +1 -0
  90. package/dist/cli/interactive.js +644 -0
  91. package/dist/cli/interactive.js.map +1 -0
  92. package/dist/core/dependency-graph.d.ts +54 -0
  93. package/dist/core/dependency-graph.d.ts.map +1 -0
  94. package/dist/core/dependency-graph.js +190 -0
  95. package/dist/core/dependency-graph.js.map +1 -0
  96. package/dist/core/dependency-graph.test.d.ts +2 -0
  97. package/dist/core/dependency-graph.test.d.ts.map +1 -0
  98. package/dist/core/dependency-graph.test.js +106 -0
  99. package/dist/core/dependency-graph.test.js.map +1 -0
  100. package/dist/core/git-analyzer.d.ts +52 -0
  101. package/dist/core/git-analyzer.d.ts.map +1 -0
  102. package/dist/core/git-analyzer.js +250 -0
  103. package/dist/core/git-analyzer.js.map +1 -0
  104. package/dist/core/git-analyzer.test.d.ts +2 -0
  105. package/dist/core/git-analyzer.test.d.ts.map +1 -0
  106. package/dist/core/git-analyzer.test.js +71 -0
  107. package/dist/core/git-analyzer.test.js.map +1 -0
  108. package/dist/core/index.d.ts +7 -0
  109. package/dist/core/index.d.ts.map +1 -0
  110. package/dist/core/index.js +7 -0
  111. package/dist/core/index.js.map +1 -0
  112. package/dist/core/repo-indexer.d.ts +57 -0
  113. package/dist/core/repo-indexer.d.ts.map +1 -0
  114. package/dist/core/repo-indexer.js +356 -0
  115. package/dist/core/repo-indexer.js.map +1 -0
  116. package/dist/core/repo-indexer.test.d.ts +2 -0
  117. package/dist/core/repo-indexer.test.d.ts.map +1 -0
  118. package/dist/core/repo-indexer.test.js +89 -0
  119. package/dist/core/repo-indexer.test.js.map +1 -0
  120. package/dist/core/signals-engine.d.ts +38 -0
  121. package/dist/core/signals-engine.d.ts.map +1 -0
  122. package/dist/core/signals-engine.js +142 -0
  123. package/dist/core/signals-engine.js.map +1 -0
  124. package/dist/core/signals-engine.test.d.ts +2 -0
  125. package/dist/core/signals-engine.test.d.ts.map +1 -0
  126. package/dist/core/signals-engine.test.js +129 -0
  127. package/dist/core/signals-engine.test.js.map +1 -0
  128. package/dist/core/symbol-map.d.ts +45 -0
  129. package/dist/core/symbol-map.d.ts.map +1 -0
  130. package/dist/core/symbol-map.js +187 -0
  131. package/dist/core/symbol-map.js.map +1 -0
  132. package/dist/core/types.d.ts +514 -0
  133. package/dist/core/types.d.ts.map +1 -0
  134. package/dist/core/types.js +5 -0
  135. package/dist/core/types.js.map +1 -0
  136. package/dist/core/types.test.d.ts +2 -0
  137. package/dist/core/types.test.d.ts.map +1 -0
  138. package/dist/core/types.test.js +20 -0
  139. package/dist/core/types.test.js.map +1 -0
  140. package/dist/index.d.ts +5 -0
  141. package/dist/index.d.ts.map +1 -0
  142. package/dist/index.js +9 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/mcp/index.d.ts +3 -0
  145. package/dist/mcp/index.d.ts.map +1 -0
  146. package/dist/mcp/index.js +2 -0
  147. package/dist/mcp/index.js.map +1 -0
  148. package/dist/mcp/server.d.ts +89 -0
  149. package/dist/mcp/server.d.ts.map +1 -0
  150. package/dist/mcp/server.js +549 -0
  151. package/dist/mcp/server.js.map +1 -0
  152. package/dist/modules/changelog-generator.d.ts +82 -0
  153. package/dist/modules/changelog-generator.d.ts.map +1 -0
  154. package/dist/modules/changelog-generator.js +350 -0
  155. package/dist/modules/changelog-generator.js.map +1 -0
  156. package/dist/modules/complexity-engine.d.ts +86 -0
  157. package/dist/modules/complexity-engine.d.ts.map +1 -0
  158. package/dist/modules/complexity-engine.js +355 -0
  159. package/dist/modules/complexity-engine.js.map +1 -0
  160. package/dist/modules/convention-checker.d.ts +24 -0
  161. package/dist/modules/convention-checker.d.ts.map +1 -0
  162. package/dist/modules/convention-checker.js +181 -0
  163. package/dist/modules/convention-checker.js.map +1 -0
  164. package/dist/modules/graph-utils.d.ts +38 -0
  165. package/dist/modules/graph-utils.d.ts.map +1 -0
  166. package/dist/modules/graph-utils.js +40 -0
  167. package/dist/modules/graph-utils.js.map +1 -0
  168. package/dist/modules/hot-path-detector.d.ts +105 -0
  169. package/dist/modules/hot-path-detector.d.ts.map +1 -0
  170. package/dist/modules/hot-path-detector.js +332 -0
  171. package/dist/modules/hot-path-detector.js.map +1 -0
  172. package/dist/modules/impact-analyzer.d.ts +40 -0
  173. package/dist/modules/impact-analyzer.d.ts.map +1 -0
  174. package/dist/modules/impact-analyzer.js +218 -0
  175. package/dist/modules/impact-analyzer.js.map +1 -0
  176. package/dist/modules/impact-analyzer.test.d.ts +2 -0
  177. package/dist/modules/impact-analyzer.test.d.ts.map +1 -0
  178. package/dist/modules/impact-analyzer.test.js +308 -0
  179. package/dist/modules/impact-analyzer.test.js.map +1 -0
  180. package/dist/modules/index.d.ts +14 -0
  181. package/dist/modules/index.d.ts.map +1 -0
  182. package/dist/modules/index.js +20 -0
  183. package/dist/modules/index.js.map +1 -0
  184. package/dist/modules/invariant-engine.d.ts +119 -0
  185. package/dist/modules/invariant-engine.d.ts.map +1 -0
  186. package/dist/modules/invariant-engine.js +457 -0
  187. package/dist/modules/invariant-engine.js.map +1 -0
  188. package/dist/modules/memory-loader.d.ts +34 -0
  189. package/dist/modules/memory-loader.d.ts.map +1 -0
  190. package/dist/modules/memory-loader.js +313 -0
  191. package/dist/modules/memory-loader.js.map +1 -0
  192. package/dist/modules/memory-loader.test.d.ts +2 -0
  193. package/dist/modules/memory-loader.test.d.ts.map +1 -0
  194. package/dist/modules/memory-loader.test.js +120 -0
  195. package/dist/modules/memory-loader.test.js.map +1 -0
  196. package/dist/modules/monorepo-analyzer.d.ts +141 -0
  197. package/dist/modules/monorepo-analyzer.d.ts.map +1 -0
  198. package/dist/modules/monorepo-analyzer.js +453 -0
  199. package/dist/modules/monorepo-analyzer.js.map +1 -0
  200. package/dist/modules/plugin-system.d.ts +144 -0
  201. package/dist/modules/plugin-system.d.ts.map +1 -0
  202. package/dist/modules/plugin-system.js +428 -0
  203. package/dist/modules/plugin-system.js.map +1 -0
  204. package/dist/modules/smart-test-prioritizer.d.ts +95 -0
  205. package/dist/modules/smart-test-prioritizer.d.ts.map +1 -0
  206. package/dist/modules/smart-test-prioritizer.js +328 -0
  207. package/dist/modules/smart-test-prioritizer.js.map +1 -0
  208. package/dist/modules/temporal-analyzer.d.ts +71 -0
  209. package/dist/modules/temporal-analyzer.d.ts.map +1 -0
  210. package/dist/modules/temporal-analyzer.js +301 -0
  211. package/dist/modules/temporal-analyzer.js.map +1 -0
  212. package/dist/modules/test-suggester.d.ts +22 -0
  213. package/dist/modules/test-suggester.d.ts.map +1 -0
  214. package/dist/modules/test-suggester.js +145 -0
  215. package/dist/modules/test-suggester.js.map +1 -0
  216. package/dist/modules/visualizer.d.ts +49 -0
  217. package/dist/modules/visualizer.d.ts.map +1 -0
  218. package/dist/modules/visualizer.js +302 -0
  219. package/dist/modules/visualizer.js.map +1 -0
  220. package/dist/modules/watcher.d.ts +82 -0
  221. package/dist/modules/watcher.d.ts.map +1 -0
  222. package/dist/modules/watcher.js +298 -0
  223. package/dist/modules/watcher.js.map +1 -0
  224. package/package.json +70 -0
@@ -0,0 +1,218 @@
1
+ export class ImpactAnalyzer {
2
+ depGraph;
3
+ architecture = null;
4
+ constructor(depGraph) {
5
+ this.depGraph = depGraph;
6
+ }
7
+ /**
8
+ * Set architecture memory for boundary checking
9
+ */
10
+ setArchitecture(architecture) {
11
+ this.architecture = architecture;
12
+ }
13
+ /**
14
+ * Analyze impact of a diff
15
+ */
16
+ analyze(diff, files, _symbols) {
17
+ const directlyChanged = this.findChangedSymbols(diff, files);
18
+ const affectedModules = this.findAffectedModules(diff);
19
+ const publicApiChanges = this.detectApiChanges(directlyChanged);
20
+ const boundaryViolations = this.checkBoundaryViolations(diff, files);
21
+ const riskScore = this.calculateRiskScore(directlyChanged, affectedModules, publicApiChanges, boundaryViolations);
22
+ return {
23
+ directlyChanged,
24
+ affectedModules,
25
+ riskScore,
26
+ publicApiChanges,
27
+ boundaryViolations,
28
+ };
29
+ }
30
+ /**
31
+ * Find symbols that were directly changed
32
+ */
33
+ findChangedSymbols(diff, files) {
34
+ const changed = [];
35
+ for (const file of diff.files) {
36
+ const fileInfo = files.get(file.path);
37
+ if (!fileInfo)
38
+ continue;
39
+ for (const symbol of fileInfo.symbols) {
40
+ // Check if symbol's line was affected by the diff
41
+ const wasChanged = file.hunks.some(hunk => symbol.line >= hunk.newStart &&
42
+ symbol.line <= hunk.newStart + hunk.newLines);
43
+ if (wasChanged || file.status === 'added') {
44
+ changed.push({
45
+ symbol,
46
+ changeType: file.status === 'added' ? 'added' :
47
+ file.status === 'deleted' ? 'deleted' : 'modified',
48
+ });
49
+ }
50
+ }
51
+ }
52
+ return changed;
53
+ }
54
+ /**
55
+ * Find modules affected by the changes
56
+ */
57
+ findAffectedModules(diff) {
58
+ const affected = [];
59
+ const seen = new Set();
60
+ for (const file of diff.files) {
61
+ const dependents = this.depGraph.getTransitiveDependents(file.path);
62
+ for (const dep of dependents) {
63
+ if (!seen.has(dep)) {
64
+ seen.add(dep);
65
+ affected.push({
66
+ path: dep,
67
+ reason: `Imports from ${file.path}`,
68
+ distance: 1, // Simplified - would need proper distance calculation
69
+ symbols: [],
70
+ });
71
+ }
72
+ }
73
+ }
74
+ return affected;
75
+ }
76
+ /**
77
+ * Detect public API changes
78
+ */
79
+ detectApiChanges(changedSymbols) {
80
+ const changes = [];
81
+ for (const changed of changedSymbols) {
82
+ if (changed.symbol.exported) {
83
+ changes.push({
84
+ symbol: changed.symbol.name,
85
+ filePath: changed.symbol.filePath,
86
+ changeType: changed.changeType === 'deleted' ? 'breaking' :
87
+ changed.changeType === 'added' ? 'addition' : 'non-breaking',
88
+ description: `${changed.changeType} ${changed.symbol.kind} '${changed.symbol.name}'`,
89
+ });
90
+ }
91
+ }
92
+ return changes;
93
+ }
94
+ /**
95
+ * Check for architectural boundary violations
96
+ */
97
+ checkBoundaryViolations(diff, files) {
98
+ const violations = [];
99
+ // Use architecture memory if available
100
+ if (this.architecture) {
101
+ for (const file of diff.files) {
102
+ const fileInfo = files.get(file.path);
103
+ if (!fileInfo)
104
+ continue;
105
+ const fromLayer = this.findLayerForPath(file.path);
106
+ if (!fromLayer)
107
+ continue;
108
+ // Check imports against allowed dependencies
109
+ for (const imp of fileInfo.imports) {
110
+ const toLayer = this.findLayerForPath(imp.source);
111
+ if (!toLayer)
112
+ continue;
113
+ // Check if this dependency is allowed
114
+ if (fromLayer.name !== toLayer.name) {
115
+ const isAllowed = fromLayer.allowedDependencies.some(dep => dep.toLowerCase() === toLayer.name.toLowerCase());
116
+ // Also check explicit boundaries
117
+ const boundary = this.architecture.boundaries.find(b => b.from.toLowerCase() === fromLayer.name.toLowerCase() &&
118
+ b.to.toLowerCase() === toLayer.name.toLowerCase());
119
+ if (!isAllowed && (!boundary || !boundary.allowed)) {
120
+ violations.push({
121
+ from: file.path,
122
+ to: imp.source,
123
+ rule: boundary?.reason ||
124
+ `${fromLayer.name} should not depend on ${toLayer.name}`,
125
+ severity: 'error',
126
+ });
127
+ }
128
+ }
129
+ }
130
+ }
131
+ }
132
+ else {
133
+ // Fallback: simple heuristic if no architecture memory
134
+ for (const file of diff.files) {
135
+ // Example: CLI shouldn't import directly from modules internals
136
+ if (file.path.includes('/cli/') && file.path.includes('/modules/')) {
137
+ violations.push({
138
+ from: file.path,
139
+ to: 'modules internal',
140
+ rule: 'CLI should not directly access module internals',
141
+ severity: 'warning',
142
+ });
143
+ }
144
+ }
145
+ }
146
+ return violations;
147
+ }
148
+ /**
149
+ * Find which architecture layer a file path belongs to
150
+ */
151
+ findLayerForPath(filePath) {
152
+ if (!this.architecture)
153
+ return null;
154
+ for (const layer of this.architecture.layers) {
155
+ for (const pattern of layer.paths) {
156
+ // Simple pattern matching (supports ** and *)
157
+ // Use placeholder to handle ** before * to avoid incorrect replacement
158
+ let regexPattern = pattern
159
+ .replace(/\\/g, '/') // Normalize backslashes
160
+ .replace(/\*\*/g, '__DOUBLESTAR__') // Placeholder for **
161
+ .replace(/\*/g, '[^/]*') // Single * matches anything except /
162
+ .replace(/__DOUBLESTAR__/g, '.*') // ** matches anything including /
163
+ .replace(/\//g, '[\\\\/]'); // / matches forward or backslash
164
+ const regex = new RegExp('^' + regexPattern + '$');
165
+ if (regex.test(filePath)) {
166
+ return layer;
167
+ }
168
+ }
169
+ }
170
+ return null;
171
+ }
172
+ /**
173
+ * Calculate overall risk score
174
+ */
175
+ calculateRiskScore(changedSymbols, affectedModules, apiChanges, boundaryViolations) {
176
+ const factors = [];
177
+ // Factor: Number of changed symbols
178
+ const symbolScore = Math.min(changedSymbols.length * 5, 30);
179
+ factors.push({
180
+ name: 'Changed Symbols',
181
+ score: symbolScore,
182
+ weight: 0.3,
183
+ reason: `${changedSymbols.length} symbol(s) directly modified`,
184
+ });
185
+ // Factor: Affected modules
186
+ const moduleScore = Math.min(affectedModules.length * 10, 30);
187
+ factors.push({
188
+ name: 'Affected Modules',
189
+ score: moduleScore,
190
+ weight: 0.3,
191
+ reason: `${affectedModules.length} module(s) potentially affected`,
192
+ });
193
+ // Factor: API changes
194
+ const breakingChanges = apiChanges.filter(c => c.changeType === 'breaking').length;
195
+ const apiScore = breakingChanges * 20;
196
+ factors.push({
197
+ name: 'API Changes',
198
+ score: Math.min(apiScore, 30),
199
+ weight: 0.25,
200
+ reason: `${breakingChanges} breaking change(s) detected`,
201
+ });
202
+ // Factor: Boundary violations
203
+ const violationScore = boundaryViolations.length * 15;
204
+ factors.push({
205
+ name: 'Boundary Violations',
206
+ score: Math.min(violationScore, 20),
207
+ weight: 0.15,
208
+ reason: `${boundaryViolations.length} boundary violation(s)`,
209
+ });
210
+ // Calculate weighted average
211
+ const overall = factors.reduce((sum, f) => sum + f.score * f.weight, 0);
212
+ return {
213
+ overall: Math.round(overall),
214
+ factors,
215
+ };
216
+ }
217
+ }
218
+ //# sourceMappingURL=impact-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact-analyzer.js","sourceRoot":"","sources":["../../src/modules/impact-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=impact-analyzer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact-analyzer.test.d.ts","sourceRoot":"","sources":["../../src/modules/impact-analyzer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,308 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { ImpactAnalyzer } from './impact-analyzer.js';
3
+ import { DependencyGraph } from '../core/dependency-graph.js';
4
+ describe('ImpactAnalyzer', () => {
5
+ let depGraph;
6
+ let analyzer;
7
+ beforeEach(() => {
8
+ depGraph = new DependencyGraph(process.cwd());
9
+ analyzer = new ImpactAnalyzer(depGraph);
10
+ });
11
+ it('should create an analyzer instance', () => {
12
+ expect(analyzer).toBeDefined();
13
+ });
14
+ describe('boundary violation checking', () => {
15
+ it('should detect violations when architecture memory is configured', () => {
16
+ // Set up architecture memory
17
+ const architecture = {
18
+ layers: [
19
+ {
20
+ name: 'CLI',
21
+ description: 'Command-line interface',
22
+ paths: ['src/cli/**'],
23
+ allowedDependencies: ['Core'],
24
+ },
25
+ {
26
+ name: 'Core',
27
+ description: 'Core domain logic',
28
+ paths: ['src/core/**'],
29
+ allowedDependencies: [],
30
+ },
31
+ {
32
+ name: 'Modules',
33
+ description: 'Feature modules',
34
+ paths: ['src/modules/**'],
35
+ allowedDependencies: ['Core'],
36
+ },
37
+ ],
38
+ boundaries: [
39
+ {
40
+ from: 'Modules',
41
+ to: 'CLI',
42
+ allowed: false,
43
+ reason: 'Modules should not depend on CLI',
44
+ },
45
+ ],
46
+ entryPoints: [],
47
+ criticalPaths: [],
48
+ };
49
+ analyzer.setArchitecture(architecture);
50
+ // Create test diff and files
51
+ // Use simpler paths that will match the pattern
52
+ const diff = {
53
+ base: 'HEAD',
54
+ head: 'working tree',
55
+ files: [
56
+ {
57
+ path: 'src/modules/test-module.ts',
58
+ status: 'modified',
59
+ additions: 10,
60
+ deletions: 5,
61
+ hunks: [
62
+ {
63
+ oldStart: 1,
64
+ oldLines: 5,
65
+ newStart: 1,
66
+ newLines: 10,
67
+ content: 'test content',
68
+ },
69
+ ],
70
+ },
71
+ ],
72
+ stats: {
73
+ files: 1,
74
+ additions: 10,
75
+ deletions: 5,
76
+ },
77
+ };
78
+ const files = new Map([
79
+ [
80
+ 'src/modules/test-module.ts',
81
+ {
82
+ path: 'src/modules/test-module.ts',
83
+ relativePath: 'src/modules/test-module.ts',
84
+ language: 'typescript',
85
+ size: 100,
86
+ lines: 10,
87
+ symbols: [],
88
+ imports: [
89
+ {
90
+ source: 'src/cli/formatter.ts',
91
+ specifiers: ['Formatter'],
92
+ isDefault: false,
93
+ isNamespace: false,
94
+ line: 1,
95
+ },
96
+ ],
97
+ exports: [],
98
+ },
99
+ ],
100
+ ]);
101
+ const result = analyzer.analyze(diff, files, new Map());
102
+ // Should detect boundary violation since Modules imports from CLI
103
+ // which is not in allowedDependencies
104
+ expect(result.boundaryViolations.length).toBeGreaterThan(0);
105
+ expect(result.boundaryViolations[0].from).toBe('src/modules/test-module.ts');
106
+ expect(result.boundaryViolations[0].to).toBe('src/cli/formatter.ts');
107
+ expect(result.boundaryViolations[0].severity).toBe('error');
108
+ });
109
+ it('should not detect violations when imports are allowed', () => {
110
+ const architecture = {
111
+ layers: [
112
+ {
113
+ name: 'Modules',
114
+ description: 'Feature modules',
115
+ paths: ['src/modules/**'],
116
+ allowedDependencies: ['Core'],
117
+ },
118
+ {
119
+ name: 'Core',
120
+ description: 'Core domain logic',
121
+ paths: ['src/core/**'],
122
+ allowedDependencies: [],
123
+ },
124
+ ],
125
+ boundaries: [],
126
+ entryPoints: [],
127
+ criticalPaths: [],
128
+ };
129
+ analyzer.setArchitecture(architecture);
130
+ const diff = {
131
+ base: 'HEAD',
132
+ head: 'working tree',
133
+ files: [
134
+ {
135
+ path: 'src/modules/test.ts',
136
+ status: 'modified',
137
+ additions: 10,
138
+ deletions: 5,
139
+ hunks: [],
140
+ },
141
+ ],
142
+ stats: {
143
+ files: 1,
144
+ additions: 10,
145
+ deletions: 5,
146
+ },
147
+ };
148
+ const files = new Map([
149
+ [
150
+ 'src/modules/test.ts',
151
+ {
152
+ path: 'src/modules/test.ts',
153
+ relativePath: 'src/modules/test.ts',
154
+ language: 'typescript',
155
+ size: 100,
156
+ lines: 10,
157
+ symbols: [],
158
+ imports: [
159
+ {
160
+ source: 'src/core/types.ts',
161
+ specifiers: ['Symbol'],
162
+ isDefault: false,
163
+ isNamespace: false,
164
+ line: 1,
165
+ },
166
+ ],
167
+ exports: [],
168
+ },
169
+ ],
170
+ [
171
+ 'src/core/types.ts',
172
+ {
173
+ path: 'src/core/types.ts',
174
+ relativePath: 'src/core/types.ts',
175
+ language: 'typescript',
176
+ size: 200,
177
+ lines: 20,
178
+ symbols: [],
179
+ imports: [],
180
+ exports: [],
181
+ },
182
+ ],
183
+ ]);
184
+ const result = analyzer.analyze(diff, files, new Map());
185
+ // Should not detect violations for allowed dependencies
186
+ expect(result.boundaryViolations.length).toBe(0);
187
+ });
188
+ it('should use fallback heuristic when no architecture memory', () => {
189
+ // Don't set architecture memory
190
+ const diff = {
191
+ base: 'HEAD',
192
+ head: 'working tree',
193
+ files: [
194
+ {
195
+ path: 'src/cli/modules/test.ts', // Path that triggers heuristic
196
+ status: 'modified',
197
+ additions: 10,
198
+ deletions: 5,
199
+ hunks: [],
200
+ },
201
+ ],
202
+ stats: {
203
+ files: 1,
204
+ additions: 10,
205
+ deletions: 5,
206
+ },
207
+ };
208
+ const files = new Map();
209
+ const result = analyzer.analyze(diff, files, new Map());
210
+ // Should use fallback heuristic
211
+ expect(result.boundaryViolations.length).toBeGreaterThan(0);
212
+ expect(result.boundaryViolations[0].severity).toBe('warning');
213
+ });
214
+ it('should not use fallback when architecture memory exists', () => {
215
+ const architecture = {
216
+ layers: [],
217
+ boundaries: [],
218
+ entryPoints: [],
219
+ criticalPaths: [],
220
+ };
221
+ analyzer.setArchitecture(architecture);
222
+ const diff = {
223
+ base: 'HEAD',
224
+ head: 'working tree',
225
+ files: [
226
+ {
227
+ path: 'src/cli/modules/test.ts', // Path that would trigger heuristic
228
+ status: 'modified',
229
+ additions: 10,
230
+ deletions: 5,
231
+ hunks: [],
232
+ },
233
+ ],
234
+ stats: {
235
+ files: 1,
236
+ additions: 10,
237
+ deletions: 5,
238
+ },
239
+ };
240
+ const files = new Map();
241
+ const result = analyzer.analyze(diff, files, new Map());
242
+ // Should not use fallback heuristic when architecture is set
243
+ expect(result.boundaryViolations.length).toBe(0);
244
+ });
245
+ });
246
+ describe('impact analysis', () => {
247
+ it('should analyze direct changes', () => {
248
+ const diff = {
249
+ base: 'HEAD',
250
+ head: 'working tree',
251
+ files: [
252
+ {
253
+ path: 'src/test.ts',
254
+ status: 'modified',
255
+ additions: 5,
256
+ deletions: 2,
257
+ hunks: [
258
+ {
259
+ oldStart: 1,
260
+ oldLines: 2,
261
+ newStart: 1,
262
+ newLines: 5,
263
+ content: 'test',
264
+ },
265
+ ],
266
+ },
267
+ ],
268
+ stats: {
269
+ files: 1,
270
+ additions: 5,
271
+ deletions: 2,
272
+ },
273
+ };
274
+ const files = new Map([
275
+ [
276
+ 'src/test.ts',
277
+ {
278
+ path: 'src/test.ts',
279
+ relativePath: 'src/test.ts',
280
+ language: 'typescript',
281
+ size: 100,
282
+ lines: 10,
283
+ symbols: [
284
+ {
285
+ name: 'testFunction',
286
+ kind: 'function',
287
+ filePath: 'src/test.ts',
288
+ line: 3,
289
+ column: 1,
290
+ exported: true,
291
+ references: [],
292
+ },
293
+ ],
294
+ imports: [],
295
+ exports: [],
296
+ },
297
+ ],
298
+ ]);
299
+ const result = analyzer.analyze(diff, files, new Map());
300
+ expect(result.directlyChanged).toBeDefined();
301
+ expect(result.affectedModules).toBeDefined();
302
+ expect(result.riskScore).toBeDefined();
303
+ expect(result.publicApiChanges).toBeDefined();
304
+ expect(result.boundaryViolations).toBeDefined();
305
+ });
306
+ });
307
+ });
308
+ //# sourceMappingURL=impact-analyzer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact-analyzer.test.js","sourceRoot":"","sources":["../../src/modules/impact-analyzer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,QAAyB,CAAC;IAC9B,IAAI,QAAwB,CAAC;IAE7B,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9C,QAAQ,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;YACzE,6BAA6B;YAC7B,MAAM,YAAY,GAAuB;gBACvC,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,KAAK;wBACX,WAAW,EAAE,wBAAwB;wBACrC,KAAK,EAAE,CAAC,YAAY,CAAC;wBACrB,mBAAmB,EAAE,CAAC,MAAM,CAAC;qBAC9B;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,mBAAmB;wBAChC,KAAK,EAAE,CAAC,aAAa,CAAC;wBACtB,mBAAmB,EAAE,EAAE;qBACxB;oBACD;wBACE,IAAI,EAAE,SAAS;wBACf,WAAW,EAAE,iBAAiB;wBAC9B,KAAK,EAAE,CAAC,gBAAgB,CAAC;wBACzB,mBAAmB,EAAE,CAAC,MAAM,CAAC;qBAC9B;iBACF;gBACD,UAAU,EAAE;oBACV;wBACE,IAAI,EAAE,SAAS;wBACf,EAAE,EAAE,KAAK;wBACT,OAAO,EAAE,KAAK;wBACd,MAAM,EAAE,kCAAkC;qBAC3C;iBACF;gBACD,WAAW,EAAE,EAAE;gBACf,aAAa,EAAE,EAAE;aAClB,CAAC;YAEF,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAEvC,6BAA6B;YAC7B,gDAAgD;YAChD,MAAM,IAAI,GAAY;gBACpB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,4BAA4B;wBAClC,MAAM,EAAE,UAAU;wBAClB,SAAS,EAAE,EAAE;wBACb,SAAS,EAAE,CAAC;wBACZ,KAAK,EAAE;4BACL;gCACE,QAAQ,EAAE,CAAC;gCACX,QAAQ,EAAE,CAAC;gCACX,QAAQ,EAAE,CAAC;gCACX,QAAQ,EAAE,EAAE;gCACZ,OAAO,EAAE,cAAc;6BACxB;yBACF;qBACF;iBACF;gBACD,KAAK,EAAE;oBACL,KAAK,EAAE,CAAC;oBACR,SAAS,EAAE,EAAE;oBACb,SAAS,EAAE,CAAC;iBACb;aACF,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,GAAG,CAAmB;gBACtC;oBACE,4BAA4B;oBAC5B;wBACE,IAAI,EAAE,4BAA4B;wBAClC,YAAY,EAAE,4BAA4B;wBAC1C,QAAQ,EAAE,YAAY;wBACtB,IAAI,EAAE,GAAG;wBACT,KAAK,EAAE,EAAE;wBACT,OAAO,EAAE,EAAE;wBACX,OAAO,EAAE;4BACP;gCACE,MAAM,EAAE,sBAAsB;gCAC9B,UAAU,EAAE,CAAC,WAAW,CAAC;gCACzB,SAAS,EAAE,KAAK;gCAChB,WAAW,EAAE,KAAK;gCAClB,IAAI,EAAE,CAAC;6BACR;yBACF;wBACD,OAAO,EAAE,EAAE;qBACZ;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAExD,kEAAkE;YAClE,sCAAsC;YACtC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC7E,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACrE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,YAAY,GAAuB;gBACvC,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,SAAS;wBACf,WAAW,EAAE,iBAAiB;wBAC9B,KAAK,EAAE,CAAC,gBAAgB,CAAC;wBACzB,mBAAmB,EAAE,CAAC,MAAM,CAAC;qBAC9B;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,mBAAmB;wBAChC,KAAK,EAAE,CAAC,aAAa,CAAC;wBACtB,mBAAmB,EAAE,EAAE;qBACxB;iBACF;gBACD,UAAU,EAAE,EAAE;gBACd,WAAW,EAAE,EAAE;gBACf,aAAa,EAAE,EAAE;aAClB,CAAC;YAEF,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAEvC,MAAM,IAAI,GAAY;gBACpB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,qBAAqB;wBAC3B,MAAM,EAAE,UAAU;wBAClB,SAAS,EAAE,EAAE;wBACb,SAAS,EAAE,CAAC;wBACZ,KAAK,EAAE,EAAE;qBACV;iBACF;gBACD,KAAK,EAAE;oBACL,KAAK,EAAE,CAAC;oBACR,SAAS,EAAE,EAAE;oBACb,SAAS,EAAE,CAAC;iBACb;aACF,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,GAAG,CAAmB;gBACtC;oBACE,qBAAqB;oBACrB;wBACE,IAAI,EAAE,qBAAqB;wBAC3B,YAAY,EAAE,qBAAqB;wBACnC,QAAQ,EAAE,YAAY;wBACtB,IAAI,EAAE,GAAG;wBACT,KAAK,EAAE,EAAE;wBACT,OAAO,EAAE,EAAE;wBACX,OAAO,EAAE;4BACP;gCACE,MAAM,EAAE,mBAAmB;gCAC3B,UAAU,EAAE,CAAC,QAAQ,CAAC;gCACtB,SAAS,EAAE,KAAK;gCAChB,WAAW,EAAE,KAAK;gCAClB,IAAI,EAAE,CAAC;6BACR;yBACF;wBACD,OAAO,EAAE,EAAE;qBACZ;iBACF;gBACD;oBACE,mBAAmB;oBACnB;wBACE,IAAI,EAAE,mBAAmB;wBACzB,YAAY,EAAE,mBAAmB;wBACjC,QAAQ,EAAE,YAAY;wBACtB,IAAI,EAAE,GAAG;wBACT,KAAK,EAAE,EAAE;wBACT,OAAO,EAAE,EAAE;wBACX,OAAO,EAAE,EAAE;wBACX,OAAO,EAAE,EAAE;qBACZ;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAExD,wDAAwD;YACxD,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,gCAAgC;YAChC,MAAM,IAAI,GAAY;gBACpB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,yBAAyB,EAAE,+BAA+B;wBAChE,MAAM,EAAE,UAAU;wBAClB,SAAS,EAAE,EAAE;wBACb,SAAS,EAAE,CAAC;wBACZ,KAAK,EAAE,EAAE;qBACV;iBACF;gBACD,KAAK,EAAE;oBACL,KAAK,EAAE,CAAC;oBACR,SAAS,EAAE,EAAE;oBACb,SAAS,EAAE,CAAC;iBACb;aACF,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;YAE1C,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAExD,gCAAgC;YAChC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,YAAY,GAAuB;gBACvC,MAAM,EAAE,EAAE;gBACV,UAAU,EAAE,EAAE;gBACd,WAAW,EAAE,EAAE;gBACf,aAAa,EAAE,EAAE;aAClB,CAAC;YAEF,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAEvC,MAAM,IAAI,GAAY;gBACpB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,yBAAyB,EAAE,oCAAoC;wBACrE,MAAM,EAAE,UAAU;wBAClB,SAAS,EAAE,EAAE;wBACb,SAAS,EAAE,CAAC;wBACZ,KAAK,EAAE,EAAE;qBACV;iBACF;gBACD,KAAK,EAAE;oBACL,KAAK,EAAE,CAAC;oBACR,SAAS,EAAE,EAAE;oBACb,SAAS,EAAE,CAAC;iBACb;aACF,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;YAE1C,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAExD,6DAA6D;YAC7D,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,IAAI,GAAY;gBACpB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,cAAc;gBACpB,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,aAAa;wBACnB,MAAM,EAAE,UAAU;wBAClB,SAAS,EAAE,CAAC;wBACZ,SAAS,EAAE,CAAC;wBACZ,KAAK,EAAE;4BACL;gCACE,QAAQ,EAAE,CAAC;gCACX,QAAQ,EAAE,CAAC;gCACX,QAAQ,EAAE,CAAC;gCACX,QAAQ,EAAE,CAAC;gCACX,OAAO,EAAE,MAAM;6BAChB;yBACF;qBACF;iBACF;gBACD,KAAK,EAAE;oBACL,KAAK,EAAE,CAAC;oBACR,SAAS,EAAE,CAAC;oBACZ,SAAS,EAAE,CAAC;iBACb;aACF,CAAC;YAEF,MAAM,KAAK,GAAG,IAAI,GAAG,CAAmB;gBACtC;oBACE,aAAa;oBACb;wBACE,IAAI,EAAE,aAAa;wBACnB,YAAY,EAAE,aAAa;wBAC3B,QAAQ,EAAE,YAAY;wBACtB,IAAI,EAAE,GAAG;wBACT,KAAK,EAAE,EAAE;wBACT,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,cAAc;gCACpB,IAAI,EAAE,UAAU;gCAChB,QAAQ,EAAE,aAAa;gCACvB,IAAI,EAAE,CAAC;gCACP,MAAM,EAAE,CAAC;gCACT,QAAQ,EAAE,IAAI;gCACd,UAAU,EAAE,EAAE;6BACf;yBACF;wBACD,OAAO,EAAE,EAAE;wBACX,OAAO,EAAE,EAAE;qBACZ;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAExD,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,WAAW,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export { MemoryLoader } from './memory-loader.js';
2
+ export { ImpactAnalyzer } from './impact-analyzer.js';
3
+ export { ConventionChecker } from './convention-checker.js';
4
+ export { TestSuggester } from './test-suggester.js';
5
+ export { Visualizer, type VisualizationFormat, type GraphData, type VisualizationOptions } from './visualizer.js';
6
+ export { ComplexityEngine, type ComplexityScore, type FileComplexity, type SymbolComplexity } from './complexity-engine.js';
7
+ export { TemporalAnalyzer, type TemporalInsights, type ContributorInsight, type ChangePattern } from './temporal-analyzer.js';
8
+ export { InvariantEngine, type InvariantRule, type InvariantViolation, type InvariantCheckResult } from './invariant-engine.js';
9
+ export { HotPathDetector, type HotPath, type HotPathNode, type HotPathAnalysis } from './hot-path-detector.js';
10
+ export { CodexiaWatcher, startWatchMode, type WatchEvent, type WatchOptions } from './watcher.js';
11
+ export { ChangelogGenerator, generateChangelog, type ChangelogEntry, type ChangelogOptions } from './changelog-generator.js';
12
+ export { MonorepoDetector, MonorepoAnalyzer, analyzeMonorepo, type MonorepoAnalysis } from './monorepo-analyzer.js';
13
+ export { SmartTestPrioritizer, type PrioritizedTest, type TestPrioritizationResult } from './smart-test-prioritizer.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,UAAU,EAAE,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAClH,OAAO,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC5H,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC9H,OAAO,EAAE,eAAe,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAChI,OAAO,EAAE,eAAe,EAAE,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG/G,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAGlG,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG7H,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAGpH,OAAO,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,KAAK,wBAAwB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,20 @@
1
+ // Core modules
2
+ export { MemoryLoader } from './memory-loader.js';
3
+ export { ImpactAnalyzer } from './impact-analyzer.js';
4
+ export { ConventionChecker } from './convention-checker.js';
5
+ export { TestSuggester } from './test-suggester.js';
6
+ // Advanced analysis modules
7
+ export { Visualizer } from './visualizer.js';
8
+ export { ComplexityEngine } from './complexity-engine.js';
9
+ export { TemporalAnalyzer } from './temporal-analyzer.js';
10
+ export { InvariantEngine } from './invariant-engine.js';
11
+ export { HotPathDetector } from './hot-path-detector.js';
12
+ // Live analysis
13
+ export { CodexiaWatcher, startWatchMode } from './watcher.js';
14
+ // Changelog generation
15
+ export { ChangelogGenerator, generateChangelog } from './changelog-generator.js';
16
+ // Monorepo support
17
+ export { MonorepoDetector, MonorepoAnalyzer, analyzeMonorepo } from './monorepo-analyzer.js';
18
+ // Smart test prioritization
19
+ export { SmartTestPrioritizer } from './smart-test-prioritizer.js';
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,4BAA4B;AAC5B,OAAO,EAAE,UAAU,EAAuE,MAAM,iBAAiB,CAAC;AAClH,OAAO,EAAE,gBAAgB,EAAoE,MAAM,wBAAwB,CAAC;AAC5H,OAAO,EAAE,gBAAgB,EAAsE,MAAM,wBAAwB,CAAC;AAC9H,OAAO,EAAE,eAAe,EAA0E,MAAM,uBAAuB,CAAC;AAChI,OAAO,EAAE,eAAe,EAAwD,MAAM,wBAAwB,CAAC;AAE/G,gBAAgB;AAChB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAsC,MAAM,cAAc,CAAC;AAElG,uBAAuB;AACvB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAA8C,MAAM,0BAA0B,CAAC;AAE7H,mBAAmB;AACnB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAyB,MAAM,wBAAwB,CAAC;AAEpH,4BAA4B;AAC5B,OAAO,EAAE,oBAAoB,EAAuD,MAAM,6BAA6B,CAAC"}