@defai.digital/ax-cli 3.15.21 → 3.15.24

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 (261) hide show
  1. package/README.md +22 -2
  2. package/dist/agent/agent-executor.d.ts +1 -1
  3. package/dist/agent/agent-executor.js +15 -17
  4. package/dist/agent/agent-executor.js.map +1 -1
  5. package/dist/agent/execution/tool-executor.d.ts +6 -0
  6. package/dist/agent/execution/tool-executor.js +16 -1
  7. package/dist/agent/execution/tool-executor.js.map +1 -1
  8. package/dist/agent/llm-agent.js +91 -22
  9. package/dist/agent/llm-agent.js.map +1 -1
  10. package/dist/agent/parallel-tools.d.ts +65 -0
  11. package/dist/agent/parallel-tools.js +146 -0
  12. package/dist/agent/parallel-tools.js.map +1 -0
  13. package/dist/llm/tools.js +1 -1
  14. package/dist/llm/tools.js.map +1 -1
  15. package/dist/ui/components/chat-interface.js +14 -0
  16. package/dist/ui/components/chat-interface.js.map +1 -1
  17. package/dist/ui/hooks/use-input-handler.js +2 -2
  18. package/dist/ui/hooks/use-input-handler.js.map +1 -1
  19. package/dist/ui/utils/image-handler.js +8 -5
  20. package/dist/ui/utils/image-handler.js.map +1 -1
  21. package/package.json +1 -1
  22. package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.d.ts +0 -29
  23. package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.js +0 -103
  24. package/dist/analyzers/architecture/anti-pattern-detectors/god-object-detector.js.map +0 -1
  25. package/dist/analyzers/architecture/architecture-analyzer.d.ts +0 -58
  26. package/dist/analyzers/architecture/architecture-analyzer.js +0 -276
  27. package/dist/analyzers/architecture/architecture-analyzer.js.map +0 -1
  28. package/dist/analyzers/architecture/index.d.ts +0 -12
  29. package/dist/analyzers/architecture/index.js +0 -14
  30. package/dist/analyzers/architecture/index.js.map +0 -1
  31. package/dist/analyzers/architecture/pattern-detectors/base-detector.d.ts +0 -27
  32. package/dist/analyzers/architecture/pattern-detectors/base-detector.js +0 -31
  33. package/dist/analyzers/architecture/pattern-detectors/base-detector.js.map +0 -1
  34. package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.d.ts +0 -11
  35. package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.js +0 -57
  36. package/dist/analyzers/architecture/pattern-detectors/clean-architecture-detector.js.map +0 -1
  37. package/dist/analyzers/architecture/pattern-detectors/mvc-detector.d.ts +0 -11
  38. package/dist/analyzers/architecture/pattern-detectors/mvc-detector.js +0 -43
  39. package/dist/analyzers/architecture/pattern-detectors/mvc-detector.js.map +0 -1
  40. package/dist/analyzers/architecture/pattern-detectors/repository-detector.d.ts +0 -11
  41. package/dist/analyzers/architecture/pattern-detectors/repository-detector.js +0 -49
  42. package/dist/analyzers/architecture/pattern-detectors/repository-detector.js.map +0 -1
  43. package/dist/analyzers/architecture/project-structure-scanner.d.ts +0 -54
  44. package/dist/analyzers/architecture/project-structure-scanner.js +0 -204
  45. package/dist/analyzers/architecture/project-structure-scanner.js.map +0 -1
  46. package/dist/analyzers/ast/index.d.ts +0 -13
  47. package/dist/analyzers/ast/index.js +0 -16
  48. package/dist/analyzers/ast/index.js.map +0 -1
  49. package/dist/analyzers/ast/language-parser.d.ts +0 -59
  50. package/dist/analyzers/ast/language-parser.js +0 -107
  51. package/dist/analyzers/ast/language-parser.js.map +0 -1
  52. package/dist/analyzers/ast/multi-language-parser.d.ts +0 -79
  53. package/dist/analyzers/ast/multi-language-parser.js +0 -157
  54. package/dist/analyzers/ast/multi-language-parser.js.map +0 -1
  55. package/dist/analyzers/ast/node-helpers.d.ts +0 -81
  56. package/dist/analyzers/ast/node-helpers.js +0 -128
  57. package/dist/analyzers/ast/node-helpers.js.map +0 -1
  58. package/dist/analyzers/ast/parser.d.ts +0 -60
  59. package/dist/analyzers/ast/parser.js +0 -305
  60. package/dist/analyzers/ast/parser.js.map +0 -1
  61. package/dist/analyzers/ast/traverser.d.ts +0 -67
  62. package/dist/analyzers/ast/traverser.js +0 -156
  63. package/dist/analyzers/ast/traverser.js.map +0 -1
  64. package/dist/analyzers/ast/types.d.ts +0 -107
  65. package/dist/analyzers/ast/types.js +0 -7
  66. package/dist/analyzers/ast/types.js.map +0 -1
  67. package/dist/analyzers/best-practices/base-rule.d.ts +0 -45
  68. package/dist/analyzers/best-practices/base-rule.js +0 -45
  69. package/dist/analyzers/best-practices/base-rule.js.map +0 -1
  70. package/dist/analyzers/best-practices/best-practice-validator.d.ts +0 -35
  71. package/dist/analyzers/best-practices/best-practice-validator.js +0 -181
  72. package/dist/analyzers/best-practices/best-practice-validator.js.map +0 -1
  73. package/dist/analyzers/best-practices/index.d.ts +0 -10
  74. package/dist/analyzers/best-practices/index.js +0 -11
  75. package/dist/analyzers/best-practices/index.js.map +0 -1
  76. package/dist/analyzers/best-practices/rules/index.d.ts +0 -7
  77. package/dist/analyzers/best-practices/rules/index.js +0 -56
  78. package/dist/analyzers/best-practices/rules/index.js.map +0 -1
  79. package/dist/analyzers/best-practices/rules/typescript/consistent-naming.d.ts +0 -17
  80. package/dist/analyzers/best-practices/rules/typescript/consistent-naming.js +0 -41
  81. package/dist/analyzers/best-practices/rules/typescript/consistent-naming.js.map +0 -1
  82. package/dist/analyzers/best-practices/rules/typescript/function-complexity.d.ts +0 -27
  83. package/dist/analyzers/best-practices/rules/typescript/function-complexity.js +0 -76
  84. package/dist/analyzers/best-practices/rules/typescript/function-complexity.js.map +0 -1
  85. package/dist/analyzers/best-practices/rules/typescript/index.d.ts +0 -15
  86. package/dist/analyzers/best-practices/rules/typescript/index.js +0 -16
  87. package/dist/analyzers/best-practices/rules/typescript/index.js.map +0 -1
  88. package/dist/analyzers/best-practices/rules/typescript/max-file-length.d.ts +0 -18
  89. package/dist/analyzers/best-practices/rules/typescript/max-file-length.js +0 -25
  90. package/dist/analyzers/best-practices/rules/typescript/max-file-length.js.map +0 -1
  91. package/dist/analyzers/best-practices/rules/typescript/no-any-type.d.ts +0 -17
  92. package/dist/analyzers/best-practices/rules/typescript/no-any-type.js +0 -27
  93. package/dist/analyzers/best-practices/rules/typescript/no-any-type.js.map +0 -1
  94. package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.d.ts +0 -18
  95. package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.js +0 -39
  96. package/dist/analyzers/best-practices/rules/typescript/no-implicit-any.js.map +0 -1
  97. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.d.ts +0 -17
  98. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js +0 -38
  99. package/dist/analyzers/best-practices/rules/typescript/no-magic-numbers.js.map +0 -1
  100. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.d.ts +0 -17
  101. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js +0 -38
  102. package/dist/analyzers/best-practices/rules/typescript/no-unused-vars.js.map +0 -1
  103. package/dist/analyzers/best-practices/rules/typescript/prefer-const.d.ts +0 -17
  104. package/dist/analyzers/best-practices/rules/typescript/prefer-const.js +0 -35
  105. package/dist/analyzers/best-practices/rules/typescript/prefer-const.js.map +0 -1
  106. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.d.ts +0 -17
  107. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js +0 -36
  108. package/dist/analyzers/best-practices/rules/typescript/prefer-readonly.js.map +0 -1
  109. package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.d.ts +0 -17
  110. package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.js +0 -27
  111. package/dist/analyzers/best-practices/rules/typescript/proper-error-handling.js.map +0 -1
  112. package/dist/analyzers/best-practices/types.d.ts +0 -86
  113. package/dist/analyzers/best-practices/types.js +0 -7
  114. package/dist/analyzers/best-practices/types.js.map +0 -1
  115. package/dist/analyzers/cache/analysis-cache.d.ts +0 -41
  116. package/dist/analyzers/cache/analysis-cache.js +0 -84
  117. package/dist/analyzers/cache/analysis-cache.js.map +0 -1
  118. package/dist/analyzers/code-smells/base-smell-detector.d.ts +0 -30
  119. package/dist/analyzers/code-smells/base-smell-detector.js +0 -44
  120. package/dist/analyzers/code-smells/base-smell-detector.js.map +0 -1
  121. package/dist/analyzers/code-smells/code-smell-analyzer.d.ts +0 -30
  122. package/dist/analyzers/code-smells/code-smell-analyzer.js +0 -167
  123. package/dist/analyzers/code-smells/code-smell-analyzer.js.map +0 -1
  124. package/dist/analyzers/code-smells/detectors/data-clumps-detector.d.ts +0 -11
  125. package/dist/analyzers/code-smells/detectors/data-clumps-detector.js +0 -64
  126. package/dist/analyzers/code-smells/detectors/data-clumps-detector.js.map +0 -1
  127. package/dist/analyzers/code-smells/detectors/dead-code-detector.d.ts +0 -11
  128. package/dist/analyzers/code-smells/detectors/dead-code-detector.js +0 -58
  129. package/dist/analyzers/code-smells/detectors/dead-code-detector.js.map +0 -1
  130. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.d.ts +0 -11
  131. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js +0 -69
  132. package/dist/analyzers/code-smells/detectors/duplicate-code-detector.js.map +0 -1
  133. package/dist/analyzers/code-smells/detectors/feature-envy-detector.d.ts +0 -11
  134. package/dist/analyzers/code-smells/detectors/feature-envy-detector.js +0 -70
  135. package/dist/analyzers/code-smells/detectors/feature-envy-detector.js.map +0 -1
  136. package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.d.ts +0 -11
  137. package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.js +0 -59
  138. package/dist/analyzers/code-smells/detectors/inappropriate-intimacy-detector.js.map +0 -1
  139. package/dist/analyzers/code-smells/detectors/large-class-detector.d.ts +0 -13
  140. package/dist/analyzers/code-smells/detectors/large-class-detector.js +0 -61
  141. package/dist/analyzers/code-smells/detectors/large-class-detector.js.map +0 -1
  142. package/dist/analyzers/code-smells/detectors/long-method-detector.d.ts +0 -12
  143. package/dist/analyzers/code-smells/detectors/long-method-detector.js +0 -55
  144. package/dist/analyzers/code-smells/detectors/long-method-detector.js.map +0 -1
  145. package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.d.ts +0 -12
  146. package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.js +0 -53
  147. package/dist/analyzers/code-smells/detectors/long-parameter-list-detector.js.map +0 -1
  148. package/dist/analyzers/code-smells/detectors/magic-numbers-detector.d.ts +0 -12
  149. package/dist/analyzers/code-smells/detectors/magic-numbers-detector.js +0 -56
  150. package/dist/analyzers/code-smells/detectors/magic-numbers-detector.js.map +0 -1
  151. package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.d.ts +0 -13
  152. package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.js +0 -77
  153. package/dist/analyzers/code-smells/detectors/nested-conditionals-detector.js.map +0 -1
  154. package/dist/analyzers/code-smells/index.d.ts +0 -16
  155. package/dist/analyzers/code-smells/index.js +0 -19
  156. package/dist/analyzers/code-smells/index.js.map +0 -1
  157. package/dist/analyzers/code-smells/types.d.ts +0 -82
  158. package/dist/analyzers/code-smells/types.js +0 -30
  159. package/dist/analyzers/code-smells/types.js.map +0 -1
  160. package/dist/analyzers/dependency/circular-detector.d.ts +0 -17
  161. package/dist/analyzers/dependency/circular-detector.js +0 -73
  162. package/dist/analyzers/dependency/circular-detector.js.map +0 -1
  163. package/dist/analyzers/dependency/coupling-calculator.d.ts +0 -24
  164. package/dist/analyzers/dependency/coupling-calculator.js +0 -86
  165. package/dist/analyzers/dependency/coupling-calculator.js.map +0 -1
  166. package/dist/analyzers/dependency/dependency-analyzer.d.ts +0 -44
  167. package/dist/analyzers/dependency/dependency-analyzer.js +0 -218
  168. package/dist/analyzers/dependency/dependency-analyzer.js.map +0 -1
  169. package/dist/analyzers/dependency/dependency-graph.d.ts +0 -57
  170. package/dist/analyzers/dependency/dependency-graph.js +0 -198
  171. package/dist/analyzers/dependency/dependency-graph.js.map +0 -1
  172. package/dist/analyzers/dependency/index.d.ts +0 -8
  173. package/dist/analyzers/dependency/index.js +0 -8
  174. package/dist/analyzers/dependency/index.js.map +0 -1
  175. package/dist/analyzers/dependency/types.d.ts +0 -105
  176. package/dist/analyzers/dependency/types.js +0 -5
  177. package/dist/analyzers/dependency/types.js.map +0 -1
  178. package/dist/analyzers/errors.d.ts +0 -51
  179. package/dist/analyzers/errors.js +0 -79
  180. package/dist/analyzers/errors.js.map +0 -1
  181. package/dist/analyzers/git/churn-calculator.d.ts +0 -36
  182. package/dist/analyzers/git/churn-calculator.js +0 -257
  183. package/dist/analyzers/git/churn-calculator.js.map +0 -1
  184. package/dist/analyzers/git/git-analyzer.d.ts +0 -19
  185. package/dist/analyzers/git/git-analyzer.js +0 -79
  186. package/dist/analyzers/git/git-analyzer.js.map +0 -1
  187. package/dist/analyzers/git/hotspot-detector.d.ts +0 -34
  188. package/dist/analyzers/git/hotspot-detector.js +0 -173
  189. package/dist/analyzers/git/hotspot-detector.js.map +0 -1
  190. package/dist/analyzers/git/index.d.ts +0 -7
  191. package/dist/analyzers/git/index.js +0 -7
  192. package/dist/analyzers/git/index.js.map +0 -1
  193. package/dist/analyzers/git/types.d.ts +0 -88
  194. package/dist/analyzers/git/types.js +0 -5
  195. package/dist/analyzers/git/types.js.map +0 -1
  196. package/dist/analyzers/metrics/halstead-calculator.d.ts +0 -30
  197. package/dist/analyzers/metrics/halstead-calculator.js +0 -150
  198. package/dist/analyzers/metrics/halstead-calculator.js.map +0 -1
  199. package/dist/analyzers/metrics/index.d.ts +0 -9
  200. package/dist/analyzers/metrics/index.js +0 -9
  201. package/dist/analyzers/metrics/index.js.map +0 -1
  202. package/dist/analyzers/metrics/maintainability-calculator.d.ts +0 -17
  203. package/dist/analyzers/metrics/maintainability-calculator.js +0 -46
  204. package/dist/analyzers/metrics/maintainability-calculator.js.map +0 -1
  205. package/dist/analyzers/metrics/metrics-analyzer.d.ts +0 -32
  206. package/dist/analyzers/metrics/metrics-analyzer.js +0 -144
  207. package/dist/analyzers/metrics/metrics-analyzer.js.map +0 -1
  208. package/dist/analyzers/metrics/types.d.ts +0 -67
  209. package/dist/analyzers/metrics/types.js +0 -5
  210. package/dist/analyzers/metrics/types.js.map +0 -1
  211. package/dist/analyzers/security/base-detector.d.ts +0 -58
  212. package/dist/analyzers/security/base-detector.js +0 -104
  213. package/dist/analyzers/security/base-detector.js.map +0 -1
  214. package/dist/analyzers/security/detectors/command-injection-detector.d.ts +0 -12
  215. package/dist/analyzers/security/detectors/command-injection-detector.js +0 -84
  216. package/dist/analyzers/security/detectors/command-injection-detector.js.map +0 -1
  217. package/dist/analyzers/security/detectors/hardcoded-secrets-detector.d.ts +0 -16
  218. package/dist/analyzers/security/detectors/hardcoded-secrets-detector.js +0 -140
  219. package/dist/analyzers/security/detectors/hardcoded-secrets-detector.js.map +0 -1
  220. package/dist/analyzers/security/detectors/insecure-deserialization-detector.d.ts +0 -12
  221. package/dist/analyzers/security/detectors/insecure-deserialization-detector.js +0 -109
  222. package/dist/analyzers/security/detectors/insecure-deserialization-detector.js.map +0 -1
  223. package/dist/analyzers/security/detectors/insecure-random-detector.d.ts +0 -12
  224. package/dist/analyzers/security/detectors/insecure-random-detector.js +0 -61
  225. package/dist/analyzers/security/detectors/insecure-random-detector.js.map +0 -1
  226. package/dist/analyzers/security/detectors/path-traversal-detector.d.ts +0 -12
  227. package/dist/analyzers/security/detectors/path-traversal-detector.js +0 -82
  228. package/dist/analyzers/security/detectors/path-traversal-detector.js.map +0 -1
  229. package/dist/analyzers/security/detectors/sql-injection-detector.d.ts +0 -12
  230. package/dist/analyzers/security/detectors/sql-injection-detector.js +0 -88
  231. package/dist/analyzers/security/detectors/sql-injection-detector.js.map +0 -1
  232. package/dist/analyzers/security/detectors/weak-crypto-detector.d.ts +0 -12
  233. package/dist/analyzers/security/detectors/weak-crypto-detector.js +0 -104
  234. package/dist/analyzers/security/detectors/weak-crypto-detector.js.map +0 -1
  235. package/dist/analyzers/security/detectors/xss-detector.d.ts +0 -12
  236. package/dist/analyzers/security/detectors/xss-detector.js +0 -90
  237. package/dist/analyzers/security/detectors/xss-detector.js.map +0 -1
  238. package/dist/analyzers/security/index.d.ts +0 -16
  239. package/dist/analyzers/security/index.js +0 -18
  240. package/dist/analyzers/security/index.js.map +0 -1
  241. package/dist/analyzers/security/security-analyzer.d.ts +0 -38
  242. package/dist/analyzers/security/security-analyzer.js +0 -215
  243. package/dist/analyzers/security/security-analyzer.js.map +0 -1
  244. package/dist/analyzers/security/types.d.ts +0 -95
  245. package/dist/analyzers/security/types.js +0 -7
  246. package/dist/analyzers/security/types.js.map +0 -1
  247. package/dist/tools/analysis-tools/architecture-tool.d.ts +0 -46
  248. package/dist/tools/analysis-tools/architecture-tool.js +0 -124
  249. package/dist/tools/analysis-tools/architecture-tool.js.map +0 -1
  250. package/dist/tools/analysis-tools/validation-tool.d.ts +0 -51
  251. package/dist/tools/analysis-tools/validation-tool.js +0 -121
  252. package/dist/tools/analysis-tools/validation-tool.js.map +0 -1
  253. package/dist/tools/analysis-tools.d.ts +0 -73
  254. package/dist/tools/analysis-tools.js +0 -422
  255. package/dist/tools/analysis-tools.js.map +0 -1
  256. package/dist/types/analysis.d.ts +0 -177
  257. package/dist/types/analysis.js +0 -8
  258. package/dist/types/analysis.js.map +0 -1
  259. package/dist/utils/analysis-logger.d.ts +0 -50
  260. package/dist/utils/analysis-logger.js +0 -73
  261. package/dist/utils/analysis-logger.js.map +0 -1
@@ -1,103 +0,0 @@
1
- /**
2
- * God Object Anti-Pattern Detector
3
- *
4
- * Detects files that are too large and have too many responsibilities.
5
- * Indicates violation of Single Responsibility Principle.
6
- */
7
- import { promises as fs } from 'fs';
8
- export class GodObjectDetector {
9
- LINE_THRESHOLD = 500;
10
- METHOD_THRESHOLD = 20;
11
- LARGE_LINE_THRESHOLD = 1000;
12
- async detect(structure) {
13
- const antiPatterns = [];
14
- // Find large source files
15
- const largeFiles = structure.files.filter((f) => f.lines > this.LINE_THRESHOLD && this.isSourceFile(f));
16
- // Analyze each large file
17
- for (const file of largeFiles) {
18
- try {
19
- const content = await fs.readFile(file.path, 'utf-8');
20
- const methodCount = this.countMethods(content);
21
- const classCount = this.countClasses(content);
22
- // Only flag as God Object if it has many methods
23
- if (methodCount > this.METHOD_THRESHOLD) {
24
- antiPatterns.push(Object.freeze({
25
- name: 'God Object',
26
- severity: this.calculateSeverity(file.lines, methodCount),
27
- locations: [file.relativePath],
28
- description: `File has ${file.lines} lines and ${methodCount} methods, indicating a God Object anti-pattern`,
29
- suggestion: 'Consider splitting this file into smaller, focused modules following the Single Responsibility Principle',
30
- impact: 'Reduces maintainability, makes testing difficult, increases coupling, and violates SOLID principles',
31
- metadata: Object.freeze({
32
- lines: file.lines,
33
- methods: methodCount,
34
- classes: classCount,
35
- linesPerMethod: methodCount > 0 ? Math.round(file.lines / methodCount) : 0,
36
- }),
37
- }));
38
- }
39
- }
40
- catch (error) {
41
- // Skip files that can't be read
42
- console.warn(`Failed to analyze file ${file.relativePath}:`, error.message);
43
- }
44
- }
45
- return antiPatterns;
46
- }
47
- /**
48
- * Check if file is a source code file
49
- */
50
- isSourceFile(file) {
51
- return /\.(ts|js|tsx|jsx)$/.test(file.extension);
52
- }
53
- /**
54
- * Count methods/functions in file
55
- */
56
- countMethods(content) {
57
- let count = 0;
58
- // Function declarations
59
- const functionDeclarations = content.match(/function\s+\w+\s*\(/g);
60
- if (functionDeclarations)
61
- count += functionDeclarations.length;
62
- // Arrow functions assigned to variables/constants
63
- const arrowFunctions = content.match(/(const|let|var)\s+\w+\s*=\s*\([^)]*\)\s*=>/g);
64
- if (arrowFunctions)
65
- count += arrowFunctions.length;
66
- // Class methods
67
- const classMethods = content.match(/^\s+(public|private|protected|async|static)*\s*\w+\s*\([^)]*\)\s*[:{]/gm);
68
- if (classMethods)
69
- count += classMethods.length;
70
- // Object methods
71
- const objectMethods = content.match(/\w+\s*:\s*(async\s+)?function\s*\(/g);
72
- if (objectMethods)
73
- count += objectMethods.length;
74
- return count;
75
- }
76
- /**
77
- * Count classes in file
78
- */
79
- countClasses(content) {
80
- const classes = content.match(/class\s+\w+/g);
81
- return classes ? classes.length : 0;
82
- }
83
- /**
84
- * Calculate severity based on file size and method count
85
- */
86
- calculateSeverity(lines, methods) {
87
- // Critical: Extremely large or many methods
88
- if (lines > this.LARGE_LINE_THRESHOLD || methods > 50) {
89
- return 'critical';
90
- }
91
- // High: Very large
92
- if (lines > 750 || methods > 30) {
93
- return 'high';
94
- }
95
- // Medium: Large
96
- if (lines > 600 || methods > 25) {
97
- return 'medium';
98
- }
99
- // Low: Moderately large
100
- return 'low';
101
- }
102
- }
103
- //# sourceMappingURL=god-object-detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"god-object-detector.js","sourceRoot":"","sources":["../../../../src/analyzers/architecture/anti-pattern-detectors/god-object-detector.ts"],"names":[],"mappings":"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"}
@@ -1,58 +0,0 @@
1
- /**
2
- * Architecture Analyzer
3
- *
4
- * Main orchestrator for architecture analysis.
5
- * Coordinates pattern detection, anti-pattern detection, and generates recommendations.
6
- */
7
- import type { ArchitectureAnalysis, AnalysisDepth } from '../../types/analysis.js';
8
- import type { Logger } from '../../utils/analysis-logger.js';
9
- export declare class ArchitectureAnalyzer {
10
- private readonly scanner;
11
- private readonly cache;
12
- private readonly logger;
13
- constructor(logger?: Logger);
14
- /**
15
- * Analyze project architecture
16
- */
17
- analyzeProject(projectPath: string, depth?: AnalysisDepth): Promise<ArchitectureAnalysis>;
18
- /**
19
- * Detect architectural patterns
20
- */
21
- private detectPatterns;
22
- /**
23
- * Detect anti-patterns
24
- */
25
- private detectAntiPatterns;
26
- /**
27
- * Generate architecture recommendations
28
- */
29
- private generateRecommendations;
30
- /**
31
- * Calculate overall architecture score (0-100)
32
- */
33
- private calculateArchitectureScore;
34
- /**
35
- * Generate analysis summary
36
- */
37
- private generateSummary;
38
- /**
39
- * Calculate project hash for cache validation
40
- */
41
- private calculateProjectHash;
42
- /**
43
- * Estimate effort required to fix anti-pattern
44
- */
45
- private estimateEffort;
46
- /**
47
- * Get related patterns for anti-pattern remediation
48
- */
49
- private getRelatedPatterns;
50
- /**
51
- * Get letter grade from score
52
- */
53
- private getGrade;
54
- /**
55
- * Clear analysis cache
56
- */
57
- clearCache(): void;
58
- }
@@ -1,276 +0,0 @@
1
- /**
2
- * Architecture Analyzer
3
- *
4
- * Main orchestrator for architecture analysis.
5
- * Coordinates pattern detection, anti-pattern detection, and generates recommendations.
6
- */
7
- import crypto from 'crypto';
8
- import { ProjectStructureScanner } from './project-structure-scanner.js';
9
- import { AnalysisCache } from '../cache/analysis-cache.js';
10
- import { createLogger } from '../../utils/analysis-logger.js';
11
- // Pattern Detectors
12
- import { MVCDetector } from './pattern-detectors/mvc-detector.js';
13
- import { CleanArchitectureDetector } from './pattern-detectors/clean-architecture-detector.js';
14
- import { RepositoryDetector } from './pattern-detectors/repository-detector.js';
15
- // Anti-Pattern Detectors
16
- import { GodObjectDetector } from './anti-pattern-detectors/god-object-detector.js';
17
- export class ArchitectureAnalyzer {
18
- scanner = new ProjectStructureScanner();
19
- cache = new AnalysisCache();
20
- logger;
21
- constructor(logger) {
22
- this.logger = logger || createLogger();
23
- }
24
- /**
25
- * Analyze project architecture
26
- */
27
- async analyzeProject(projectPath, depth = 'quick') {
28
- const startTime = Date.now();
29
- this.logger.info('Starting architecture analysis', { projectPath, depth });
30
- try {
31
- // Check cache
32
- const hash = await this.calculateProjectHash(projectPath);
33
- const cached = await this.cache.get(projectPath, hash);
34
- if (cached) {
35
- this.logger.info('Returning cached analysis', { projectPath });
36
- return cached;
37
- }
38
- // Scan project structure
39
- const structure = await this.scanner.scan(projectPath);
40
- this.logger.debug('Project structure scanned', {
41
- files: structure.totalFiles,
42
- lines: structure.totalLines,
43
- });
44
- // Detect patterns in parallel
45
- const patterns = await this.detectPatterns(structure);
46
- this.logger.debug('Patterns detected', { count: patterns.length });
47
- // Detect anti-patterns in parallel (only in deep mode)
48
- const antiPatterns = depth === 'deep' ? await this.detectAntiPatterns(structure) : [];
49
- this.logger.debug('Anti-patterns detected', { count: antiPatterns.length });
50
- // Generate recommendations
51
- const recommendations = this.generateRecommendations(patterns, antiPatterns);
52
- // Calculate score
53
- const score = this.calculateArchitectureScore(patterns, antiPatterns);
54
- // Build result
55
- const result = Object.freeze({
56
- timestamp: Date.now(),
57
- durationMs: Date.now() - startTime,
58
- projectPath,
59
- detectedPatterns: Object.freeze(patterns),
60
- antiPatterns: Object.freeze(antiPatterns),
61
- recommendations: Object.freeze(recommendations),
62
- architectureScore: score,
63
- summary: this.generateSummary(patterns, antiPatterns, score),
64
- });
65
- // Cache result
66
- this.cache.set(projectPath, result, hash);
67
- this.logger.info('Architecture analysis completed', {
68
- projectPath,
69
- duration: result.durationMs,
70
- patterns: patterns.length,
71
- antiPatterns: antiPatterns.length,
72
- score,
73
- });
74
- return result;
75
- }
76
- catch (error) {
77
- this.logger.error('Architecture analysis failed', error, {
78
- projectPath,
79
- });
80
- throw error;
81
- }
82
- }
83
- /**
84
- * Detect architectural patterns
85
- */
86
- async detectPatterns(structure) {
87
- const detectors = [
88
- new MVCDetector(),
89
- new CleanArchitectureDetector(),
90
- new RepositoryDetector(),
91
- ];
92
- // Execute all detectors in parallel
93
- const results = await Promise.all(detectors.map(async (detector) => {
94
- try {
95
- return detector.detect(structure);
96
- }
97
- catch (error) {
98
- this.logger.warn(`Pattern detector ${detector.constructor.name} failed`, { error: error.message });
99
- return null;
100
- }
101
- }));
102
- return results.filter((p) => p !== null);
103
- }
104
- /**
105
- * Detect anti-patterns
106
- */
107
- async detectAntiPatterns(structure) {
108
- const detectors = [new GodObjectDetector()];
109
- // Execute in parallel and flatten results
110
- const results = await Promise.all(detectors.map(async (detector) => {
111
- try {
112
- return await detector.detect(structure);
113
- }
114
- catch (error) {
115
- this.logger.warn(`Anti-pattern detector ${detector.constructor.name} failed`, { error: error.message });
116
- return [];
117
- }
118
- }));
119
- return results.flat();
120
- }
121
- /**
122
- * Generate architecture recommendations
123
- */
124
- generateRecommendations(patterns, antiPatterns) {
125
- const recommendations = [];
126
- // If no patterns detected, suggest adopting one
127
- if (patterns.length === 0) {
128
- recommendations.push(Object.freeze({
129
- title: 'Adopt an architectural pattern',
130
- priority: 'medium',
131
- description: 'No clear architectural pattern detected. Consider adopting one for better code organization.',
132
- rationale: 'Architectural patterns improve maintainability, testability, and team collaboration',
133
- estimatedEffort: 'high',
134
- benefits: Object.freeze([
135
- 'Improved code organization',
136
- 'Better separation of concerns',
137
- 'Easier onboarding for new developers',
138
- 'Reduced coupling between components',
139
- ]),
140
- tradeoffs: Object.freeze([
141
- 'Initial learning curve',
142
- 'Refactoring required',
143
- 'More boilerplate code initially',
144
- ]),
145
- relatedPatterns: Object.freeze([
146
- 'MVC',
147
- 'Clean Architecture',
148
- 'Layered Architecture',
149
- ]),
150
- }));
151
- }
152
- // For each anti-pattern, create a recommendation
153
- for (const antiPattern of antiPatterns) {
154
- recommendations.push(Object.freeze({
155
- title: `Fix ${antiPattern.name}`,
156
- priority: antiPattern.severity,
157
- description: antiPattern.suggestion,
158
- rationale: antiPattern.impact,
159
- estimatedEffort: this.estimateEffort(antiPattern),
160
- benefits: Object.freeze([
161
- 'Improved maintainability',
162
- 'Better testability',
163
- 'Reduced coupling',
164
- 'Easier to understand and modify',
165
- ]),
166
- tradeoffs: Object.freeze(['Requires refactoring time']),
167
- relatedPatterns: Object.freeze(this.getRelatedPatterns(antiPattern)),
168
- }));
169
- }
170
- return recommendations;
171
- }
172
- /**
173
- * Calculate overall architecture score (0-100)
174
- */
175
- calculateArchitectureScore(patterns, antiPatterns) {
176
- let score = 50; // Base score
177
- // Bonus for detected patterns
178
- score += patterns.length * 10;
179
- score += patterns.reduce((sum, p) => sum + p.confidence * 10, 0);
180
- // Penalty for anti-patterns
181
- const severityPenalty = {
182
- critical: 25,
183
- high: 15,
184
- medium: 10,
185
- low: 5,
186
- info: 0,
187
- };
188
- for (const antiPattern of antiPatterns) {
189
- score -= severityPenalty[antiPattern.severity] || 0;
190
- }
191
- return Math.max(0, Math.min(100, Math.round(score)));
192
- }
193
- /**
194
- * Generate analysis summary
195
- */
196
- generateSummary(patterns, antiPatterns, score) {
197
- const parts = [];
198
- if (patterns.length > 0) {
199
- const patternNames = patterns.map((p) => p.name).join(', ');
200
- parts.push(`Detected ${patterns.length} architectural pattern${patterns.length === 1 ? '' : 's'}: ${patternNames}`);
201
- }
202
- else {
203
- parts.push('No clear architectural patterns detected');
204
- }
205
- if (antiPatterns.length > 0) {
206
- const antiPatternNames = antiPatterns.map((ap) => ap.name).join(', ');
207
- parts.push(`Found ${antiPatterns.length} anti-pattern${antiPatterns.length === 1 ? '' : 's'}: ${antiPatternNames}`);
208
- }
209
- const grade = this.getGrade(score);
210
- parts.push(`Overall architecture score: ${score}/100 (Grade: ${grade})`);
211
- return parts.join('. ');
212
- }
213
- /**
214
- * Calculate project hash for cache validation
215
- */
216
- async calculateProjectHash(projectPath) {
217
- try {
218
- const structure = await this.scanner.scan(projectPath);
219
- // Simple hash based on file count and total lines
220
- const hashInput = `${structure.totalFiles}-${structure.totalLines}`;
221
- return crypto.createHash('sha256').update(hashInput).digest('hex');
222
- }
223
- catch {
224
- // Fallback to path-based hash
225
- return crypto.createHash('sha256').update(projectPath).digest('hex');
226
- }
227
- }
228
- /**
229
- * Estimate effort required to fix anti-pattern
230
- */
231
- estimateEffort(antiPattern) {
232
- switch (antiPattern.severity) {
233
- case 'critical':
234
- case 'high':
235
- return 'high';
236
- case 'medium':
237
- return 'medium';
238
- default:
239
- return 'low';
240
- }
241
- }
242
- /**
243
- * Get related patterns for anti-pattern remediation
244
- */
245
- getRelatedPatterns(antiPattern) {
246
- const patternMap = {
247
- 'God Object': ['Single Responsibility', 'Extract Class', 'Facade'],
248
- 'Circular Dependencies': [
249
- 'Dependency Injection',
250
- 'Interface Segregation',
251
- ],
252
- };
253
- return patternMap[antiPattern.name] || [];
254
- }
255
- /**
256
- * Get letter grade from score
257
- */
258
- getGrade(score) {
259
- if (score >= 90)
260
- return 'A';
261
- if (score >= 80)
262
- return 'B';
263
- if (score >= 70)
264
- return 'C';
265
- if (score >= 60)
266
- return 'D';
267
- return 'F';
268
- }
269
- /**
270
- * Clear analysis cache
271
- */
272
- clearCache() {
273
- this.cache.clear();
274
- }
275
- }
276
- //# sourceMappingURL=architecture-analyzer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"architecture-analyzer.js","sourceRoot":"","sources":["../../../src/analyzers/architecture/architecture-analyzer.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Architecture Analysis Module
3
- *
4
- * Exports all architecture analysis components
5
- */
6
- export { ArchitectureAnalyzer } from './architecture-analyzer.js';
7
- export { ProjectStructureScanner } from './project-structure-scanner.js';
8
- export { MVCDetector } from './pattern-detectors/mvc-detector.js';
9
- export { CleanArchitectureDetector } from './pattern-detectors/clean-architecture-detector.js';
10
- export { RepositoryDetector } from './pattern-detectors/repository-detector.js';
11
- export type { PatternDetector } from './pattern-detectors/base-detector.js';
12
- export { GodObjectDetector } from './anti-pattern-detectors/god-object-detector.js';
@@ -1,14 +0,0 @@
1
- /**
2
- * Architecture Analysis Module
3
- *
4
- * Exports all architecture analysis components
5
- */
6
- export { ArchitectureAnalyzer } from './architecture-analyzer.js';
7
- export { ProjectStructureScanner } from './project-structure-scanner.js';
8
- // Pattern Detectors
9
- export { MVCDetector } from './pattern-detectors/mvc-detector.js';
10
- export { CleanArchitectureDetector } from './pattern-detectors/clean-architecture-detector.js';
11
- export { RepositoryDetector } from './pattern-detectors/repository-detector.js';
12
- // Anti-Pattern Detectors
13
- export { GodObjectDetector } from './anti-pattern-detectors/god-object-detector.js';
14
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyzers/architecture/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,oBAAoB;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAGhF,yBAAyB;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC"}
@@ -1,27 +0,0 @@
1
- /**
2
- * Base Pattern Detector
3
- *
4
- * Abstract base class for all pattern detectors.
5
- * Provides common utilities and enforces interface contract.
6
- */
7
- import type { DetectedPattern, ProjectStructure } from '../../../types/analysis.js';
8
- import { ProjectStructureScanner } from '../project-structure-scanner.js';
9
- export interface PatternDetector {
10
- /**
11
- * Detect pattern in project structure
12
- * Returns null if pattern is not detected
13
- */
14
- detect(structure: ProjectStructure): DetectedPattern | null;
15
- }
16
- export declare abstract class BasePatternDetector implements PatternDetector {
17
- protected readonly scanner: ProjectStructureScanner;
18
- abstract detect(structure: ProjectStructure): DetectedPattern | null;
19
- /**
20
- * Create a detected pattern with proper typing and immutability
21
- */
22
- protected createPattern(name: string, category: DetectedPattern['category'], confidence: number, locations: string[], description: string, metadata?: Record<string, unknown>): DetectedPattern;
23
- /**
24
- * Calculate confidence based on number of matches vs expected
25
- */
26
- protected calculateConfidence(matched: number, expected: number, baseConfidence?: number): number;
27
- }
@@ -1,31 +0,0 @@
1
- /**
2
- * Base Pattern Detector
3
- *
4
- * Abstract base class for all pattern detectors.
5
- * Provides common utilities and enforces interface contract.
6
- */
7
- import { ProjectStructureScanner } from '../project-structure-scanner.js';
8
- export class BasePatternDetector {
9
- scanner = new ProjectStructureScanner();
10
- /**
11
- * Create a detected pattern with proper typing and immutability
12
- */
13
- createPattern(name, category, confidence, locations, description, metadata) {
14
- return Object.freeze({
15
- name,
16
- category,
17
- confidence: Math.max(0, Math.min(1, confidence)),
18
- locations: Object.freeze(locations),
19
- description,
20
- metadata: metadata ? Object.freeze(metadata) : undefined,
21
- });
22
- }
23
- /**
24
- * Calculate confidence based on number of matches vs expected
25
- */
26
- calculateConfidence(matched, expected, baseConfidence = 0.5) {
27
- const ratio = matched / expected;
28
- return Math.min(1.0, baseConfidence + ratio * (1.0 - baseConfidence));
29
- }
30
- }
31
- //# sourceMappingURL=base-detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base-detector.js","sourceRoot":"","sources":["../../../../src/analyzers/architecture/pattern-detectors/base-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAU1E,MAAM,OAAgB,mBAAmB;IACpB,OAAO,GAAG,IAAI,uBAAuB,EAAE,CAAC;IAI3D;;OAEG;IACO,aAAa,CACrB,IAAY,EACZ,QAAqC,EACrC,UAAkB,EAClB,SAAmB,EACnB,WAAmB,EACnB,QAAkC;QAElC,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,IAAI;YACJ,QAAQ;YACR,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAChD,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YACnC,WAAW;YACX,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;SACzD,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACO,mBAAmB,CAC3B,OAAe,EACf,QAAgB,EAChB,cAAc,GAAG,GAAG;QAEpB,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;QACjC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC;IACxE,CAAC;CACF"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Clean Architecture Pattern Detector
3
- *
4
- * Detects Clean Architecture (Uncle Bob's architecture pattern).
5
- * Looks for domain/, application/, infrastructure/, and presentation/ layers.
6
- */
7
- import type { DetectedPattern, ProjectStructure } from '../../../types/analysis.js';
8
- import { BasePatternDetector } from './base-detector.js';
9
- export declare class CleanArchitectureDetector extends BasePatternDetector {
10
- detect(structure: ProjectStructure): DetectedPattern | null;
11
- }
@@ -1,57 +0,0 @@
1
- /**
2
- * Clean Architecture Pattern Detector
3
- *
4
- * Detects Clean Architecture (Uncle Bob's architecture pattern).
5
- * Looks for domain/, application/, infrastructure/, and presentation/ layers.
6
- */
7
- import { BasePatternDetector } from './base-detector.js';
8
- export class CleanArchitectureDetector extends BasePatternDetector {
9
- detect(structure) {
10
- // Check for core layers
11
- const hasDomain = this.scanner.hasDirectory(structure, 'domain');
12
- const hasApplication = this.scanner.hasDirectory(structure, 'application');
13
- const hasInfrastructure = this.scanner.hasDirectory(structure, 'infrastructure');
14
- // Check for presentation layer (multiple possible names)
15
- const hasPresentation = this.scanner.hasDirectory(structure, 'presentation') ||
16
- this.scanner.hasDirectory(structure, 'api') ||
17
- this.scanner.hasDirectory(structure, 'ui') ||
18
- this.scanner.hasDirectory(structure, 'web');
19
- // Need at least domain + infrastructure to suggest Clean Architecture
20
- if (!hasDomain || !hasInfrastructure) {
21
- return null;
22
- }
23
- const locations = [];
24
- let confidence = 0.5; // Base confidence for domain + infrastructure
25
- if (hasDomain) {
26
- const domainDirs = structure.directories.filter((d) => d.relativePath.toLowerCase().includes('domain'));
27
- locations.push(...domainDirs.map((d) => d.relativePath));
28
- confidence += 0.15;
29
- }
30
- if (hasApplication) {
31
- const appDirs = structure.directories.filter((d) => d.relativePath.toLowerCase().includes('application'));
32
- locations.push(...appDirs.map((d) => d.relativePath));
33
- confidence += 0.15;
34
- }
35
- if (hasInfrastructure) {
36
- const infraDirs = structure.directories.filter((d) => d.relativePath.toLowerCase().includes('infrastructure'));
37
- locations.push(...infraDirs.map((d) => d.relativePath));
38
- confidence += 0.1;
39
- }
40
- if (hasPresentation) {
41
- const presentationDirs = structure.directories.filter((d) => d.relativePath.toLowerCase().includes('presentation') ||
42
- d.relativePath.toLowerCase().includes('api') ||
43
- d.relativePath.toLowerCase().includes('ui') ||
44
- d.relativePath.toLowerCase().includes('web'));
45
- locations.push(...presentationDirs.map((d) => d.relativePath));
46
- confidence += 0.1;
47
- }
48
- return this.createPattern('Clean Architecture', 'architectural', Math.min(confidence, 1.0), locations, 'Separates concerns into layers: Domain (entities), Application (use cases), Infrastructure (external dependencies), and Presentation (UI/API)', {
49
- hasDomain,
50
- hasApplication,
51
- hasInfrastructure,
52
- hasPresentation,
53
- layerCount: [hasDomain, hasApplication, hasInfrastructure, hasPresentation].filter(Boolean).length,
54
- });
55
- }
56
- }
57
- //# sourceMappingURL=clean-architecture-detector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clean-architecture-detector.js","sourceRoot":"","sources":["../../../../src/analyzers/architecture/pattern-detectors/clean-architecture-detector.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- /**
2
- * MVC Pattern Detector
3
- *
4
- * Detects Model-View-Controller architectural pattern.
5
- * Looks for models/, views/, and controllers/ directories.
6
- */
7
- import type { DetectedPattern, ProjectStructure } from '../../../types/analysis.js';
8
- import { BasePatternDetector } from './base-detector.js';
9
- export declare class MVCDetector extends BasePatternDetector {
10
- detect(structure: ProjectStructure): DetectedPattern | null;
11
- }