@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,524 +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
- export class PatternFinderPlugin extends BasePlugin {
16
- constructor() {
17
- super();
18
- this.name = 'find_pattern_usage';
19
- this.category = 'analyze';
20
- this.description = 'Find usage of specific patterns across multiple files in a project. Supports regex patterns with intelligent context analysis.';
21
- // Universal parameter set - supports both single and multi-file scenarios
22
- this.parameters = {
23
- // Single-file parameters
24
- code: {
25
- type: 'string',
26
- description: 'The code to analyze (for single-file analysis)',
27
- required: false
28
- },
29
- filePath: {
30
- type: 'string',
31
- description: 'Path to single file to analyze',
32
- required: false
33
- },
34
- // Multi-file parameters
35
- projectPath: {
36
- type: 'string',
37
- description: 'Absolute path to project root directory',
38
- required: false
39
- },
40
- files: {
41
- type: 'array',
42
- description: 'Array of specific file paths (for multi-file analysis)',
43
- required: false,
44
- items: { type: 'string' }
45
- },
46
- maxDepth: {
47
- type: 'number',
48
- description: 'Maximum directory depth for multi-file discovery (1-5)',
49
- required: false
50
- },
51
- // Pattern-specific parameters
52
- patterns: {
53
- type: 'array',
54
- description: 'Patterns to search for (regex supported)',
55
- required: true,
56
- items: { type: 'string' }
57
- },
58
- includeContext: {
59
- type: 'number',
60
- description: 'Number of context lines to include (0-10)',
61
- required: false,
62
- default: 3
63
- },
64
- // Universal parameters
65
- language: {
66
- type: 'string',
67
- description: 'Programming language',
68
- required: false,
69
- default: 'javascript'
70
- },
71
- analysisDepth: {
72
- type: 'string',
73
- description: 'Level of analysis detail',
74
- enum: ['basic', 'detailed', 'comprehensive'],
75
- default: 'detailed',
76
- required: false
77
- },
78
- analysisType: {
79
- type: 'string',
80
- description: 'Type of analysis to perform',
81
- enum: ['patterns', 'security', 'comprehensive'],
82
- default: 'comprehensive',
83
- required: false
84
- }
85
- };
86
- this.analysisCache = getAnalysisCache();
87
- this.multiFileAnalysis = new MultiFileAnalysis();
88
- // Cache and analysis utilities are initialized above
89
- }
90
- async execute(params, llmClient) {
91
- return await withSecurity(this, params, llmClient, async (secureParams) => {
92
- try {
93
- // 1. Auto-detect analysis mode based on parameters
94
- const analysisMode = this.detectAnalysisMode(secureParams);
95
- // 2. Validate parameters based on detected mode
96
- this.validateParameters(secureParams, analysisMode);
97
- // 3. Setup model
98
- const { model, contextLength } = await ModelSetup.getReadyModel(llmClient);
99
- // 4. Route to appropriate analysis method
100
- if (analysisMode === 'single-file') {
101
- return await this.executeSingleFileAnalysis(secureParams, model, contextLength);
102
- }
103
- else {
104
- return await this.executeMultiFileAnalysis(secureParams, model, contextLength);
105
- }
106
- }
107
- catch (error) {
108
- return ErrorHandler.createExecutionError('find_pattern_usage', error);
109
- }
110
- });
111
- }
112
- /**
113
- * Auto-detect whether this is single-file or multi-file analysis
114
- */
115
- detectAnalysisMode(params) {
116
- // Single-file indicators take priority (avoids default parameter issues)
117
- if (params.code || params.filePath) {
118
- return 'single-file';
119
- }
120
- // Multi-file indicators
121
- if (params.projectPath || params.files) {
122
- return 'multi-file';
123
- }
124
- // Default to multi-file for pattern finding (usually project-wide)
125
- return 'multi-file';
126
- }
127
- /**
128
- * Validate parameters based on detected analysis mode
129
- */
130
- validateParameters(params, mode) {
131
- // Validate patterns (required for both modes)
132
- if (!params.patterns || !Array.isArray(params.patterns) || params.patterns.length === 0) {
133
- throw new Error('patterns parameter is required and must be a non-empty array');
134
- }
135
- if (mode === 'single-file') {
136
- ParameterValidator.validateCodeOrFile(params);
137
- }
138
- else {
139
- ParameterValidator.validateProjectPath(params);
140
- ParameterValidator.validateDepth(params, 1, 5);
141
- }
142
- // Universal validations
143
- ParameterValidator.validateEnum(params, 'analysisType', ['patterns', 'security', 'comprehensive']);
144
- ParameterValidator.validateEnum(params, 'analysisDepth', ['basic', 'detailed', 'comprehensive']);
145
- // Validate context lines
146
- if (params.includeContext !== undefined) {
147
- const context = parseInt(params.includeContext);
148
- if (isNaN(context) || context < 0 || context > 10) {
149
- throw new Error('includeContext must be a number between 0 and 10');
150
- }
151
- }
152
- }
153
- /**
154
- * Execute single-file analysis
155
- */
156
- async executeSingleFileAnalysis(params, model, contextLength) {
157
- // Process single file input
158
- let codeToAnalyze = params.code;
159
- if (params.filePath) {
160
- codeToAnalyze = await readFileContent(params.filePath);
161
- }
162
- // Search patterns in the single file
163
- const patternMatches = this.searchPatternsInCode(codeToAnalyze, params.patterns, params.includeContext || 3);
164
- // Generate prompt stages for single file
165
- const promptStages = this.getSingleFilePromptStages({
166
- ...params,
167
- code: codeToAnalyze,
168
- patternMatches
169
- });
170
- // Execute with appropriate method
171
- const promptManager = new ThreeStagePromptManager();
172
- const needsChunking = TokenCalculator.needsChunking(promptStages, contextLength);
173
- if (needsChunking) {
174
- const chunkSize = TokenCalculator.calculateOptimalChunkSize(promptStages, contextLength);
175
- const dataChunks = promptManager.chunkDataPayload(promptStages.dataPayload, chunkSize);
176
- const conversation = promptManager.createChunkedConversation(promptStages, dataChunks);
177
- const messages = [
178
- conversation.systemMessage,
179
- ...conversation.dataMessages,
180
- conversation.analysisMessage
181
- ];
182
- return await ResponseProcessor.executeChunked(messages, model, contextLength, 'find_pattern_usage', 'single');
183
- }
184
- else {
185
- return await ResponseProcessor.executeDirect(promptStages, model, contextLength, 'find_pattern_usage');
186
- }
187
- }
188
- /**
189
- * Execute multi-file analysis
190
- */
191
- async executeMultiFileAnalysis(params, model, contextLength) {
192
- // Discover files
193
- let filesToAnalyze = params.files ||
194
- await this.discoverRelevantFiles(params.projectPath, params.maxDepth, params.analysisType);
195
- // Perform multi-file analysis with caching
196
- const analysisResult = await this.performMultiFileAnalysis(filesToAnalyze, params, model, contextLength);
197
- // Generate prompt stages for multi-file
198
- const promptStages = this.getMultiFilePromptStages({
199
- ...params,
200
- analysisResult,
201
- fileCount: filesToAnalyze.length
202
- });
203
- // Always use chunking for multi-file
204
- const promptManager = new ThreeStagePromptManager();
205
- const chunkSize = TokenCalculator.calculateOptimalChunkSize(promptStages, contextLength);
206
- const dataChunks = promptManager.chunkDataPayload(promptStages.dataPayload, chunkSize);
207
- const conversation = promptManager.createChunkedConversation(promptStages, dataChunks);
208
- const messages = [
209
- conversation.systemMessage,
210
- ...conversation.dataMessages,
211
- conversation.analysisMessage
212
- ];
213
- return await ResponseProcessor.executeChunked(messages, model, contextLength, 'find_pattern_usage', 'multifile');
214
- }
215
- /**
216
- * Search patterns in single code block
217
- */
218
- searchPatternsInCode(code, patterns, contextLines) {
219
- const lines = code.split('\n');
220
- const matches = [];
221
- patterns.forEach(pattern => {
222
- lines.forEach((line, lineIndex) => {
223
- try {
224
- // Try regex first
225
- const regex = new RegExp(pattern, 'gi');
226
- let match;
227
- while ((match = regex.exec(line)) !== null) {
228
- matches.push({
229
- pattern,
230
- line: lineIndex + 1,
231
- column: match.index + 1,
232
- match: match[0],
233
- context: this.getContextLines(lines, lineIndex, contextLines)
234
- });
235
- }
236
- }
237
- catch {
238
- // Fallback to literal search
239
- const index = line.toLowerCase().indexOf(pattern.toLowerCase());
240
- if (index !== -1) {
241
- matches.push({
242
- pattern,
243
- line: lineIndex + 1,
244
- column: index + 1,
245
- match: pattern,
246
- context: this.getContextLines(lines, lineIndex, contextLines)
247
- });
248
- }
249
- }
250
- });
251
- });
252
- return {
253
- totalMatches: matches.length,
254
- patterns: patterns,
255
- matches
256
- };
257
- }
258
- /**
259
- * Get context lines around a match
260
- */
261
- getContextLines(lines, matchLineIndex, contextSize) {
262
- const start = Math.max(0, matchLineIndex - contextSize);
263
- const end = Math.min(lines.length - 1, matchLineIndex + contextSize);
264
- const contextLines = [];
265
- for (let i = start; i <= end; i++) {
266
- const prefix = i === matchLineIndex ? '>>> ' : ' ';
267
- contextLines.push(`${prefix}${i + 1}: ${lines[i]}`);
268
- }
269
- return contextLines;
270
- }
271
- /**
272
- * Single-file pattern analysis prompt
273
- */
274
- getSingleFilePromptStages(params) {
275
- const { patterns, patternMatches, analysisDepth, analysisType, filePath } = params;
276
- const systemAndContext = `You are an expert code pattern analyst specializing in ${analysisDepth} ${analysisType} analysis.
277
-
278
- **Your Expertise:**
279
- - Advanced pattern recognition and usage analysis
280
- - Code quality assessment and security implications
281
- - Refactoring opportunities identification
282
- - Best practices for pattern implementation
283
-
284
- **Analysis Context:**
285
- - File: ${filePath || 'Code block'}
286
- - Patterns searched: ${patterns.length}
287
- - Total matches found: ${patternMatches.totalMatches}
288
- - Analysis depth: ${analysisDepth}
289
- - Focus: ${analysisType} analysis
290
-
291
- **Your Mission:**
292
- Provide expert analysis of how the specified patterns are used in this code, identifying usage quality, potential issues, and improvement opportunities.`;
293
- const dataPayload = `**PATTERN SEARCH RESULTS:**
294
-
295
- Patterns searched: ${patterns.map((p) => `"${p}"`).join(', ')}
296
- Total matches found: ${patternMatches.totalMatches}
297
-
298
- ${patternMatches.matches.length === 0 ?
299
- 'No matches found for the specified patterns.' :
300
- patternMatches.matches.map((match, index) => `
301
- **Match ${index + 1}:**
302
- - Pattern: "${match.pattern}"
303
- - Location: Line ${match.line}, Column ${match.column}
304
- - Matched text: "${match.match}"
305
-
306
- Context:
307
- ${match.context.join('\n')}
308
- `).join('\n')}`;
309
- const outputInstructions = `**PROVIDE COMPREHENSIVE PATTERN ANALYSIS:**
310
-
311
- ## Pattern Usage Summary
312
- Brief overview of what patterns were found and their primary usage
313
-
314
- ## Detailed Pattern Analysis
315
- For each pattern found:
316
- - **Pattern**: "${patterns[0]}" (example)
317
- - **Occurrences**: [count]
318
- - **Usage Context**: [how it's being used]
319
- - **Quality Assessment**: [good/problematic/needs improvement]
320
- - **Security Implications**: [if any]
321
-
322
- ## Code Quality Findings
323
- ### ✅ Good Practices Observed
324
- - [List positive pattern usage]
325
-
326
- ### ⚠️ Issues Identified
327
- - [List problematic usage with severity]
328
-
329
- ### 🔒 Security Considerations
330
- - [Any security-related findings from pattern usage]
331
-
332
- ## Improvement Recommendations
333
- 1. **Immediate Actions**
334
- - [High priority fixes or improvements]
335
-
336
- 2. **Code Enhancement Suggestions**
337
- - [Ways to improve pattern usage]
338
-
339
- 3. **Best Practice Guidelines**
340
- - [Recommendations for optimal pattern implementation]
341
-
342
- ## Conclusion
343
- Overall assessment and next steps for pattern optimization in this code.`;
344
- return { systemAndContext, dataPayload, outputInstructions };
345
- }
346
- /**
347
- * Multi-file pattern analysis prompt - optimized for comprehensive project analysis
348
- */
349
- getMultiFilePromptStages(params) {
350
- const { patterns, analysisResult, analysisType, analysisDepth, fileCount } = params;
351
- const systemAndContext = `You are a senior software architect and code quality expert specializing in ${analysisDepth} ${analysisType} pattern analysis across large codebases.
352
-
353
- **Your Expert Capabilities:**
354
- - Cross-file pattern usage analysis and architectural implications
355
- - Security vulnerability identification through pattern analysis
356
- - Code maintainability and refactoring opportunity assessment
357
- - Team coding standards and consistency evaluation
358
- - Performance implications of pattern distribution
359
-
360
- **Project Analysis Context:**
361
- - Project scope: ${fileCount} files analyzed
362
- - Patterns searched: ${patterns.length} distinct patterns
363
- - Analysis focus: ${analysisType} analysis
364
- - Analysis depth: ${analysisDepth}
365
-
366
- **Strategic Mission:**
367
- Provide executive-level insights on pattern usage across the entire codebase, identifying architectural strengths, risks, and strategic improvement opportunities that will enhance code quality, security, and maintainability.`;
368
- const dataPayload = `**COMPREHENSIVE PROJECT PATTERN ANALYSIS:**
369
-
370
- ${JSON.stringify(analysisResult, null, 2)}`;
371
- const outputInstructions = `**DELIVER STRATEGIC PATTERN ANALYSIS REPORT:**
372
-
373
- # Executive Summary
374
- ## Key Findings
375
- - Most critical pattern usage issues discovered
376
- - Primary architectural insights
377
- - Strategic recommendations priority
378
-
379
- ## Risk Assessment
380
- - **High Risk**: [Critical issues requiring immediate attention]
381
- - **Medium Risk**: [Important issues for next sprint]
382
- - **Low Risk**: [Long-term improvements]
383
-
384
- # Detailed Pattern Analysis
385
-
386
- ## Pattern Distribution Map
387
- For each pattern searched:
388
- - **Pattern**: "${patterns[0]}" (example)
389
- - **Total Occurrences**: [count across all files]
390
- - **File Distribution**: [how spread across codebase]
391
- - **Hotspots**: [files/modules with heavy usage]
392
- - **Usage Consistency**: [consistent vs. varied implementations]
393
-
394
- ## Architectural Insights
395
- ### Code Organization Quality
396
- - How patterns reveal architectural decisions
397
- - Consistency of implementation approaches
398
- - Module coupling implications
399
-
400
- ### Design Pattern Assessment
401
- - Appropriate use of design patterns
402
- - Anti-patterns discovered
403
- - Missing abstractions opportunities
404
-
405
- ## Security & Quality Analysis
406
- ### 🔒 Security Implications
407
- - Pattern usage that creates vulnerabilities
408
- - Input validation consistency
409
- - Authentication/authorization pattern usage
410
-
411
- ### 🏗️ Code Quality Impact
412
- - Pattern usage affecting maintainability
413
- - Technical debt indicators
414
- - Testing implications of pattern choices
415
-
416
- ## Strategic Recommendations
417
-
418
- ### 1. Immediate Actions (This Sprint)
419
- - [Critical fixes needed now]
420
- - [Security vulnerabilities to address]
421
-
422
- ### 2. Architectural Improvements (Next Quarter)
423
- - [Refactoring opportunities for better pattern usage]
424
- - [Consolidation of duplicate pattern implementations]
425
-
426
- ### 3. Long-term Strategy (6-12 months)
427
- - [Team training on proper pattern usage]
428
- - [Code standards establishment]
429
- - [Tooling to enforce pattern consistency]
430
-
431
- ## Implementation Roadmap
432
- 1. **Week 1-2**: Address critical security findings
433
- 2. **Month 1**: Implement high-impact refactoring
434
- 3. **Quarter 1**: Establish team standards and tooling
435
- 4. **Ongoing**: Monitor pattern usage evolution
436
-
437
- # Conclusion
438
- **Bottom Line**: [Most important takeaway for technical leadership]
439
- **Success Metrics**: [How to measure improvement]
440
- **Next Steps**: [Specific actions to begin immediately]`;
441
- return { systemAndContext, dataPayload, outputInstructions };
442
- }
443
- /**
444
- * Implement for backwards compatibility
445
- * The system still expects this method, so we intelligently route to the appropriate stages
446
- */
447
- getPromptStages(params) {
448
- const mode = this.detectAnalysisMode(params);
449
- if (mode === 'single-file') {
450
- return this.getSingleFilePromptStages(params);
451
- }
452
- else {
453
- return this.getMultiFilePromptStages(params);
454
- }
455
- }
456
- // Multi-file helper methods
457
- async discoverRelevantFiles(projectPath, maxDepth, analysisType) {
458
- const extensions = this.getFileExtensions(analysisType);
459
- return await this.multiFileAnalysis.discoverFiles(projectPath, extensions, maxDepth);
460
- }
461
- async performMultiFileAnalysis(files, params, model, contextLength) {
462
- const cacheKey = this.analysisCache.generateKey('find_pattern_usage', params, files);
463
- const cached = await this.analysisCache.get(cacheKey);
464
- if (cached)
465
- return cached;
466
- const fileAnalysisResults = await this.multiFileAnalysis.analyzeBatch(files, (file) => this.analyzeIndividualFile(file, params, model), contextLength);
467
- // Aggregate results into proper analysis result format
468
- const aggregatedResult = {
469
- summary: `Pattern analysis across ${files.length} files`,
470
- patterns: params.patterns,
471
- totalFiles: files.length,
472
- findings: fileAnalysisResults,
473
- statistics: {
474
- filesWithMatches: fileAnalysisResults.filter((r) => r.matches && r.matches.length > 0).length,
475
- totalMatches: fileAnalysisResults.reduce((sum, r) => sum + (r.matches?.length || 0), 0),
476
- patternsFound: [...new Set(fileAnalysisResults.flatMap((r) => r.matches?.map((m) => m.pattern) || []))]
477
- }
478
- };
479
- await this.analysisCache.cacheAnalysis(cacheKey, aggregatedResult, {
480
- modelUsed: model.identifier || 'unknown',
481
- executionTime: Date.now() - Date.now(), // TODO: Track actual execution time
482
- timestamp: new Date().toISOString()
483
- });
484
- return aggregatedResult;
485
- }
486
- async analyzeIndividualFile(file, params, model) {
487
- try {
488
- const content = await import('fs/promises').then(fs => fs.readFile(file, 'utf-8'));
489
- const patternMatches = this.searchPatternsInCode(content, params.patterns, params.includeContext || 3);
490
- return {
491
- filePath: file,
492
- size: content.length,
493
- lines: content.split('\n').length,
494
- matches: patternMatches.matches,
495
- totalMatches: patternMatches.totalMatches
496
- };
497
- }
498
- catch (error) {
499
- return {
500
- filePath: file,
501
- size: 0,
502
- lines: 0,
503
- matches: [],
504
- totalMatches: 0,
505
- error: 'Could not read file'
506
- };
507
- }
508
- }
509
- getFileExtensions(analysisType) {
510
- const extensionMap = {
511
- 'patterns': ['.js', '.ts', '.jsx', '.tsx', '.php', '.py', '.java', '.cs', '.cpp', '.c', '.h', '.rb', '.go', '.swift'],
512
- 'security': ['.js', '.ts', '.jsx', '.tsx', '.php', '.py', '.java', '.cs'], // Focus on web/app languages for security
513
- 'comprehensive': ['.js', '.ts', '.jsx', '.tsx', '.php', '.py', '.java', '.cs', '.cpp', '.c', '.h', '.rb', '.go', '.swift', '.kt', '.rs']
514
- };
515
- return extensionMap[analysisType] || extensionMap.comprehensive;
516
- }
517
- generateCacheKey(files, params) {
518
- const fileHash = files.join('|');
519
- const paramHash = JSON.stringify(params);
520
- return `${fileHash}_${paramHash}`.substring(0, 64);
521
- }
522
- }
523
- export default PatternFinderPlugin;
524
- //# sourceMappingURL=find-patterns.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"find-patterns.js","sourceRoot":"","sources":["../../../src/prompts/analyze/find-patterns.ts"],"names":[],"mappings":"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"}