mcp-adr-analysis-server 2.0.3 → 2.0.6
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/dist/src/index.d.ts +28 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +703 -325
- package/dist/src/index.js.map +1 -1
- package/dist/src/prompts/adr-suggestion-prompts.d.ts +1 -0
- package/dist/src/prompts/adr-suggestion-prompts.d.ts.map +1 -1
- package/dist/src/prompts/adr-suggestion-prompts.js +14 -6
- package/dist/src/prompts/adr-suggestion-prompts.js.map +1 -1
- package/dist/src/resources/index.d.ts.map +1 -1
- package/dist/src/resources/index.js +31 -15
- package/dist/src/resources/index.js.map +1 -1
- package/dist/src/tools/adr-suggestion-tool.d.ts +4 -1
- package/dist/src/tools/adr-suggestion-tool.d.ts.map +1 -1
- package/dist/src/tools/adr-suggestion-tool.js +72 -114
- package/dist/src/tools/adr-suggestion-tool.js.map +1 -1
- package/dist/src/tools/content-masking-tool.d.ts +7 -0
- package/dist/src/tools/content-masking-tool.d.ts.map +1 -1
- package/dist/src/tools/content-masking-tool.js +134 -17
- package/dist/src/tools/content-masking-tool.js.map +1 -1
- package/dist/src/tools/deployment-guidance-tool.d.ts +21 -0
- package/dist/src/tools/deployment-guidance-tool.d.ts.map +1 -0
- package/dist/src/tools/deployment-guidance-tool.js +289 -0
- package/dist/src/tools/deployment-guidance-tool.js.map +1 -0
- package/dist/src/tools/environment-analysis-tool.d.ts +4 -0
- package/dist/src/tools/environment-analysis-tool.d.ts.map +1 -1
- package/dist/src/tools/environment-analysis-tool.js +209 -25
- package/dist/src/tools/environment-analysis-tool.js.map +1 -1
- package/dist/src/tools/research-question-tool.d.ts +4 -0
- package/dist/src/tools/research-question-tool.d.ts.map +1 -1
- package/dist/src/tools/research-question-tool.js +42 -4
- package/dist/src/tools/research-question-tool.js.map +1 -1
- package/dist/src/tools/rule-generation-tool.d.ts +4 -0
- package/dist/src/tools/rule-generation-tool.d.ts.map +1 -1
- package/dist/src/tools/rule-generation-tool.js +136 -16
- package/dist/src/tools/rule-generation-tool.js.map +1 -1
- package/dist/src/tools/todo-management-tool.d.ts +166 -0
- package/dist/src/tools/todo-management-tool.d.ts.map +1 -0
- package/dist/src/tools/todo-management-tool.js +472 -0
- package/dist/src/tools/todo-management-tool.js.map +1 -0
- package/dist/src/types/conversation-context.d.ts +93 -0
- package/dist/src/types/conversation-context.d.ts.map +1 -0
- package/dist/src/types/conversation-context.js +101 -0
- package/dist/src/types/conversation-context.js.map +1 -0
- package/dist/src/utils/actual-file-operations.d.ts +40 -0
- package/dist/src/utils/actual-file-operations.d.ts.map +1 -0
- package/dist/src/utils/actual-file-operations.js +309 -0
- package/dist/src/utils/actual-file-operations.js.map +1 -0
- package/dist/src/utils/adr-discovery.d.ts +36 -0
- package/dist/src/utils/adr-discovery.d.ts.map +1 -0
- package/dist/src/utils/adr-discovery.js +237 -0
- package/dist/src/utils/adr-discovery.js.map +1 -0
- package/dist/src/utils/adr-suggestions.d.ts +2 -1
- package/dist/src/utils/adr-suggestions.d.ts.map +1 -1
- package/dist/src/utils/adr-suggestions.js +8 -2
- package/dist/src/utils/adr-suggestions.js.map +1 -1
- package/dist/src/utils/apply-cot-enhancement.d.ts +46 -0
- package/dist/src/utils/apply-cot-enhancement.d.ts.map +1 -0
- package/dist/src/utils/apply-cot-enhancement.js +165 -0
- package/dist/src/utils/apply-cot-enhancement.js.map +1 -0
- package/dist/src/utils/chain-of-thought-template.d.ts +48 -0
- package/dist/src/utils/chain-of-thought-template.d.ts.map +1 -0
- package/dist/src/utils/chain-of-thought-template.js +191 -0
- package/dist/src/utils/chain-of-thought-template.js.map +1 -0
- package/dist/src/utils/deployment-analysis.d.ts +1 -0
- package/dist/src/utils/deployment-analysis.d.ts.map +1 -1
- package/dist/src/utils/deployment-analysis.js +82 -39
- package/dist/src/utils/deployment-analysis.js.map +1 -1
- package/dist/src/utils/environment-analysis.d.ts +6 -1
- package/dist/src/utils/environment-analysis.d.ts.map +1 -1
- package/dist/src/utils/environment-analysis.js +176 -87
- package/dist/src/utils/environment-analysis.js.map +1 -1
- package/dist/src/utils/file-system.d.ts +1 -0
- package/dist/src/utils/file-system.d.ts.map +1 -1
- package/dist/src/utils/file-system.js +24 -47
- package/dist/src/utils/file-system.js.map +1 -1
- package/dist/src/utils/prompt-execution.d.ts.map +1 -1
- package/dist/src/utils/prompt-execution.js +67 -3
- package/dist/src/utils/prompt-execution.js.map +1 -1
- package/dist/src/utils/research-integration.d.ts +4 -0
- package/dist/src/utils/research-integration.d.ts.map +1 -1
- package/dist/src/utils/research-integration.js +275 -84
- package/dist/src/utils/research-integration.js.map +1 -1
- package/dist/src/utils/research-questions.d.ts.map +1 -1
- package/dist/src/utils/research-questions.js +134 -38
- package/dist/src/utils/research-questions.js.map +1 -1
- package/dist/src/utils/rule-generation.d.ts +2 -1
- package/dist/src/utils/rule-generation.d.ts.map +1 -1
- package/dist/src/utils/rule-generation.js +65 -36
- package/dist/src/utils/rule-generation.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversation Context Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the structure for passing conversation context from calling LLMs
|
|
5
|
+
* to the MCP server for context-aware analysis.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* JSON Schema for conversation context - reusable across tools
|
|
9
|
+
*/
|
|
10
|
+
export const CONVERSATION_CONTEXT_SCHEMA = {
|
|
11
|
+
type: 'object',
|
|
12
|
+
description: 'Rich context from the calling LLM about user goals and discussion history',
|
|
13
|
+
properties: {
|
|
14
|
+
userGoals: {
|
|
15
|
+
type: 'array',
|
|
16
|
+
items: { type: 'string' },
|
|
17
|
+
description: 'Primary objectives the user wants to achieve (e.g., ["microservices migration", "improve security"])'
|
|
18
|
+
},
|
|
19
|
+
focusAreas: {
|
|
20
|
+
type: 'array',
|
|
21
|
+
items: { type: 'string' },
|
|
22
|
+
description: 'Specific areas of concern or interest (e.g., ["security", "performance", "maintainability"])'
|
|
23
|
+
},
|
|
24
|
+
constraints: {
|
|
25
|
+
type: 'array',
|
|
26
|
+
items: { type: 'string' },
|
|
27
|
+
description: 'Limitations, compliance requirements, or restrictions (e.g., ["GDPR compliance", "budget under $50k", "minimal downtime"])'
|
|
28
|
+
},
|
|
29
|
+
previousContext: {
|
|
30
|
+
type: 'string',
|
|
31
|
+
description: 'Relevant context from previous conversation (e.g., "User mentioned concerns about database splitting")'
|
|
32
|
+
},
|
|
33
|
+
projectPhase: {
|
|
34
|
+
type: 'string',
|
|
35
|
+
description: 'Current project phase (e.g., "planning", "development", "migration", "production")'
|
|
36
|
+
},
|
|
37
|
+
userRole: {
|
|
38
|
+
type: 'string',
|
|
39
|
+
description: 'User\'s role or expertise level (e.g., "senior architect", "developer", "project manager")'
|
|
40
|
+
},
|
|
41
|
+
requirements: {
|
|
42
|
+
type: 'array',
|
|
43
|
+
items: { type: 'string' },
|
|
44
|
+
description: 'Specific requirements or preferences mentioned'
|
|
45
|
+
},
|
|
46
|
+
timeline: {
|
|
47
|
+
type: 'string',
|
|
48
|
+
description: 'Timeline or urgency information (e.g., "launch in 3 months", "urgent migration")'
|
|
49
|
+
},
|
|
50
|
+
budget: {
|
|
51
|
+
type: 'string',
|
|
52
|
+
description: 'Budget or resource constraints (e.g., "limited budget", "enterprise scale")'
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
additionalProperties: false
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Utility function to extract context summary for prompts
|
|
59
|
+
*/
|
|
60
|
+
export function formatContextForPrompt(context) {
|
|
61
|
+
if (!context)
|
|
62
|
+
return '';
|
|
63
|
+
const sections = [];
|
|
64
|
+
if (context.userGoals?.length) {
|
|
65
|
+
sections.push(`User Goals: ${context.userGoals.join(', ')}`);
|
|
66
|
+
}
|
|
67
|
+
if (context.focusAreas?.length) {
|
|
68
|
+
sections.push(`Focus Areas: ${context.focusAreas.join(', ')}`);
|
|
69
|
+
}
|
|
70
|
+
if (context.constraints?.length) {
|
|
71
|
+
sections.push(`Constraints: ${context.constraints.join(', ')}`);
|
|
72
|
+
}
|
|
73
|
+
if (context.projectPhase) {
|
|
74
|
+
sections.push(`Project Phase: ${context.projectPhase}`);
|
|
75
|
+
}
|
|
76
|
+
if (context.userRole) {
|
|
77
|
+
sections.push(`User Role: ${context.userRole}`);
|
|
78
|
+
}
|
|
79
|
+
if (context.timeline) {
|
|
80
|
+
sections.push(`Timeline: ${context.timeline}`);
|
|
81
|
+
}
|
|
82
|
+
if (context.previousContext) {
|
|
83
|
+
sections.push(`Previous Context: ${context.previousContext}`);
|
|
84
|
+
}
|
|
85
|
+
return sections.length > 0 ? `## User Context\n${sections.join('\n')}\n\n` : '';
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check if context contains meaningful information
|
|
89
|
+
*/
|
|
90
|
+
export function hasMeaningfulContext(context) {
|
|
91
|
+
if (!context)
|
|
92
|
+
return false;
|
|
93
|
+
return !!(context.userGoals?.length ||
|
|
94
|
+
context.focusAreas?.length ||
|
|
95
|
+
context.constraints?.length ||
|
|
96
|
+
context.previousContext ||
|
|
97
|
+
context.projectPhase ||
|
|
98
|
+
context.userRole ||
|
|
99
|
+
context.requirements?.length);
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=conversation-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-context.js","sourceRoot":"","sources":["../../../src/types/conversation-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Actual File Operations Utilities
|
|
3
|
+
*
|
|
4
|
+
* Utilities that perform real file system operations instead of returning prompts
|
|
5
|
+
*/
|
|
6
|
+
export interface ProjectFileInfo {
|
|
7
|
+
filename: string;
|
|
8
|
+
content: string;
|
|
9
|
+
path: string;
|
|
10
|
+
relativePath: string;
|
|
11
|
+
type: string;
|
|
12
|
+
size: number;
|
|
13
|
+
exists: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface ProjectStructure {
|
|
16
|
+
rootPath: string;
|
|
17
|
+
packageFiles: ProjectFileInfo[];
|
|
18
|
+
configFiles: ProjectFileInfo[];
|
|
19
|
+
environmentFiles: ProjectFileInfo[];
|
|
20
|
+
buildFiles: ProjectFileInfo[];
|
|
21
|
+
dockerFiles: ProjectFileInfo[];
|
|
22
|
+
kubernetesFiles: ProjectFileInfo[];
|
|
23
|
+
ciFiles: ProjectFileInfo[];
|
|
24
|
+
scriptFiles: ProjectFileInfo[];
|
|
25
|
+
totalFiles: number;
|
|
26
|
+
directories: string[];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Actually scan and analyze project structure using file system operations
|
|
30
|
+
*/
|
|
31
|
+
export declare function scanProjectStructure(projectPath: string, options?: {
|
|
32
|
+
readContent?: boolean;
|
|
33
|
+
maxFileSize?: number;
|
|
34
|
+
includeHidden?: boolean;
|
|
35
|
+
}): Promise<ProjectStructure>;
|
|
36
|
+
/**
|
|
37
|
+
* Find and read environment files specifically
|
|
38
|
+
*/
|
|
39
|
+
export declare function findActualEnvironmentFiles(projectPath: string): Promise<ProjectFileInfo[]>;
|
|
40
|
+
//# sourceMappingURL=actual-file-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actual-file-operations.d.ts","sourceRoot":"","sources":["../../../src/utils/actual-file-operations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,eAAe,EAAE,eAAe,EAAE,CAAC;IACnC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACpB,GACL,OAAO,CAAC,gBAAgB,CAAC,CAuJ3B;AA+KD;;GAEG;AACH,wBAAsB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAUhG"}
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Actual File Operations Utilities
|
|
3
|
+
*
|
|
4
|
+
* Utilities that perform real file system operations instead of returning prompts
|
|
5
|
+
*/
|
|
6
|
+
import { McpAdrError } from '../types/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* Actually scan and analyze project structure using file system operations
|
|
9
|
+
*/
|
|
10
|
+
export async function scanProjectStructure(projectPath, options = {}) {
|
|
11
|
+
const { readContent = true, maxFileSize = 100000, // 100KB max
|
|
12
|
+
includeHidden = false } = options;
|
|
13
|
+
try {
|
|
14
|
+
const fs = await import('fs/promises');
|
|
15
|
+
const path = await import('path');
|
|
16
|
+
// Initialize structure
|
|
17
|
+
const structure = {
|
|
18
|
+
rootPath: projectPath,
|
|
19
|
+
packageFiles: [],
|
|
20
|
+
configFiles: [],
|
|
21
|
+
environmentFiles: [],
|
|
22
|
+
buildFiles: [],
|
|
23
|
+
dockerFiles: [],
|
|
24
|
+
kubernetesFiles: [],
|
|
25
|
+
ciFiles: [],
|
|
26
|
+
scriptFiles: [],
|
|
27
|
+
totalFiles: 0,
|
|
28
|
+
directories: []
|
|
29
|
+
};
|
|
30
|
+
// Scan for specific file patterns
|
|
31
|
+
const filesToScan = [
|
|
32
|
+
// Package files
|
|
33
|
+
{ pattern: 'package.json', category: 'packageFiles' },
|
|
34
|
+
{ pattern: 'requirements.txt', category: 'packageFiles' },
|
|
35
|
+
{ pattern: 'Pipfile', category: 'packageFiles' },
|
|
36
|
+
{ pattern: 'poetry.lock', category: 'packageFiles' },
|
|
37
|
+
{ pattern: 'Cargo.toml', category: 'packageFiles' },
|
|
38
|
+
{ pattern: 'go.mod', category: 'packageFiles' },
|
|
39
|
+
{ pattern: 'pom.xml', category: 'packageFiles' },
|
|
40
|
+
{ pattern: 'build.gradle', category: 'packageFiles' },
|
|
41
|
+
// Environment files
|
|
42
|
+
{ pattern: '.env', category: 'environmentFiles' },
|
|
43
|
+
{ pattern: '.env.local', category: 'environmentFiles' },
|
|
44
|
+
{ pattern: '.env.production', category: 'environmentFiles' },
|
|
45
|
+
{ pattern: '.env.development', category: 'environmentFiles' },
|
|
46
|
+
{ pattern: 'config.json', category: 'configFiles' },
|
|
47
|
+
{ pattern: 'config.yaml', category: 'configFiles' },
|
|
48
|
+
{ pattern: 'config.yml', category: 'configFiles' },
|
|
49
|
+
// Docker files
|
|
50
|
+
{ pattern: 'Dockerfile', category: 'dockerFiles' },
|
|
51
|
+
{ pattern: 'docker-compose.yml', category: 'dockerFiles' },
|
|
52
|
+
{ pattern: 'docker-compose.yaml', category: 'dockerFiles' },
|
|
53
|
+
{ pattern: '.dockerignore', category: 'dockerFiles' },
|
|
54
|
+
// Kubernetes files
|
|
55
|
+
{ pattern: '*.yaml', category: 'kubernetesFiles', isPattern: true },
|
|
56
|
+
{ pattern: '*.yml', category: 'kubernetesFiles', isPattern: true },
|
|
57
|
+
// Build files
|
|
58
|
+
{ pattern: 'Makefile', category: 'buildFiles' },
|
|
59
|
+
{ pattern: 'webpack.config.js', category: 'buildFiles' },
|
|
60
|
+
{ pattern: 'vite.config.js', category: 'buildFiles' },
|
|
61
|
+
{ pattern: 'tsconfig.json', category: 'configFiles' },
|
|
62
|
+
// CI files
|
|
63
|
+
{ pattern: '.github/workflows', category: 'ciFiles', isDirectory: true },
|
|
64
|
+
{ pattern: '.gitlab-ci.yml', category: 'ciFiles' },
|
|
65
|
+
{ pattern: 'Jenkinsfile', category: 'ciFiles' },
|
|
66
|
+
{ pattern: '.travis.yml', category: 'ciFiles' },
|
|
67
|
+
// Shell scripts and automation
|
|
68
|
+
{ pattern: '*.sh', category: 'scriptFiles', isPattern: true },
|
|
69
|
+
{ pattern: '*.bash', category: 'scriptFiles', isPattern: true },
|
|
70
|
+
{ pattern: '*.zsh', category: 'scriptFiles', isPattern: true },
|
|
71
|
+
{ pattern: '*.fish', category: 'scriptFiles', isPattern: true },
|
|
72
|
+
{ pattern: '*.ps1', category: 'scriptFiles', isPattern: true },
|
|
73
|
+
{ pattern: '*.bat', category: 'scriptFiles', isPattern: true },
|
|
74
|
+
{ pattern: '*.cmd', category: 'scriptFiles', isPattern: true },
|
|
75
|
+
{ pattern: 'scripts', category: 'scriptFiles', isDirectory: true },
|
|
76
|
+
{ pattern: 'bin', category: 'scriptFiles', isDirectory: true }
|
|
77
|
+
];
|
|
78
|
+
// Scan directories
|
|
79
|
+
const directories = await scanDirectories(projectPath, includeHidden);
|
|
80
|
+
structure.directories = directories;
|
|
81
|
+
// Scan for specific files
|
|
82
|
+
for (const fileSpec of filesToScan) {
|
|
83
|
+
if (fileSpec.isDirectory) {
|
|
84
|
+
// Handle directory scanning (like .github/workflows)
|
|
85
|
+
const dirPath = path.join(projectPath, fileSpec.pattern);
|
|
86
|
+
try {
|
|
87
|
+
const stat = await fs.stat(dirPath);
|
|
88
|
+
if (stat.isDirectory()) {
|
|
89
|
+
const files = await fs.readdir(dirPath);
|
|
90
|
+
for (const file of files) {
|
|
91
|
+
const filePath = path.join(dirPath, file);
|
|
92
|
+
const fileInfo = await readFileInfo(filePath, projectPath, readContent, maxFileSize);
|
|
93
|
+
if (fileInfo) {
|
|
94
|
+
fileInfo.type = fileSpec.category;
|
|
95
|
+
structure[fileSpec.category].push(fileInfo);
|
|
96
|
+
structure.totalFiles++;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Directory doesn't exist, skip
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else if (fileSpec.isPattern) {
|
|
106
|
+
// Handle glob patterns
|
|
107
|
+
const files = await findFilesWithPattern(projectPath, fileSpec.pattern);
|
|
108
|
+
for (const filePath of files) {
|
|
109
|
+
let shouldInclude = false;
|
|
110
|
+
// Special logic for different file types
|
|
111
|
+
if (fileSpec.category === 'kubernetesFiles') {
|
|
112
|
+
shouldInclude = await isKubernetesFile(filePath);
|
|
113
|
+
}
|
|
114
|
+
else if (fileSpec.category === 'scriptFiles') {
|
|
115
|
+
shouldInclude = await isScriptFile(filePath);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
shouldInclude = true; // Include all other pattern matches
|
|
119
|
+
}
|
|
120
|
+
if (shouldInclude) {
|
|
121
|
+
const fileInfo = await readFileInfo(filePath, projectPath, readContent, maxFileSize);
|
|
122
|
+
if (fileInfo) {
|
|
123
|
+
fileInfo.type = fileSpec.category;
|
|
124
|
+
structure[fileSpec.category].push(fileInfo);
|
|
125
|
+
structure.totalFiles++;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
// Handle specific files
|
|
132
|
+
const filePath = path.join(projectPath, fileSpec.pattern);
|
|
133
|
+
const fileInfo = await readFileInfo(filePath, projectPath, readContent, maxFileSize);
|
|
134
|
+
if (fileInfo) {
|
|
135
|
+
fileInfo.type = fileSpec.category;
|
|
136
|
+
structure[fileSpec.category].push(fileInfo);
|
|
137
|
+
structure.totalFiles++;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return structure;
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
throw new McpAdrError(`Failed to scan project structure: ${error instanceof Error ? error.message : String(error)}`, 'SCAN_ERROR');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Scan directories in project
|
|
149
|
+
*/
|
|
150
|
+
async function scanDirectories(projectPath, includeHidden) {
|
|
151
|
+
const fs = await import('fs/promises');
|
|
152
|
+
const directories = [];
|
|
153
|
+
try {
|
|
154
|
+
const entries = await fs.readdir(projectPath, { withFileTypes: true });
|
|
155
|
+
for (const entry of entries) {
|
|
156
|
+
if (entry.isDirectory()) {
|
|
157
|
+
if (!includeHidden && entry.name.startsWith('.')) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
directories.push(entry.name);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// Error reading directory
|
|
166
|
+
}
|
|
167
|
+
return directories;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Read file information and optionally content
|
|
171
|
+
*/
|
|
172
|
+
async function readFileInfo(filePath, projectPath, readContent, maxFileSize) {
|
|
173
|
+
const fs = await import('fs/promises');
|
|
174
|
+
const path = await import('path');
|
|
175
|
+
try {
|
|
176
|
+
const stat = await fs.stat(filePath);
|
|
177
|
+
if (!stat.isFile()) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
let content = '';
|
|
181
|
+
if (readContent && stat.size <= maxFileSize) {
|
|
182
|
+
try {
|
|
183
|
+
content = await fs.readFile(filePath, 'utf-8');
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// Binary file or encoding issue, leave content empty
|
|
187
|
+
content = '[Binary or unreadable file]';
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
filename: path.basename(filePath),
|
|
192
|
+
content,
|
|
193
|
+
path: filePath,
|
|
194
|
+
relativePath: path.relative(projectPath, filePath),
|
|
195
|
+
type: 'unknown',
|
|
196
|
+
size: stat.size,
|
|
197
|
+
exists: true
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
return null; // File doesn't exist or can't be read
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Find files matching a pattern (simplified glob)
|
|
206
|
+
*/
|
|
207
|
+
async function findFilesWithPattern(projectPath, pattern) {
|
|
208
|
+
const fs = await import('fs/promises');
|
|
209
|
+
const path = await import('path');
|
|
210
|
+
const files = [];
|
|
211
|
+
const extension = pattern.replace('*.', '.');
|
|
212
|
+
try {
|
|
213
|
+
const scan = async (dir) => {
|
|
214
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
215
|
+
for (const entry of entries) {
|
|
216
|
+
const fullPath = path.join(dir, entry.name);
|
|
217
|
+
if (entry.isDirectory() && !entry.name.startsWith('.')) {
|
|
218
|
+
await scan(fullPath); // Recursive scan
|
|
219
|
+
}
|
|
220
|
+
else if (entry.isFile() && entry.name.endsWith(extension)) {
|
|
221
|
+
files.push(fullPath);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
await scan(projectPath);
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
// Error scanning
|
|
229
|
+
}
|
|
230
|
+
return files;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Check if a YAML/YML file is likely a Kubernetes manifest
|
|
234
|
+
*/
|
|
235
|
+
async function isKubernetesFile(filePath) {
|
|
236
|
+
const fs = await import('fs/promises');
|
|
237
|
+
try {
|
|
238
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
239
|
+
const lowerContent = content.toLowerCase();
|
|
240
|
+
// Look for Kubernetes-specific keywords
|
|
241
|
+
const k8sKeywords = [
|
|
242
|
+
'apiversion',
|
|
243
|
+
'kind:',
|
|
244
|
+
'metadata:',
|
|
245
|
+
'spec:',
|
|
246
|
+
'deployment',
|
|
247
|
+
'service',
|
|
248
|
+
'configmap',
|
|
249
|
+
'secret',
|
|
250
|
+
'ingress',
|
|
251
|
+
'namespace',
|
|
252
|
+
'pod',
|
|
253
|
+
'replicaset'
|
|
254
|
+
];
|
|
255
|
+
return k8sKeywords.some(keyword => lowerContent.includes(keyword));
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Check if a file is a script file
|
|
263
|
+
*/
|
|
264
|
+
async function isScriptFile(filePath) {
|
|
265
|
+
const fs = await import('fs/promises');
|
|
266
|
+
const path = await import('path');
|
|
267
|
+
try {
|
|
268
|
+
const filename = path.basename(filePath);
|
|
269
|
+
const extension = path.extname(filePath).toLowerCase();
|
|
270
|
+
// Check by file extension
|
|
271
|
+
const scriptExtensions = ['.sh', '.bash', '.zsh', '.fish', '.ps1', '.bat', '.cmd'];
|
|
272
|
+
if (scriptExtensions.includes(extension)) {
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
// Check for shebang in files without extension or common script names
|
|
276
|
+
if (!extension || ['run', 'start', 'stop', 'deploy', 'build', 'test', 'setup'].some(name => filename.includes(name))) {
|
|
277
|
+
try {
|
|
278
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
279
|
+
const firstLine = content.split('\n')[0];
|
|
280
|
+
// Look for shebang lines
|
|
281
|
+
if (firstLine && firstLine.startsWith('#!')) {
|
|
282
|
+
const shebangs = ['/bin/sh', '/bin/bash', '/usr/bin/env', '/bin/zsh', '/bin/fish'];
|
|
283
|
+
return shebangs.some(shebang => firstLine.includes(shebang));
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
// Can't read file content, rely on extension/filename
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
return false;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Find and read environment files specifically
|
|
298
|
+
*/
|
|
299
|
+
export async function findActualEnvironmentFiles(projectPath) {
|
|
300
|
+
const structure = await scanProjectStructure(projectPath, { readContent: true });
|
|
301
|
+
return [
|
|
302
|
+
...structure.environmentFiles,
|
|
303
|
+
...structure.dockerFiles,
|
|
304
|
+
...structure.configFiles,
|
|
305
|
+
...structure.kubernetesFiles,
|
|
306
|
+
...structure.scriptFiles
|
|
307
|
+
];
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=actual-file-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actual-file-operations.js","sourceRoot":"","sources":["../../../src/utils/actual-file-operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADR Discovery Utilities
|
|
3
|
+
*
|
|
4
|
+
* Utilities for discovering and analyzing existing ADRs in the project
|
|
5
|
+
*/
|
|
6
|
+
export interface DiscoveredAdr {
|
|
7
|
+
filename: string;
|
|
8
|
+
title: string;
|
|
9
|
+
status: string;
|
|
10
|
+
date: string | undefined;
|
|
11
|
+
path: string;
|
|
12
|
+
content?: string;
|
|
13
|
+
context?: string;
|
|
14
|
+
decision?: string;
|
|
15
|
+
consequences?: string;
|
|
16
|
+
metadata?: {
|
|
17
|
+
number?: string;
|
|
18
|
+
category?: string;
|
|
19
|
+
tags?: string[];
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export interface AdrDiscoveryResult {
|
|
23
|
+
directory: string;
|
|
24
|
+
totalAdrs: number;
|
|
25
|
+
adrs: DiscoveredAdr[];
|
|
26
|
+
summary: {
|
|
27
|
+
byStatus: Record<string, number>;
|
|
28
|
+
byCategory: Record<string, number>;
|
|
29
|
+
};
|
|
30
|
+
recommendations: string[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Actually discover ADRs using file system operations
|
|
34
|
+
*/
|
|
35
|
+
export declare function discoverAdrsInDirectory(adrDirectory: string, includeContent: boolean | undefined, projectPath: string): Promise<AdrDiscoveryResult>;
|
|
36
|
+
//# sourceMappingURL=adr-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adr-discovery.d.ts","sourceRoot":"","sources":["../../../src/utils/adr-discovery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,OAAO,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACpC,CAAC;IACF,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,OAAO,YAAQ,EAC/B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAkF7B"}
|