@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,198 +0,0 @@
1
- /**
2
- * Dependency Graph Implementation
3
- *
4
- * Adjacency list-based directed graph for file dependencies
5
- */
6
- export class DependencyGraph {
7
- nodes;
8
- adjacencyList;
9
- reverseAdjacencyList; // For efficient afferent lookup
10
- constructor() {
11
- this.nodes = new Map();
12
- this.adjacencyList = new Map();
13
- this.reverseAdjacencyList = new Map();
14
- }
15
- /**
16
- * Add node to graph
17
- */
18
- addNode(node) {
19
- this.nodes.set(node.filePath, node);
20
- if (!this.adjacencyList.has(node.filePath)) {
21
- this.adjacencyList.set(node.filePath, new Set());
22
- }
23
- if (!this.reverseAdjacencyList.has(node.filePath)) {
24
- this.reverseAdjacencyList.set(node.filePath, new Set());
25
- }
26
- }
27
- /**
28
- * Add directed edge from -> to
29
- */
30
- addEdge(from, to) {
31
- // Ensure nodes exist
32
- if (!this.adjacencyList.has(from)) {
33
- this.adjacencyList.set(from, new Set());
34
- }
35
- if (!this.reverseAdjacencyList.has(to)) {
36
- this.reverseAdjacencyList.set(to, new Set());
37
- }
38
- // Add edge (sets are guaranteed to exist after the checks above)
39
- const fromSet = this.adjacencyList.get(from);
40
- const toSet = this.reverseAdjacencyList.get(to);
41
- if (fromSet && toSet) {
42
- fromSet.add(to);
43
- toSet.add(from);
44
- }
45
- }
46
- /**
47
- * Get node by file path
48
- */
49
- getNode(file) {
50
- return this.nodes.get(file);
51
- }
52
- /**
53
- * Get all nodes
54
- */
55
- getNodes() {
56
- return Array.from(this.nodes.values());
57
- }
58
- /**
59
- * Get afferent dependencies (files that depend on this file)
60
- */
61
- getAfferentDependencies(file) {
62
- const deps = this.reverseAdjacencyList.get(file);
63
- return deps ? Array.from(deps) : [];
64
- }
65
- /**
66
- * Get efferent dependencies (files this file depends on)
67
- */
68
- getEfferentDependencies(file) {
69
- const deps = this.adjacencyList.get(file);
70
- return deps ? Array.from(deps) : [];
71
- }
72
- /**
73
- * Get total number of edges
74
- */
75
- getTotalEdges() {
76
- let total = 0;
77
- for (const deps of this.adjacencyList.values()) {
78
- total += deps.size;
79
- }
80
- return total;
81
- }
82
- /**
83
- * Check if path exists from -> to using BFS
84
- */
85
- hasPath(from, to) {
86
- if (from === to)
87
- return true;
88
- const visited = new Set();
89
- const queue = [from];
90
- while (queue.length > 0) {
91
- const current = queue.shift();
92
- if (current === undefined)
93
- break;
94
- if (current === to)
95
- return true;
96
- if (visited.has(current))
97
- continue;
98
- visited.add(current);
99
- const neighbors = this.adjacencyList.get(current) || new Set();
100
- for (const neighbor of neighbors) {
101
- if (!visited.has(neighbor)) {
102
- queue.push(neighbor);
103
- }
104
- }
105
- }
106
- return false;
107
- }
108
- /**
109
- * Topological sort using DFS
110
- * Returns sorted list and whether cycle was detected
111
- */
112
- topologicalSort() {
113
- const visited = new Set();
114
- const recursionStack = new Set();
115
- const sorted = [];
116
- let hasCycle = false;
117
- const dfs = (node) => {
118
- if (recursionStack.has(node)) {
119
- hasCycle = true;
120
- return;
121
- }
122
- if (visited.has(node))
123
- return;
124
- visited.add(node);
125
- recursionStack.add(node);
126
- const neighbors = this.adjacencyList.get(node) || new Set();
127
- for (const neighbor of neighbors) {
128
- dfs(neighbor);
129
- }
130
- recursionStack.delete(node);
131
- sorted.unshift(node); // Add to front for reverse post-order
132
- };
133
- // Visit all nodes
134
- for (const node of this.nodes.keys()) {
135
- if (!visited.has(node)) {
136
- dfs(node);
137
- }
138
- }
139
- return { sorted, hasCycle };
140
- }
141
- /**
142
- * Get strongly connected components using Tarjan's algorithm
143
- * (Used for circular dependency detection)
144
- */
145
- getStronglyConnectedComponents() {
146
- const index = new Map();
147
- const lowLink = new Map();
148
- const onStack = new Set();
149
- const stack = [];
150
- const sccs = [];
151
- let currentIndex = 0;
152
- const strongConnect = (node) => {
153
- index.set(node, currentIndex);
154
- lowLink.set(node, currentIndex);
155
- currentIndex++;
156
- stack.push(node);
157
- onStack.add(node);
158
- const neighbors = this.adjacencyList.get(node) || new Set();
159
- for (const neighbor of neighbors) {
160
- if (!index.has(neighbor)) {
161
- strongConnect(neighbor);
162
- const nodeLow = lowLink.get(node) ?? 0;
163
- const neighborLow = lowLink.get(neighbor) ?? 0;
164
- lowLink.set(node, Math.min(nodeLow, neighborLow));
165
- }
166
- else if (onStack.has(neighbor)) {
167
- const nodeLow = lowLink.get(node) ?? 0;
168
- const neighborIdx = index.get(neighbor) ?? 0;
169
- lowLink.set(node, Math.min(nodeLow, neighborIdx));
170
- }
171
- }
172
- // If node is a root node, pop the stack and create SCC
173
- if (lowLink.get(node) === index.get(node)) {
174
- const scc = [];
175
- let w;
176
- do {
177
- w = stack.pop();
178
- if (w === undefined)
179
- break;
180
- onStack.delete(w);
181
- scc.push(w);
182
- } while (w !== node);
183
- // Only add if SCC has more than 1 node (circular dependency)
184
- if (scc.length > 1) {
185
- sccs.push(scc);
186
- }
187
- }
188
- };
189
- // Run on all nodes
190
- for (const node of this.nodes.keys()) {
191
- if (!index.has(node)) {
192
- strongConnect(node);
193
- }
194
- }
195
- return sccs;
196
- }
197
- }
198
- //# sourceMappingURL=dependency-graph.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dependency-graph.js","sourceRoot":"","sources":["../../../src/analyzers/dependency/dependency-graph.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Dependency Analyzer Module
3
- */
4
- export { DependencyAnalyzer } from './dependency-analyzer.js';
5
- export { DependencyGraph } from './dependency-graph.js';
6
- export { CircularDependencyDetector } from './circular-detector.js';
7
- export { CouplingCalculator } from './coupling-calculator.js';
8
- export type { DependencyNode, ImportEdge, ExportEdge, CircularDependency, CouplingMetrics, DependencyAnalysisResult, DependencySummary, DependencyAnalysisOptions, } from './types.js';
@@ -1,8 +0,0 @@
1
- /**
2
- * Dependency Analyzer Module
3
- */
4
- export { DependencyAnalyzer } from './dependency-analyzer.js';
5
- export { DependencyGraph } from './dependency-graph.js';
6
- export { CircularDependencyDetector } from './circular-detector.js';
7
- export { CouplingCalculator } from './coupling-calculator.js';
8
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyzers/dependency/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,105 +0,0 @@
1
- /**
2
- * Dependency Analyzer Types
3
- */
4
- /**
5
- * Dependency node representing a file
6
- */
7
- export interface DependencyNode {
8
- readonly filePath: string;
9
- readonly imports: ReadonlyArray<ImportEdge>;
10
- readonly exports: ReadonlyArray<ExportEdge>;
11
- readonly size: number;
12
- readonly loc: number;
13
- }
14
- /**
15
- * Import edge in dependency graph
16
- */
17
- export interface ImportEdge {
18
- readonly from: string;
19
- readonly to: string;
20
- readonly importedSymbols: ReadonlyArray<string>;
21
- readonly isDynamic: boolean;
22
- readonly isTypeOnly: boolean;
23
- }
24
- /**
25
- * Export edge
26
- */
27
- export interface ExportEdge {
28
- readonly from: string;
29
- readonly symbols: ReadonlyArray<string>;
30
- readonly isDefault: boolean;
31
- readonly isReExport: boolean;
32
- }
33
- /**
34
- * Circular dependency cycle
35
- */
36
- export interface CircularDependency {
37
- readonly cycle: ReadonlyArray<string>;
38
- readonly length: number;
39
- readonly severity: 'critical' | 'high' | 'medium' | 'low';
40
- readonly impact: number;
41
- readonly description: string;
42
- }
43
- /**
44
- * Coupling metrics for a file
45
- */
46
- export interface CouplingMetrics {
47
- readonly file: string;
48
- readonly afferentCoupling: number;
49
- readonly efferentCoupling: number;
50
- readonly instability: number;
51
- readonly abstractness: number;
52
- readonly distanceFromMainSequence: number;
53
- readonly zone: 'useless' | 'painful' | 'balanced';
54
- }
55
- /**
56
- * Dependency analysis result
57
- */
58
- export interface DependencyAnalysisResult {
59
- readonly graph: DependencyGraph;
60
- readonly circularDependencies: ReadonlyArray<CircularDependency>;
61
- readonly couplingMetrics: ReadonlyArray<CouplingMetrics>;
62
- readonly orphanedFiles: ReadonlyArray<string>;
63
- readonly hubFiles: ReadonlyArray<string>;
64
- readonly summary: DependencySummary;
65
- readonly timestamp: Date;
66
- }
67
- /**
68
- * Summary statistics
69
- */
70
- export interface DependencySummary {
71
- readonly totalFiles: number;
72
- readonly totalDependencies: number;
73
- readonly averageAfferentCoupling: number;
74
- readonly averageEfferentCoupling: number;
75
- readonly averageInstability: number;
76
- readonly circularDependencyCount: number;
77
- readonly maxCycleLength: number;
78
- readonly healthScore: number;
79
- }
80
- /**
81
- * Dependency graph interface
82
- */
83
- export interface DependencyGraph {
84
- addNode(node: DependencyNode): void;
85
- addEdge(from: string, to: string): void;
86
- getNode(file: string): DependencyNode | undefined;
87
- getNodes(): DependencyNode[];
88
- getAfferentDependencies(file: string): string[];
89
- getEfferentDependencies(file: string): string[];
90
- getTotalEdges(): number;
91
- hasPath(from: string, to: string): boolean;
92
- topologicalSort(): {
93
- sorted: string[];
94
- hasCycle: boolean;
95
- };
96
- getStronglyConnectedComponents(): string[][];
97
- }
98
- /**
99
- * Analysis options
100
- */
101
- export interface DependencyAnalysisOptions {
102
- readonly includeNodeModules?: boolean;
103
- readonly maxDepth?: number;
104
- readonly ignorePatterns?: readonly string[];
105
- }
@@ -1,5 +0,0 @@
1
- /**
2
- * Dependency Analyzer Types
3
- */
4
- export {};
5
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/analyzers/dependency/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,51 +0,0 @@
1
- /**
2
- * Analysis Error Classes
3
- *
4
- * Structured error hierarchy for analysis operations.
5
- * All errors extend from AnalysisError base class and include context information.
6
- */
7
- /**
8
- * Base error class for all analysis errors
9
- */
10
- export declare abstract class AnalysisError extends Error {
11
- readonly code: string;
12
- readonly context?: Readonly<Record<string, unknown>> | undefined;
13
- constructor(message: string, code: string, context?: Readonly<Record<string, unknown>> | undefined);
14
- /**
15
- * Convert error to JSON for logging/serialization
16
- */
17
- toJSON(): Record<string, unknown>;
18
- }
19
- /**
20
- * Error thrown when project structure cannot be analyzed
21
- */
22
- export declare class ProjectStructureError extends AnalysisError {
23
- constructor(message: string, context?: Record<string, unknown>);
24
- }
25
- /**
26
- * Error thrown when a file cannot be parsed or read
27
- */
28
- export declare class FileParseError extends AnalysisError {
29
- readonly filePath: string;
30
- constructor(message: string, filePath: string, context?: Record<string, unknown>);
31
- }
32
- /**
33
- * Error thrown when validation fails
34
- */
35
- export declare class ValidationError extends AnalysisError {
36
- constructor(message: string, context?: Record<string, unknown>);
37
- }
38
- /**
39
- * Error thrown when analysis exceeds timeout
40
- */
41
- export declare class AnalysisTimeoutError extends AnalysisError {
42
- readonly timeoutMs: number;
43
- constructor(message: string, timeoutMs: number, context?: Record<string, unknown>);
44
- }
45
- /**
46
- * Error thrown when pattern detection fails
47
- */
48
- export declare class PatternDetectionError extends AnalysisError {
49
- readonly patternName: string;
50
- constructor(message: string, patternName: string, context?: Record<string, unknown>);
51
- }
@@ -1,79 +0,0 @@
1
- /**
2
- * Analysis Error Classes
3
- *
4
- * Structured error hierarchy for analysis operations.
5
- * All errors extend from AnalysisError base class and include context information.
6
- */
7
- /**
8
- * Base error class for all analysis errors
9
- */
10
- export class AnalysisError extends Error {
11
- code;
12
- context;
13
- constructor(message, code, context) {
14
- super(message);
15
- this.code = code;
16
- this.context = context;
17
- this.name = this.constructor.name;
18
- Error.captureStackTrace(this, this.constructor);
19
- }
20
- /**
21
- * Convert error to JSON for logging/serialization
22
- */
23
- toJSON() {
24
- return {
25
- name: this.name,
26
- message: this.message,
27
- code: this.code,
28
- context: this.context,
29
- stack: this.stack,
30
- };
31
- }
32
- }
33
- /**
34
- * Error thrown when project structure cannot be analyzed
35
- */
36
- export class ProjectStructureError extends AnalysisError {
37
- constructor(message, context) {
38
- super(message, 'PROJECT_STRUCTURE_ERROR', context);
39
- }
40
- }
41
- /**
42
- * Error thrown when a file cannot be parsed or read
43
- */
44
- export class FileParseError extends AnalysisError {
45
- filePath;
46
- constructor(message, filePath, context) {
47
- super(message, 'FILE_PARSE_ERROR', { ...context, filePath });
48
- this.filePath = filePath;
49
- }
50
- }
51
- /**
52
- * Error thrown when validation fails
53
- */
54
- export class ValidationError extends AnalysisError {
55
- constructor(message, context) {
56
- super(message, 'VALIDATION_ERROR', context);
57
- }
58
- }
59
- /**
60
- * Error thrown when analysis exceeds timeout
61
- */
62
- export class AnalysisTimeoutError extends AnalysisError {
63
- timeoutMs;
64
- constructor(message, timeoutMs, context) {
65
- super(message, 'ANALYSIS_TIMEOUT', { ...context, timeoutMs });
66
- this.timeoutMs = timeoutMs;
67
- }
68
- }
69
- /**
70
- * Error thrown when pattern detection fails
71
- */
72
- export class PatternDetectionError extends AnalysisError {
73
- patternName;
74
- constructor(message, patternName, context) {
75
- super(message, 'PATTERN_DETECTION_ERROR', { ...context, patternName });
76
- this.patternName = patternName;
77
- }
78
- }
79
- //# sourceMappingURL=errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/analyzers/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,OAAgB,aAAc,SAAQ,KAAK;IAG7B;IACA;IAHlB,YACE,OAAe,EACC,IAAY,EACZ,OAA2C;QAE3D,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAoC;QAG3D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IACtD,YAAY,OAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,OAAO,EAAE,yBAAyB,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,aAAa;IAG7B;IAFlB,YACE,OAAe,EACC,QAAgB,EAChC,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAH7C,aAAQ,GAAR,QAAQ,CAAQ;IAIlC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,aAAa;IAChD,YAAY,OAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IAGnC;IAFlB,YACE,OAAe,EACC,SAAiB,EACjC,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAH9C,cAAS,GAAT,SAAS,CAAQ;IAInC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IAGpC;IAFlB,YACE,OAAe,EACC,WAAmB,EACnC,OAAiC;QAEjC,KAAK,CAAC,OAAO,EAAE,yBAAyB,EAAE,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAHvD,gBAAW,GAAX,WAAW,CAAQ;IAIrC,CAAC;CACF"}
@@ -1,36 +0,0 @@
1
- /**
2
- * Git Churn Calculator
3
- *
4
- * Calculates file churn metrics from git history
5
- */
6
- import type { FileChurn, GitAnalysisOptions, ContributorStats } from './types.js';
7
- export declare class ChurnCalculator {
8
- private repositoryPath;
9
- constructor(repositoryPath: string);
10
- /**
11
- * Calculate churn for all files
12
- */
13
- calculateChurn(options?: GitAnalysisOptions): Promise<FileChurn[]>;
14
- /**
15
- * Calculate contributor statistics
16
- */
17
- calculateContributorStats(options?: GitAnalysisOptions): Promise<ContributorStats[]>;
18
- /**
19
- * Get git log with file stats
20
- * SECURITY FIX: Prevent command injection by validating inputs and using array-based execution
21
- */
22
- private getGitLog;
23
- /**
24
- * Parse git log output
25
- */
26
- private parseGitLog;
27
- /**
28
- * Check if file should be included based on patterns
29
- */
30
- private shouldIncludeFile;
31
- /**
32
- * Simple pattern matching (supports * wildcard)
33
- * SECURITY FIX: Prevent ReDoS by using non-greedy matching and proper escaping
34
- */
35
- private matchPattern;
36
- }