@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,569 @@
1
+ /**
2
+ * Plugin Template - Modern v4.2 (Single Source of Truth)
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, dirname, extname, relative } from 'path';
17
+ import { readFile, stat } from 'fs/promises';
18
+ export class ProjectStructureAnalyzer extends BasePlugin {
19
+ constructor() {
20
+ super();
21
+ this.name = 'analyze_project_structure';
22
+ this.category = 'analyze';
23
+ this.description = 'Analyze complete project structure and architecture with actionable strategic recommendations';
24
+ // Universal parameter set - supports both single and multi-file scenarios
25
+ this.parameters = {
26
+ // Single-file parameters
27
+ code: {
28
+ type: 'string',
29
+ description: 'The code to analyze (for single-file analysis)',
30
+ required: false
31
+ },
32
+ filePath: {
33
+ type: 'string',
34
+ description: 'Path to single file to analyze',
35
+ required: false
36
+ },
37
+ // Multi-file parameters
38
+ projectPath: {
39
+ type: 'string',
40
+ description: 'Absolute path to project root',
41
+ required: false
42
+ },
43
+ files: {
44
+ type: 'array',
45
+ description: 'Array of specific file paths (for multi-file analysis)',
46
+ required: false,
47
+ items: { type: 'string' }
48
+ },
49
+ maxDepth: {
50
+ type: 'number',
51
+ description: 'Maximum directory depth to analyze (1-5)',
52
+ required: false,
53
+ default: 3
54
+ },
55
+ // Universal parameters
56
+ language: {
57
+ type: 'string',
58
+ description: 'Programming language',
59
+ required: false,
60
+ default: 'javascript'
61
+ },
62
+ analysisDepth: {
63
+ type: 'string',
64
+ description: 'Level of analysis detail',
65
+ enum: ['basic', 'detailed', 'comprehensive'],
66
+ default: 'detailed',
67
+ required: false
68
+ },
69
+ analysisType: {
70
+ type: 'string',
71
+ description: 'Type of analysis to perform',
72
+ enum: ['architecture', 'patterns', 'comprehensive'],
73
+ default: 'comprehensive',
74
+ required: false
75
+ },
76
+ focusAreas: {
77
+ type: 'array',
78
+ description: 'Areas to focus on: architecture, dependencies, complexity, patterns',
79
+ required: false,
80
+ default: [],
81
+ items: { type: 'string' }
82
+ }
83
+ };
84
+ this.analysisCache = getAnalysisCache();
85
+ this.multiFileAnalysis = new MultiFileAnalysis();
86
+ // Cache and analysis utilities are initialized above
87
+ }
88
+ async execute(params, llmClient) {
89
+ return await withSecurity(this, params, llmClient, async (secureParams) => {
90
+ try {
91
+ // 1. Auto-detect analysis mode based on parameters
92
+ const analysisMode = this.detectAnalysisMode(secureParams);
93
+ // 2. Validate parameters based on detected mode
94
+ this.validateParameters(secureParams, analysisMode);
95
+ // 3. Setup model
96
+ const { model, contextLength } = await ModelSetup.getReadyModel(llmClient);
97
+ // 4. Route to appropriate analysis method
98
+ if (analysisMode === 'single-file') {
99
+ return await this.executeSingleFileAnalysis(secureParams, model, contextLength);
100
+ }
101
+ else {
102
+ return await this.executeMultiFileAnalysis(secureParams, model, contextLength);
103
+ }
104
+ }
105
+ catch (error) {
106
+ return ErrorHandler.createExecutionError('analyze_project_structure', error);
107
+ }
108
+ });
109
+ }
110
+ /**
111
+ * Auto-detect whether this is single-file or multi-file analysis
112
+ */
113
+ detectAnalysisMode(params) {
114
+ // Single-file indicators take priority (avoids default parameter issues)
115
+ if (params.code || params.filePath) {
116
+ return 'single-file';
117
+ }
118
+ // Multi-file indicators
119
+ if (params.projectPath || params.files) {
120
+ return 'multi-file';
121
+ }
122
+ // Default to multi-file for project structure analysis
123
+ return 'multi-file';
124
+ }
125
+ /**
126
+ * Validate parameters based on detected analysis mode
127
+ */
128
+ validateParameters(params, mode) {
129
+ if (mode === 'single-file') {
130
+ ParameterValidator.validateCodeOrFile(params);
131
+ }
132
+ else {
133
+ ParameterValidator.validateProjectPath(params);
134
+ ParameterValidator.validateDepth(params);
135
+ }
136
+ // Universal validations
137
+ ParameterValidator.validateEnum(params, 'analysisType', ['architecture', 'patterns', 'comprehensive']);
138
+ ParameterValidator.validateEnum(params, 'analysisDepth', ['basic', 'detailed', 'comprehensive']);
139
+ }
140
+ /**
141
+ * Execute single-file analysis
142
+ */
143
+ async executeSingleFileAnalysis(params, model, contextLength) {
144
+ // Process single file input
145
+ let codeToAnalyze = params.code;
146
+ if (params.filePath) {
147
+ codeToAnalyze = await readFileContent(params.filePath);
148
+ }
149
+ // Generate prompt stages for single file
150
+ const promptStages = this.getSingleFilePromptStages({
151
+ ...params,
152
+ code: codeToAnalyze
153
+ });
154
+ // Execute with appropriate method
155
+ const promptManager = new ThreeStagePromptManager(contextLength);
156
+ const needsChunking = promptManager.needsChunking(promptStages);
157
+ if (needsChunking) {
158
+ const conversation = promptManager.createChunkedConversation(promptStages);
159
+ const messages = [
160
+ conversation.systemMessage,
161
+ ...conversation.dataMessages,
162
+ conversation.analysisMessage
163
+ ];
164
+ return await ResponseProcessor.executeChunked(messages, model, contextLength, 'analyze_project_structure', 'single');
165
+ }
166
+ else {
167
+ return await ResponseProcessor.executeDirect(promptStages, model, contextLength, 'analyze_project_structure');
168
+ }
169
+ }
170
+ /**
171
+ * Execute multi-file analysis
172
+ */
173
+ async executeMultiFileAnalysis(params, model, contextLength) {
174
+ // Discover files
175
+ let filesToAnalyze = params.files ||
176
+ await this.discoverRelevantFiles(params.projectPath, params.maxDepth, params.analysisType);
177
+ // Perform multi-file analysis with caching
178
+ const analysisResult = await this.performMultiFileAnalysis(filesToAnalyze, params, model, contextLength);
179
+ // Generate prompt stages for multi-file
180
+ const promptStages = this.getMultiFilePromptStages({
181
+ ...params,
182
+ analysisResult,
183
+ fileCount: filesToAnalyze.length
184
+ });
185
+ // Always use chunking for multi-file
186
+ const promptManager = new ThreeStagePromptManager(contextLength);
187
+ const conversation = promptManager.createChunkedConversation(promptStages);
188
+ const messages = [
189
+ conversation.systemMessage,
190
+ ...conversation.dataMessages,
191
+ conversation.analysisMessage
192
+ ];
193
+ return await ResponseProcessor.executeChunked(messages, model, contextLength, 'analyze_project_structure', 'multifile');
194
+ }
195
+ /**
196
+ * Single-file structure analysis - focuses on file's role in larger architecture
197
+ */
198
+ getSingleFilePromptStages(params) {
199
+ const { code, language, analysisDepth, analysisType, filePath } = params;
200
+ const fileName = filePath ? basename(filePath) : 'unknown';
201
+ const focusAreas = params.focusAreas || [];
202
+ const systemAndContext = `You are a senior software architect with 15+ years of experience analyzing codebases and providing strategic guidance to development teams.
203
+
204
+ **YOUR EXPERTISE:**
205
+ - Identifying architectural patterns and anti-patterns
206
+ - Recognizing scalability bottlenecks and technical debt
207
+ - Providing actionable recommendations that balance pragmatism with best practices
208
+ - Understanding business impact of technical decisions
209
+
210
+ **ANALYSIS CONTEXT:**
211
+ - File: ${fileName}
212
+ - Language: ${language}
213
+ - Analysis Depth: ${analysisDepth}
214
+ - Analysis Type: ${analysisType}
215
+ - Focus Areas: ${focusAreas.length ? focusAreas.join(', ') : 'comprehensive'}
216
+ - Mode: Single File Architectural Analysis
217
+
218
+ **YOUR MISSION:**
219
+ Analyze this file's role in the broader architecture. Don't just describe what it does - explain its strategic importance, potential issues, and how it fits into modern software patterns.`;
220
+ const dataPayload = `File to analyze: ${fileName}
221
+
222
+ \`\`\`${language}
223
+ ${code}
224
+ \`\`\``;
225
+ const outputInstructions = `Provide comprehensive architectural analysis of this file covering:
226
+
227
+ **Executive Summary:**
228
+ - **File Role**: What role does this file play in the overall architecture?
229
+ - **Architectural Pattern**: What pattern does this file implement or support?
230
+ - **Business Criticality**: How critical is this file to business operations?
231
+
232
+ **Structural Analysis:**
233
+ - **Primary Responsibilities**: List the main responsibilities of this file
234
+ - **Dependencies**:
235
+ - Key imports and what this file relies on
236
+ - What this file exports and provides to other parts
237
+ - Coupling assessment (tight/loose/moderate) with explanation
238
+ - **Design Patterns**: Identify any design patterns used in this file
239
+ - **Code Organization**: Assessment of how well the code is structured internally
240
+
241
+ **Architectural Insights:**
242
+ - **Strengths & Opportunities**: What this file does well architecturally
243
+ - **Technical Debt**: Areas where technical debt is accumulating
244
+ - **Scalability Considerations**: How will this file behave as the system grows?
245
+ - **Maintainability Score**: Rate 1-10 with detailed explanation
246
+
247
+ **Strategic Recommendations:**
248
+ For each recommendation, provide:
249
+ - **Priority**: High/medium/low priority level
250
+ - **Recommendation**: Specific actionable recommendation
251
+ - **Rationale**: Why this matters for the business/team
252
+ - **Effort**: Low/medium/high implementation effort
253
+ - **Impact**: Business or technical impact of implementing this
254
+
255
+ **Confidence Assessment:** Your confidence level in this analysis
256
+
257
+ Focus on strategic architectural insights that help developers make better decisions, not just code review comments.`;
258
+ return { systemAndContext, dataPayload, outputInstructions };
259
+ }
260
+ /**
261
+ * Multi-file project structure analysis - comprehensive architectural overview
262
+ */
263
+ getMultiFilePromptStages(params) {
264
+ const { analysisResult, analysisType, analysisDepth, fileCount, projectPath } = params;
265
+ const focusAreas = params.focusAreas || [];
266
+ const projectName = projectPath ? basename(projectPath) : 'Project';
267
+ const systemAndContext = `You are a senior software architect and technical consultant specializing in ${analysisDepth} ${analysisType} analysis.
268
+
269
+ **YOUR EXPERTISE:**
270
+ - 15+ years architecting scalable software systems
271
+ - Expert in identifying patterns, anti-patterns, and architectural smells
272
+ - Skilled at translating technical analysis into business recommendations
273
+ - Proven track record helping teams improve system design and maintainability
274
+
275
+ **PROJECT CONTEXT:**
276
+ - Project: ${projectName}
277
+ - Files Analyzed: ${fileCount}
278
+ - Analysis Type: ${analysisType}
279
+ - Analysis Depth: ${analysisDepth}
280
+ - Focus Areas: ${focusAreas.length ? focusAreas.join(', ') : 'comprehensive architecture'}
281
+ - Mode: Complete Project Architecture Analysis
282
+
283
+ **YOUR MISSION:**
284
+ Provide a comprehensive architectural assessment that helps the development team understand their system's current state and chart a path forward. Focus on actionable insights that balance technical excellence with practical business needs.`;
285
+ const dataPayload = `Complete project structure analysis:
286
+
287
+ ${JSON.stringify(analysisResult, null, 2)}`;
288
+ const outputInstructions = `Provide comprehensive project architecture analysis covering:
289
+
290
+ **Executive Summary:**
291
+ - **Overall Architectural Health**: Assess as excellent/good/concerning/poor with 2-sentence explanation
292
+ - **Primary Strengths**: Top 3 architectural strengths of this project
293
+ - **Critical Concerns**: Top 3 areas requiring immediate attention
294
+ - **Recommended Focus**: What should the team prioritize next?
295
+
296
+ **Architectural Overview:**
297
+ - **Detected Patterns**: For each pattern found:
298
+ - Pattern name (e.g., MVC, Microservices, Layered)
299
+ - Implementation quality (well/partially/poorly implemented)
300
+ - Impact on the system
301
+ - **System Complexity**:
302
+ - Complexity level (low/moderate/high/excessive)
303
+ - Justification for this complexity level
304
+ - Whether the complexity is manageable
305
+ - **Code Organization**:
306
+ - Directory structure assessment (well-organized/adequate/chaotic)
307
+ - Separation of concerns (clear/mixed/tangled)
308
+ - Consistency score (1-10 with explanation)
309
+
310
+ **Dependency Analysis:**
311
+ - **External Dependencies**:
312
+ - Count and risk level assessment (low/medium/high)
313
+ - List of concerning outdated dependencies
314
+ - Dependency management recommendations
315
+ - **Internal Coupling**:
316
+ - Coupling level (loose/moderate/tight)
317
+ - Files or modules with coupling issues
318
+ - Specific decoupling suggestions
319
+
320
+ **Quality and Maintainability:**
321
+ - **Code Quality Score**: Rate 1-10 with detailed explanation
322
+ - **Technical Debt Areas**: For each area:
323
+ - Specific area of technical debt
324
+ - Severity (low/medium/high/critical)
325
+ - Business impact explanation
326
+ - Specific remediation steps
327
+ - **Testability**: Assessment of how easy this codebase is to test
328
+ - **Documentation**: Current state of project documentation
329
+
330
+ **Scalability and Performance:**
331
+ - **Current Scalability**: Assessment of how well this system will scale
332
+ - **Performance Bottlenecks**: Identified or potential performance issues
333
+ - **Resource Utilization**: Efficient or concerning resource usage patterns
334
+ - **Scaling Recommendations**: Specific recommendations for growth
335
+
336
+ **Strategic Recommendations:**
337
+ For each recommendation, provide:
338
+ - **Category**: architecture/dependencies/quality/performance/team
339
+ - **Priority**: critical/high/medium/low
340
+ - **Recommendation**: Specific actionable recommendation
341
+ - **Business Justification**: Why this matters for business success
342
+ - **Technical Justification**: Technical reasoning
343
+ - **Estimated Effort**: hours/days/weeks/months
344
+ - **Expected Impact**: Measurable impact on team or system
345
+ - **Prerequisites**: What needs to happen first
346
+ - **Risk of Not Implementing**: What happens if this is ignored
347
+
348
+ **Next Steps:**
349
+ - **Immediate Actions**: Actions to take this week
350
+ - **Short-term Actions**: Actions for next 1-3 months
351
+ - **Long-term Initiatives**: Strategic initiatives for 6+ months
352
+ - **Team Capability Needs**: Skills or knowledge the team should develop
353
+
354
+ Focus on recommendations that help the team ship better software faster. Every suggestion should clearly explain both the technical benefit and business value.`;
355
+ return { systemAndContext, dataPayload, outputInstructions };
356
+ }
357
+ /**
358
+ * Backwards compatibility method
359
+ */
360
+ getPromptStages(params) {
361
+ const mode = this.detectAnalysisMode(params);
362
+ if (mode === 'single-file') {
363
+ return this.getSingleFilePromptStages(params);
364
+ }
365
+ else {
366
+ return this.getMultiFilePromptStages(params);
367
+ }
368
+ }
369
+ // Multi-file helper methods
370
+ async discoverRelevantFiles(projectPath, maxDepth, analysisType) {
371
+ const extensions = this.getFileExtensions(analysisType);
372
+ return await this.multiFileAnalysis.discoverFiles(projectPath, extensions, maxDepth);
373
+ }
374
+ async performMultiFileAnalysis(files, params, model, contextLength) {
375
+ const cacheKey = this.analysisCache.generateKey('analyze_project_structure', params, files);
376
+ const cached = await this.analysisCache.get(cacheKey);
377
+ if (cached)
378
+ return cached;
379
+ const fileAnalysisResults = await this.multiFileAnalysis.analyzeBatch(files, (file) => this.analyzeIndividualFile(file, params, model), contextLength);
380
+ // Aggregate results into comprehensive project analysis
381
+ const aggregatedResult = {
382
+ summary: `Project structure analysis of ${files.length} files`,
383
+ projectMetrics: {
384
+ totalFiles: files.length,
385
+ totalSize: fileAnalysisResults.reduce((sum, result) => sum + (result.size || 0), 0),
386
+ averageFileSize: Math.round(fileAnalysisResults.reduce((sum, result) => sum + (result.size || 0), 0) / files.length),
387
+ totalLines: fileAnalysisResults.reduce((sum, result) => sum + (result.lines || 0), 0),
388
+ fileTypeDistribution: this.analyzeFileTypes(fileAnalysisResults),
389
+ directoryStructure: this.analyzeDirectoryStructure(files, params.projectPath)
390
+ },
391
+ architecturalInsights: {
392
+ largestFiles: fileAnalysisResults
393
+ .sort((a, b) => (b.size || 0) - (a.size || 0))
394
+ .slice(0, 10)
395
+ .map(f => ({ path: f.relativePath, size: f.size, lines: f.lines })),
396
+ complexityIndicators: this.calculateComplexityMetrics(fileAnalysisResults),
397
+ organizationPatterns: this.identifyOrganizationPatterns(files),
398
+ dependencyStructure: this.analyzeDependencyStructure(fileAnalysisResults)
399
+ },
400
+ fileAnalysisResults
401
+ };
402
+ await this.analysisCache.cacheAnalysis(cacheKey, aggregatedResult, {
403
+ modelUsed: model.identifier || 'unknown',
404
+ executionTime: Date.now() - Date.now(), // TODO: Track actual execution time
405
+ timestamp: new Date().toISOString()
406
+ });
407
+ return aggregatedResult;
408
+ }
409
+ async analyzeIndividualFile(file, params, model) {
410
+ const content = await readFile(file, 'utf-8');
411
+ const stats = await stat(file);
412
+ return {
413
+ filePath: file,
414
+ fileName: basename(file),
415
+ size: content.length,
416
+ lines: content.split('\n').length,
417
+ extension: extname(file),
418
+ relativePath: relative(params.projectPath || '', file),
419
+ directory: dirname(relative(params.projectPath || '', file)),
420
+ isEmpty: content.trim().length === 0,
421
+ isConfigFile: this.isConfigFile(file),
422
+ isTestFile: this.isTestFile(file),
423
+ lastModified: stats.mtime,
424
+ // Basic complexity indicators
425
+ functionsCount: this.countFunctions(content),
426
+ importsCount: this.countImports(content),
427
+ exportsCount: this.countExports(content)
428
+ };
429
+ }
430
+ getFileExtensions(analysisType) {
431
+ const extensionMap = {
432
+ 'architecture': ['.js', '.ts', '.jsx', '.tsx', '.py', '.java', '.cs', '.php', '.rb', '.go', '.json', '.yaml', '.yml', '.xml'],
433
+ 'patterns': ['.js', '.ts', '.jsx', '.tsx', '.py', '.java', '.cs', '.php', '.rb', '.go', '.vue', '.svelte'],
434
+ 'comprehensive': ['.js', '.ts', '.jsx', '.tsx', '.py', '.java', '.cs', '.php', '.rb', '.go', '.vue', '.svelte', '.json', '.yaml', '.yml', '.xml', '.md', '.txt', '.css', '.scss', '.less']
435
+ };
436
+ return extensionMap[analysisType] || extensionMap.comprehensive;
437
+ }
438
+ // Helper methods for analysis
439
+ analyzeFileTypes(results) {
440
+ const typeCount = {};
441
+ results.forEach(result => {
442
+ const ext = result.extension || 'no-extension';
443
+ typeCount[ext] = (typeCount[ext] || 0) + 1;
444
+ });
445
+ return typeCount;
446
+ }
447
+ analyzeDirectoryStructure(files, projectPath) {
448
+ const structure = {};
449
+ files.forEach(file => {
450
+ const relativePath = projectPath ? relative(projectPath, file) : file;
451
+ const parts = relativePath.split(/[\/\\]/);
452
+ let current = structure;
453
+ parts.forEach((part, index) => {
454
+ if (index === parts.length - 1) {
455
+ // It's a file
456
+ if (!current._files)
457
+ current._files = [];
458
+ current._files.push(part);
459
+ }
460
+ else {
461
+ // It's a directory
462
+ if (!current[part])
463
+ current[part] = {};
464
+ current = current[part];
465
+ }
466
+ });
467
+ });
468
+ return structure;
469
+ }
470
+ calculateComplexityMetrics(results) {
471
+ const sizes = results.map(r => r.size || 0);
472
+ const lines = results.map(r => r.lines || 0);
473
+ return {
474
+ fileSizeVariance: this.calculateVariance(sizes),
475
+ lineLengthVariance: this.calculateVariance(lines),
476
+ largeFileCount: sizes.filter(s => s > 10000).length,
477
+ veryLargeFileCount: sizes.filter(s => s > 50000).length
478
+ };
479
+ }
480
+ identifyOrganizationPatterns(files) {
481
+ const patterns = [];
482
+ // Check for common patterns
483
+ if (files.some(f => f.includes('/src/')))
484
+ patterns.push('src-directory');
485
+ if (files.some(f => f.includes('/lib/')))
486
+ patterns.push('lib-directory');
487
+ if (files.some(f => f.includes('/components/')))
488
+ patterns.push('component-structure');
489
+ if (files.some(f => f.includes('/utils/') || f.includes('/helpers/')))
490
+ patterns.push('utility-separation');
491
+ if (files.some(f => f.includes('/test/') || f.includes('/__tests__/')))
492
+ patterns.push('test-organization');
493
+ if (files.some(f => f.includes('/config/')))
494
+ patterns.push('configuration-separation');
495
+ return patterns;
496
+ }
497
+ analyzeDependencyStructure(results) {
498
+ const totalImports = results.reduce((sum, r) => sum + (r.importsCount || 0), 0);
499
+ const totalExports = results.reduce((sum, r) => sum + (r.exportsCount || 0), 0);
500
+ const filesWithImports = results.filter(r => (r.importsCount || 0) > 0).length;
501
+ const filesWithExports = results.filter(r => (r.exportsCount || 0) > 0).length;
502
+ return {
503
+ totalImports,
504
+ totalExports,
505
+ averageImportsPerFile: filesWithImports ? Math.round(totalImports / filesWithImports) : 0,
506
+ averageExportsPerFile: filesWithExports ? Math.round(totalExports / filesWithExports) : 0,
507
+ interconnectionLevel: filesWithImports / results.length
508
+ };
509
+ }
510
+ // Utility methods
511
+ isConfigFile(file) {
512
+ const configPatterns = ['.json', '.yaml', '.yml', '.xml', '.ini', '.toml', '.config.', 'package.json', 'tsconfig.', 'webpack.', 'babel.'];
513
+ return configPatterns.some(pattern => file.includes(pattern));
514
+ }
515
+ isTestFile(file) {
516
+ const testPatterns = ['.test.', '.spec.', '__test__', '__spec__', '/test/', '/tests/', '/spec/'];
517
+ return testPatterns.some(pattern => file.includes(pattern));
518
+ }
519
+ countFunctions(content) {
520
+ // Simple function counting - can be enhanced
521
+ const functionPatterns = [
522
+ /function\s+\w+/g,
523
+ /const\s+\w+\s*=\s*\(/g,
524
+ /let\s+\w+\s*=\s*\(/g,
525
+ /\w+\s*:\s*function/g,
526
+ /\w+\s*=>\s*/g
527
+ ];
528
+ return functionPatterns.reduce((count, pattern) => {
529
+ const matches = content.match(pattern);
530
+ return count + (matches ? matches.length : 0);
531
+ }, 0);
532
+ }
533
+ countImports(content) {
534
+ const importPatterns = [
535
+ /^import\s+/gm,
536
+ /^const\s+.*=\s*require\(/gm,
537
+ /^from\s+.*import/gm
538
+ ];
539
+ return importPatterns.reduce((count, pattern) => {
540
+ const matches = content.match(pattern);
541
+ return count + (matches ? matches.length : 0);
542
+ }, 0);
543
+ }
544
+ countExports(content) {
545
+ const exportPatterns = [
546
+ /^export\s+/gm,
547
+ /^module\.exports/gm,
548
+ /^exports\./gm
549
+ ];
550
+ return exportPatterns.reduce((count, pattern) => {
551
+ const matches = content.match(pattern);
552
+ return count + (matches ? matches.length : 0);
553
+ }, 0);
554
+ }
555
+ calculateVariance(numbers) {
556
+ if (numbers.length === 0)
557
+ return 0;
558
+ const mean = numbers.reduce((sum, n) => sum + n, 0) / numbers.length;
559
+ const squaredDiffs = numbers.map(n => Math.pow(n - mean, 2));
560
+ return squaredDiffs.reduce((sum, diff) => sum + diff, 0) / numbers.length;
561
+ }
562
+ generateCacheKey(files, params) {
563
+ const fileHash = files.join('|');
564
+ const paramHash = JSON.stringify(params);
565
+ return `${fileHash}_${paramHash}`.substring(0, 64);
566
+ }
567
+ }
568
+ export default ProjectStructureAnalyzer;
569
+ //# sourceMappingURL=project-structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-structure.js","sourceRoot":"","sources":["../../../src/prompts/analyze/project-structure.ts"],"names":[],"mappings":"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"}