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,453 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import { glob } from 'glob';
4
+ import { RepoIndexer } from '../core/repo-indexer.js';
5
+ import { DependencyGraph } from '../core/dependency-graph.js';
6
+ // ============================================================================
7
+ // Monorepo Detector
8
+ // ============================================================================
9
+ export class MonorepoDetector {
10
+ repoRoot;
11
+ constructor(repoRoot) {
12
+ this.repoRoot = repoRoot;
13
+ }
14
+ /**
15
+ * Detect if this is a monorepo and its type
16
+ */
17
+ async detect() {
18
+ const type = await this.detectType();
19
+ const packages = await this.discoverPackages(type);
20
+ const workspaceConfig = await this.loadWorkspaceConfig(type);
21
+ return {
22
+ type,
23
+ rootPath: this.repoRoot,
24
+ packages,
25
+ workspaceConfig,
26
+ };
27
+ }
28
+ /**
29
+ * Detect monorepo type
30
+ */
31
+ async detectType() {
32
+ // Check for various monorepo configurations
33
+ const checks = [
34
+ { file: 'pnpm-workspace.yaml', type: 'pnpm-workspaces' },
35
+ { file: 'lerna.json', type: 'lerna' },
36
+ { file: 'nx.json', type: 'nx' },
37
+ { file: 'turbo.json', type: 'turborepo' },
38
+ { file: 'rush.json', type: 'rush' },
39
+ ];
40
+ for (const { file, type } of checks) {
41
+ try {
42
+ await fs.access(path.join(this.repoRoot, file));
43
+ return type;
44
+ }
45
+ catch {
46
+ // File doesn't exist, continue
47
+ }
48
+ }
49
+ // Check package.json for workspaces
50
+ try {
51
+ const pkgJson = await this.readPackageJson(this.repoRoot);
52
+ if (pkgJson.workspaces) {
53
+ // Check for yarn.lock vs package-lock.json
54
+ try {
55
+ await fs.access(path.join(this.repoRoot, 'yarn.lock'));
56
+ return 'yarn-workspaces';
57
+ }
58
+ catch {
59
+ return 'npm-workspaces';
60
+ }
61
+ }
62
+ }
63
+ catch {
64
+ // No package.json
65
+ }
66
+ // Check for packages directory
67
+ try {
68
+ await fs.access(path.join(this.repoRoot, 'packages'));
69
+ return 'unknown';
70
+ }
71
+ catch {
72
+ return 'single';
73
+ }
74
+ }
75
+ /**
76
+ * Discover packages in the monorepo
77
+ */
78
+ async discoverPackages(type) {
79
+ const packages = [];
80
+ let packagePatterns = [];
81
+ switch (type) {
82
+ case 'pnpm-workspaces':
83
+ packagePatterns = await this.getPnpmWorkspaces();
84
+ break;
85
+ case 'yarn-workspaces':
86
+ case 'npm-workspaces':
87
+ packagePatterns = await this.getNpmWorkspaces();
88
+ break;
89
+ case 'lerna':
90
+ packagePatterns = await this.getLernaPackages();
91
+ break;
92
+ case 'nx':
93
+ packagePatterns = ['apps/*', 'libs/*', 'packages/*'];
94
+ break;
95
+ case 'turborepo':
96
+ packagePatterns = await this.getNpmWorkspaces();
97
+ break;
98
+ case 'unknown':
99
+ packagePatterns = ['packages/*'];
100
+ break;
101
+ case 'single':
102
+ // Single package, return root as the only package
103
+ const rootPkg = await this.readPackageJson(this.repoRoot);
104
+ packages.push({
105
+ name: rootPkg.name || 'root',
106
+ path: this.repoRoot,
107
+ relativePath: '.',
108
+ version: rootPkg.version,
109
+ private: rootPkg.private,
110
+ dependencies: Object.keys(rootPkg.dependencies || {}),
111
+ devDependencies: Object.keys(rootPkg.devDependencies || {}),
112
+ peerDependencies: Object.keys(rootPkg.peerDependencies || {}),
113
+ localDependencies: [],
114
+ });
115
+ return packages;
116
+ }
117
+ // Find all package directories
118
+ for (const pattern of packagePatterns) {
119
+ const matches = await glob(pattern, {
120
+ cwd: this.repoRoot,
121
+ absolute: false,
122
+ });
123
+ for (const match of matches) {
124
+ const pkgPath = path.join(this.repoRoot, match);
125
+ try {
126
+ const pkgJson = await this.readPackageJson(pkgPath);
127
+ packages.push({
128
+ name: pkgJson.name || match,
129
+ path: pkgPath,
130
+ relativePath: match,
131
+ version: pkgJson.version,
132
+ private: pkgJson.private,
133
+ dependencies: Object.keys(pkgJson.dependencies || {}),
134
+ devDependencies: Object.keys(pkgJson.devDependencies || {}),
135
+ peerDependencies: Object.keys(pkgJson.peerDependencies || {}),
136
+ localDependencies: [],
137
+ });
138
+ }
139
+ catch {
140
+ // Not a valid package
141
+ }
142
+ }
143
+ }
144
+ // Identify local dependencies
145
+ const packageNames = new Set(packages.map(p => p.name));
146
+ for (const pkg of packages) {
147
+ pkg.localDependencies = [
148
+ ...pkg.dependencies,
149
+ ...pkg.devDependencies,
150
+ ...pkg.peerDependencies,
151
+ ].filter(dep => packageNames.has(dep));
152
+ }
153
+ return packages;
154
+ }
155
+ /**
156
+ * Load workspace configuration
157
+ */
158
+ async loadWorkspaceConfig(type) {
159
+ if (type === 'yarn-workspaces' || type === 'npm-workspaces') {
160
+ const pkgJson = await this.readPackageJson(this.repoRoot);
161
+ const workspaces = pkgJson.workspaces;
162
+ if (Array.isArray(workspaces)) {
163
+ return { packages: workspaces };
164
+ }
165
+ else if (workspaces && typeof workspaces === 'object') {
166
+ return {
167
+ packages: workspaces.packages || [],
168
+ nohoist: workspaces.nohoist,
169
+ };
170
+ }
171
+ }
172
+ return undefined;
173
+ }
174
+ /**
175
+ * Get pnpm workspace patterns
176
+ */
177
+ async getPnpmWorkspaces() {
178
+ try {
179
+ const content = await fs.readFile(path.join(this.repoRoot, 'pnpm-workspace.yaml'), 'utf-8');
180
+ // Simple YAML parsing for packages array
181
+ const match = content.match(/packages:\s*\n((?:\s+-\s*.+\n?)+)/);
182
+ if (match) {
183
+ return match[1]
184
+ .split('\n')
185
+ .map(line => line.replace(/^\s*-\s*['"]?/, '').replace(/['"]?\s*$/, ''))
186
+ .filter(Boolean);
187
+ }
188
+ }
189
+ catch {
190
+ // Fall back to defaults
191
+ }
192
+ return ['packages/*'];
193
+ }
194
+ /**
195
+ * Get npm/yarn workspace patterns
196
+ */
197
+ async getNpmWorkspaces() {
198
+ try {
199
+ const pkgJson = await this.readPackageJson(this.repoRoot);
200
+ const workspaces = pkgJson.workspaces;
201
+ if (Array.isArray(workspaces)) {
202
+ return workspaces;
203
+ }
204
+ else if (workspaces && typeof workspaces === 'object' && 'packages' in workspaces && Array.isArray(workspaces.packages)) {
205
+ return workspaces.packages;
206
+ }
207
+ }
208
+ catch {
209
+ // Fall back to defaults
210
+ }
211
+ return ['packages/*'];
212
+ }
213
+ /**
214
+ * Get lerna package patterns
215
+ */
216
+ async getLernaPackages() {
217
+ try {
218
+ const content = await fs.readFile(path.join(this.repoRoot, 'lerna.json'), 'utf-8');
219
+ const config = JSON.parse(content);
220
+ return config.packages || ['packages/*'];
221
+ }
222
+ catch {
223
+ return ['packages/*'];
224
+ }
225
+ }
226
+ /**
227
+ * Read and parse package.json
228
+ */
229
+ async readPackageJson(pkgPath) {
230
+ const content = await fs.readFile(path.join(pkgPath, 'package.json'), 'utf-8');
231
+ return JSON.parse(content);
232
+ }
233
+ }
234
+ // ============================================================================
235
+ // Monorepo Analyzer
236
+ // ============================================================================
237
+ export class MonorepoAnalyzer {
238
+ config;
239
+ packageIndexers = new Map();
240
+ packageGraphs = new Map();
241
+ constructor(config) {
242
+ this.config = config;
243
+ }
244
+ /**
245
+ * Analyze the monorepo
246
+ */
247
+ async analyze() {
248
+ // Index each package
249
+ for (const pkg of this.config.packages) {
250
+ const indexer = new RepoIndexer(pkg.path);
251
+ await indexer.index();
252
+ this.packageIndexers.set(pkg.name, indexer);
253
+ const graph = new DependencyGraph(pkg.path);
254
+ graph.buildFromImports(indexer.getFiles());
255
+ this.packageGraphs.set(pkg.name, graph);
256
+ }
257
+ const crossPackageDependencies = this.findCrossPackageDependencies();
258
+ const sharedDependencies = await this.findSharedDependencies();
259
+ const packageStats = this.calculatePackageStats();
260
+ const issues = this.findIssues(crossPackageDependencies, sharedDependencies);
261
+ return {
262
+ config: this.config,
263
+ crossPackageDependencies,
264
+ sharedDependencies,
265
+ packageStats,
266
+ issues,
267
+ };
268
+ }
269
+ /**
270
+ * Find cross-package dependencies
271
+ */
272
+ findCrossPackageDependencies() {
273
+ const edges = [];
274
+ for (const pkg of this.config.packages) {
275
+ // From package.json dependencies
276
+ for (const dep of pkg.localDependencies) {
277
+ edges.push({
278
+ from: pkg.name,
279
+ to: dep,
280
+ type: pkg.dependencies.includes(dep) ? 'dependency' :
281
+ pkg.devDependencies.includes(dep) ? 'devDependency' : 'peerDependency',
282
+ });
283
+ }
284
+ }
285
+ return edges;
286
+ }
287
+ /**
288
+ * Find shared external dependencies
289
+ */
290
+ async findSharedDependencies() {
291
+ const depVersions = new Map();
292
+ for (const pkg of this.config.packages) {
293
+ // Read actual versions from package.json
294
+ try {
295
+ const pkgJson = await this.readPackageJson(pkg.path);
296
+ const allDeps = {
297
+ ...(pkgJson.dependencies || {}),
298
+ ...(pkgJson.devDependencies || {}),
299
+ };
300
+ for (const dep of pkg.dependencies) {
301
+ if (!this.config.packages.some(p => p.name === dep)) {
302
+ const existing = depVersions.get(dep) || [];
303
+ const version = allDeps[dep] || '*';
304
+ existing.push({ package: pkg.name, version });
305
+ depVersions.set(dep, existing);
306
+ }
307
+ }
308
+ }
309
+ catch {
310
+ // If we can't read package.json, skip this package
311
+ }
312
+ }
313
+ return Array.from(depVersions.entries())
314
+ .filter(([, versions]) => versions.length > 1)
315
+ .map(([name, versions]) => ({
316
+ name,
317
+ versions,
318
+ hasVersionMismatch: new Set(versions.map(v => v.version)).size > 1,
319
+ }));
320
+ }
321
+ /**
322
+ * Read and parse package.json from a directory
323
+ */
324
+ async readPackageJson(pkgPath) {
325
+ const content = await fs.readFile(path.join(pkgPath, 'package.json'), 'utf-8');
326
+ return JSON.parse(content);
327
+ }
328
+ /**
329
+ * Calculate stats for each package
330
+ */
331
+ calculatePackageStats() {
332
+ const stats = [];
333
+ for (const pkg of this.config.packages) {
334
+ const indexer = this.packageIndexers.get(pkg.name);
335
+ if (!indexer)
336
+ continue;
337
+ const files = indexer.getFiles();
338
+ let symbols = 0;
339
+ let exports = 0;
340
+ for (const [, fileInfo] of files) {
341
+ symbols += fileInfo.symbols.length;
342
+ exports += fileInfo.exports.length;
343
+ }
344
+ stats.push({
345
+ name: pkg.name,
346
+ files: files.size,
347
+ symbols,
348
+ exports,
349
+ localDeps: pkg.localDependencies.length,
350
+ externalDeps: pkg.dependencies.length - pkg.localDependencies.length,
351
+ });
352
+ }
353
+ return stats;
354
+ }
355
+ /**
356
+ * Find issues in monorepo structure
357
+ */
358
+ findIssues(crossDeps, sharedDeps) {
359
+ const issues = [];
360
+ // Check for version mismatches
361
+ for (const dep of sharedDeps) {
362
+ if (dep.hasVersionMismatch) {
363
+ issues.push({
364
+ type: 'version-mismatch',
365
+ severity: 'warning',
366
+ message: `Dependency '${dep.name}' has different versions across packages`,
367
+ packages: dep.versions.map(v => v.package),
368
+ suggestion: `Align versions or use workspace protocol`,
369
+ });
370
+ }
371
+ }
372
+ // Check for circular dependencies between packages
373
+ const circularDeps = this.detectCircularPackageDeps(crossDeps);
374
+ for (const cycle of circularDeps) {
375
+ issues.push({
376
+ type: 'circular-dep',
377
+ severity: 'error',
378
+ message: `Circular dependency detected: ${cycle.join(' → ')}`,
379
+ packages: cycle,
380
+ suggestion: `Extract shared code into a separate package`,
381
+ });
382
+ }
383
+ // Check for orphan packages (no local dependents)
384
+ const hasDependent = new Set(crossDeps.map(e => e.to));
385
+ for (const pkg of this.config.packages) {
386
+ if (!hasDependent.has(pkg.name) && pkg.localDependencies.length === 0 && !pkg.private) {
387
+ issues.push({
388
+ type: 'orphan-package',
389
+ severity: 'info',
390
+ message: `Package '${pkg.name}' has no local dependencies or dependents`,
391
+ packages: [pkg.name],
392
+ suggestion: `Consider if this package should be in a separate repository`,
393
+ });
394
+ }
395
+ }
396
+ return issues;
397
+ }
398
+ /**
399
+ * Detect circular dependencies between packages
400
+ */
401
+ detectCircularPackageDeps(edges) {
402
+ const cycles = [];
403
+ const adj = new Map();
404
+ for (const edge of edges) {
405
+ const existing = adj.get(edge.from) || [];
406
+ existing.push(edge.to);
407
+ adj.set(edge.from, existing);
408
+ }
409
+ const visited = new Set();
410
+ const recStack = new Set();
411
+ const dfs = (node, pathNodes) => {
412
+ visited.add(node);
413
+ recStack.add(node);
414
+ for (const neighbor of adj.get(node) || []) {
415
+ if (!visited.has(neighbor)) {
416
+ dfs(neighbor, [...pathNodes, node]);
417
+ }
418
+ else if (recStack.has(neighbor)) {
419
+ const cycleStart = pathNodes.indexOf(neighbor);
420
+ if (cycleStart !== -1) {
421
+ cycles.push([...pathNodes.slice(cycleStart), node, neighbor]);
422
+ }
423
+ else {
424
+ cycles.push([...pathNodes, node, neighbor]);
425
+ }
426
+ }
427
+ }
428
+ recStack.delete(node);
429
+ };
430
+ for (const pkg of this.config.packages) {
431
+ if (!visited.has(pkg.name)) {
432
+ dfs(pkg.name, []);
433
+ }
434
+ }
435
+ return cycles;
436
+ }
437
+ /**
438
+ * Get files for a specific package
439
+ */
440
+ getPackageFiles(packageName) {
441
+ return this.packageIndexers.get(packageName)?.getFiles();
442
+ }
443
+ }
444
+ /**
445
+ * Detect and analyze monorepo
446
+ */
447
+ export async function analyzeMonorepo(repoRoot) {
448
+ const detector = new MonorepoDetector(repoRoot);
449
+ const config = await detector.detect();
450
+ const analyzer = new MonorepoAnalyzer(config);
451
+ return analyzer.analyze();
452
+ }
453
+ //# sourceMappingURL=monorepo-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monorepo-analyzer.js","sourceRoot":"","sources":["../../src/modules/monorepo-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ import type { FileInfo, Signal, ConventionViolation } from '../core/types.js';
2
+ export interface CodexiaPlugin {
3
+ name: string;
4
+ version: string;
5
+ description?: string;
6
+ onLoad?: (context: PluginContext) => Promise<void>;
7
+ onUnload?: () => Promise<void>;
8
+ analyzeFile?: (file: FileInfo, content: string) => Promise<PluginAnalysisResult>;
9
+ afterIndex?: (files: Map<string, FileInfo>) => Promise<void>;
10
+ customSignals?: CustomSignalChecker[];
11
+ customConventions?: CustomConventionChecker[];
12
+ commands?: PluginCommand[];
13
+ }
14
+ export interface PluginContext {
15
+ repoRoot: string;
16
+ config: PluginConfig;
17
+ logger: PluginLogger;
18
+ api: PluginAPI;
19
+ }
20
+ export interface PluginConfig {
21
+ enabled: boolean;
22
+ options: Record<string, unknown>;
23
+ }
24
+ export interface PluginLogger {
25
+ debug: (message: string) => void;
26
+ info: (message: string) => void;
27
+ warn: (message: string) => void;
28
+ error: (message: string) => void;
29
+ }
30
+ export interface PluginAPI {
31
+ getFiles: () => Map<string, FileInfo>;
32
+ getFile: (path: string) => FileInfo | undefined;
33
+ getDependencies: (path: string) => string[];
34
+ getDependents: (path: string) => string[];
35
+ emitSignal: (signal: Signal) => void;
36
+ }
37
+ export interface PluginAnalysisResult {
38
+ signals?: Signal[];
39
+ violations?: ConventionViolation[];
40
+ metadata?: Record<string, unknown>;
41
+ }
42
+ export interface CustomSignalChecker {
43
+ id: string;
44
+ name: string;
45
+ description: string;
46
+ check: (file: FileInfo, content: string, context: PluginContext) => Signal | null;
47
+ }
48
+ export interface CustomConventionChecker {
49
+ id: string;
50
+ name: string;
51
+ description: string;
52
+ severity: 'error' | 'warning' | 'info';
53
+ check: (file: FileInfo, content: string, context: PluginContext) => ConventionViolation | null;
54
+ }
55
+ export interface PluginCommand {
56
+ name: string;
57
+ description: string;
58
+ options?: PluginCommandOption[];
59
+ execute: (args: Record<string, unknown>, context: PluginContext) => Promise<void>;
60
+ }
61
+ export interface PluginCommandOption {
62
+ name: string;
63
+ alias?: string;
64
+ description: string;
65
+ type: 'string' | 'boolean' | 'number';
66
+ required?: boolean;
67
+ default?: unknown;
68
+ }
69
+ export declare class PluginManager {
70
+ private plugins;
71
+ private repoRoot;
72
+ private signals;
73
+ constructor(repoRoot: string);
74
+ /**
75
+ * Load plugins from configuration
76
+ */
77
+ loadPlugins(config: CodexiaConfig): Promise<void>;
78
+ /**
79
+ * Load a single plugin
80
+ */
81
+ loadPlugin(config: PluginConfigEntry): Promise<void>;
82
+ /**
83
+ * Unload all plugins
84
+ */
85
+ unloadPlugins(): Promise<void>;
86
+ /**
87
+ * Run file analysis hooks
88
+ */
89
+ analyzeFile(file: FileInfo, content: string): Promise<PluginAnalysisResult[]>;
90
+ /**
91
+ * Run after-index hooks
92
+ */
93
+ afterIndex(files: Map<string, FileInfo>): Promise<void>;
94
+ /**
95
+ * Get all custom signals from plugins
96
+ */
97
+ runCustomSignals(file: FileInfo, content: string): Signal[];
98
+ /**
99
+ * Get all custom conventions from plugins
100
+ */
101
+ runCustomConventions(file: FileInfo, content: string): ConventionViolation[];
102
+ /**
103
+ * Get all plugin commands
104
+ */
105
+ getCommands(): Map<string, {
106
+ command: PluginCommand;
107
+ context: PluginContext;
108
+ }>;
109
+ /**
110
+ * Get loaded plugins
111
+ */
112
+ getPlugins(): Map<string, LoadedPlugin>;
113
+ /**
114
+ * Create plugin context
115
+ */
116
+ private createContext;
117
+ /**
118
+ * Load built-in plugin
119
+ */
120
+ private loadBuiltinPlugin;
121
+ }
122
+ interface LoadedPlugin {
123
+ plugin: CodexiaPlugin;
124
+ config: PluginConfigEntry;
125
+ context: PluginContext;
126
+ }
127
+ export interface CodexiaConfig {
128
+ plugins?: PluginConfigEntry[];
129
+ extends?: string;
130
+ rules?: Record<string, 'off' | 'warn' | 'error'>;
131
+ ignore?: string[];
132
+ }
133
+ export interface PluginConfigEntry {
134
+ name: string;
135
+ path?: string;
136
+ enabled?: boolean;
137
+ options?: Record<string, unknown>;
138
+ }
139
+ /**
140
+ * Load codexia configuration
141
+ */
142
+ export declare function loadConfig(repoRoot: string): Promise<CodexiaConfig>;
143
+ export {};
144
+ //# sourceMappingURL=plugin-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-system.d.ts","sourceRoot":"","sources":["../../src/modules/plugin-system.ts"],"names":[],"mappings":"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"}