@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.
- package/CHANGELOG.md +273 -0
- package/LICENSE +21 -0
- package/README.md +203 -0
- package/dist/cache/analysis-cache.d.ts +33 -0
- package/dist/cache/analysis-cache.d.ts.map +1 -0
- package/dist/cache/analysis-cache.js +56 -0
- package/dist/cache/analysis-cache.js.map +1 -0
- package/dist/cache/cache-manager.d.ts +29 -0
- package/dist/cache/cache-manager.d.ts.map +1 -0
- package/dist/cache/cache-manager.js +85 -0
- package/dist/cache/cache-manager.js.map +1 -0
- package/dist/cache/index.d.ts +16 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +17 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/prompt-cache.d.ts +33 -0
- package/dist/cache/prompt-cache.d.ts.map +1 -0
- package/dist/cache/prompt-cache.js +61 -0
- package/dist/cache/prompt-cache.js.map +1 -0
- package/dist/config.d.ts +43 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +70 -0
- package/dist/config.js.map +1 -0
- package/dist/core/ThreeStagePromptManager.d.ts +39 -0
- package/dist/core/ThreeStagePromptManager.d.ts.map +1 -0
- package/dist/core/ThreeStagePromptManager.js +176 -0
- package/dist/core/ThreeStagePromptManager.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +230 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/base-plugin.d.ts +47 -0
- package/dist/plugins/base-plugin.d.ts.map +1 -0
- package/dist/plugins/base-plugin.js +90 -0
- package/dist/plugins/base-plugin.js.map +1 -0
- package/dist/plugins/index.d.ts +58 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +161 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/types.d.ts +5 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +5 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/prompts/analyze/code-quality.d.ts +116 -0
- package/dist/prompts/analyze/code-quality.d.ts.map +1 -0
- package/dist/prompts/analyze/code-quality.js +433 -0
- package/dist/prompts/analyze/code-quality.js.map +1 -0
- package/dist/prompts/analyze/compare-integration.d.ts +130 -0
- package/dist/prompts/analyze/compare-integration.d.ts.map +1 -0
- package/dist/prompts/analyze/compare-integration.js +543 -0
- package/dist/prompts/analyze/compare-integration.js.map +1 -0
- package/dist/prompts/analyze/count-files.d.ts +109 -0
- package/dist/prompts/analyze/count-files.d.ts.map +1 -0
- package/dist/prompts/analyze/count-files.js +399 -0
- package/dist/prompts/analyze/count-files.js.map +1 -0
- package/dist/prompts/analyze/database-queries.d.ts +156 -0
- package/dist/prompts/analyze/database-queries.d.ts.map +1 -0
- package/dist/prompts/analyze/database-queries.js +759 -0
- package/dist/prompts/analyze/database-queries.js.map +1 -0
- package/dist/prompts/analyze/dependencies.d.ts +97 -0
- package/dist/prompts/analyze/dependencies.d.ts.map +1 -0
- package/dist/prompts/analyze/dependencies.js +333 -0
- package/dist/prompts/analyze/dependencies.js.map +1 -0
- package/dist/prompts/analyze/diff-signatures.d.ts +139 -0
- package/dist/prompts/analyze/diff-signatures.d.ts.map +1 -0
- package/dist/prompts/analyze/diff-signatures.js +702 -0
- package/dist/prompts/analyze/diff-signatures.js.map +1 -0
- package/dist/prompts/analyze/find-patterns.d.ts +128 -0
- package/dist/prompts/analyze/find-patterns.d.ts.map +1 -0
- package/dist/prompts/analyze/find-patterns.js +520 -0
- package/dist/prompts/analyze/find-patterns.js.map +1 -0
- package/dist/prompts/analyze/find-unused-css.d.ts +151 -0
- package/dist/prompts/analyze/find-unused-css.d.ts.map +1 -0
- package/dist/prompts/analyze/find-unused-css.js +754 -0
- package/dist/prompts/analyze/find-unused-css.js.map +1 -0
- package/dist/prompts/analyze/n8n-workflow.d.ts +137 -0
- package/dist/prompts/analyze/n8n-workflow.d.ts.map +1 -0
- package/dist/prompts/analyze/n8n-workflow.js +529 -0
- package/dist/prompts/analyze/n8n-workflow.js.map +1 -0
- package/dist/prompts/analyze/project-structure.d.ts +126 -0
- package/dist/prompts/analyze/project-structure.d.ts.map +1 -0
- package/dist/prompts/analyze/project-structure.js +569 -0
- package/dist/prompts/analyze/project-structure.js.map +1 -0
- package/dist/prompts/analyze/security-audit.d.ts +142 -0
- package/dist/prompts/analyze/security-audit.d.ts.map +1 -0
- package/dist/prompts/analyze/security-audit.js +637 -0
- package/dist/prompts/analyze/security-audit.js.map +1 -0
- package/dist/prompts/analyze/single-file.d.ts +162 -0
- package/dist/prompts/analyze/single-file.d.ts.map +1 -0
- package/dist/prompts/analyze/single-file.js +665 -0
- package/dist/prompts/analyze/single-file.js.map +1 -0
- package/dist/prompts/analyze/trace-execution.d.ts +126 -0
- package/dist/prompts/analyze/trace-execution.d.ts.map +1 -0
- package/dist/prompts/analyze/trace-execution.js +609 -0
- package/dist/prompts/analyze/trace-execution.js.map +1 -0
- package/dist/prompts/analyze/wordpress-plugin-audit.d.ts +116 -0
- package/dist/prompts/analyze/wordpress-plugin-audit.d.ts.map +1 -0
- package/dist/prompts/analyze/wordpress-plugin-audit.js +454 -0
- package/dist/prompts/analyze/wordpress-plugin-audit.js.map +1 -0
- package/dist/prompts/analyze/wordpress-security.d.ts +146 -0
- package/dist/prompts/analyze/wordpress-security.d.ts.map +1 -0
- package/dist/prompts/analyze/wordpress-security.js +698 -0
- package/dist/prompts/analyze/wordpress-security.js.map +1 -0
- package/dist/prompts/analyze/wordpress-theme-audit.d.ts +114 -0
- package/dist/prompts/analyze/wordpress-theme-audit.d.ts.map +1 -0
- package/dist/prompts/analyze/wordpress-theme-audit.js +538 -0
- package/dist/prompts/analyze/wordpress-theme-audit.js.map +1 -0
- package/dist/prompts/custom/custom-prompt.d.ts +135 -0
- package/dist/prompts/custom/custom-prompt.d.ts.map +1 -0
- package/dist/prompts/custom/custom-prompt.js +419 -0
- package/dist/prompts/custom/custom-prompt.js.map +1 -0
- package/dist/prompts/fun/arcade-game.d.ts +152 -0
- package/dist/prompts/fun/arcade-game.d.ts.map +1 -0
- package/dist/prompts/fun/arcade-game.js +653 -0
- package/dist/prompts/fun/arcade-game.js.map +1 -0
- package/dist/prompts/fun/create_text_adventure.d.ts +100 -0
- package/dist/prompts/fun/create_text_adventure.d.ts.map +1 -0
- package/dist/prompts/fun/create_text_adventure.js +397 -0
- package/dist/prompts/fun/create_text_adventure.js.map +1 -0
- package/dist/prompts/fun/css-art-generator.d.ts +168 -0
- package/dist/prompts/fun/css-art-generator.d.ts.map +1 -0
- package/dist/prompts/fun/css-art-generator.js +827 -0
- package/dist/prompts/fun/css-art-generator.js.map +1 -0
- package/dist/prompts/generate/project-documentation.d.ts +137 -0
- package/dist/prompts/generate/project-documentation.d.ts.map +1 -0
- package/dist/prompts/generate/project-documentation.js +666 -0
- package/dist/prompts/generate/project-documentation.js.map +1 -0
- package/dist/prompts/generate/refactoring.d.ts +164 -0
- package/dist/prompts/generate/refactoring.d.ts.map +1 -0
- package/dist/prompts/generate/refactoring.js +621 -0
- package/dist/prompts/generate/refactoring.js.map +1 -0
- package/dist/prompts/generate/responsive-component.d.ts +147 -0
- package/dist/prompts/generate/responsive-component.d.ts.map +1 -0
- package/dist/prompts/generate/responsive-component.js +955 -0
- package/dist/prompts/generate/responsive-component.js.map +1 -0
- package/dist/prompts/generate/typescript-conversion.d.ts +144 -0
- package/dist/prompts/generate/typescript-conversion.d.ts.map +1 -0
- package/dist/prompts/generate/typescript-conversion.js +527 -0
- package/dist/prompts/generate/typescript-conversion.js.map +1 -0
- package/dist/prompts/generate/unit-tests.d.ts +139 -0
- package/dist/prompts/generate/unit-tests.d.ts.map +1 -0
- package/dist/prompts/generate/unit-tests.js +578 -0
- package/dist/prompts/generate/unit-tests.js.map +1 -0
- package/dist/prompts/generate/wordpress-plugin.d.ts +179 -0
- package/dist/prompts/generate/wordpress-plugin.d.ts.map +1 -0
- package/dist/prompts/generate/wordpress-plugin.js +763 -0
- package/dist/prompts/generate/wordpress-plugin.js.map +1 -0
- package/dist/prompts/generate/wordpress-theme-from-static.d.ts +177 -0
- package/dist/prompts/generate/wordpress-theme-from-static.d.ts.map +1 -0
- package/dist/prompts/generate/wordpress-theme-from-static.js +695 -0
- package/dist/prompts/generate/wordpress-theme-from-static.js.map +1 -0
- package/dist/prompts/shared/cache-manager.d.ts +45 -0
- package/dist/prompts/shared/cache-manager.d.ts.map +1 -0
- package/dist/prompts/shared/cache-manager.js +129 -0
- package/dist/prompts/shared/cache-manager.js.map +1 -0
- package/dist/prompts/shared/helpers.d.ts +39 -0
- package/dist/prompts/shared/helpers.d.ts.map +1 -0
- package/dist/prompts/shared/helpers.js +151 -0
- package/dist/prompts/shared/helpers.js.map +1 -0
- package/dist/prompts/shared/templates.d.ts +35 -0
- package/dist/prompts/shared/templates.d.ts.map +1 -0
- package/dist/prompts/shared/templates.js +77 -0
- package/dist/prompts/shared/templates.js.map +1 -0
- package/dist/prompts/shared/types.d.ts +112 -0
- package/dist/prompts/shared/types.d.ts.map +1 -0
- package/dist/prompts/shared/types.js +5 -0
- package/dist/prompts/shared/types.js.map +1 -0
- package/dist/prompts/system/find-unused-files.d.ts +106 -0
- package/dist/prompts/system/find-unused-files.d.ts.map +1 -0
- package/dist/prompts/system/find-unused-files.js +353 -0
- package/dist/prompts/system/find-unused-files.js.map +1 -0
- package/dist/security/index.d.ts +39 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +46 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/integration-helpers.d.ts +121 -0
- package/dist/security/integration-helpers.d.ts.map +1 -0
- package/dist/security/integration-helpers.js +190 -0
- package/dist/security/integration-helpers.js.map +1 -0
- package/dist/security/output-encoder.d.ts +94 -0
- package/dist/security/output-encoder.d.ts.map +1 -0
- package/dist/security/output-encoder.js +295 -0
- package/dist/security/output-encoder.js.map +1 -0
- package/dist/security/prompt-injection-guard.d.ts +59 -0
- package/dist/security/prompt-injection-guard.d.ts.map +1 -0
- package/dist/security/prompt-injection-guard.js +249 -0
- package/dist/security/prompt-injection-guard.js.map +1 -0
- package/dist/security/sanitisation.d.ts +67 -0
- package/dist/security/sanitisation.d.ts.map +1 -0
- package/dist/security/sanitisation.js +398 -0
- package/dist/security/sanitisation.js.map +1 -0
- package/dist/security/security-service.d.ts +103 -0
- package/dist/security/security-service.d.ts.map +1 -0
- package/dist/security/security-service.js +303 -0
- package/dist/security/security-service.js.map +1 -0
- package/dist/security-config.d.ts +45 -0
- package/dist/security-config.d.ts.map +1 -0
- package/dist/security-config.js +63 -0
- package/dist/security-config.js.map +1 -0
- package/dist/system/function-list.d.ts +61 -0
- package/dist/system/function-list.d.ts.map +1 -0
- package/dist/system/function-list.js +111 -0
- package/dist/system/function-list.js.map +1 -0
- package/dist/system/function-registry.d.ts +23 -0
- package/dist/system/function-registry.d.ts.map +1 -0
- package/dist/system/function-registry.js +136 -0
- package/dist/system/function-registry.js.map +1 -0
- package/dist/system/health-check.d.ts +33 -0
- package/dist/system/health-check.d.ts.map +1 -0
- package/dist/system/health-check.js +98 -0
- package/dist/system/health-check.js.map +1 -0
- package/dist/system/path-resolver.d.ts +55 -0
- package/dist/system/path-resolver.d.ts.map +1 -0
- package/dist/system/path-resolver.js +90 -0
- package/dist/system/path-resolver.js.map +1 -0
- package/dist/templates/plugin-template.d.ts +121 -0
- package/dist/templates/plugin-template.d.ts.map +1 -0
- package/dist/templates/plugin-template.js +450 -0
- package/dist/templates/plugin-template.js.map +1 -0
- package/dist/types/chunking-types.d.ts +88 -0
- package/dist/types/chunking-types.d.ts.map +1 -0
- package/dist/types/chunking-types.js +18 -0
- package/dist/types/chunking-types.js.map +1 -0
- package/dist/types/prompt-stages.d.ts +42 -0
- package/dist/types/prompt-stages.d.ts.map +1 -0
- package/dist/types/prompt-stages.js +6 -0
- package/dist/types/prompt-stages.js.map +1 -0
- package/dist/types.d.ts +46 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/css-parser.d.ts +26 -0
- package/dist/utils/css-parser.d.ts.map +1 -0
- package/dist/utils/css-parser.js +117 -0
- package/dist/utils/css-parser.js.map +1 -0
- package/dist/utils/path-resolver.d.ts +13 -0
- package/dist/utils/path-resolver.d.ts.map +1 -0
- package/dist/utils/path-resolver.js +78 -0
- package/dist/utils/path-resolver.js.map +1 -0
- package/dist/utils/plugin-utilities.d.ts +171 -0
- package/dist/utils/plugin-utilities.d.ts.map +1 -0
- package/dist/utils/plugin-utilities.js +221 -0
- package/dist/utils/plugin-utilities.js.map +1 -0
- package/dist/utils/streamHandler.d.ts +3 -0
- package/dist/utils/streamHandler.d.ts.map +1 -0
- package/dist/utils/streamHandler.js +137 -0
- package/dist/utils/streamHandler.js.map +1 -0
- package/dist/validation/output-validator.d.ts +136 -0
- package/dist/validation/output-validator.d.ts.map +1 -0
- package/dist/validation/output-validator.js +262 -0
- package/dist/validation/output-validator.js.map +1 -0
- package/dist/validation/response-factory.d.ts +44 -0
- package/dist/validation/response-factory.d.ts.map +1 -0
- package/dist/validation/response-factory.js +202 -0
- package/dist/validation/response-factory.js.map +1 -0
- package/dist/validation/schemas.d.ts +519 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/validation/schemas.js +6 -0
- package/dist/validation/schemas.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-signatures.js","sourceRoot":"","sources":["../../../src/prompts/analyze/diff-signatures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
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 { IPromptPlugin } from '../shared/types.js';
|
|
11
|
+
import { PromptStages } from '../../types/prompt-stages.js';
|
|
12
|
+
export declare class PatternFinderPlugin extends BasePlugin implements IPromptPlugin {
|
|
13
|
+
name: string;
|
|
14
|
+
category: "analyze";
|
|
15
|
+
description: string;
|
|
16
|
+
parameters: {
|
|
17
|
+
code: {
|
|
18
|
+
type: "string";
|
|
19
|
+
description: string;
|
|
20
|
+
required: boolean;
|
|
21
|
+
};
|
|
22
|
+
filePath: {
|
|
23
|
+
type: "string";
|
|
24
|
+
description: string;
|
|
25
|
+
required: boolean;
|
|
26
|
+
};
|
|
27
|
+
projectPath: {
|
|
28
|
+
type: "string";
|
|
29
|
+
description: string;
|
|
30
|
+
required: boolean;
|
|
31
|
+
};
|
|
32
|
+
files: {
|
|
33
|
+
type: "array";
|
|
34
|
+
description: string;
|
|
35
|
+
required: boolean;
|
|
36
|
+
items: {
|
|
37
|
+
type: "string";
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
maxDepth: {
|
|
41
|
+
type: "number";
|
|
42
|
+
description: string;
|
|
43
|
+
required: boolean;
|
|
44
|
+
};
|
|
45
|
+
patterns: {
|
|
46
|
+
type: "array";
|
|
47
|
+
description: string;
|
|
48
|
+
required: boolean;
|
|
49
|
+
items: {
|
|
50
|
+
type: "string";
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
includeContext: {
|
|
54
|
+
type: "number";
|
|
55
|
+
description: string;
|
|
56
|
+
required: boolean;
|
|
57
|
+
default: number;
|
|
58
|
+
};
|
|
59
|
+
language: {
|
|
60
|
+
type: "string";
|
|
61
|
+
description: string;
|
|
62
|
+
required: boolean;
|
|
63
|
+
default: string;
|
|
64
|
+
};
|
|
65
|
+
analysisDepth: {
|
|
66
|
+
type: "string";
|
|
67
|
+
description: string;
|
|
68
|
+
enum: string[];
|
|
69
|
+
default: string;
|
|
70
|
+
required: boolean;
|
|
71
|
+
};
|
|
72
|
+
analysisType: {
|
|
73
|
+
type: "string";
|
|
74
|
+
description: string;
|
|
75
|
+
enum: string[];
|
|
76
|
+
default: string;
|
|
77
|
+
required: boolean;
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
private analysisCache;
|
|
81
|
+
private multiFileAnalysis;
|
|
82
|
+
constructor();
|
|
83
|
+
execute(params: any, llmClient: any): Promise<any>;
|
|
84
|
+
/**
|
|
85
|
+
* Auto-detect whether this is single-file or multi-file analysis
|
|
86
|
+
*/
|
|
87
|
+
private detectAnalysisMode;
|
|
88
|
+
/**
|
|
89
|
+
* Validate parameters based on detected analysis mode
|
|
90
|
+
*/
|
|
91
|
+
private validateParameters;
|
|
92
|
+
/**
|
|
93
|
+
* Execute single-file analysis
|
|
94
|
+
*/
|
|
95
|
+
private executeSingleFileAnalysis;
|
|
96
|
+
/**
|
|
97
|
+
* Execute multi-file analysis
|
|
98
|
+
*/
|
|
99
|
+
private executeMultiFileAnalysis;
|
|
100
|
+
/**
|
|
101
|
+
* Search patterns in single code block
|
|
102
|
+
*/
|
|
103
|
+
private searchPatternsInCode;
|
|
104
|
+
/**
|
|
105
|
+
* Get context lines around a match
|
|
106
|
+
*/
|
|
107
|
+
private getContextLines;
|
|
108
|
+
/**
|
|
109
|
+
* Single-file pattern analysis prompt
|
|
110
|
+
*/
|
|
111
|
+
private getSingleFilePromptStages;
|
|
112
|
+
/**
|
|
113
|
+
* Multi-file pattern analysis prompt - optimized for comprehensive project analysis
|
|
114
|
+
*/
|
|
115
|
+
private getMultiFilePromptStages;
|
|
116
|
+
/**
|
|
117
|
+
* Implement for backwards compatibility
|
|
118
|
+
* The system still expects this method, so we intelligently route to the appropriate stages
|
|
119
|
+
*/
|
|
120
|
+
getPromptStages(params: any): PromptStages;
|
|
121
|
+
private discoverRelevantFiles;
|
|
122
|
+
private performMultiFileAnalysis;
|
|
123
|
+
private analyzeIndividualFile;
|
|
124
|
+
private getFileExtensions;
|
|
125
|
+
private generateCacheKey;
|
|
126
|
+
}
|
|
127
|
+
export default PatternFinderPlugin;
|
|
128
|
+
//# sourceMappingURL=find-patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-patterns.d.ts","sourceRoot":"","sources":["../../../src/prompts/analyze/find-patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAY5D,qBAAa,mBAAoB,SAAQ,UAAW,YAAW,aAAa;IAC1E,IAAI,SAAwB;IAC5B,QAAQ,EAAG,SAAS,CAAU;IAC9B,WAAW,SAAoI;IAG/I,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkER;IAEF,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,iBAAiB,CAA2B;;IAO9C,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG;IAyBzC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;OAEG;YACW,yBAAyB;IA8CvC;;OAEG;YACW,wBAAwB;IA0CtC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0C5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IA6EjC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAmGhC;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,GAAG,GAAG,YAAY;YAW5B,qBAAqB;YASrB,wBAAwB;YA2CxB,qBAAqB;IAwBnC,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,gBAAgB;CAKzB;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,520 @@
|
|
|
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
|
+
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(contextLength);
|
|
172
|
+
const needsChunking = promptManager.needsChunking(promptStages);
|
|
173
|
+
if (needsChunking) {
|
|
174
|
+
const conversation = promptManager.createChunkedConversation(promptStages);
|
|
175
|
+
const messages = [
|
|
176
|
+
conversation.systemMessage,
|
|
177
|
+
...conversation.dataMessages,
|
|
178
|
+
conversation.analysisMessage
|
|
179
|
+
];
|
|
180
|
+
return await ResponseProcessor.executeChunked(messages, model, contextLength, 'find_pattern_usage', 'single');
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
return await ResponseProcessor.executeDirect(promptStages, model, contextLength, 'find_pattern_usage');
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Execute multi-file analysis
|
|
188
|
+
*/
|
|
189
|
+
async executeMultiFileAnalysis(params, model, contextLength) {
|
|
190
|
+
// Discover files
|
|
191
|
+
let filesToAnalyze = params.files ||
|
|
192
|
+
await this.discoverRelevantFiles(params.projectPath, params.maxDepth, params.analysisType);
|
|
193
|
+
// Perform multi-file analysis with caching
|
|
194
|
+
const analysisResult = await this.performMultiFileAnalysis(filesToAnalyze, params, model, contextLength);
|
|
195
|
+
// Generate prompt stages for multi-file
|
|
196
|
+
const promptStages = this.getMultiFilePromptStages({
|
|
197
|
+
...params,
|
|
198
|
+
analysisResult,
|
|
199
|
+
fileCount: filesToAnalyze.length
|
|
200
|
+
});
|
|
201
|
+
// Always use chunking for multi-file
|
|
202
|
+
const promptManager = new ThreeStagePromptManager(contextLength);
|
|
203
|
+
const conversation = promptManager.createChunkedConversation(promptStages);
|
|
204
|
+
const messages = [
|
|
205
|
+
conversation.systemMessage,
|
|
206
|
+
...conversation.dataMessages,
|
|
207
|
+
conversation.analysisMessage
|
|
208
|
+
];
|
|
209
|
+
return await ResponseProcessor.executeChunked(messages, model, contextLength, 'find_pattern_usage', 'multifile');
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Search patterns in single code block
|
|
213
|
+
*/
|
|
214
|
+
searchPatternsInCode(code, patterns, contextLines) {
|
|
215
|
+
const lines = code.split('\n');
|
|
216
|
+
const matches = [];
|
|
217
|
+
patterns.forEach(pattern => {
|
|
218
|
+
lines.forEach((line, lineIndex) => {
|
|
219
|
+
try {
|
|
220
|
+
// Try regex first
|
|
221
|
+
const regex = new RegExp(pattern, 'gi');
|
|
222
|
+
let match;
|
|
223
|
+
while ((match = regex.exec(line)) !== null) {
|
|
224
|
+
matches.push({
|
|
225
|
+
pattern,
|
|
226
|
+
line: lineIndex + 1,
|
|
227
|
+
column: match.index + 1,
|
|
228
|
+
match: match[0],
|
|
229
|
+
context: this.getContextLines(lines, lineIndex, contextLines)
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
// Fallback to literal search
|
|
235
|
+
const index = line.toLowerCase().indexOf(pattern.toLowerCase());
|
|
236
|
+
if (index !== -1) {
|
|
237
|
+
matches.push({
|
|
238
|
+
pattern,
|
|
239
|
+
line: lineIndex + 1,
|
|
240
|
+
column: index + 1,
|
|
241
|
+
match: pattern,
|
|
242
|
+
context: this.getContextLines(lines, lineIndex, contextLines)
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
return {
|
|
249
|
+
totalMatches: matches.length,
|
|
250
|
+
patterns: patterns,
|
|
251
|
+
matches
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Get context lines around a match
|
|
256
|
+
*/
|
|
257
|
+
getContextLines(lines, matchLineIndex, contextSize) {
|
|
258
|
+
const start = Math.max(0, matchLineIndex - contextSize);
|
|
259
|
+
const end = Math.min(lines.length - 1, matchLineIndex + contextSize);
|
|
260
|
+
const contextLines = [];
|
|
261
|
+
for (let i = start; i <= end; i++) {
|
|
262
|
+
const prefix = i === matchLineIndex ? '>>> ' : ' ';
|
|
263
|
+
contextLines.push(`${prefix}${i + 1}: ${lines[i]}`);
|
|
264
|
+
}
|
|
265
|
+
return contextLines;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Single-file pattern analysis prompt
|
|
269
|
+
*/
|
|
270
|
+
getSingleFilePromptStages(params) {
|
|
271
|
+
const { patterns, patternMatches, analysisDepth, analysisType, filePath } = params;
|
|
272
|
+
const systemAndContext = `You are an expert code pattern analyst specializing in ${analysisDepth} ${analysisType} analysis.
|
|
273
|
+
|
|
274
|
+
**Your Expertise:**
|
|
275
|
+
- Advanced pattern recognition and usage analysis
|
|
276
|
+
- Code quality assessment and security implications
|
|
277
|
+
- Refactoring opportunities identification
|
|
278
|
+
- Best practices for pattern implementation
|
|
279
|
+
|
|
280
|
+
**Analysis Context:**
|
|
281
|
+
- File: ${filePath || 'Code block'}
|
|
282
|
+
- Patterns searched: ${patterns.length}
|
|
283
|
+
- Total matches found: ${patternMatches.totalMatches}
|
|
284
|
+
- Analysis depth: ${analysisDepth}
|
|
285
|
+
- Focus: ${analysisType} analysis
|
|
286
|
+
|
|
287
|
+
**Your Mission:**
|
|
288
|
+
Provide expert analysis of how the specified patterns are used in this code, identifying usage quality, potential issues, and improvement opportunities.`;
|
|
289
|
+
const dataPayload = `**PATTERN SEARCH RESULTS:**
|
|
290
|
+
|
|
291
|
+
Patterns searched: ${patterns.map((p) => `"${p}"`).join(', ')}
|
|
292
|
+
Total matches found: ${patternMatches.totalMatches}
|
|
293
|
+
|
|
294
|
+
${patternMatches.matches.length === 0 ?
|
|
295
|
+
'No matches found for the specified patterns.' :
|
|
296
|
+
patternMatches.matches.map((match, index) => `
|
|
297
|
+
**Match ${index + 1}:**
|
|
298
|
+
- Pattern: "${match.pattern}"
|
|
299
|
+
- Location: Line ${match.line}, Column ${match.column}
|
|
300
|
+
- Matched text: "${match.match}"
|
|
301
|
+
|
|
302
|
+
Context:
|
|
303
|
+
${match.context.join('\n')}
|
|
304
|
+
`).join('\n')}`;
|
|
305
|
+
const outputInstructions = `**PROVIDE COMPREHENSIVE PATTERN ANALYSIS:**
|
|
306
|
+
|
|
307
|
+
## Pattern Usage Summary
|
|
308
|
+
Brief overview of what patterns were found and their primary usage
|
|
309
|
+
|
|
310
|
+
## Detailed Pattern Analysis
|
|
311
|
+
For each pattern found:
|
|
312
|
+
- **Pattern**: "${patterns[0]}" (example)
|
|
313
|
+
- **Occurrences**: [count]
|
|
314
|
+
- **Usage Context**: [how it's being used]
|
|
315
|
+
- **Quality Assessment**: [good/problematic/needs improvement]
|
|
316
|
+
- **Security Implications**: [if any]
|
|
317
|
+
|
|
318
|
+
## Code Quality Findings
|
|
319
|
+
### ✅ Good Practices Observed
|
|
320
|
+
- [List positive pattern usage]
|
|
321
|
+
|
|
322
|
+
### ⚠️ Issues Identified
|
|
323
|
+
- [List problematic usage with severity]
|
|
324
|
+
|
|
325
|
+
### 🔒 Security Considerations
|
|
326
|
+
- [Any security-related findings from pattern usage]
|
|
327
|
+
|
|
328
|
+
## Improvement Recommendations
|
|
329
|
+
1. **Immediate Actions**
|
|
330
|
+
- [High priority fixes or improvements]
|
|
331
|
+
|
|
332
|
+
2. **Code Enhancement Suggestions**
|
|
333
|
+
- [Ways to improve pattern usage]
|
|
334
|
+
|
|
335
|
+
3. **Best Practice Guidelines**
|
|
336
|
+
- [Recommendations for optimal pattern implementation]
|
|
337
|
+
|
|
338
|
+
## Conclusion
|
|
339
|
+
Overall assessment and next steps for pattern optimization in this code.`;
|
|
340
|
+
return { systemAndContext, dataPayload, outputInstructions };
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Multi-file pattern analysis prompt - optimized for comprehensive project analysis
|
|
344
|
+
*/
|
|
345
|
+
getMultiFilePromptStages(params) {
|
|
346
|
+
const { patterns, analysisResult, analysisType, analysisDepth, fileCount } = params;
|
|
347
|
+
const systemAndContext = `You are a senior software architect and code quality expert specializing in ${analysisDepth} ${analysisType} pattern analysis across large codebases.
|
|
348
|
+
|
|
349
|
+
**Your Expert Capabilities:**
|
|
350
|
+
- Cross-file pattern usage analysis and architectural implications
|
|
351
|
+
- Security vulnerability identification through pattern analysis
|
|
352
|
+
- Code maintainability and refactoring opportunity assessment
|
|
353
|
+
- Team coding standards and consistency evaluation
|
|
354
|
+
- Performance implications of pattern distribution
|
|
355
|
+
|
|
356
|
+
**Project Analysis Context:**
|
|
357
|
+
- Project scope: ${fileCount} files analyzed
|
|
358
|
+
- Patterns searched: ${patterns.length} distinct patterns
|
|
359
|
+
- Analysis focus: ${analysisType} analysis
|
|
360
|
+
- Analysis depth: ${analysisDepth}
|
|
361
|
+
|
|
362
|
+
**Strategic Mission:**
|
|
363
|
+
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.`;
|
|
364
|
+
const dataPayload = `**COMPREHENSIVE PROJECT PATTERN ANALYSIS:**
|
|
365
|
+
|
|
366
|
+
${JSON.stringify(analysisResult, null, 2)}`;
|
|
367
|
+
const outputInstructions = `**DELIVER STRATEGIC PATTERN ANALYSIS REPORT:**
|
|
368
|
+
|
|
369
|
+
# Executive Summary
|
|
370
|
+
## Key Findings
|
|
371
|
+
- Most critical pattern usage issues discovered
|
|
372
|
+
- Primary architectural insights
|
|
373
|
+
- Strategic recommendations priority
|
|
374
|
+
|
|
375
|
+
## Risk Assessment
|
|
376
|
+
- **High Risk**: [Critical issues requiring immediate attention]
|
|
377
|
+
- **Medium Risk**: [Important issues for next sprint]
|
|
378
|
+
- **Low Risk**: [Long-term improvements]
|
|
379
|
+
|
|
380
|
+
# Detailed Pattern Analysis
|
|
381
|
+
|
|
382
|
+
## Pattern Distribution Map
|
|
383
|
+
For each pattern searched:
|
|
384
|
+
- **Pattern**: "${patterns[0]}" (example)
|
|
385
|
+
- **Total Occurrences**: [count across all files]
|
|
386
|
+
- **File Distribution**: [how spread across codebase]
|
|
387
|
+
- **Hotspots**: [files/modules with heavy usage]
|
|
388
|
+
- **Usage Consistency**: [consistent vs. varied implementations]
|
|
389
|
+
|
|
390
|
+
## Architectural Insights
|
|
391
|
+
### Code Organization Quality
|
|
392
|
+
- How patterns reveal architectural decisions
|
|
393
|
+
- Consistency of implementation approaches
|
|
394
|
+
- Module coupling implications
|
|
395
|
+
|
|
396
|
+
### Design Pattern Assessment
|
|
397
|
+
- Appropriate use of design patterns
|
|
398
|
+
- Anti-patterns discovered
|
|
399
|
+
- Missing abstractions opportunities
|
|
400
|
+
|
|
401
|
+
## Security & Quality Analysis
|
|
402
|
+
### 🔒 Security Implications
|
|
403
|
+
- Pattern usage that creates vulnerabilities
|
|
404
|
+
- Input validation consistency
|
|
405
|
+
- Authentication/authorization pattern usage
|
|
406
|
+
|
|
407
|
+
### 🏗️ Code Quality Impact
|
|
408
|
+
- Pattern usage affecting maintainability
|
|
409
|
+
- Technical debt indicators
|
|
410
|
+
- Testing implications of pattern choices
|
|
411
|
+
|
|
412
|
+
## Strategic Recommendations
|
|
413
|
+
|
|
414
|
+
### 1. Immediate Actions (This Sprint)
|
|
415
|
+
- [Critical fixes needed now]
|
|
416
|
+
- [Security vulnerabilities to address]
|
|
417
|
+
|
|
418
|
+
### 2. Architectural Improvements (Next Quarter)
|
|
419
|
+
- [Refactoring opportunities for better pattern usage]
|
|
420
|
+
- [Consolidation of duplicate pattern implementations]
|
|
421
|
+
|
|
422
|
+
### 3. Long-term Strategy (6-12 months)
|
|
423
|
+
- [Team training on proper pattern usage]
|
|
424
|
+
- [Code standards establishment]
|
|
425
|
+
- [Tooling to enforce pattern consistency]
|
|
426
|
+
|
|
427
|
+
## Implementation Roadmap
|
|
428
|
+
1. **Week 1-2**: Address critical security findings
|
|
429
|
+
2. **Month 1**: Implement high-impact refactoring
|
|
430
|
+
3. **Quarter 1**: Establish team standards and tooling
|
|
431
|
+
4. **Ongoing**: Monitor pattern usage evolution
|
|
432
|
+
|
|
433
|
+
# Conclusion
|
|
434
|
+
**Bottom Line**: [Most important takeaway for technical leadership]
|
|
435
|
+
**Success Metrics**: [How to measure improvement]
|
|
436
|
+
**Next Steps**: [Specific actions to begin immediately]`;
|
|
437
|
+
return { systemAndContext, dataPayload, outputInstructions };
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Implement for backwards compatibility
|
|
441
|
+
* The system still expects this method, so we intelligently route to the appropriate stages
|
|
442
|
+
*/
|
|
443
|
+
getPromptStages(params) {
|
|
444
|
+
const mode = this.detectAnalysisMode(params);
|
|
445
|
+
if (mode === 'single-file') {
|
|
446
|
+
return this.getSingleFilePromptStages(params);
|
|
447
|
+
}
|
|
448
|
+
else {
|
|
449
|
+
return this.getMultiFilePromptStages(params);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
// Multi-file helper methods
|
|
453
|
+
async discoverRelevantFiles(projectPath, maxDepth, analysisType) {
|
|
454
|
+
const extensions = this.getFileExtensions(analysisType);
|
|
455
|
+
return await this.multiFileAnalysis.discoverFiles(projectPath, extensions, maxDepth);
|
|
456
|
+
}
|
|
457
|
+
async performMultiFileAnalysis(files, params, model, contextLength) {
|
|
458
|
+
const cacheKey = this.analysisCache.generateKey('find_pattern_usage', params, files);
|
|
459
|
+
const cached = await this.analysisCache.get(cacheKey);
|
|
460
|
+
if (cached)
|
|
461
|
+
return cached;
|
|
462
|
+
const fileAnalysisResults = await this.multiFileAnalysis.analyzeBatch(files, (file) => this.analyzeIndividualFile(file, params, model), contextLength);
|
|
463
|
+
// Aggregate results into proper analysis result format
|
|
464
|
+
const aggregatedResult = {
|
|
465
|
+
summary: `Pattern analysis across ${files.length} files`,
|
|
466
|
+
patterns: params.patterns,
|
|
467
|
+
totalFiles: files.length,
|
|
468
|
+
findings: fileAnalysisResults,
|
|
469
|
+
statistics: {
|
|
470
|
+
filesWithMatches: fileAnalysisResults.filter((r) => r.matches && r.matches.length > 0).length,
|
|
471
|
+
totalMatches: fileAnalysisResults.reduce((sum, r) => sum + (r.matches?.length || 0), 0),
|
|
472
|
+
patternsFound: [...new Set(fileAnalysisResults.flatMap((r) => r.matches?.map((m) => m.pattern) || []))]
|
|
473
|
+
}
|
|
474
|
+
};
|
|
475
|
+
await this.analysisCache.cacheAnalysis(cacheKey, aggregatedResult, {
|
|
476
|
+
modelUsed: model.identifier || 'unknown',
|
|
477
|
+
executionTime: Date.now() - Date.now(), // TODO: Track actual execution time
|
|
478
|
+
timestamp: new Date().toISOString()
|
|
479
|
+
});
|
|
480
|
+
return aggregatedResult;
|
|
481
|
+
}
|
|
482
|
+
async analyzeIndividualFile(file, params, model) {
|
|
483
|
+
try {
|
|
484
|
+
const content = await import('fs/promises').then(fs => fs.readFile(file, 'utf-8'));
|
|
485
|
+
const patternMatches = this.searchPatternsInCode(content, params.patterns, params.includeContext || 3);
|
|
486
|
+
return {
|
|
487
|
+
filePath: file,
|
|
488
|
+
size: content.length,
|
|
489
|
+
lines: content.split('\n').length,
|
|
490
|
+
matches: patternMatches.matches,
|
|
491
|
+
totalMatches: patternMatches.totalMatches
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
catch (error) {
|
|
495
|
+
return {
|
|
496
|
+
filePath: file,
|
|
497
|
+
size: 0,
|
|
498
|
+
lines: 0,
|
|
499
|
+
matches: [],
|
|
500
|
+
totalMatches: 0,
|
|
501
|
+
error: 'Could not read file'
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
getFileExtensions(analysisType) {
|
|
506
|
+
const extensionMap = {
|
|
507
|
+
'patterns': ['.js', '.ts', '.jsx', '.tsx', '.php', '.py', '.java', '.cs', '.cpp', '.c', '.h', '.rb', '.go', '.swift'],
|
|
508
|
+
'security': ['.js', '.ts', '.jsx', '.tsx', '.php', '.py', '.java', '.cs'], // Focus on web/app languages for security
|
|
509
|
+
'comprehensive': ['.js', '.ts', '.jsx', '.tsx', '.php', '.py', '.java', '.cs', '.cpp', '.c', '.h', '.rb', '.go', '.swift', '.kt', '.rs']
|
|
510
|
+
};
|
|
511
|
+
return extensionMap[analysisType] || extensionMap.comprehensive;
|
|
512
|
+
}
|
|
513
|
+
generateCacheKey(files, params) {
|
|
514
|
+
const fileHash = files.join('|');
|
|
515
|
+
const paramHash = JSON.stringify(params);
|
|
516
|
+
return `${fileHash}_${paramHash}`.substring(0, 64);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
export default PatternFinderPlugin;
|
|
520
|
+
//# sourceMappingURL=find-patterns.js.map
|