@houtini/lm 1.0.13 → 2.0.1

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