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,564 @@
1
+ import { GitAnalyzer, RepoIndexer, DependencyGraph, SymbolMap, SignalsEngine, } from '../core/index.js';
2
+ import { MemoryLoader, ImpactAnalyzer, ConventionChecker, TestSuggester, TemporalAnalyzer, InvariantEngine, HotPathDetector, ChangelogGenerator, MonorepoAnalyzer, MonorepoDetector, SmartTestPrioritizer, } from '../modules/index.js';
3
+ export class CodexiaEngine {
4
+ repoRoot;
5
+ git;
6
+ indexer;
7
+ depGraph;
8
+ symbolMap;
9
+ memory;
10
+ impactAnalyzer;
11
+ conventionChecker;
12
+ testSuggester;
13
+ signalsEngine;
14
+ temporalAnalyzer;
15
+ invariantEngine;
16
+ hotPathDetector;
17
+ changelogGenerator;
18
+ monorepoDetector;
19
+ monorepoAnalyzer = null;
20
+ testPrioritizer;
21
+ initialized = false;
22
+ constructor(options = {}) {
23
+ this.repoRoot = options.repoRoot || process.cwd();
24
+ // Initialize all components
25
+ this.git = new GitAnalyzer(this.repoRoot);
26
+ this.indexer = new RepoIndexer(this.repoRoot);
27
+ this.depGraph = new DependencyGraph(this.repoRoot);
28
+ this.symbolMap = new SymbolMap(this.repoRoot);
29
+ this.memory = new MemoryLoader(this.repoRoot);
30
+ this.impactAnalyzer = new ImpactAnalyzer(this.depGraph);
31
+ this.conventionChecker = new ConventionChecker();
32
+ this.testSuggester = new TestSuggester();
33
+ this.signalsEngine = new SignalsEngine();
34
+ // New advanced components
35
+ this.temporalAnalyzer = new TemporalAnalyzer(this.repoRoot);
36
+ this.invariantEngine = new InvariantEngine(this.repoRoot);
37
+ this.hotPathDetector = new HotPathDetector(this.repoRoot);
38
+ this.changelogGenerator = new ChangelogGenerator(this.repoRoot);
39
+ this.monorepoDetector = new MonorepoDetector(this.repoRoot);
40
+ this.testPrioritizer = new SmartTestPrioritizer();
41
+ }
42
+ /**
43
+ * Initialize the engine by indexing the repository
44
+ */
45
+ async initialize() {
46
+ if (this.initialized)
47
+ return;
48
+ // Index repository
49
+ await this.indexer.index();
50
+ // Build dependency graph
51
+ const files = this.indexer.getFiles();
52
+ this.depGraph.buildFromImports(files);
53
+ // Build symbol map
54
+ this.symbolMap.buildFromFiles(files);
55
+ // Load memory if available
56
+ const projectMemory = await this.memory.loadMemory();
57
+ if (projectMemory?.conventions) {
58
+ this.conventionChecker.loadFromMemory(projectMemory.conventions);
59
+ }
60
+ if (projectMemory?.architecture) {
61
+ this.impactAnalyzer.setArchitecture(projectMemory.architecture);
62
+ }
63
+ this.initialized = true;
64
+ }
65
+ /**
66
+ * Scan and analyze the repository
67
+ */
68
+ async scan() {
69
+ const start = Date.now();
70
+ await this.initialize();
71
+ const stats = this.indexer.getStats();
72
+ const hasMemory = await this.memory.hasMemory();
73
+ return {
74
+ success: true,
75
+ duration: Date.now() - start,
76
+ stats,
77
+ hasMemory,
78
+ };
79
+ }
80
+ /**
81
+ * Analyze impact of changes
82
+ */
83
+ async analyzeImpact(options = {}) {
84
+ await this.initialize();
85
+ let diff;
86
+ if (options.staged) {
87
+ diff = await this.git.getStagedDiff();
88
+ }
89
+ else {
90
+ diff = await this.git.getDiff(options.base || 'HEAD', options.head || '');
91
+ }
92
+ const files = this.indexer.getFiles();
93
+ const symbols = new Map();
94
+ for (const [filePath, fileInfo] of files) {
95
+ symbols.set(filePath, fileInfo.symbols);
96
+ }
97
+ return this.impactAnalyzer.analyze(diff, files, symbols);
98
+ }
99
+ /**
100
+ * Check conventions
101
+ */
102
+ async checkConventions(options = {}) {
103
+ await this.initialize();
104
+ let diff;
105
+ if (options.staged) {
106
+ diff = await this.git.getStagedDiff();
107
+ }
108
+ else {
109
+ diff = await this.git.getDiff(options.base || 'HEAD');
110
+ }
111
+ const files = this.indexer.getFiles();
112
+ return this.conventionChecker.check(diff, files);
113
+ }
114
+ /**
115
+ * Suggest tests
116
+ */
117
+ async suggestTests(options = {}) {
118
+ await this.initialize();
119
+ let diff;
120
+ if (options.staged) {
121
+ diff = await this.git.getStagedDiff();
122
+ }
123
+ else {
124
+ diff = await this.git.getDiff(options.base || 'HEAD');
125
+ }
126
+ const files = this.indexer.getFiles();
127
+ const existingTests = this.testSuggester.findExistingTests(files);
128
+ return this.testSuggester.suggest(diff, files, existingTests);
129
+ }
130
+ /**
131
+ * Analyze code signals (orphans, god classes, cycles)
132
+ */
133
+ async analyzeSignals(options = {}) {
134
+ await this.initialize();
135
+ const signals = [];
136
+ const files = this.indexer.getFiles();
137
+ // Check for god classes
138
+ if (options.checkGodClasses !== false) {
139
+ for (const [filePath, fileInfo] of files) {
140
+ const signal = this.signalsEngine.detectGodClass(filePath, fileInfo.lines, fileInfo.symbols.length);
141
+ if (signal) {
142
+ signals.push(signal);
143
+ }
144
+ }
145
+ }
146
+ // Check for circular dependencies
147
+ if (options.checkCycles !== false) {
148
+ const cycles = this.depGraph.detectCycles();
149
+ for (const cycle of cycles) {
150
+ signals.push(this.signalsEngine.detectCircularDependency(cycle));
151
+ }
152
+ }
153
+ // Check for orphan code (exported but never imported)
154
+ if (options.checkOrphans !== false) {
155
+ for (const [, fileInfo] of files) {
156
+ for (const symbol of fileInfo.symbols) {
157
+ if (symbol.exported) {
158
+ const importCount = this.depGraph.getImportCount(symbol.name, symbol.filePath);
159
+ const signal = this.signalsEngine.detectOrphanCode(symbol, importCount);
160
+ if (signal) {
161
+ signals.push(signal);
162
+ }
163
+ }
164
+ }
165
+ }
166
+ }
167
+ return signals;
168
+ }
169
+ /**
170
+ * Generate PR report
171
+ */
172
+ async generatePrReport(options = {}) {
173
+ await this.initialize();
174
+ // Determine base ref - fall back to HEAD if HEAD~1 doesn't exist (single commit repo)
175
+ let baseRef = options.base;
176
+ if (!baseRef) {
177
+ const hasParent = await this.git.hasRef('HEAD~1');
178
+ baseRef = hasParent ? 'HEAD~1' : 'HEAD';
179
+ }
180
+ const diff = await this.git.getDiff(baseRef, options.head || 'HEAD');
181
+ const impact = await this.analyzeImpact({ base: options.base, head: options.head });
182
+ const conventions = await this.checkConventions({ base: options.base });
183
+ const tests = await this.suggestTests({ base: options.base });
184
+ const riskLevel = this.calculateRiskLevel(impact.riskScore);
185
+ return {
186
+ summary: {
187
+ title: `PR Analysis`,
188
+ filesChanged: diff.stats.files,
189
+ additions: diff.stats.additions,
190
+ deletions: diff.stats.deletions,
191
+ authors: [],
192
+ },
193
+ impact,
194
+ conventions,
195
+ tests,
196
+ risks: {
197
+ level: riskLevel,
198
+ score: impact.riskScore.overall,
199
+ factors: impact.riskScore.factors,
200
+ recommendations: this.generateRecommendations(impact, conventions, tests),
201
+ },
202
+ };
203
+ }
204
+ /**
205
+ * Get diff information
206
+ */
207
+ async getDiff(base, head) {
208
+ return this.git.getDiff(base || 'HEAD', head || '');
209
+ }
210
+ /**
211
+ * Get staged diff
212
+ */
213
+ async getStagedDiff() {
214
+ return this.git.getStagedDiff();
215
+ }
216
+ /**
217
+ * Check if memory exists
218
+ */
219
+ async hasMemory() {
220
+ return this.memory.hasMemory();
221
+ }
222
+ /**
223
+ * Get project memory
224
+ */
225
+ async getMemory() {
226
+ return this.memory.loadMemory();
227
+ }
228
+ calculateRiskLevel(riskScore) {
229
+ if (riskScore.overall >= 80)
230
+ return 'critical';
231
+ if (riskScore.overall >= 60)
232
+ return 'high';
233
+ if (riskScore.overall >= 30)
234
+ return 'medium';
235
+ return 'low';
236
+ }
237
+ generateRecommendations(impact, conventions, tests) {
238
+ const recommendations = [];
239
+ if (impact.publicApiChanges.some(c => c.changeType === 'breaking')) {
240
+ recommendations.push('This PR contains breaking API changes. Consider adding deprecation warnings first.');
241
+ }
242
+ if (impact.boundaryViolations.length > 0) {
243
+ recommendations.push('Architectural boundary violations detected. Review module dependencies.');
244
+ }
245
+ if (conventions.length > 5) {
246
+ recommendations.push('Multiple convention violations found. Consider running the formatter/linter.');
247
+ }
248
+ if (tests.filter(t => t.priority === 'high').length > 0) {
249
+ recommendations.push('New code requires tests. Add unit tests for exported functions and classes.');
250
+ }
251
+ if (impact.affectedModules.length > 10) {
252
+ recommendations.push('This change affects many modules. Consider splitting into smaller PRs.');
253
+ }
254
+ return recommendations;
255
+ }
256
+ // ============================================
257
+ // NEW: Visualization Methods
258
+ // ============================================
259
+ /**
260
+ * Get graph data for visualization
261
+ */
262
+ async getGraphData(file) {
263
+ await this.initialize();
264
+ const files = this.indexer.getFiles();
265
+ const edges = [];
266
+ for (const [filePath, fileInfo] of files) {
267
+ for (const imp of fileInfo.imports || []) {
268
+ edges.push({ from: filePath, to: imp.source });
269
+ }
270
+ }
271
+ if (file) {
272
+ // Filter to show only connected nodes
273
+ const connected = new Set();
274
+ connected.add(file);
275
+ for (const edge of edges) {
276
+ if (edge.from === file || edge.to === file) {
277
+ connected.add(edge.from);
278
+ connected.add(edge.to);
279
+ }
280
+ }
281
+ return {
282
+ nodes: Array.from(connected).map(f => ({ id: f, label: f.split('/').pop() })),
283
+ edges: edges.filter(e => connected.has(e.from) && connected.has(e.to)),
284
+ };
285
+ }
286
+ return {
287
+ nodes: Array.from(files.keys()).map(f => ({ id: f, label: f.split('/').pop() })),
288
+ edges,
289
+ };
290
+ }
291
+ // ============================================
292
+ // NEW: Complexity Analysis Methods
293
+ // ============================================
294
+ /**
295
+ * Analyze code complexity
296
+ */
297
+ async analyzeComplexity(path, options = {}) {
298
+ await this.initialize();
299
+ const files = this.indexer.getFiles();
300
+ const results = [];
301
+ for (const [filePath, fileInfo] of files) {
302
+ if (path && !filePath.includes(path))
303
+ continue;
304
+ // Simple complexity calculation based on file info
305
+ const complexity = {
306
+ cyclomatic: Math.max(1, fileInfo.symbols.length),
307
+ cognitive: fileInfo.symbols.filter(s => s.kind === 'function' || s.kind === 'method').length * 2,
308
+ coupling: fileInfo.imports.length,
309
+ maintainability: Math.max(0, 100 - fileInfo.lines / 10 - fileInfo.symbols.length),
310
+ linesOfCode: fileInfo.lines,
311
+ symbols: options.includeSymbols ? fileInfo.symbols.map(s => ({
312
+ name: s.name,
313
+ type: s.kind,
314
+ complexity: 1,
315
+ lines: 1,
316
+ })) : undefined,
317
+ };
318
+ if (!options.threshold || complexity.maintainability <= options.threshold) {
319
+ results.push({
320
+ file: filePath,
321
+ metrics: complexity,
322
+ symbols: complexity.symbols,
323
+ });
324
+ }
325
+ }
326
+ // Calculate summary
327
+ const avgMaintainability = results.length > 0
328
+ ? results.reduce((sum, r) => sum + (r.metrics.maintainability || 0), 0) / results.length
329
+ : 100;
330
+ return {
331
+ files: results,
332
+ summary: {
333
+ totalFiles: results.length,
334
+ averageMaintainability: avgMaintainability,
335
+ filesNeedingAttention: results.filter(r => r.metrics.maintainability < 60).length,
336
+ criticalFiles: results.filter(r => r.metrics.maintainability < 40).length,
337
+ },
338
+ recommendations: this.generateComplexityRecommendations(results),
339
+ };
340
+ }
341
+ generateComplexityRecommendations(results) {
342
+ const recs = [];
343
+ const critical = results.filter(r => r.metrics.maintainability < 40);
344
+ if (critical.length > 0) {
345
+ recs.push(`${critical.length} files have critical complexity. Consider refactoring.`);
346
+ }
347
+ const highCyclomatic = results.filter(r => r.metrics.cyclomatic > 20);
348
+ if (highCyclomatic.length > 0) {
349
+ recs.push('Some files have high cyclomatic complexity. Extract helper functions.');
350
+ }
351
+ const highCoupling = results.filter(r => r.metrics.coupling > 15);
352
+ if (highCoupling.length > 0) {
353
+ recs.push('High coupling detected. Consider dependency injection or facades.');
354
+ }
355
+ return recs;
356
+ }
357
+ // ============================================
358
+ // NEW: Temporal Analysis Methods
359
+ // ============================================
360
+ /**
361
+ * Analyze git history patterns
362
+ */
363
+ async analyzeHistory(options = {}) {
364
+ await this.initialize();
365
+ const files = this.indexer.getFiles();
366
+ const filePaths = options.file
367
+ ? [options.file]
368
+ : Array.from(files.keys()).slice(0, 50); // Limit for performance
369
+ // Analyze temporal patterns
370
+ const analysis = await this.temporalAnalyzer.analyzeAll(filePaths);
371
+ return {
372
+ files: Object.fromEntries(analysis.files),
373
+ hotspots: analysis.hotspots,
374
+ riskFiles: analysis.riskFiles,
375
+ staleFiles: analysis.staleFiles,
376
+ coChangeClusters: analysis.coChangeClusters,
377
+ summary: {
378
+ filesAnalyzed: analysis.files.size,
379
+ hotspotCount: analysis.hotspots.length,
380
+ riskFileCount: analysis.riskFiles.length,
381
+ staleFileCount: analysis.staleFiles.length,
382
+ },
383
+ };
384
+ }
385
+ // ============================================
386
+ // NEW: Invariant Checking Methods
387
+ // ============================================
388
+ /**
389
+ * Check architectural invariants
390
+ */
391
+ async checkInvariants(_options = {}) {
392
+ await this.initialize();
393
+ // Load invariants from file
394
+ await this.invariantEngine.loadFromFile();
395
+ const files = this.indexer.getFiles();
396
+ const result = await this.invariantEngine.check(files);
397
+ return {
398
+ passed: result.passed,
399
+ rulesChecked: result.checkedRules,
400
+ passedRules: result.passedRules,
401
+ filesScanned: files.size,
402
+ violations: result.violations.map((v) => ({
403
+ rule: v.rule.id,
404
+ severity: v.rule.severity,
405
+ file: v.filePath,
406
+ line: v.line,
407
+ message: v.message,
408
+ suggestion: v.suggestion,
409
+ })),
410
+ };
411
+ }
412
+ // ============================================
413
+ // NEW: Hot Path Detection Methods
414
+ // ============================================
415
+ /**
416
+ * Analyze hot paths in the codebase
417
+ */
418
+ async analyzeHotPaths(_options = {}) {
419
+ await this.initialize();
420
+ const files = this.indexer.getFiles();
421
+ const deps = this.depGraph.getNodes();
422
+ // Detect hot paths using the dependency graph
423
+ const hotPaths = this.hotPathDetector.detectPaths(files, deps);
424
+ return {
425
+ paths: hotPaths,
426
+ summary: {
427
+ totalPaths: hotPaths.length,
428
+ criticalPaths: hotPaths.filter((p) => p.criticality === 'critical').length,
429
+ highPaths: hotPaths.filter((p) => p.criticality === 'high').length,
430
+ mediumPaths: hotPaths.filter((p) => p.criticality === 'medium').length,
431
+ },
432
+ };
433
+ }
434
+ // ============================================
435
+ // NEW: Changelog Generation Methods
436
+ // ============================================
437
+ /**
438
+ * Get the latest git tag
439
+ */
440
+ async getLatestTag() {
441
+ try {
442
+ // Use simple-git to get tags
443
+ const git = await import('simple-git').then(m => m.simpleGit(this.repoRoot));
444
+ const tags = await git.tags();
445
+ return tags.all[tags.all.length - 1] || null;
446
+ }
447
+ catch {
448
+ return null;
449
+ }
450
+ }
451
+ /**
452
+ * Generate changelog from git history
453
+ */
454
+ async generateChangelog(options) {
455
+ await this.initialize();
456
+ const changelogOptions = {
457
+ from: options.from,
458
+ to: options.to || 'HEAD',
459
+ includeInternal: false,
460
+ groupBy: options.groupBy || 'type',
461
+ };
462
+ return this.changelogGenerator.generate(changelogOptions);
463
+ }
464
+ // ============================================
465
+ // NEW: Monorepo Analysis Methods
466
+ // ============================================
467
+ /**
468
+ * Analyze monorepo structure
469
+ */
470
+ async analyzeMonorepo(options = {}) {
471
+ // Detect monorepo type
472
+ const detection = await this.monorepoDetector.detect();
473
+ // Check if this is a monorepo
474
+ if (detection.type === 'single') {
475
+ return {
476
+ type: null,
477
+ root: this.repoRoot,
478
+ packages: [],
479
+ dependencies: {},
480
+ dependents: {},
481
+ summary: { internalDeps: 0, sharedDeps: 0 },
482
+ };
483
+ }
484
+ // Initialize monorepo analyzer if not already done
485
+ if (!this.monorepoAnalyzer) {
486
+ this.monorepoAnalyzer = new MonorepoAnalyzer(detection);
487
+ }
488
+ const analysis = await this.monorepoAnalyzer.analyze();
489
+ return {
490
+ type: detection.type,
491
+ root: this.repoRoot,
492
+ packages: detection.packages,
493
+ dependencies: analysis.crossPackageDependencies.reduce((acc, edge) => {
494
+ if (!acc[edge.from])
495
+ acc[edge.from] = [];
496
+ acc[edge.from].push(edge.to);
497
+ return acc;
498
+ }, {}),
499
+ dependents: analysis.crossPackageDependencies.reduce((acc, edge) => {
500
+ if (!acc[edge.to])
501
+ acc[edge.to] = [];
502
+ acc[edge.to].push(edge.from);
503
+ return acc;
504
+ }, {}),
505
+ sharedDeps: options.includeShared ? analysis.sharedDependencies : undefined,
506
+ cycles: options.includeCycles ? this.detectPackageCycles(analysis.crossPackageDependencies) : undefined,
507
+ summary: {
508
+ internalDeps: analysis.crossPackageDependencies.length,
509
+ sharedDeps: analysis.sharedDependencies.length,
510
+ },
511
+ };
512
+ }
513
+ detectPackageCycles(edges) {
514
+ // Simple cycle detection
515
+ const graph = new Map();
516
+ for (const edge of edges) {
517
+ if (!graph.has(edge.from))
518
+ graph.set(edge.from, []);
519
+ graph.get(edge.from).push(edge.to);
520
+ }
521
+ const cycles = [];
522
+ const visited = new Set();
523
+ const path = [];
524
+ const dfs = (node) => {
525
+ if (path.includes(node)) {
526
+ const cycleStart = path.indexOf(node);
527
+ cycles.push(path.slice(cycleStart));
528
+ return;
529
+ }
530
+ if (visited.has(node))
531
+ return;
532
+ visited.add(node);
533
+ path.push(node);
534
+ for (const neighbor of graph.get(node) || []) {
535
+ dfs(neighbor);
536
+ }
537
+ path.pop();
538
+ };
539
+ for (const node of graph.keys()) {
540
+ dfs(node);
541
+ }
542
+ return cycles;
543
+ }
544
+ // ============================================
545
+ // NEW: Smart Test Prioritization Methods
546
+ // ============================================
547
+ /**
548
+ * Get prioritized test list based on changes
549
+ */
550
+ async getPrioritizedTests(options = {}) {
551
+ await this.initialize();
552
+ let diff;
553
+ if (options.staged) {
554
+ diff = await this.git.getStagedDiff();
555
+ }
556
+ else {
557
+ diff = await this.git.getDiff(options.base || 'HEAD');
558
+ }
559
+ const files = this.indexer.getFiles();
560
+ const impact = await this.impactAnalyzer.analyze(diff, files, new Map());
561
+ return this.testPrioritizer.prioritize(diff, files, impact);
562
+ }
563
+ }
564
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/cli/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { AnalysisResult, ImpactResult, ConventionViolation, TestSuggestion, PrReport, GitDiff, Signal } from '../core/types.js';
2
+ export declare class Formatter {
3
+ private json;
4
+ private markdown;
5
+ constructor(json?: boolean, markdown?: boolean);
6
+ /**
7
+ * Format scan results
8
+ */
9
+ formatScan(result: AnalysisResult): string;
10
+ /**
11
+ * Format impact analysis results
12
+ */
13
+ formatImpact(impact: ImpactResult, diff: GitDiff): string;
14
+ /**
15
+ * Format convention check results
16
+ */
17
+ formatConventions(violations: ConventionViolation[]): string;
18
+ /**
19
+ * Format test suggestions
20
+ */
21
+ formatTests(suggestions: TestSuggestion[]): string;
22
+ /**
23
+ * Format PR report
24
+ */
25
+ formatPrReport(report: PrReport): string;
26
+ /**
27
+ * Format error message
28
+ */
29
+ formatError(error: Error): string;
30
+ /**
31
+ * Format PR report as markdown (for GitHub comments, etc.)
32
+ */
33
+ private formatPrReportMarkdown;
34
+ /**
35
+ * Format signals analysis results
36
+ */
37
+ formatSignals(signals: Signal[]): string;
38
+ }
39
+ //# sourceMappingURL=formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/cli/formatter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,QAAQ,EACR,OAAO,EACP,MAAM,EACP,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,QAAQ,CAAU;gBAEd,IAAI,GAAE,OAAe,EAAE,QAAQ,GAAE,OAAe;IAY5D;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IAsB1C;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM;IA8FzD;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,MAAM;IAwD5D;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,cAAc,EAAE,GAAG,MAAM;IA+DlD;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM;IAuDxC;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM;IAQjC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA6E9B;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM;CA6EzC"}