mcp-adr-analysis-server 1.1.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/LICENSE +21 -0
- package/README.md +608 -0
- package/dist/src/index.d.ts +10 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +1722 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/prompts/adr-suggestion-prompts.d.ts +24 -0
- package/dist/src/prompts/adr-suggestion-prompts.d.ts.map +1 -0
- package/dist/src/prompts/adr-suggestion-prompts.js +383 -0
- package/dist/src/prompts/adr-suggestion-prompts.js.map +1 -0
- package/dist/src/prompts/analysis-prompts.d.ts +24 -0
- package/dist/src/prompts/analysis-prompts.d.ts.map +1 -0
- package/dist/src/prompts/analysis-prompts.js +489 -0
- package/dist/src/prompts/analysis-prompts.js.map +1 -0
- package/dist/src/prompts/deployment-analysis-prompts.d.ts +54 -0
- package/dist/src/prompts/deployment-analysis-prompts.d.ts.map +1 -0
- package/dist/src/prompts/deployment-analysis-prompts.js +712 -0
- package/dist/src/prompts/deployment-analysis-prompts.js.map +1 -0
- package/dist/src/prompts/environment-analysis-prompts.d.ts +34 -0
- package/dist/src/prompts/environment-analysis-prompts.d.ts.map +1 -0
- package/dist/src/prompts/environment-analysis-prompts.js +724 -0
- package/dist/src/prompts/environment-analysis-prompts.js.map +1 -0
- package/dist/src/prompts/index.d.ts +43 -0
- package/dist/src/prompts/index.d.ts.map +1 -0
- package/dist/src/prompts/index.js +384 -0
- package/dist/src/prompts/index.js.map +1 -0
- package/dist/src/prompts/research-integration-prompts.d.ts +43 -0
- package/dist/src/prompts/research-integration-prompts.d.ts.map +1 -0
- package/dist/src/prompts/research-integration-prompts.js +398 -0
- package/dist/src/prompts/research-integration-prompts.js.map +1 -0
- package/dist/src/prompts/research-question-prompts.d.ts +75 -0
- package/dist/src/prompts/research-question-prompts.d.ts.map +1 -0
- package/dist/src/prompts/research-question-prompts.js +695 -0
- package/dist/src/prompts/research-question-prompts.js.map +1 -0
- package/dist/src/prompts/rule-generation-prompts.d.ts +63 -0
- package/dist/src/prompts/rule-generation-prompts.d.ts.map +1 -0
- package/dist/src/prompts/rule-generation-prompts.js +630 -0
- package/dist/src/prompts/rule-generation-prompts.js.map +1 -0
- package/dist/src/prompts/security-prompts.d.ts +23 -0
- package/dist/src/prompts/security-prompts.d.ts.map +1 -0
- package/dist/src/prompts/security-prompts.js +287 -0
- package/dist/src/prompts/security-prompts.js.map +1 -0
- package/dist/src/resources/index.d.ts +24 -0
- package/dist/src/resources/index.d.ts.map +1 -0
- package/dist/src/resources/index.js +458 -0
- package/dist/src/resources/index.js.map +1 -0
- package/dist/src/tools/adr-suggestion-tool.d.ts +40 -0
- package/dist/src/tools/adr-suggestion-tool.d.ts.map +1 -0
- package/dist/src/tools/adr-suggestion-tool.js +338 -0
- package/dist/src/tools/adr-suggestion-tool.js.map +1 -0
- package/dist/src/tools/content-masking-tool.d.ts +52 -0
- package/dist/src/tools/content-masking-tool.d.ts.map +1 -0
- package/dist/src/tools/content-masking-tool.js +206 -0
- package/dist/src/tools/content-masking-tool.js.map +1 -0
- package/dist/src/tools/deployment-analysis-tool.d.ts +39 -0
- package/dist/src/tools/deployment-analysis-tool.d.ts.map +1 -0
- package/dist/src/tools/deployment-analysis-tool.js +310 -0
- package/dist/src/tools/deployment-analysis-tool.js.map +1 -0
- package/dist/src/tools/environment-analysis-tool.d.ts +16 -0
- package/dist/src/tools/environment-analysis-tool.d.ts.map +1 -0
- package/dist/src/tools/environment-analysis-tool.js +298 -0
- package/dist/src/tools/environment-analysis-tool.js.map +1 -0
- package/dist/src/tools/research-integration-tool.d.ts +44 -0
- package/dist/src/tools/research-integration-tool.d.ts.map +1 -0
- package/dist/src/tools/research-integration-tool.js +429 -0
- package/dist/src/tools/research-integration-tool.js.map +1 -0
- package/dist/src/tools/research-question-tool.d.ts +55 -0
- package/dist/src/tools/research-question-tool.d.ts.map +1 -0
- package/dist/src/tools/research-question-tool.js +333 -0
- package/dist/src/tools/research-question-tool.js.map +1 -0
- package/dist/src/tools/rule-generation-tool.d.ts +49 -0
- package/dist/src/tools/rule-generation-tool.d.ts.map +1 -0
- package/dist/src/tools/rule-generation-tool.js +432 -0
- package/dist/src/tools/rule-generation-tool.js.map +1 -0
- package/dist/src/types/index.d.ts +531 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +129 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/utils/adr-suggestions.d.ts +104 -0
- package/dist/src/utils/adr-suggestions.d.ts.map +1 -0
- package/dist/src/utils/adr-suggestions.js +228 -0
- package/dist/src/utils/adr-suggestions.js.map +1 -0
- package/dist/src/utils/cache.d.ts +51 -0
- package/dist/src/utils/cache.d.ts.map +1 -0
- package/dist/src/utils/cache.js +243 -0
- package/dist/src/utils/cache.js.map +1 -0
- package/dist/src/utils/config.d.ts +65 -0
- package/dist/src/utils/config.d.ts.map +1 -0
- package/dist/src/utils/config.js +118 -0
- package/dist/src/utils/config.js.map +1 -0
- package/dist/src/utils/content-masking.d.ts +79 -0
- package/dist/src/utils/content-masking.d.ts.map +1 -0
- package/dist/src/utils/content-masking.js +203 -0
- package/dist/src/utils/content-masking.js.map +1 -0
- package/dist/src/utils/deployment-analysis.d.ts +67 -0
- package/dist/src/utils/deployment-analysis.d.ts.map +1 -0
- package/dist/src/utils/deployment-analysis.js +263 -0
- package/dist/src/utils/deployment-analysis.js.map +1 -0
- package/dist/src/utils/environment-analysis.d.ts +76 -0
- package/dist/src/utils/environment-analysis.d.ts.map +1 -0
- package/dist/src/utils/environment-analysis.js +329 -0
- package/dist/src/utils/environment-analysis.js.map +1 -0
- package/dist/src/utils/file-system.d.ts +63 -0
- package/dist/src/utils/file-system.d.ts.map +1 -0
- package/dist/src/utils/file-system.js +189 -0
- package/dist/src/utils/file-system.js.map +1 -0
- package/dist/src/utils/output-masking.d.ts +45 -0
- package/dist/src/utils/output-masking.d.ts.map +1 -0
- package/dist/src/utils/output-masking.js +200 -0
- package/dist/src/utils/output-masking.js.map +1 -0
- package/dist/src/utils/research-documentation.d.ts +58 -0
- package/dist/src/utils/research-documentation.d.ts.map +1 -0
- package/dist/src/utils/research-documentation.js +438 -0
- package/dist/src/utils/research-documentation.js.map +1 -0
- package/dist/src/utils/research-integration.d.ts +89 -0
- package/dist/src/utils/research-integration.d.ts.map +1 -0
- package/dist/src/utils/research-integration.js +432 -0
- package/dist/src/utils/research-integration.js.map +1 -0
- package/dist/src/utils/research-questions.d.ts +97 -0
- package/dist/src/utils/research-questions.d.ts.map +1 -0
- package/dist/src/utils/research-questions.js +319 -0
- package/dist/src/utils/research-questions.js.map +1 -0
- package/dist/src/utils/rule-format.d.ts +76 -0
- package/dist/src/utils/rule-format.d.ts.map +1 -0
- package/dist/src/utils/rule-format.js +257 -0
- package/dist/src/utils/rule-format.js.map +1 -0
- package/dist/src/utils/rule-generation.d.ts +86 -0
- package/dist/src/utils/rule-generation.d.ts.map +1 -0
- package/dist/src/utils/rule-generation.js +330 -0
- package/dist/src/utils/rule-generation.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-analysis.js","sourceRoot":"","sources":["../../../src/utils/environment-analysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File system utilities for MCP ADR Analysis Server
|
|
3
|
+
* Handles file discovery, reading, and analysis operations
|
|
4
|
+
*/
|
|
5
|
+
export interface FileInfo {
|
|
6
|
+
path: string;
|
|
7
|
+
name: string;
|
|
8
|
+
extension: string;
|
|
9
|
+
size: number;
|
|
10
|
+
directory: string;
|
|
11
|
+
content?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ProjectStructure {
|
|
14
|
+
rootPath: string;
|
|
15
|
+
files: FileInfo[];
|
|
16
|
+
directories: string[];
|
|
17
|
+
totalFiles: number;
|
|
18
|
+
totalDirectories: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Discover and analyze project structure
|
|
22
|
+
*/
|
|
23
|
+
export declare function analyzeProjectStructure(projectPath: string): Promise<ProjectStructure>;
|
|
24
|
+
/**
|
|
25
|
+
* Read file content safely
|
|
26
|
+
*/
|
|
27
|
+
export declare function readFileContent(filePath: string): Promise<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Find files matching specific patterns
|
|
30
|
+
*/
|
|
31
|
+
export declare function findFiles(projectPath: string, patterns: string[], options?: {
|
|
32
|
+
includeContent?: boolean;
|
|
33
|
+
}): Promise<FileInfo[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Check if file exists
|
|
36
|
+
*/
|
|
37
|
+
export declare function fileExists(filePath: string): Promise<boolean>;
|
|
38
|
+
/**
|
|
39
|
+
* Ensure directory exists
|
|
40
|
+
*/
|
|
41
|
+
export declare function ensureDirectory(dirPath: string): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Write file with directory creation
|
|
44
|
+
*/
|
|
45
|
+
export declare function writeFile(filePath: string, content: string): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Get file extension patterns for different file types
|
|
48
|
+
*/
|
|
49
|
+
export declare const FILE_PATTERNS: {
|
|
50
|
+
readonly config: readonly ["package.json", "tsconfig.json", "*.config.js", "*.config.ts", ".env*", "Dockerfile", "docker-compose.yml"];
|
|
51
|
+
readonly typescript: readonly ["**/*.ts", "**/*.tsx"];
|
|
52
|
+
readonly javascript: readonly ["**/*.js", "**/*.jsx"];
|
|
53
|
+
readonly python: readonly ["**/*.py"];
|
|
54
|
+
readonly java: readonly ["**/*.java"];
|
|
55
|
+
readonly csharp: readonly ["**/*.cs"];
|
|
56
|
+
readonly go: readonly ["**/*.go"];
|
|
57
|
+
readonly rust: readonly ["**/*.rs"];
|
|
58
|
+
readonly documentation: readonly ["**/*.md", "**/*.rst", "**/*.txt", "**/README*"];
|
|
59
|
+
readonly adrs: readonly ["docs/adrs/**/*.md", "adrs/**/*.md", "decisions/**/*.md"];
|
|
60
|
+
readonly build: readonly ["Makefile", "*.mk", "build.gradle", "pom.xml", "Cargo.toml"];
|
|
61
|
+
readonly ci: readonly [".github/workflows/**/*.yml", ".github/workflows/**/*.yaml", ".gitlab-ci.yml", "azure-pipelines.yml"];
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=file-system.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../../src/utils/file-system.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiE5F;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASvE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,GACzC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAuCrB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASpE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhF;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;CAmChB,CAAC"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File system utilities for MCP ADR Analysis Server
|
|
3
|
+
* Handles file discovery, reading, and analysis operations
|
|
4
|
+
*/
|
|
5
|
+
import { promises as fs } from 'fs';
|
|
6
|
+
import { extname, basename, dirname } from 'path';
|
|
7
|
+
import { glob } from 'fast-glob';
|
|
8
|
+
import { FileSystemError } from '../types/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* Discover and analyze project structure
|
|
11
|
+
*/
|
|
12
|
+
export async function analyzeProjectStructure(projectPath) {
|
|
13
|
+
try {
|
|
14
|
+
// Verify project path exists
|
|
15
|
+
const stats = await fs.stat(projectPath);
|
|
16
|
+
if (!stats.isDirectory()) {
|
|
17
|
+
throw new FileSystemError(`Path is not a directory: ${projectPath}`);
|
|
18
|
+
}
|
|
19
|
+
// Discover all files (excluding common ignore patterns)
|
|
20
|
+
const filePatterns = [
|
|
21
|
+
'**/*',
|
|
22
|
+
'!node_modules/**',
|
|
23
|
+
'!.git/**',
|
|
24
|
+
'!dist/**',
|
|
25
|
+
'!build/**',
|
|
26
|
+
'!coverage/**',
|
|
27
|
+
'!.mcp-adr-cache/**',
|
|
28
|
+
'!*.log',
|
|
29
|
+
];
|
|
30
|
+
const filePaths = await glob(filePatterns, {
|
|
31
|
+
cwd: projectPath,
|
|
32
|
+
absolute: true,
|
|
33
|
+
onlyFiles: true,
|
|
34
|
+
});
|
|
35
|
+
const directoryPaths = await glob(['**/*'], {
|
|
36
|
+
cwd: projectPath,
|
|
37
|
+
absolute: true,
|
|
38
|
+
onlyDirectories: true,
|
|
39
|
+
});
|
|
40
|
+
// Process file information
|
|
41
|
+
const files = [];
|
|
42
|
+
for (const filePath of filePaths) {
|
|
43
|
+
try {
|
|
44
|
+
const fileStats = await fs.stat(filePath);
|
|
45
|
+
const relativePath = filePath.replace(projectPath + '/', '');
|
|
46
|
+
files.push({
|
|
47
|
+
path: relativePath,
|
|
48
|
+
name: basename(filePath),
|
|
49
|
+
extension: extname(filePath),
|
|
50
|
+
size: fileStats.size,
|
|
51
|
+
directory: dirname(relativePath),
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
// Skip files that can't be accessed
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
rootPath: projectPath,
|
|
61
|
+
files,
|
|
62
|
+
directories: directoryPaths.map(dir => dir.replace(projectPath + '/', '')),
|
|
63
|
+
totalFiles: files.length,
|
|
64
|
+
totalDirectories: directoryPaths.length,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
throw new FileSystemError(`Failed to analyze project structure: ${error instanceof Error ? error.message : String(error)}`, { projectPath });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Read file content safely
|
|
73
|
+
*/
|
|
74
|
+
export async function readFileContent(filePath) {
|
|
75
|
+
try {
|
|
76
|
+
return await fs.readFile(filePath, 'utf-8');
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
throw new FileSystemError(`Failed to read file: ${error instanceof Error ? error.message : String(error)}`, { filePath });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Find files matching specific patterns
|
|
84
|
+
*/
|
|
85
|
+
export async function findFiles(projectPath, patterns, options = {}) {
|
|
86
|
+
try {
|
|
87
|
+
const filePaths = await glob(patterns, {
|
|
88
|
+
cwd: projectPath,
|
|
89
|
+
absolute: true,
|
|
90
|
+
});
|
|
91
|
+
const files = [];
|
|
92
|
+
for (const filePath of filePaths) {
|
|
93
|
+
try {
|
|
94
|
+
const fileStats = await fs.stat(filePath);
|
|
95
|
+
const relativePath = filePath.replace(projectPath + '/', '');
|
|
96
|
+
const fileInfo = {
|
|
97
|
+
path: relativePath,
|
|
98
|
+
name: basename(filePath),
|
|
99
|
+
extension: extname(filePath),
|
|
100
|
+
size: fileStats.size,
|
|
101
|
+
directory: dirname(relativePath),
|
|
102
|
+
};
|
|
103
|
+
if (options.includeContent) {
|
|
104
|
+
fileInfo.content = await readFileContent(filePath);
|
|
105
|
+
}
|
|
106
|
+
files.push(fileInfo);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
// Skip files that can't be accessed
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return files;
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
throw new FileSystemError(`Failed to find files: ${error instanceof Error ? error.message : String(error)}`, { projectPath, patterns });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Check if file exists
|
|
121
|
+
*/
|
|
122
|
+
export async function fileExists(filePath) {
|
|
123
|
+
try {
|
|
124
|
+
await fs.access(filePath);
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Ensure directory exists
|
|
133
|
+
*/
|
|
134
|
+
export async function ensureDirectory(dirPath) {
|
|
135
|
+
try {
|
|
136
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
throw new FileSystemError(`Failed to create directory: ${error instanceof Error ? error.message : String(error)}`, { dirPath });
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Write file with directory creation
|
|
144
|
+
*/
|
|
145
|
+
export async function writeFile(filePath, content) {
|
|
146
|
+
try {
|
|
147
|
+
await ensureDirectory(dirname(filePath));
|
|
148
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
throw new FileSystemError(`Failed to write file: ${error instanceof Error ? error.message : String(error)}`, { filePath });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Get file extension patterns for different file types
|
|
156
|
+
*/
|
|
157
|
+
export const FILE_PATTERNS = {
|
|
158
|
+
// Configuration files
|
|
159
|
+
config: [
|
|
160
|
+
'package.json',
|
|
161
|
+
'tsconfig.json',
|
|
162
|
+
'*.config.js',
|
|
163
|
+
'*.config.ts',
|
|
164
|
+
'.env*',
|
|
165
|
+
'Dockerfile',
|
|
166
|
+
'docker-compose.yml',
|
|
167
|
+
],
|
|
168
|
+
// Source code
|
|
169
|
+
typescript: ['**/*.ts', '**/*.tsx'],
|
|
170
|
+
javascript: ['**/*.js', '**/*.jsx'],
|
|
171
|
+
python: ['**/*.py'],
|
|
172
|
+
java: ['**/*.java'],
|
|
173
|
+
csharp: ['**/*.cs'],
|
|
174
|
+
go: ['**/*.go'],
|
|
175
|
+
rust: ['**/*.rs'],
|
|
176
|
+
// Documentation
|
|
177
|
+
documentation: ['**/*.md', '**/*.rst', '**/*.txt', '**/README*'],
|
|
178
|
+
// ADRs specifically
|
|
179
|
+
adrs: ['docs/adrs/**/*.md', 'adrs/**/*.md', 'decisions/**/*.md'],
|
|
180
|
+
// Build and deployment
|
|
181
|
+
build: ['Makefile', '*.mk', 'build.gradle', 'pom.xml', 'Cargo.toml'],
|
|
182
|
+
ci: [
|
|
183
|
+
'.github/workflows/**/*.yml',
|
|
184
|
+
'.github/workflows/**/*.yaml',
|
|
185
|
+
'.gitlab-ci.yml',
|
|
186
|
+
'azure-pipelines.yml',
|
|
187
|
+
],
|
|
188
|
+
};
|
|
189
|
+
//# sourceMappingURL=file-system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../../src/utils/file-system.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Output masking middleware for MCP responses
|
|
3
|
+
* Automatically applies content masking to all tool and resource outputs
|
|
4
|
+
*/
|
|
5
|
+
export interface MaskingConfig {
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
strategy: 'full' | 'partial' | 'placeholder' | 'environment';
|
|
8
|
+
customPatterns?: string[];
|
|
9
|
+
skipPatterns?: string[];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Apply content masking to MCP response content
|
|
13
|
+
*/
|
|
14
|
+
export declare function maskMcpResponse(response: any, config?: MaskingConfig): Promise<any>;
|
|
15
|
+
/**
|
|
16
|
+
* Generate AI-powered masking for sensitive content
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateAiMasking(content: string, contentType?: 'code' | 'documentation' | 'configuration' | 'logs' | 'general'): Promise<{
|
|
19
|
+
maskedContent: string;
|
|
20
|
+
analysisPrompt: string;
|
|
21
|
+
}>;
|
|
22
|
+
/**
|
|
23
|
+
* Create masking configuration from environment or defaults
|
|
24
|
+
*/
|
|
25
|
+
export declare function createMaskingConfig(overrides?: Partial<MaskingConfig>): MaskingConfig;
|
|
26
|
+
/**
|
|
27
|
+
* Validate masking configuration
|
|
28
|
+
*/
|
|
29
|
+
export declare function validateMaskingConfig(config: MaskingConfig): {
|
|
30
|
+
isValid: boolean;
|
|
31
|
+
errors: string[];
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Middleware wrapper for MCP tool responses
|
|
35
|
+
*/
|
|
36
|
+
export declare function withContentMasking<T extends (..._args: any[]) => Promise<any>>(toolFunction: T, config?: MaskingConfig): T;
|
|
37
|
+
/**
|
|
38
|
+
* Apply progressive masking based on content sensitivity
|
|
39
|
+
*/
|
|
40
|
+
export declare function applyProgressiveMasking(content: string, sensitivityLevel?: 'low' | 'medium' | 'high' | 'critical'): Promise<string>;
|
|
41
|
+
/**
|
|
42
|
+
* Detect content sensitivity level using heuristics
|
|
43
|
+
*/
|
|
44
|
+
export declare function detectContentSensitivity(content: string): 'low' | 'medium' | 'high' | 'critical';
|
|
45
|
+
//# sourceMappingURL=output-masking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-masking.d.ts","sourceRoot":"","sources":["../../../src/utils/output-masking.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,aAAa,CAAC;IAC7D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAkBD;;GAEG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,GAAG,EACb,MAAM,GAAE,aAAsC,GAC7C,OAAO,CAAC,GAAG,CAAC,CAwCd;AAuBD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAAM,GAAG,eAAe,GAAG,eAAe,GAAG,MAAM,GAAG,SAAqB,GACvF,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAuC5D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAWrF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAuBA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,CAAC,GAAG,KAAK,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EAC5E,YAAY,EAAE,CAAC,EACf,MAAM,CAAC,EAAE,aAAa,GACrB,CAAC,CAMH;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,gBAAgB,GAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAqB,GAClE,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAwBhG"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Output masking middleware for MCP responses
|
|
3
|
+
* Automatically applies content masking to all tool and resource outputs
|
|
4
|
+
*/
|
|
5
|
+
import { McpAdrError } from '../types/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Default masking configuration
|
|
8
|
+
*/
|
|
9
|
+
const DEFAULT_MASKING_CONFIG = {
|
|
10
|
+
enabled: true,
|
|
11
|
+
strategy: 'partial',
|
|
12
|
+
customPatterns: [],
|
|
13
|
+
skipPatterns: [
|
|
14
|
+
'[REDACTED]',
|
|
15
|
+
'[API_KEY_REDACTED]',
|
|
16
|
+
'[PASSWORD_REDACTED]',
|
|
17
|
+
'[EMAIL_REDACTED]',
|
|
18
|
+
'[IP_ADDRESS_REDACTED]',
|
|
19
|
+
],
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Apply content masking to MCP response content
|
|
23
|
+
*/
|
|
24
|
+
export async function maskMcpResponse(response, config = DEFAULT_MASKING_CONFIG) {
|
|
25
|
+
if (!config.enabled) {
|
|
26
|
+
return response;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
// Deep clone the response to avoid modifying the original
|
|
30
|
+
const maskedResponse = JSON.parse(JSON.stringify(response));
|
|
31
|
+
// Apply masking to different response types
|
|
32
|
+
if (maskedResponse.content && Array.isArray(maskedResponse.content)) {
|
|
33
|
+
// Tool response with content array
|
|
34
|
+
for (const contentItem of maskedResponse.content) {
|
|
35
|
+
if (contentItem.type === 'text' && contentItem.text) {
|
|
36
|
+
contentItem.text = await maskContent(contentItem.text, config);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else if (maskedResponse.contents && Array.isArray(maskedResponse.contents)) {
|
|
41
|
+
// Resource response with contents array
|
|
42
|
+
for (const contentItem of maskedResponse.contents) {
|
|
43
|
+
if (contentItem.text) {
|
|
44
|
+
contentItem.text = await maskContent(contentItem.text, config);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else if (maskedResponse.messages && Array.isArray(maskedResponse.messages)) {
|
|
49
|
+
// Prompt response with messages array
|
|
50
|
+
for (const message of maskedResponse.messages) {
|
|
51
|
+
if (message.content && message.content.text) {
|
|
52
|
+
message.content.text = await maskContent(message.content.text, config);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return maskedResponse;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
throw new McpAdrError(`Failed to mask MCP response: ${error instanceof Error ? error.message : String(error)}`, 'MASKING_ERROR');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Apply content masking to a text string
|
|
64
|
+
*/
|
|
65
|
+
async function maskContent(content, config) {
|
|
66
|
+
try {
|
|
67
|
+
// Skip if content is already masked
|
|
68
|
+
if (config.skipPatterns?.some(pattern => content.includes(pattern))) {
|
|
69
|
+
return content;
|
|
70
|
+
}
|
|
71
|
+
// Apply basic masking patterns
|
|
72
|
+
const { applyBasicMasking } = await import('./content-masking.js');
|
|
73
|
+
const strategy = config.strategy === 'environment' ? 'placeholder' : config.strategy;
|
|
74
|
+
return applyBasicMasking(content, strategy);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
// If masking fails, return original content with warning
|
|
78
|
+
console.warn('Content masking failed:', error);
|
|
79
|
+
return content;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Generate AI-powered masking for sensitive content
|
|
84
|
+
*/
|
|
85
|
+
export async function generateAiMasking(content, contentType = 'general') {
|
|
86
|
+
try {
|
|
87
|
+
const { generateSensitiveContentDetectionPrompt } = await import('../prompts/security-prompts.js');
|
|
88
|
+
const analysisPrompt = generateSensitiveContentDetectionPrompt(content, contentType);
|
|
89
|
+
// For now, apply basic masking as fallback
|
|
90
|
+
const { applyBasicMasking } = await import('./content-masking.js');
|
|
91
|
+
const maskedContent = applyBasicMasking(content, 'partial');
|
|
92
|
+
return {
|
|
93
|
+
maskedContent,
|
|
94
|
+
analysisPrompt: `
|
|
95
|
+
# AI-Powered Content Masking Available
|
|
96
|
+
|
|
97
|
+
The following content has been processed with basic masking. For enhanced AI-powered masking, use the analysis prompt below:
|
|
98
|
+
|
|
99
|
+
## Basic Masked Content
|
|
100
|
+
\`\`\`
|
|
101
|
+
${maskedContent}
|
|
102
|
+
\`\`\`
|
|
103
|
+
|
|
104
|
+
## AI Analysis Prompt
|
|
105
|
+
${analysisPrompt}
|
|
106
|
+
|
|
107
|
+
## Instructions
|
|
108
|
+
1. Submit the AI analysis prompt to detect sensitive information
|
|
109
|
+
2. Use the results with the \`generate_content_masking\` tool for intelligent masking
|
|
110
|
+
3. Apply the enhanced masking for better security
|
|
111
|
+
`,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
throw new McpAdrError(`Failed to generate AI masking: ${error instanceof Error ? error.message : String(error)}`, 'MASKING_ERROR');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Create masking configuration from environment or defaults
|
|
120
|
+
*/
|
|
121
|
+
export function createMaskingConfig(overrides) {
|
|
122
|
+
const envConfig = {
|
|
123
|
+
enabled: process.env['MCP_MASKING_ENABLED'] !== 'false',
|
|
124
|
+
strategy: process.env['MCP_MASKING_STRATEGY'] || 'partial',
|
|
125
|
+
};
|
|
126
|
+
return {
|
|
127
|
+
...DEFAULT_MASKING_CONFIG,
|
|
128
|
+
...envConfig,
|
|
129
|
+
...overrides,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Validate masking configuration
|
|
134
|
+
*/
|
|
135
|
+
export function validateMaskingConfig(config) {
|
|
136
|
+
const errors = [];
|
|
137
|
+
if (typeof config.enabled !== 'boolean') {
|
|
138
|
+
errors.push('enabled must be a boolean');
|
|
139
|
+
}
|
|
140
|
+
if (!['full', 'partial', 'placeholder', 'environment'].includes(config.strategy)) {
|
|
141
|
+
errors.push('strategy must be one of: full, partial, placeholder, environment');
|
|
142
|
+
}
|
|
143
|
+
if (config.customPatterns && !Array.isArray(config.customPatterns)) {
|
|
144
|
+
errors.push('customPatterns must be an array');
|
|
145
|
+
}
|
|
146
|
+
if (config.skipPatterns && !Array.isArray(config.skipPatterns)) {
|
|
147
|
+
errors.push('skipPatterns must be an array');
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
isValid: errors.length === 0,
|
|
151
|
+
errors,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Middleware wrapper for MCP tool responses
|
|
156
|
+
*/
|
|
157
|
+
export function withContentMasking(toolFunction, config) {
|
|
158
|
+
return (async (...args) => {
|
|
159
|
+
const response = await toolFunction(...args);
|
|
160
|
+
const maskingConfig = config || createMaskingConfig();
|
|
161
|
+
return await maskMcpResponse(response, maskingConfig);
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Apply progressive masking based on content sensitivity
|
|
166
|
+
*/
|
|
167
|
+
export async function applyProgressiveMasking(content, sensitivityLevel = 'medium') {
|
|
168
|
+
const strategies = {
|
|
169
|
+
low: 'placeholder',
|
|
170
|
+
medium: 'partial',
|
|
171
|
+
high: 'full',
|
|
172
|
+
critical: 'full',
|
|
173
|
+
};
|
|
174
|
+
const strategy = strategies[sensitivityLevel];
|
|
175
|
+
const { applyBasicMasking } = await import('./content-masking.js');
|
|
176
|
+
return applyBasicMasking(content, strategy);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Detect content sensitivity level using heuristics
|
|
180
|
+
*/
|
|
181
|
+
export function detectContentSensitivity(content) {
|
|
182
|
+
const criticalPatterns = [/password/gi, /secret/gi, /private.*key/gi, /api.*key/gi, /token/gi];
|
|
183
|
+
const highPatterns = [
|
|
184
|
+
/@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g, // emails
|
|
185
|
+
/\b(?:\d{1,3}\.){3}\d{1,3}\b/g, // IP addresses
|
|
186
|
+
/\b[A-Z0-9]{20,}\b/g, // potential keys/tokens
|
|
187
|
+
];
|
|
188
|
+
const mediumPatterns = [/localhost/gi, /127\.0\.0\.1/g, /config/gi, /env/gi];
|
|
189
|
+
if (criticalPatterns.some(pattern => pattern.test(content))) {
|
|
190
|
+
return 'critical';
|
|
191
|
+
}
|
|
192
|
+
if (highPatterns.some(pattern => pattern.test(content))) {
|
|
193
|
+
return 'high';
|
|
194
|
+
}
|
|
195
|
+
if (mediumPatterns.some(pattern => pattern.test(content))) {
|
|
196
|
+
return 'medium';
|
|
197
|
+
}
|
|
198
|
+
return 'low';
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=output-masking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-masking.js","sourceRoot":"","sources":["../../../src/utils/output-masking.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Research documentation utilities
|
|
3
|
+
* Creates structured research documentation in docs/research/
|
|
4
|
+
*/
|
|
5
|
+
export interface ResearchDocument {
|
|
6
|
+
id: string;
|
|
7
|
+
title: string;
|
|
8
|
+
category: string;
|
|
9
|
+
status: 'planned' | 'in_progress' | 'completed' | 'cancelled';
|
|
10
|
+
priority: 'critical' | 'high' | 'medium' | 'low';
|
|
11
|
+
questions: Array<{
|
|
12
|
+
id: string;
|
|
13
|
+
question: string;
|
|
14
|
+
type: string;
|
|
15
|
+
methodology: string;
|
|
16
|
+
}>;
|
|
17
|
+
timeline: {
|
|
18
|
+
startDate: string;
|
|
19
|
+
endDate: string;
|
|
20
|
+
milestones: Array<{
|
|
21
|
+
name: string;
|
|
22
|
+
date: string;
|
|
23
|
+
description: string;
|
|
24
|
+
}>;
|
|
25
|
+
};
|
|
26
|
+
resources: Array<{
|
|
27
|
+
type: string;
|
|
28
|
+
description: string;
|
|
29
|
+
status: string;
|
|
30
|
+
}>;
|
|
31
|
+
findings: Array<{
|
|
32
|
+
date: string;
|
|
33
|
+
finding: string;
|
|
34
|
+
confidence: number;
|
|
35
|
+
impact: string;
|
|
36
|
+
}>;
|
|
37
|
+
recommendations: Array<{
|
|
38
|
+
recommendation: string;
|
|
39
|
+
rationale: string;
|
|
40
|
+
implementation: string;
|
|
41
|
+
priority: string;
|
|
42
|
+
}>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create perform_research.md file for a research topic
|
|
46
|
+
*/
|
|
47
|
+
export declare function createResearchDocument(researchData: ResearchDocument, outputDirectory?: string): Promise<{
|
|
48
|
+
filePath: string;
|
|
49
|
+
content: string;
|
|
50
|
+
}>;
|
|
51
|
+
/**
|
|
52
|
+
* Create research index file
|
|
53
|
+
*/
|
|
54
|
+
export declare function createResearchIndex(researchDocuments: ResearchDocument[], outputDirectory?: string): Promise<{
|
|
55
|
+
filePath: string;
|
|
56
|
+
content: string;
|
|
57
|
+
}>;
|
|
58
|
+
//# sourceMappingURL=research-documentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-documentation.d.ts","sourceRoot":"","sources":["../../../src/utils/research-documentation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC;IAC9D,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,SAAS,EAAE,KAAK,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,KAAK,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;KACJ,CAAC;IACF,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,eAAe,EAAE,KAAK,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,YAAY,EAAE,gBAAgB,EAC9B,eAAe,GAAE,MAAwB,GACxC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA4BhD;AAmQD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,eAAe,GAAE,MAAwB,GACxC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA0BhD"}
|