@houtini/lm 1.0.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 (260) hide show
  1. package/CHANGELOG.md +273 -0
  2. package/LICENSE +21 -0
  3. package/README.md +203 -0
  4. package/dist/cache/analysis-cache.d.ts +33 -0
  5. package/dist/cache/analysis-cache.d.ts.map +1 -0
  6. package/dist/cache/analysis-cache.js +56 -0
  7. package/dist/cache/analysis-cache.js.map +1 -0
  8. package/dist/cache/cache-manager.d.ts +29 -0
  9. package/dist/cache/cache-manager.d.ts.map +1 -0
  10. package/dist/cache/cache-manager.js +85 -0
  11. package/dist/cache/cache-manager.js.map +1 -0
  12. package/dist/cache/index.d.ts +16 -0
  13. package/dist/cache/index.d.ts.map +1 -0
  14. package/dist/cache/index.js +17 -0
  15. package/dist/cache/index.js.map +1 -0
  16. package/dist/cache/prompt-cache.d.ts +33 -0
  17. package/dist/cache/prompt-cache.d.ts.map +1 -0
  18. package/dist/cache/prompt-cache.js +61 -0
  19. package/dist/cache/prompt-cache.js.map +1 -0
  20. package/dist/config.d.ts +43 -0
  21. package/dist/config.d.ts.map +1 -0
  22. package/dist/config.js +70 -0
  23. package/dist/config.js.map +1 -0
  24. package/dist/core/ThreeStagePromptManager.d.ts +39 -0
  25. package/dist/core/ThreeStagePromptManager.d.ts.map +1 -0
  26. package/dist/core/ThreeStagePromptManager.js +176 -0
  27. package/dist/core/ThreeStagePromptManager.js.map +1 -0
  28. package/dist/index.d.ts +6 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +230 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/plugins/base-plugin.d.ts +47 -0
  33. package/dist/plugins/base-plugin.d.ts.map +1 -0
  34. package/dist/plugins/base-plugin.js +90 -0
  35. package/dist/plugins/base-plugin.js.map +1 -0
  36. package/dist/plugins/index.d.ts +58 -0
  37. package/dist/plugins/index.d.ts.map +1 -0
  38. package/dist/plugins/index.js +161 -0
  39. package/dist/plugins/index.js.map +1 -0
  40. package/dist/plugins/types.d.ts +5 -0
  41. package/dist/plugins/types.d.ts.map +1 -0
  42. package/dist/plugins/types.js +5 -0
  43. package/dist/plugins/types.js.map +1 -0
  44. package/dist/prompts/analyze/code-quality.d.ts +116 -0
  45. package/dist/prompts/analyze/code-quality.d.ts.map +1 -0
  46. package/dist/prompts/analyze/code-quality.js +433 -0
  47. package/dist/prompts/analyze/code-quality.js.map +1 -0
  48. package/dist/prompts/analyze/compare-integration.d.ts +130 -0
  49. package/dist/prompts/analyze/compare-integration.d.ts.map +1 -0
  50. package/dist/prompts/analyze/compare-integration.js +543 -0
  51. package/dist/prompts/analyze/compare-integration.js.map +1 -0
  52. package/dist/prompts/analyze/count-files.d.ts +109 -0
  53. package/dist/prompts/analyze/count-files.d.ts.map +1 -0
  54. package/dist/prompts/analyze/count-files.js +399 -0
  55. package/dist/prompts/analyze/count-files.js.map +1 -0
  56. package/dist/prompts/analyze/database-queries.d.ts +156 -0
  57. package/dist/prompts/analyze/database-queries.d.ts.map +1 -0
  58. package/dist/prompts/analyze/database-queries.js +759 -0
  59. package/dist/prompts/analyze/database-queries.js.map +1 -0
  60. package/dist/prompts/analyze/dependencies.d.ts +97 -0
  61. package/dist/prompts/analyze/dependencies.d.ts.map +1 -0
  62. package/dist/prompts/analyze/dependencies.js +333 -0
  63. package/dist/prompts/analyze/dependencies.js.map +1 -0
  64. package/dist/prompts/analyze/diff-signatures.d.ts +139 -0
  65. package/dist/prompts/analyze/diff-signatures.d.ts.map +1 -0
  66. package/dist/prompts/analyze/diff-signatures.js +702 -0
  67. package/dist/prompts/analyze/diff-signatures.js.map +1 -0
  68. package/dist/prompts/analyze/find-patterns.d.ts +128 -0
  69. package/dist/prompts/analyze/find-patterns.d.ts.map +1 -0
  70. package/dist/prompts/analyze/find-patterns.js +520 -0
  71. package/dist/prompts/analyze/find-patterns.js.map +1 -0
  72. package/dist/prompts/analyze/find-unused-css.d.ts +151 -0
  73. package/dist/prompts/analyze/find-unused-css.d.ts.map +1 -0
  74. package/dist/prompts/analyze/find-unused-css.js +754 -0
  75. package/dist/prompts/analyze/find-unused-css.js.map +1 -0
  76. package/dist/prompts/analyze/n8n-workflow.d.ts +137 -0
  77. package/dist/prompts/analyze/n8n-workflow.d.ts.map +1 -0
  78. package/dist/prompts/analyze/n8n-workflow.js +529 -0
  79. package/dist/prompts/analyze/n8n-workflow.js.map +1 -0
  80. package/dist/prompts/analyze/project-structure.d.ts +126 -0
  81. package/dist/prompts/analyze/project-structure.d.ts.map +1 -0
  82. package/dist/prompts/analyze/project-structure.js +569 -0
  83. package/dist/prompts/analyze/project-structure.js.map +1 -0
  84. package/dist/prompts/analyze/security-audit.d.ts +142 -0
  85. package/dist/prompts/analyze/security-audit.d.ts.map +1 -0
  86. package/dist/prompts/analyze/security-audit.js +637 -0
  87. package/dist/prompts/analyze/security-audit.js.map +1 -0
  88. package/dist/prompts/analyze/single-file.d.ts +162 -0
  89. package/dist/prompts/analyze/single-file.d.ts.map +1 -0
  90. package/dist/prompts/analyze/single-file.js +665 -0
  91. package/dist/prompts/analyze/single-file.js.map +1 -0
  92. package/dist/prompts/analyze/trace-execution.d.ts +126 -0
  93. package/dist/prompts/analyze/trace-execution.d.ts.map +1 -0
  94. package/dist/prompts/analyze/trace-execution.js +609 -0
  95. package/dist/prompts/analyze/trace-execution.js.map +1 -0
  96. package/dist/prompts/analyze/wordpress-plugin-audit.d.ts +116 -0
  97. package/dist/prompts/analyze/wordpress-plugin-audit.d.ts.map +1 -0
  98. package/dist/prompts/analyze/wordpress-plugin-audit.js +454 -0
  99. package/dist/prompts/analyze/wordpress-plugin-audit.js.map +1 -0
  100. package/dist/prompts/analyze/wordpress-security.d.ts +146 -0
  101. package/dist/prompts/analyze/wordpress-security.d.ts.map +1 -0
  102. package/dist/prompts/analyze/wordpress-security.js +698 -0
  103. package/dist/prompts/analyze/wordpress-security.js.map +1 -0
  104. package/dist/prompts/analyze/wordpress-theme-audit.d.ts +114 -0
  105. package/dist/prompts/analyze/wordpress-theme-audit.d.ts.map +1 -0
  106. package/dist/prompts/analyze/wordpress-theme-audit.js +538 -0
  107. package/dist/prompts/analyze/wordpress-theme-audit.js.map +1 -0
  108. package/dist/prompts/custom/custom-prompt.d.ts +135 -0
  109. package/dist/prompts/custom/custom-prompt.d.ts.map +1 -0
  110. package/dist/prompts/custom/custom-prompt.js +419 -0
  111. package/dist/prompts/custom/custom-prompt.js.map +1 -0
  112. package/dist/prompts/fun/arcade-game.d.ts +152 -0
  113. package/dist/prompts/fun/arcade-game.d.ts.map +1 -0
  114. package/dist/prompts/fun/arcade-game.js +653 -0
  115. package/dist/prompts/fun/arcade-game.js.map +1 -0
  116. package/dist/prompts/fun/create_text_adventure.d.ts +100 -0
  117. package/dist/prompts/fun/create_text_adventure.d.ts.map +1 -0
  118. package/dist/prompts/fun/create_text_adventure.js +397 -0
  119. package/dist/prompts/fun/create_text_adventure.js.map +1 -0
  120. package/dist/prompts/fun/css-art-generator.d.ts +168 -0
  121. package/dist/prompts/fun/css-art-generator.d.ts.map +1 -0
  122. package/dist/prompts/fun/css-art-generator.js +827 -0
  123. package/dist/prompts/fun/css-art-generator.js.map +1 -0
  124. package/dist/prompts/generate/project-documentation.d.ts +137 -0
  125. package/dist/prompts/generate/project-documentation.d.ts.map +1 -0
  126. package/dist/prompts/generate/project-documentation.js +666 -0
  127. package/dist/prompts/generate/project-documentation.js.map +1 -0
  128. package/dist/prompts/generate/refactoring.d.ts +164 -0
  129. package/dist/prompts/generate/refactoring.d.ts.map +1 -0
  130. package/dist/prompts/generate/refactoring.js +621 -0
  131. package/dist/prompts/generate/refactoring.js.map +1 -0
  132. package/dist/prompts/generate/responsive-component.d.ts +147 -0
  133. package/dist/prompts/generate/responsive-component.d.ts.map +1 -0
  134. package/dist/prompts/generate/responsive-component.js +955 -0
  135. package/dist/prompts/generate/responsive-component.js.map +1 -0
  136. package/dist/prompts/generate/typescript-conversion.d.ts +144 -0
  137. package/dist/prompts/generate/typescript-conversion.d.ts.map +1 -0
  138. package/dist/prompts/generate/typescript-conversion.js +527 -0
  139. package/dist/prompts/generate/typescript-conversion.js.map +1 -0
  140. package/dist/prompts/generate/unit-tests.d.ts +139 -0
  141. package/dist/prompts/generate/unit-tests.d.ts.map +1 -0
  142. package/dist/prompts/generate/unit-tests.js +578 -0
  143. package/dist/prompts/generate/unit-tests.js.map +1 -0
  144. package/dist/prompts/generate/wordpress-plugin.d.ts +179 -0
  145. package/dist/prompts/generate/wordpress-plugin.d.ts.map +1 -0
  146. package/dist/prompts/generate/wordpress-plugin.js +763 -0
  147. package/dist/prompts/generate/wordpress-plugin.js.map +1 -0
  148. package/dist/prompts/generate/wordpress-theme-from-static.d.ts +177 -0
  149. package/dist/prompts/generate/wordpress-theme-from-static.d.ts.map +1 -0
  150. package/dist/prompts/generate/wordpress-theme-from-static.js +695 -0
  151. package/dist/prompts/generate/wordpress-theme-from-static.js.map +1 -0
  152. package/dist/prompts/shared/cache-manager.d.ts +45 -0
  153. package/dist/prompts/shared/cache-manager.d.ts.map +1 -0
  154. package/dist/prompts/shared/cache-manager.js +129 -0
  155. package/dist/prompts/shared/cache-manager.js.map +1 -0
  156. package/dist/prompts/shared/helpers.d.ts +39 -0
  157. package/dist/prompts/shared/helpers.d.ts.map +1 -0
  158. package/dist/prompts/shared/helpers.js +151 -0
  159. package/dist/prompts/shared/helpers.js.map +1 -0
  160. package/dist/prompts/shared/templates.d.ts +35 -0
  161. package/dist/prompts/shared/templates.d.ts.map +1 -0
  162. package/dist/prompts/shared/templates.js +77 -0
  163. package/dist/prompts/shared/templates.js.map +1 -0
  164. package/dist/prompts/shared/types.d.ts +112 -0
  165. package/dist/prompts/shared/types.d.ts.map +1 -0
  166. package/dist/prompts/shared/types.js +5 -0
  167. package/dist/prompts/shared/types.js.map +1 -0
  168. package/dist/prompts/system/find-unused-files.d.ts +106 -0
  169. package/dist/prompts/system/find-unused-files.d.ts.map +1 -0
  170. package/dist/prompts/system/find-unused-files.js +353 -0
  171. package/dist/prompts/system/find-unused-files.js.map +1 -0
  172. package/dist/security/index.d.ts +39 -0
  173. package/dist/security/index.d.ts.map +1 -0
  174. package/dist/security/index.js +46 -0
  175. package/dist/security/index.js.map +1 -0
  176. package/dist/security/integration-helpers.d.ts +121 -0
  177. package/dist/security/integration-helpers.d.ts.map +1 -0
  178. package/dist/security/integration-helpers.js +190 -0
  179. package/dist/security/integration-helpers.js.map +1 -0
  180. package/dist/security/output-encoder.d.ts +94 -0
  181. package/dist/security/output-encoder.d.ts.map +1 -0
  182. package/dist/security/output-encoder.js +295 -0
  183. package/dist/security/output-encoder.js.map +1 -0
  184. package/dist/security/prompt-injection-guard.d.ts +59 -0
  185. package/dist/security/prompt-injection-guard.d.ts.map +1 -0
  186. package/dist/security/prompt-injection-guard.js +249 -0
  187. package/dist/security/prompt-injection-guard.js.map +1 -0
  188. package/dist/security/sanitisation.d.ts +67 -0
  189. package/dist/security/sanitisation.d.ts.map +1 -0
  190. package/dist/security/sanitisation.js +398 -0
  191. package/dist/security/sanitisation.js.map +1 -0
  192. package/dist/security/security-service.d.ts +103 -0
  193. package/dist/security/security-service.d.ts.map +1 -0
  194. package/dist/security/security-service.js +303 -0
  195. package/dist/security/security-service.js.map +1 -0
  196. package/dist/security-config.d.ts +45 -0
  197. package/dist/security-config.d.ts.map +1 -0
  198. package/dist/security-config.js +63 -0
  199. package/dist/security-config.js.map +1 -0
  200. package/dist/system/function-list.d.ts +61 -0
  201. package/dist/system/function-list.d.ts.map +1 -0
  202. package/dist/system/function-list.js +111 -0
  203. package/dist/system/function-list.js.map +1 -0
  204. package/dist/system/function-registry.d.ts +23 -0
  205. package/dist/system/function-registry.d.ts.map +1 -0
  206. package/dist/system/function-registry.js +136 -0
  207. package/dist/system/function-registry.js.map +1 -0
  208. package/dist/system/health-check.d.ts +33 -0
  209. package/dist/system/health-check.d.ts.map +1 -0
  210. package/dist/system/health-check.js +98 -0
  211. package/dist/system/health-check.js.map +1 -0
  212. package/dist/system/path-resolver.d.ts +55 -0
  213. package/dist/system/path-resolver.d.ts.map +1 -0
  214. package/dist/system/path-resolver.js +90 -0
  215. package/dist/system/path-resolver.js.map +1 -0
  216. package/dist/templates/plugin-template.d.ts +121 -0
  217. package/dist/templates/plugin-template.d.ts.map +1 -0
  218. package/dist/templates/plugin-template.js +450 -0
  219. package/dist/templates/plugin-template.js.map +1 -0
  220. package/dist/types/chunking-types.d.ts +88 -0
  221. package/dist/types/chunking-types.d.ts.map +1 -0
  222. package/dist/types/chunking-types.js +18 -0
  223. package/dist/types/chunking-types.js.map +1 -0
  224. package/dist/types/prompt-stages.d.ts +42 -0
  225. package/dist/types/prompt-stages.d.ts.map +1 -0
  226. package/dist/types/prompt-stages.js +6 -0
  227. package/dist/types/prompt-stages.js.map +1 -0
  228. package/dist/types.d.ts +46 -0
  229. package/dist/types.d.ts.map +1 -0
  230. package/dist/types.js +6 -0
  231. package/dist/types.js.map +1 -0
  232. package/dist/utils/css-parser.d.ts +26 -0
  233. package/dist/utils/css-parser.d.ts.map +1 -0
  234. package/dist/utils/css-parser.js +117 -0
  235. package/dist/utils/css-parser.js.map +1 -0
  236. package/dist/utils/path-resolver.d.ts +13 -0
  237. package/dist/utils/path-resolver.d.ts.map +1 -0
  238. package/dist/utils/path-resolver.js +78 -0
  239. package/dist/utils/path-resolver.js.map +1 -0
  240. package/dist/utils/plugin-utilities.d.ts +171 -0
  241. package/dist/utils/plugin-utilities.d.ts.map +1 -0
  242. package/dist/utils/plugin-utilities.js +221 -0
  243. package/dist/utils/plugin-utilities.js.map +1 -0
  244. package/dist/utils/streamHandler.d.ts +3 -0
  245. package/dist/utils/streamHandler.d.ts.map +1 -0
  246. package/dist/utils/streamHandler.js +137 -0
  247. package/dist/utils/streamHandler.js.map +1 -0
  248. package/dist/validation/output-validator.d.ts +136 -0
  249. package/dist/validation/output-validator.d.ts.map +1 -0
  250. package/dist/validation/output-validator.js +262 -0
  251. package/dist/validation/output-validator.js.map +1 -0
  252. package/dist/validation/response-factory.d.ts +44 -0
  253. package/dist/validation/response-factory.d.ts.map +1 -0
  254. package/dist/validation/response-factory.js +202 -0
  255. package/dist/validation/response-factory.js.map +1 -0
  256. package/dist/validation/schemas.d.ts +519 -0
  257. package/dist/validation/schemas.d.ts.map +1 -0
  258. package/dist/validation/schemas.js +6 -0
  259. package/dist/validation/schemas.js.map +1 -0
  260. package/package.json +72 -0
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Plugin Template - Modern v4.3 (Improved)
3
+ *
4
+ * Universal template that intelligently handles both single-file and multi-file analysis
5
+ * Automatically detects analysis type based on provided parameters
6
+ *
7
+ * Copy this template for creating any new plugin - it adapts to your needs
8
+ */
9
+ import { BasePlugin } from '../../plugins/base-plugin.js';
10
+ import { IPromptPlugin } from '../shared/types.js';
11
+ import { PromptStages } from '../../types/prompt-stages.js';
12
+ export declare class CodeQualityAnalyzer extends BasePlugin implements IPromptPlugin {
13
+ name: string;
14
+ category: "analyze";
15
+ description: string;
16
+ parameters: {
17
+ code: {
18
+ type: "string";
19
+ description: string;
20
+ required: boolean;
21
+ };
22
+ filePath: {
23
+ type: "string";
24
+ description: string;
25
+ required: boolean;
26
+ };
27
+ projectPath: {
28
+ type: "string";
29
+ description: string;
30
+ required: boolean;
31
+ };
32
+ files: {
33
+ type: "array";
34
+ description: string;
35
+ required: boolean;
36
+ items: {
37
+ type: "string";
38
+ };
39
+ };
40
+ maxDepth: {
41
+ type: "number";
42
+ description: string;
43
+ required: boolean;
44
+ default: number;
45
+ };
46
+ language: {
47
+ type: "string";
48
+ description: string;
49
+ required: boolean;
50
+ default: string;
51
+ };
52
+ analysisDepth: {
53
+ type: "string";
54
+ description: string;
55
+ enum: string[];
56
+ default: string;
57
+ required: boolean;
58
+ };
59
+ analysisType: {
60
+ type: "string";
61
+ description: string;
62
+ enum: string[];
63
+ default: string;
64
+ required: boolean;
65
+ };
66
+ };
67
+ private analysisCache;
68
+ private multiFileAnalysis;
69
+ constructor();
70
+ execute(params: any, llmClient: any): Promise<any>;
71
+ /**
72
+ * Auto-detect whether this is single-file or multi-file analysis
73
+ *
74
+ * DETECTION GUIDE:
75
+ * Single-file: code, filePath provided → analyze individual file
76
+ * Multi-file: projectPath, files, maxDepth provided → analyze project/multiple files
77
+ * Default: Choose based on your plugin's primary use case
78
+ */
79
+ private detectAnalysisMode;
80
+ /**
81
+ * Validate parameters based on detected analysis mode
82
+ */
83
+ private validateParameters;
84
+ /**
85
+ * Execute single-file analysis
86
+ */
87
+ private executeSingleFileAnalysis;
88
+ /**
89
+ * Execute multi-file analysis
90
+ */
91
+ private executeMultiFileAnalysis;
92
+ /**
93
+ * Single-file code quality analysis
94
+ */
95
+ private getSingleFilePromptStages;
96
+ /**
97
+ * Multi-file project quality analysis
98
+ */
99
+ private getMultiFilePromptStages;
100
+ /**
101
+ * Backwards compatibility method
102
+ */
103
+ getPromptStages(params: any): PromptStages;
104
+ private discoverRelevantFiles;
105
+ private performMultiFileAnalysis;
106
+ private analyzeIndividualFile;
107
+ private getFileExtensions;
108
+ private estimateComplexity;
109
+ private estimateQualityScore;
110
+ private calculateAverageComplexity;
111
+ private analyzeQualityDistribution;
112
+ private identifyCommonIssues;
113
+ private generateCacheKey;
114
+ }
115
+ export default CodeQualityAnalyzer;
116
+ //# sourceMappingURL=code-quality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-quality.d.ts","sourceRoot":"","sources":["../../../src/prompts/analyze/code-quality.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAgB5D,qBAAa,mBAAoB,SAAQ,UAAW,YAAW,aAAa;IAC1E,IAAI,SAA0B;IAC9B,QAAQ,EAAG,SAAS,CAAU;IAC9B,WAAW,SAA8F;IAGzG,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqDR;IAEF,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,iBAAiB,CAA2B;;IAO9C,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG;IAyBzC;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;YACW,yBAAyB;IA0CvC;;OAEG;YACW,wBAAwB;IA0CtC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA0DjC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA2DhC;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY;YAW5B,qBAAqB;YASrB,wBAAwB;YA0CxB,qBAAqB;IAgBnC,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,gBAAgB;CAKzB;AAED,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,433 @@
1
+ /**
2
+ * Plugin Template - Modern v4.3 (Improved)
3
+ *
4
+ * Universal template that intelligently handles both single-file and multi-file analysis
5
+ * Automatically detects analysis type based on provided parameters
6
+ *
7
+ * Copy this template for creating any new plugin - it adapts to your needs
8
+ */
9
+ import { BasePlugin } from '../../plugins/base-plugin.js';
10
+ import { ThreeStagePromptManager } from '../../core/ThreeStagePromptManager.js';
11
+ import { withSecurity } from '../../security/integration-helpers.js';
12
+ import { readFileContent } from '../shared/helpers.js';
13
+ import { ModelSetup, ResponseProcessor, ParameterValidator, ErrorHandler, MultiFileAnalysis } from '../../utils/plugin-utilities.js';
14
+ import { getAnalysisCache } from '../../cache/index.js';
15
+ // Common Node.js modules - Use these instead of require()
16
+ import { basename, extname, relative } from 'path';
17
+ export class CodeQualityAnalyzer extends BasePlugin {
18
+ constructor() {
19
+ super();
20
+ this.name = 'analyze_code_quality';
21
+ this.category = 'analyze';
22
+ this.description = 'Analyze code quality including complexity, maintainability, and best practices adherence';
23
+ // Universal parameter set - supports both single and multi-file scenarios
24
+ this.parameters = {
25
+ // Single-file parameters
26
+ code: {
27
+ type: 'string',
28
+ description: 'The code to analyze (for single-file analysis)',
29
+ required: false
30
+ },
31
+ filePath: {
32
+ type: 'string',
33
+ description: 'Path to single file to analyze',
34
+ required: false
35
+ },
36
+ // Multi-file parameters
37
+ projectPath: {
38
+ type: 'string',
39
+ description: 'Path to project root (for multi-file analysis)',
40
+ required: false
41
+ },
42
+ files: {
43
+ type: 'array',
44
+ description: 'Array of specific file paths (for multi-file analysis)',
45
+ required: false,
46
+ items: { type: 'string' }
47
+ },
48
+ maxDepth: {
49
+ type: 'number',
50
+ description: 'Maximum directory depth for multi-file discovery (1-5)',
51
+ required: false,
52
+ default: 3
53
+ },
54
+ // Universal parameters
55
+ language: {
56
+ type: 'string',
57
+ description: 'Programming language',
58
+ required: false,
59
+ default: 'javascript'
60
+ },
61
+ analysisDepth: {
62
+ type: 'string',
63
+ description: 'Level of analysis detail',
64
+ enum: ['basic', 'detailed', 'comprehensive'],
65
+ default: 'detailed',
66
+ required: false
67
+ },
68
+ analysisType: {
69
+ type: 'string',
70
+ description: 'Type of analysis to perform',
71
+ enum: ['complexity', 'maintainability', 'comprehensive'],
72
+ default: 'comprehensive',
73
+ required: false
74
+ }
75
+ };
76
+ this.analysisCache = getAnalysisCache();
77
+ this.multiFileAnalysis = new MultiFileAnalysis();
78
+ // Cache and analysis utilities are initialized above
79
+ }
80
+ async execute(params, llmClient) {
81
+ return await withSecurity(this, params, llmClient, async (secureParams) => {
82
+ try {
83
+ // 1. Auto-detect analysis mode based on parameters
84
+ const analysisMode = this.detectAnalysisMode(secureParams);
85
+ // 2. Validate parameters based on detected mode
86
+ this.validateParameters(secureParams, analysisMode);
87
+ // 3. Setup model
88
+ const { model, contextLength } = await ModelSetup.getReadyModel(llmClient);
89
+ // 4. Route to appropriate analysis method
90
+ if (analysisMode === 'single-file') {
91
+ return await this.executeSingleFileAnalysis(secureParams, model, contextLength);
92
+ }
93
+ else {
94
+ return await this.executeMultiFileAnalysis(secureParams, model, contextLength);
95
+ }
96
+ }
97
+ catch (error) {
98
+ return ErrorHandler.createExecutionError('analyze_code_quality', error);
99
+ }
100
+ });
101
+ }
102
+ /**
103
+ * Auto-detect whether this is single-file or multi-file analysis
104
+ *
105
+ * DETECTION GUIDE:
106
+ * Single-file: code, filePath provided → analyze individual file
107
+ * Multi-file: projectPath, files, maxDepth provided → analyze project/multiple files
108
+ * Default: Choose based on your plugin's primary use case
109
+ */
110
+ detectAnalysisMode(params) {
111
+ // Single-file indicators take priority
112
+ if (params.code || params.filePath) {
113
+ return 'single-file';
114
+ }
115
+ // Multi-file indicators
116
+ if (params.projectPath || params.files) {
117
+ return 'multi-file';
118
+ }
119
+ // For code quality, default to single-file (analyze individual files)
120
+ return 'single-file';
121
+ }
122
+ /**
123
+ * Validate parameters based on detected analysis mode
124
+ */
125
+ validateParameters(params, mode) {
126
+ if (mode === 'single-file') {
127
+ ParameterValidator.validateCodeOrFile(params);
128
+ }
129
+ else {
130
+ ParameterValidator.validateProjectPath(params);
131
+ ParameterValidator.validateDepth(params);
132
+ }
133
+ // Universal validations
134
+ ParameterValidator.validateEnum(params, 'analysisType', ['complexity', 'maintainability', 'comprehensive']);
135
+ ParameterValidator.validateEnum(params, 'analysisDepth', ['basic', 'detailed', 'comprehensive']);
136
+ }
137
+ /**
138
+ * Execute single-file analysis
139
+ */
140
+ async executeSingleFileAnalysis(params, model, contextLength) {
141
+ // Process single file input
142
+ let codeToAnalyze = params.code;
143
+ if (params.filePath) {
144
+ codeToAnalyze = await readFileContent(params.filePath);
145
+ }
146
+ // Generate prompt stages for single file
147
+ const promptStages = this.getSingleFilePromptStages({
148
+ ...params,
149
+ code: codeToAnalyze
150
+ });
151
+ // Execute with appropriate method
152
+ const promptManager = new ThreeStagePromptManager(contextLength);
153
+ const needsChunking = promptManager.needsChunking(promptStages);
154
+ if (needsChunking) {
155
+ const conversation = promptManager.createChunkedConversation(promptStages);
156
+ const messages = [
157
+ conversation.systemMessage,
158
+ ...conversation.dataMessages,
159
+ conversation.analysisMessage
160
+ ];
161
+ return await ResponseProcessor.executeChunked(messages, model, contextLength, 'analyze_code_quality', 'single');
162
+ }
163
+ else {
164
+ return await ResponseProcessor.executeDirect(promptStages, model, contextLength, 'analyze_code_quality');
165
+ }
166
+ }
167
+ /**
168
+ * Execute multi-file analysis
169
+ */
170
+ async executeMultiFileAnalysis(params, model, contextLength) {
171
+ // Discover files
172
+ let filesToAnalyze = params.files ||
173
+ await this.discoverRelevantFiles(params.projectPath, params.maxDepth, params.analysisType);
174
+ // Perform multi-file analysis with caching
175
+ const analysisResult = await this.performMultiFileAnalysis(filesToAnalyze, params, model, contextLength);
176
+ // Generate prompt stages for multi-file
177
+ const promptStages = this.getMultiFilePromptStages({
178
+ ...params,
179
+ analysisResult,
180
+ fileCount: filesToAnalyze.length
181
+ });
182
+ // Always use chunking for multi-file
183
+ const promptManager = new ThreeStagePromptManager(contextLength);
184
+ const conversation = promptManager.createChunkedConversation(promptStages);
185
+ const messages = [
186
+ conversation.systemMessage,
187
+ ...conversation.dataMessages,
188
+ conversation.analysisMessage
189
+ ];
190
+ return await ResponseProcessor.executeChunked(messages, model, contextLength, 'analyze_code_quality', 'multifile');
191
+ }
192
+ /**
193
+ * Single-file code quality analysis
194
+ */
195
+ getSingleFilePromptStages(params) {
196
+ const { code, language, analysisDepth, analysisType } = params;
197
+ const systemAndContext = `You are an expert code quality analyst specializing in ${analysisDepth} ${analysisType} analysis.
198
+
199
+ Analysis Context:
200
+ - Language: ${language}
201
+ - Analysis Depth: ${analysisDepth}
202
+ - Analysis Type: ${analysisType}
203
+ - Mode: Single File Quality Analysis
204
+
205
+ Your task is to analyze code quality metrics including complexity, maintainability, readability, and adherence to best practices for this individual file.`;
206
+ const dataPayload = `Code to analyze:
207
+
208
+ \`\`\`${language}
209
+ ${code}
210
+ \`\`\``;
211
+ const outputInstructions = `Provide comprehensive code quality analysis including:
212
+
213
+ **Quality Assessment Overview**
214
+ - Overall quality evaluation with numerical scoring out of 10
215
+ - Complexity assessment focusing on cyclomatic complexity and maintainability
216
+ - Readability evaluation covering naming conventions, code organization, and clarity
217
+ - Maintainability score considering future modification ease
218
+
219
+ **Detailed Quality Analysis**
220
+ - Cyclomatic complexity assessment with specific complexity hotspots
221
+ - Function and method length analysis identifying overly complex functions
222
+ - Variable naming consistency and clarity evaluation
223
+ - Code organization patterns and structural assessment
224
+ - Documentation quality and inline comment effectiveness
225
+
226
+ **Best Practices Adherence Evaluation**
227
+ - SOLID principles compliance with specific examples and scoring
228
+ - DRY principle adherence identifying code duplication patterns
229
+ - Error handling consistency and robustness assessment
230
+ - Language-specific best practices and idiom usage
231
+ - Performance considerations and optimization opportunities
232
+
233
+ **Quality Issues and Recommendations**
234
+ - Critical quality issues requiring immediate attention with specific line references
235
+ - Important improvements for maintainability and readability enhancement
236
+ - Minor refinements and polish opportunities for code excellence
237
+ - Prioritized recommendation list focusing on highest impact improvements first
238
+
239
+ **Implementation Guidance**
240
+ - Specific actionable steps for addressing identified quality issues
241
+ - Code refactoring suggestions with examples where applicable
242
+ - Long-term quality improvement strategies and practices
243
+ - Confidence assessment of the analysis accuracy and completeness
244
+
245
+ Focus on providing actionable insights that developers can implement immediately to improve code quality, maintainability, and team productivity.`;
246
+ return { systemAndContext, dataPayload, outputInstructions };
247
+ }
248
+ /**
249
+ * Multi-file project quality analysis
250
+ */
251
+ getMultiFilePromptStages(params) {
252
+ const { analysisResult, analysisType, analysisDepth, fileCount } = params;
253
+ const systemAndContext = `You are an expert project code quality analyst specializing in ${analysisDepth} ${analysisType} analysis.
254
+
255
+ Analysis Context:
256
+ - Analysis Type: ${analysisType}
257
+ - Analysis Depth: ${analysisDepth}
258
+ - Files Analyzed: ${fileCount}
259
+ - Mode: Project-wide Quality Analysis
260
+
261
+ Your task is to provide comprehensive code quality assessment across the entire project, identifying patterns, consistency issues, and quality metrics.`;
262
+ const dataPayload = `Project quality analysis results:
263
+
264
+ ${JSON.stringify(analysisResult, null, 2)}`;
265
+ const outputInstructions = `Provide comprehensive project-wide code quality analysis including:
266
+
267
+ **Project Quality Overview**
268
+ - Overall project quality assessment with numerical scoring and quality maturity evaluation
269
+ - Quality consistency analysis across the entire codebase identifying patterns and variations
270
+ - Project maintainability assessment focusing on long-term sustainability and evolution capability
271
+
272
+ **Quality Distribution Analysis**
273
+ - Quality variance across files identifying high-performing and problematic areas
274
+ - Consistency patterns in coding standards, naming conventions, and structural approaches
275
+ - Quality hotspots requiring immediate attention and areas of excellence to replicate
276
+
277
+ **Cross-File Quality Patterns**
278
+ - Consistent quality patterns and practices implemented well across multiple files
279
+ - Inconsistent areas showing quality variations that impact team productivity
280
+ - Systematic quality issues affecting multiple components or architectural layers
281
+ - Code quality trends and evolution patterns throughout the project structure
282
+
283
+ **Strategic Quality Issues**
284
+ - Critical systemic problems affecting multiple files requiring architectural attention
285
+ - Quality consistency issues creating maintenance burden and reducing team velocity
286
+ - Technical debt accumulation patterns and their impact on project sustainability
287
+ - Cross-cutting concerns and quality patterns that span multiple modules or components
288
+
289
+ **Project Quality Recommendations**
290
+ - Immediate action items for addressing urgent quality problems across the project
291
+ - Quality standards and coding guidelines recommendations for team adoption
292
+ - Tooling and automation suggestions for maintaining consistent quality levels
293
+ - Refactoring prioritization strategy focusing on highest impact quality improvements
294
+ - Long-term quality improvement roadmap and architectural evolution guidance
295
+
296
+ **Implementation Strategy**
297
+ - Phase-based approach to implementing quality improvements across the project
298
+ - Team adoption strategies for quality standards and best practices
299
+ - Measurement and monitoring approaches for tracking quality improvements over time
300
+ - Project quality maturity assessment and growth pathway recommendations
301
+
302
+ Focus on providing strategic, actionable insights that improve overall project quality, team productivity, and long-term maintainability across the entire codebase.`;
303
+ return { systemAndContext, dataPayload, outputInstructions };
304
+ }
305
+ /**
306
+ * Backwards compatibility method
307
+ */
308
+ getPromptStages(params) {
309
+ const mode = this.detectAnalysisMode(params);
310
+ if (mode === 'single-file') {
311
+ return this.getSingleFilePromptStages(params);
312
+ }
313
+ else {
314
+ return this.getMultiFilePromptStages(params);
315
+ }
316
+ }
317
+ // Multi-file helper methods
318
+ async discoverRelevantFiles(projectPath, maxDepth, analysisType) {
319
+ const extensions = this.getFileExtensions(analysisType);
320
+ return await this.multiFileAnalysis.discoverFiles(projectPath, extensions, maxDepth);
321
+ }
322
+ async performMultiFileAnalysis(files, params, model, contextLength) {
323
+ const cacheKey = this.analysisCache.generateKey('analyze_code_quality', params, files);
324
+ const cached = await this.analysisCache.get(cacheKey);
325
+ if (cached)
326
+ return cached;
327
+ const fileAnalysisResults = await this.multiFileAnalysis.analyzeBatch(files, (file) => this.analyzeIndividualFile(file, params, model), contextLength);
328
+ // Aggregate results for quality analysis
329
+ const aggregatedResult = {
330
+ summary: `Code quality analysis of ${files.length} files`,
331
+ findings: fileAnalysisResults,
332
+ qualityMetrics: {
333
+ totalFiles: files.length,
334
+ averageComplexity: this.calculateAverageComplexity(fileAnalysisResults),
335
+ qualityDistribution: this.analyzeQualityDistribution(fileAnalysisResults),
336
+ commonIssues: this.identifyCommonIssues(fileAnalysisResults)
337
+ }
338
+ };
339
+ await this.analysisCache.cacheAnalysis(cacheKey, aggregatedResult, {
340
+ modelUsed: model.identifier || 'unknown',
341
+ executionTime: Date.now() - Date.now(),
342
+ timestamp: new Date().toISOString()
343
+ });
344
+ return aggregatedResult;
345
+ }
346
+ async analyzeIndividualFile(file, params, model) {
347
+ const content = await import('fs/promises').then(fs => fs.readFile(file, 'utf-8'));
348
+ const stats = await import('fs/promises').then(fs => fs.stat(file));
349
+ return {
350
+ filePath: file,
351
+ fileName: basename(file), // ✅ Use imported basename instead of require('path').basename
352
+ size: content.length,
353
+ lines: content.split('\n').length,
354
+ extension: extname(file), // ✅ Use imported extname
355
+ relativePath: relative(params.projectPath || '', file), // ✅ Use imported relative
356
+ complexity: this.estimateComplexity(content),
357
+ qualityScore: this.estimateQualityScore(content)
358
+ };
359
+ }
360
+ getFileExtensions(analysisType) {
361
+ // Updated extensions for code quality analysis
362
+ const extensionMap = {
363
+ 'complexity': ['.js', '.ts', '.jsx', '.tsx', '.py', '.java', '.cs'],
364
+ 'maintainability': ['.js', '.ts', '.jsx', '.tsx', '.py', '.java', '.cs', '.php'],
365
+ 'comprehensive': ['.js', '.ts', '.jsx', '.tsx', '.py', '.java', '.cs', '.php', '.rb', '.go']
366
+ };
367
+ return extensionMap[analysisType] || extensionMap.comprehensive;
368
+ }
369
+ // Quality analysis helper methods
370
+ estimateComplexity(content) {
371
+ const complexityPatterns = [
372
+ /if\s*\(/g, /else/g, /while\s*\(/g, /for\s*\(/g,
373
+ /switch\s*\(/g, /case\s+/g, /catch\s*\(/g, /\?\s*:/g
374
+ ];
375
+ let complexity = 1;
376
+ complexityPatterns.forEach(pattern => {
377
+ const matches = content.match(pattern);
378
+ if (matches) {
379
+ complexity += matches.length;
380
+ }
381
+ });
382
+ return complexity;
383
+ }
384
+ estimateQualityScore(content) {
385
+ let score = 10; // Start with perfect score
386
+ // Deduct points for quality issues
387
+ if (content.includes('console.log'))
388
+ score -= 1; // Debug statements
389
+ if (content.includes('TODO') || content.includes('FIXME'))
390
+ score -= 1; // Incomplete code
391
+ if (content.length > 1000 && !content.includes('\n\n'))
392
+ score -= 1; // Lack of spacing
393
+ if (!/\/\*\*|\*\/|\/\//.test(content))
394
+ score -= 2; // No comments
395
+ return Math.max(0, score);
396
+ }
397
+ calculateAverageComplexity(results) {
398
+ const totalComplexity = results.reduce((sum, result) => sum + (result.complexity || 0), 0);
399
+ return results.length > 0 ? totalComplexity / results.length : 0;
400
+ }
401
+ analyzeQualityDistribution(results) {
402
+ const distribution = { high: 0, medium: 0, low: 0 };
403
+ results.forEach(result => {
404
+ const score = result.qualityScore || 0;
405
+ if (score >= 8)
406
+ distribution.high++;
407
+ else if (score >= 6)
408
+ distribution.medium++;
409
+ else
410
+ distribution.low++;
411
+ });
412
+ return distribution;
413
+ }
414
+ identifyCommonIssues(results) {
415
+ const issues = [];
416
+ const highComplexityFiles = results.filter(r => (r.complexity || 0) > 10).length;
417
+ if (highComplexityFiles > results.length * 0.2) {
418
+ issues.push('High complexity in multiple files');
419
+ }
420
+ const lowQualityFiles = results.filter(r => (r.qualityScore || 0) < 6).length;
421
+ if (lowQualityFiles > results.length * 0.1) {
422
+ issues.push('Quality issues across multiple files');
423
+ }
424
+ return issues;
425
+ }
426
+ generateCacheKey(files, params) {
427
+ const fileHash = files.join('|');
428
+ const paramHash = JSON.stringify(params);
429
+ return `${fileHash}_${paramHash}`.substring(0, 64);
430
+ }
431
+ }
432
+ export default CodeQualityAnalyzer;
433
+ //# sourceMappingURL=code-quality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-quality.js","sourceRoot":"","sources":["../../../src/prompts/analyze/code-quality.ts"],"names":[],"mappings":"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"}