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,64 @@
1
+ import { Command } from 'commander';
2
+ import { Formatter } from '../formatter.js';
3
+ import chalk from 'chalk';
4
+ export const mcpServerCommand = new Command('mcp-server')
5
+ .description('Start MCP server for AI integration')
6
+ .option('-p, --port <port>', 'HTTP port (uses stdio if not specified)')
7
+ .option('--stdio', 'Use stdio transport (for direct MCP integration)')
8
+ .option('--tools <tools>', 'Comma-separated list of tools to enable')
9
+ .option('--verbose', 'Enable verbose logging')
10
+ .addHelpText('after', `
11
+ Examples:
12
+ $ codexia mcp-server Start with stdio (for Claude/etc)
13
+ $ codexia mcp-server --port 3000 Start HTTP server on port 3000
14
+ $ codexia mcp-server --tools scan,impact Enable specific tools only
15
+
16
+ Available MCP Tools:
17
+ - scan Scan repository and index all code
18
+ - impact Analyze change impact
19
+ - context Get intelligent context for a file
20
+ - validate Validate changes against conventions
21
+ - signals Get semantic signals
22
+ - tests Suggest affected tests
23
+ - dependencies Get dependency information
24
+ - hotpaths Analyze critical code paths
25
+ - complexity Get complexity metrics
26
+ - memory Access project memory
27
+ `)
28
+ .action(async (options, command) => {
29
+ const globalOpts = command.parent?.opts() || {};
30
+ const formatter = new Formatter(globalOpts.json);
31
+ try {
32
+ // Dynamic import to avoid loading MCP server when not needed
33
+ const { startMCPServer } = await import('../../mcp/server.js');
34
+ console.error(chalk.cyan('🤖 Starting Codexia MCP Server...\n'));
35
+ if (options.port) {
36
+ console.error(chalk.dim(`Mode: HTTP server on port ${options.port}`));
37
+ console.error(chalk.dim('Endpoint: POST /mcp\n'));
38
+ }
39
+ else {
40
+ console.error(chalk.dim('Mode: stdio (for direct MCP integration)'));
41
+ console.error(chalk.dim('Connect via stdin/stdout\n'));
42
+ }
43
+ if (options.tools) {
44
+ console.error(chalk.dim(`Enabled tools: ${options.tools}\n`));
45
+ }
46
+ // Start MCP server with appropriate transport
47
+ const transport = options.port ? 'http' : 'stdio';
48
+ await startMCPServer(transport, options.port);
49
+ // Keep process alive
50
+ if (options.port) {
51
+ console.error(chalk.green('✓ MCP Server running'));
52
+ console.error(chalk.dim(`\nExample request:
53
+ curl -X POST http://localhost:${options.port}/mcp \\
54
+ -H "Content-Type: application/json" \\
55
+ -d '{"method": "tools/call", "params": {"name": "codexia_scan"}}'
56
+ `));
57
+ }
58
+ }
59
+ catch (error) {
60
+ console.error(formatter.formatError(error));
61
+ process.exit(1);
62
+ }
63
+ });
64
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC;KACtD,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,mBAAmB,EAAE,yCAAyC,CAAC;KACtE,MAAM,CAAC,SAAS,EAAE,kDAAkD,CAAC;KACrE,MAAM,CAAC,iBAAiB,EAAE,yCAAyC,CAAC;KACpE,MAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC;KAC7C,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;CAiBvB,CAAC;KACC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,6DAA6D;QAC7D,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAE/D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAEjE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,8CAA8C;QAC9C,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAClD,MAAM,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAE9C,qBAAqB;QACrB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;kCACE,OAAO,CAAC,IAAI;;;CAG7C,CAAC,CAAC,CAAC;QACE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAc,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const monorepoCommand: Command;
3
+ //# sourceMappingURL=monorepo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monorepo.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/monorepo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,eAAe,SA0KxB,CAAC"}
@@ -0,0 +1,156 @@
1
+ import { Command } from 'commander';
2
+ import { CodexiaEngine } from '../engine.js';
3
+ import { Formatter } from '../formatter.js';
4
+ import chalk from 'chalk';
5
+ export const monorepoCommand = new Command('monorepo')
6
+ .description('Analyze monorepo structure and cross-package dependencies')
7
+ .option('--detect', 'Detect monorepo type and packages')
8
+ .option('--graph', 'Show package dependency graph')
9
+ .option('--impact <package>', 'Show impact on other packages')
10
+ .option('--shared', 'Analyze shared dependencies')
11
+ .option('--cycles', 'Detect circular dependencies between packages')
12
+ .option('--scope <packages>', 'Limit analysis to specific packages (comma-separated)')
13
+ .addHelpText('after', `
14
+ Examples:
15
+ $ codexia monorepo --detect Detect packages and structure
16
+ $ codexia monorepo --graph Show package dependency graph
17
+ $ codexia monorepo --impact @org/core Impact of changing core package
18
+ $ codexia monorepo --shared Analyze shared dependencies
19
+ $ codexia monorepo --cycles Find circular package dependencies
20
+ `)
21
+ .action(async (options, command) => {
22
+ const globalOpts = command.parent?.opts() || {};
23
+ const formatter = new Formatter(globalOpts.json);
24
+ try {
25
+ const engine = new CodexiaEngine();
26
+ await engine.initialize();
27
+ const scope = options.scope?.split(',');
28
+ const showAll = !options.detect && !options.graph && !options.impact && !options.shared && !options.cycles;
29
+ const analysis = await engine.analyzeMonorepo({
30
+ scope,
31
+ includeGraph: options.graph || showAll,
32
+ includeShared: options.shared || showAll,
33
+ includeCycles: options.cycles || showAll,
34
+ impactPackage: options.impact,
35
+ });
36
+ if (globalOpts.json) {
37
+ console.log(JSON.stringify(analysis, null, 2));
38
+ return;
39
+ }
40
+ console.log(chalk.bold.cyan('\n📦 Monorepo Analysis\n'));
41
+ console.log(chalk.dim('─'.repeat(80)));
42
+ // Detection
43
+ if (options.detect || showAll) {
44
+ console.log(chalk.bold('\n🔍 Monorepo Detection:\n'));
45
+ console.log(` Type: ${chalk.yellow(analysis.type || 'Not detected')}`);
46
+ console.log(` Root: ${chalk.dim(analysis.root)}`);
47
+ console.log(` Packages: ${chalk.yellow(analysis.packages.length)}`);
48
+ console.log(chalk.dim('\n Packages found:'));
49
+ for (const pkg of analysis.packages) {
50
+ const versionStr = pkg.version ? chalk.dim(` v${pkg.version}`) : '';
51
+ const privateStr = pkg.private ? chalk.dim(' (private)') : '';
52
+ console.log(` ${chalk.green('●')} ${chalk.cyan(pkg.name)}${versionStr}${privateStr}`);
53
+ console.log(chalk.dim(` ${pkg.path}`));
54
+ }
55
+ }
56
+ // Dependency graph
57
+ if (options.graph || showAll) {
58
+ console.log(chalk.bold('\n🔗 Package Dependencies:\n'));
59
+ for (const pkg of analysis.packages) {
60
+ const deps = analysis.dependencies[pkg.name] || [];
61
+ const dependents = analysis.dependents[pkg.name] || [];
62
+ console.log(` ${chalk.cyan(pkg.name)}`);
63
+ if (deps.length > 0) {
64
+ console.log(chalk.dim(` depends on: ${deps.map((d) => chalk.yellow(d)).join(', ')}`));
65
+ }
66
+ if (dependents.length > 0) {
67
+ console.log(chalk.dim(` used by: ${dependents.map((d) => chalk.green(d)).join(', ')}`));
68
+ }
69
+ if (deps.length === 0 && dependents.length === 0) {
70
+ console.log(chalk.dim(' (no internal dependencies)'));
71
+ }
72
+ }
73
+ // ASCII graph
74
+ if (analysis.graph) {
75
+ console.log(chalk.bold('\n Dependency Graph:'));
76
+ console.log(chalk.dim(analysis.graph));
77
+ }
78
+ }
79
+ // Shared dependencies
80
+ if (options.shared || showAll) {
81
+ console.log(chalk.bold('\n📚 Shared Dependencies:\n'));
82
+ if (analysis.sharedDeps?.length) {
83
+ const sorted = [...analysis.sharedDeps].sort((a, b) => b.usedBy.length - a.usedBy.length);
84
+ for (const dep of sorted.slice(0, 15)) {
85
+ const versionMismatch = dep.versions.length > 1;
86
+ const icon = versionMismatch ? chalk.yellow('⚠') : chalk.green('●');
87
+ console.log(` ${icon} ${chalk.cyan(dep.name)}`);
88
+ console.log(chalk.dim(` Used by ${dep.usedBy.length} packages: ${dep.usedBy.join(', ')}`));
89
+ if (versionMismatch) {
90
+ console.log(chalk.yellow(` ⚠ Version mismatch: ${dep.versions.join(', ')}`));
91
+ }
92
+ }
93
+ }
94
+ else {
95
+ console.log(chalk.dim(' No shared dependencies found.'));
96
+ }
97
+ }
98
+ // Circular dependencies
99
+ if (options.cycles || showAll) {
100
+ console.log(chalk.bold('\n🔄 Circular Dependencies:\n'));
101
+ if (analysis.cycles?.length) {
102
+ for (const cycle of analysis.cycles) {
103
+ console.log(` ${chalk.red('⚠')} ${cycle.map((c) => chalk.cyan(c)).join(' → ')} → ${chalk.cyan(cycle[0])}`);
104
+ }
105
+ console.log(chalk.yellow(`\n Found ${analysis.cycles.length} circular dependency chains.`));
106
+ }
107
+ else {
108
+ console.log(chalk.green(' ✓ No circular dependencies detected.'));
109
+ }
110
+ }
111
+ // Impact analysis
112
+ if (options.impact) {
113
+ console.log(chalk.bold(`\n💥 Impact of ${options.impact}:\n`));
114
+ if (analysis.impact) {
115
+ console.log(` Direct dependents: ${chalk.yellow(analysis.impact.direct.length)}`);
116
+ for (const pkg of analysis.impact.direct) {
117
+ console.log(` ${chalk.green('●')} ${pkg}`);
118
+ }
119
+ console.log(` Transitive: ${chalk.yellow(analysis.impact.transitive.length)}`);
120
+ for (const pkg of analysis.impact.transitive) {
121
+ console.log(` ${chalk.dim('○')} ${pkg}`);
122
+ }
123
+ console.log(`\n Total blast radius: ${chalk.red(analysis.impact.direct.length + analysis.impact.transitive.length)} packages`);
124
+ if (analysis.impact.buildOrder) {
125
+ console.log(chalk.bold('\n Suggested build order:'));
126
+ for (let i = 0; i < analysis.impact.buildOrder.length; i++) {
127
+ console.log(` ${i + 1}. ${analysis.impact.buildOrder[i]}`);
128
+ }
129
+ }
130
+ }
131
+ else {
132
+ console.log(chalk.dim(` Package "${options.impact}" not found.`));
133
+ }
134
+ }
135
+ // Summary
136
+ console.log(chalk.dim('\n─'.repeat(80)));
137
+ console.log(chalk.bold('\n📊 Summary:\n'));
138
+ console.log(` Monorepo type: ${chalk.yellow(analysis.type || 'Unknown')}`);
139
+ console.log(` Total packages: ${chalk.yellow(analysis.packages.length)}`);
140
+ console.log(` Internal dependencies: ${chalk.yellow(analysis.summary.internalDeps)}`);
141
+ console.log(` Shared external deps: ${chalk.yellow(analysis.summary.sharedDeps)}`);
142
+ console.log(` Circular dependencies: ${analysis.cycles?.length ? chalk.red(analysis.cycles.length) : chalk.green('0')}`);
143
+ if (analysis.recommendations?.length) {
144
+ console.log(chalk.bold('\n💡 Recommendations:\n'));
145
+ for (const rec of analysis.recommendations) {
146
+ console.log(` ${chalk.yellow('•')} ${rec}`);
147
+ }
148
+ }
149
+ console.log();
150
+ }
151
+ catch (error) {
152
+ console.error(formatter.formatError(error));
153
+ process.exit(1);
154
+ }
155
+ });
156
+ //# sourceMappingURL=monorepo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monorepo.js","sourceRoot":"","sources":["../../../src/cli/commands/monorepo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,2DAA2D,CAAC;KACxE,MAAM,CAAC,UAAU,EAAE,mCAAmC,CAAC;KACvD,MAAM,CAAC,SAAS,EAAE,+BAA+B,CAAC;KAClD,MAAM,CAAC,oBAAoB,EAAE,+BAA+B,CAAC;KAC7D,MAAM,CAAC,UAAU,EAAE,6BAA6B,CAAC;KACjD,MAAM,CAAC,UAAU,EAAE,+CAA+C,CAAC;KACnE,MAAM,CAAC,oBAAoB,EAAE,uDAAuD,CAAC;KACrF,WAAW,CAAC,OAAO,EAAE;;;;;;;CAOvB,CAAC;KACC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QAE1B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAE3G,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC;YAC5C,KAAK;YACL,YAAY,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO;YACtC,aAAa,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO;YACxC,aAAa,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO;YACxC,aAAa,EAAE,OAAO,CAAC,MAAM;SAC9B,CAAC,CAAC;QAEH,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEvC,YAAY;QACZ,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAErE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC9C,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACpC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpE,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9D,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;gBACzF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;YAExD,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACnD,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAEvD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnG,CAAC;gBACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxG,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;YAED,cAAc;YACd,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,sBAAsB;QACtB,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;YAEvD,IAAI,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;gBAChC,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAEpG,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;oBACtC,MAAM,eAAe,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;oBAChD,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACpE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC9F,IAAI,eAAe,EAAE,CAAC;wBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClF,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;YAEzD,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBAC5B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtH,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,QAAQ,CAAC,MAAM,CAAC,MAAM,8BAA8B,CAAC,CAAC,CAAC;YAC/F,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;YAE/D,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACrF,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;oBACzC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;gBAChD,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzF,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;oBAC7C,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;gBAC9C,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAEjI,IAAI,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;oBAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;oBACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC3D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAChE,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,MAAM,cAAc,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAED,UAAU;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,6BAA6B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE3H,IAAI,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACnD,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAc,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const prReportCommand: Command;
3
+ //# sourceMappingURL=pr-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-report.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pr-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,eAAe,SA6BxB,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { Command } from 'commander';
2
+ import { CodexiaEngine } from '../engine.js';
3
+ import { Formatter } from '../formatter.js';
4
+ export const prReportCommand = new Command('pr-report')
5
+ .description('Generate a PR analysis report')
6
+ .option('-b, --base <ref>', 'Base ref for comparison')
7
+ .option('--head <ref>', 'Head ref for comparison')
8
+ .addHelpText('after', `
9
+ Examples:
10
+ $ codexia pr-report Generate report for latest commit
11
+ $ codexia pr-report -b main Generate report comparing to main
12
+ $ codexia pr-report --json Output as JSON for CI integration
13
+ `)
14
+ .action(async (options, command) => {
15
+ const globalOpts = command.parent?.opts() || {};
16
+ const isJson = globalOpts.json || globalOpts.format === 'json';
17
+ const isMarkdown = globalOpts.format === 'markdown';
18
+ const formatter = new Formatter(isJson, isMarkdown);
19
+ try {
20
+ const engine = new CodexiaEngine();
21
+ const report = await engine.generatePrReport({
22
+ base: options.base,
23
+ head: options.head,
24
+ });
25
+ console.log(formatter.formatPrReport(report));
26
+ }
27
+ catch (error) {
28
+ console.error(formatter.formatError(error));
29
+ process.exit(1);
30
+ }
31
+ });
32
+ //# sourceMappingURL=pr-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-report.js","sourceRoot":"","sources":["../../../src/cli/commands/pr-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;KACpD,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,kBAAkB,EAAE,yBAAyB,CAAC;KACrD,MAAM,CAAC,cAAc,EAAE,yBAAyB,CAAC;KACjD,WAAW,CAAC,OAAO,EAAE;;;;;CAKvB,CAAC;KACC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC;IAC/D,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAEnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC;YAC3C,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAc,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const scanCommand: Command;
3
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,WAAW,SAqBpB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { Command } from 'commander';
2
+ import { CodexiaEngine } from '../engine.js';
3
+ import { Formatter } from '../formatter.js';
4
+ export const scanCommand = new Command('scan')
5
+ .description('Scan and index the repository')
6
+ .addHelpText('after', `
7
+ Examples:
8
+ $ codexia scan Index the repository
9
+ $ codexia scan --json Output as JSON for CI pipelines
10
+ `)
11
+ .action(async (_options, command) => {
12
+ const globalOpts = command.parent?.opts() || {};
13
+ const formatter = new Formatter(globalOpts.json);
14
+ console.log('Scanning repository...');
15
+ try {
16
+ const engine = new CodexiaEngine();
17
+ const result = await engine.scan();
18
+ console.log(formatter.formatScan(result));
19
+ }
20
+ catch (error) {
21
+ console.error(formatter.formatError(error));
22
+ process.exit(1);
23
+ }
24
+ });
25
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,+BAA+B,CAAC;KAC5C,WAAW,CAAC,OAAO,EAAE;;;;CAIvB,CAAC;KACC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;IAClC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEjD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAc,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const signalsCommand: Command;
3
+ //# sourceMappingURL=signals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,cAAc,SA+BvB,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { Command } from 'commander';
2
+ import { CodexiaEngine } from '../engine.js';
3
+ import { Formatter } from '../formatter.js';
4
+ export const signalsCommand = new Command('signals')
5
+ .description('Detect code quality signals (orphan code, god classes, circular deps)')
6
+ .option('--orphans', 'Check for orphan (unused exported) code')
7
+ .option('--god-classes', 'Check for overly large files')
8
+ .option('--cycles', 'Check for circular dependencies')
9
+ .addHelpText('after', `
10
+ Examples:
11
+ $ codexia signals Run all signal checks
12
+ $ codexia signals --orphans Check for unused exports only
13
+ $ codexia signals --cycles Check for circular dependencies only
14
+ $ codexia signals --json Output as JSON for tooling
15
+ `)
16
+ .action(async (options, command) => {
17
+ const globalOpts = command.parent?.opts() || {};
18
+ const formatter = new Formatter(globalOpts.json);
19
+ console.log('Analyzing code signals...\n');
20
+ try {
21
+ const engine = new CodexiaEngine();
22
+ const signals = await engine.analyzeSignals({
23
+ checkOrphans: options.orphans ?? true,
24
+ checkGodClasses: options.godClasses ?? true,
25
+ checkCycles: options.cycles ?? true,
26
+ });
27
+ console.log(formatter.formatSignals(signals));
28
+ }
29
+ catch (error) {
30
+ console.error(formatter.formatError(error));
31
+ process.exit(1);
32
+ }
33
+ });
34
+ //# sourceMappingURL=signals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../../src/cli/commands/signals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,uEAAuE,CAAC;KACpF,MAAM,CAAC,WAAW,EAAE,yCAAyC,CAAC;KAC9D,MAAM,CAAC,eAAe,EAAE,8BAA8B,CAAC;KACvD,MAAM,CAAC,UAAU,EAAE,iCAAiC,CAAC;KACrD,WAAW,CAAC,OAAO,EAAE;;;;;;CAMvB,CAAC;KACC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEjD,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC;YAC1C,YAAY,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;YACrC,eAAe,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;YAC3C,WAAW,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;SACpC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAc,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const testsCommand: Command;
3
+ //# sourceMappingURL=tests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/tests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,YAAY,SA2BrB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { Command } from 'commander';
2
+ import { CodexiaEngine } from '../engine.js';
3
+ import { Formatter } from '../formatter.js';
4
+ export const testsCommand = new Command('tests')
5
+ .description('Suggest tests for changed code')
6
+ .option('-b, --base <ref>', 'Base ref for comparison', 'HEAD')
7
+ .option('--staged', 'Analyze only staged changes')
8
+ .addHelpText('after', `
9
+ Examples:
10
+ $ codexia tests Suggest tests for changed code
11
+ $ codexia tests --staged Suggest tests for staged changes
12
+ $ codexia tests -b main Suggest tests for changes since main
13
+ `)
14
+ .action(async (options, command) => {
15
+ const globalOpts = command.parent?.opts() || {};
16
+ const formatter = new Formatter(globalOpts.json);
17
+ try {
18
+ const engine = new CodexiaEngine();
19
+ const suggestions = await engine.suggestTests({
20
+ base: options.base,
21
+ staged: options.staged,
22
+ });
23
+ console.log(formatter.formatTests(suggestions));
24
+ }
25
+ catch (error) {
26
+ console.error(formatter.formatError(error));
27
+ process.exit(1);
28
+ }
29
+ });
30
+ //# sourceMappingURL=tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tests.js","sourceRoot":"","sources":["../../../src/cli/commands/tests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,CAAC;KAC7D,MAAM,CAAC,UAAU,EAAE,6BAA6B,CAAC;KACjD,WAAW,CAAC,OAAO,EAAE;;;;;CAKvB,CAAC;KACC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IACjC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAEnC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;YAC5C,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,KAAc,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const watchCommand: Command;
3
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,YAAY,SAsIrB,CAAC"}
@@ -0,0 +1,131 @@
1
+ import { Command } from 'commander';
2
+ import * as fs from 'node:fs';
3
+ import * as path from 'node:path';
4
+ import chalk from 'chalk';
5
+ import { CodexiaEngine } from '../engine.js';
6
+ import { Formatter } from '../formatter.js';
7
+ export const watchCommand = new Command('watch')
8
+ .description('Watch for file changes and re-run analysis')
9
+ .option('--signals', 'Run signals analysis on changes')
10
+ .option('--impact', 'Run impact analysis on changes')
11
+ .option('--check', 'Run convention check on changes')
12
+ .addHelpText('after', `
13
+ Examples:
14
+ $ codexia watch Watch and scan on changes
15
+ $ codexia watch --signals Watch and run signal analysis
16
+ $ codexia watch --impact Watch and run impact analysis
17
+ $ codexia watch --check Watch and run convention checks
18
+ `)
19
+ .action(async (options, command) => {
20
+ const globalOpts = command.parent?.opts() || {};
21
+ const formatter = new Formatter(globalOpts.json);
22
+ const cwd = process.cwd();
23
+ console.log(chalk.blue('👀') + ' Watching for changes...');
24
+ console.log(chalk.gray(` Directory: ${cwd}`));
25
+ console.log(chalk.gray(' Press Ctrl+C to stop\n'));
26
+ let engine = new CodexiaEngine();
27
+ let debounceTimer = null;
28
+ let isProcessing = false;
29
+ const runAnalysis = async (configChanged = false) => {
30
+ if (isProcessing)
31
+ return;
32
+ isProcessing = true;
33
+ try {
34
+ const timestamp = new Date().toLocaleTimeString();
35
+ // Recreate engine if configuration files changed
36
+ if (configChanged) {
37
+ console.log(chalk.gray(`[${timestamp}]`) + ' Configuration changed, reloading engine...\n');
38
+ engine = new CodexiaEngine();
39
+ }
40
+ else {
41
+ console.log(chalk.gray(`[${timestamp}]`) + ' Change detected, analyzing...\n');
42
+ }
43
+ if (options.signals) {
44
+ const signals = await engine.analyzeSignals({});
45
+ console.log(formatter.formatSignals(signals));
46
+ }
47
+ else if (options.impact) {
48
+ const impact = await engine.analyzeImpact({});
49
+ const diff = await engine.getDiff();
50
+ console.log(formatter.formatImpact(impact, diff));
51
+ }
52
+ else if (options.check) {
53
+ const violations = await engine.checkConventions({});
54
+ console.log(formatter.formatConventions(violations));
55
+ }
56
+ else {
57
+ const result = await engine.scan();
58
+ console.log(formatter.formatScan(result));
59
+ }
60
+ console.log(chalk.gray('Watching for changes...\n'));
61
+ }
62
+ catch (error) {
63
+ console.error(formatter.formatError(error));
64
+ }
65
+ finally {
66
+ isProcessing = false;
67
+ }
68
+ };
69
+ // Initial run
70
+ await runAnalysis(false);
71
+ // Set up file watcher - only watch specific source directories
72
+ const watchDirs = ['src', 'lib', 'app'].filter(dir => {
73
+ try {
74
+ return fs.statSync(path.join(cwd, dir)).isDirectory();
75
+ }
76
+ catch {
77
+ return false;
78
+ }
79
+ });
80
+ // Also watch .codexia directory if it exists for configuration changes
81
+ const codexiaDir = path.join(cwd, '.codexia');
82
+ let watchCodexia = false;
83
+ try {
84
+ if (fs.statSync(codexiaDir).isDirectory()) {
85
+ watchDirs.push('.codexia');
86
+ watchCodexia = true;
87
+ }
88
+ }
89
+ catch {
90
+ // .codexia directory doesn't exist
91
+ }
92
+ const watchers = [];
93
+ for (const dir of watchDirs) {
94
+ try {
95
+ const watcher = fs.watch(path.join(cwd, dir), { recursive: true }, (_eventType, filename) => {
96
+ if (!filename)
97
+ return;
98
+ // Check if it's a .codexia configuration file change
99
+ const isConfigChange = watchCodexia &&
100
+ (filename.includes('.codexia') &&
101
+ (filename.endsWith('.md') || filename.endsWith('template.md')));
102
+ // Ignore certain files
103
+ if (filename.includes('node_modules') ||
104
+ filename.includes('.git') ||
105
+ filename.includes('.codexia/index-cache.json') ||
106
+ filename.includes('dist') ||
107
+ filename.endsWith('.log')) {
108
+ return;
109
+ }
110
+ // Debounce
111
+ if (debounceTimer) {
112
+ clearTimeout(debounceTimer);
113
+ }
114
+ debounceTimer = setTimeout(() => runAnalysis(isConfigChange), 300);
115
+ });
116
+ watchers.push(watcher);
117
+ }
118
+ catch {
119
+ // Directory doesn't exist or can't be watched
120
+ }
121
+ }
122
+ // Handle Ctrl+C
123
+ process.on('SIGINT', () => {
124
+ console.log('\n' + chalk.yellow('Stopping watch mode...'));
125
+ for (const watcher of watchers) {
126
+ watcher.close();
127
+ }
128
+ process.exit(0);
129
+ });
130
+ });
131
+ //# sourceMappingURL=watch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"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"}