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.
Files changed (90) hide show
  1. package/dist/src/index.d.ts +28 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +703 -325
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/prompts/adr-suggestion-prompts.d.ts +1 -0
  6. package/dist/src/prompts/adr-suggestion-prompts.d.ts.map +1 -1
  7. package/dist/src/prompts/adr-suggestion-prompts.js +14 -6
  8. package/dist/src/prompts/adr-suggestion-prompts.js.map +1 -1
  9. package/dist/src/resources/index.d.ts.map +1 -1
  10. package/dist/src/resources/index.js +31 -15
  11. package/dist/src/resources/index.js.map +1 -1
  12. package/dist/src/tools/adr-suggestion-tool.d.ts +4 -1
  13. package/dist/src/tools/adr-suggestion-tool.d.ts.map +1 -1
  14. package/dist/src/tools/adr-suggestion-tool.js +72 -114
  15. package/dist/src/tools/adr-suggestion-tool.js.map +1 -1
  16. package/dist/src/tools/content-masking-tool.d.ts +7 -0
  17. package/dist/src/tools/content-masking-tool.d.ts.map +1 -1
  18. package/dist/src/tools/content-masking-tool.js +134 -17
  19. package/dist/src/tools/content-masking-tool.js.map +1 -1
  20. package/dist/src/tools/deployment-guidance-tool.d.ts +21 -0
  21. package/dist/src/tools/deployment-guidance-tool.d.ts.map +1 -0
  22. package/dist/src/tools/deployment-guidance-tool.js +289 -0
  23. package/dist/src/tools/deployment-guidance-tool.js.map +1 -0
  24. package/dist/src/tools/environment-analysis-tool.d.ts +4 -0
  25. package/dist/src/tools/environment-analysis-tool.d.ts.map +1 -1
  26. package/dist/src/tools/environment-analysis-tool.js +209 -25
  27. package/dist/src/tools/environment-analysis-tool.js.map +1 -1
  28. package/dist/src/tools/research-question-tool.d.ts +4 -0
  29. package/dist/src/tools/research-question-tool.d.ts.map +1 -1
  30. package/dist/src/tools/research-question-tool.js +42 -4
  31. package/dist/src/tools/research-question-tool.js.map +1 -1
  32. package/dist/src/tools/rule-generation-tool.d.ts +4 -0
  33. package/dist/src/tools/rule-generation-tool.d.ts.map +1 -1
  34. package/dist/src/tools/rule-generation-tool.js +136 -16
  35. package/dist/src/tools/rule-generation-tool.js.map +1 -1
  36. package/dist/src/tools/todo-management-tool.d.ts +166 -0
  37. package/dist/src/tools/todo-management-tool.d.ts.map +1 -0
  38. package/dist/src/tools/todo-management-tool.js +472 -0
  39. package/dist/src/tools/todo-management-tool.js.map +1 -0
  40. package/dist/src/types/conversation-context.d.ts +93 -0
  41. package/dist/src/types/conversation-context.d.ts.map +1 -0
  42. package/dist/src/types/conversation-context.js +101 -0
  43. package/dist/src/types/conversation-context.js.map +1 -0
  44. package/dist/src/utils/actual-file-operations.d.ts +40 -0
  45. package/dist/src/utils/actual-file-operations.d.ts.map +1 -0
  46. package/dist/src/utils/actual-file-operations.js +309 -0
  47. package/dist/src/utils/actual-file-operations.js.map +1 -0
  48. package/dist/src/utils/adr-discovery.d.ts +36 -0
  49. package/dist/src/utils/adr-discovery.d.ts.map +1 -0
  50. package/dist/src/utils/adr-discovery.js +237 -0
  51. package/dist/src/utils/adr-discovery.js.map +1 -0
  52. package/dist/src/utils/adr-suggestions.d.ts +2 -1
  53. package/dist/src/utils/adr-suggestions.d.ts.map +1 -1
  54. package/dist/src/utils/adr-suggestions.js +8 -2
  55. package/dist/src/utils/adr-suggestions.js.map +1 -1
  56. package/dist/src/utils/apply-cot-enhancement.d.ts +46 -0
  57. package/dist/src/utils/apply-cot-enhancement.d.ts.map +1 -0
  58. package/dist/src/utils/apply-cot-enhancement.js +165 -0
  59. package/dist/src/utils/apply-cot-enhancement.js.map +1 -0
  60. package/dist/src/utils/chain-of-thought-template.d.ts +48 -0
  61. package/dist/src/utils/chain-of-thought-template.d.ts.map +1 -0
  62. package/dist/src/utils/chain-of-thought-template.js +191 -0
  63. package/dist/src/utils/chain-of-thought-template.js.map +1 -0
  64. package/dist/src/utils/deployment-analysis.d.ts +1 -0
  65. package/dist/src/utils/deployment-analysis.d.ts.map +1 -1
  66. package/dist/src/utils/deployment-analysis.js +82 -39
  67. package/dist/src/utils/deployment-analysis.js.map +1 -1
  68. package/dist/src/utils/environment-analysis.d.ts +6 -1
  69. package/dist/src/utils/environment-analysis.d.ts.map +1 -1
  70. package/dist/src/utils/environment-analysis.js +176 -87
  71. package/dist/src/utils/environment-analysis.js.map +1 -1
  72. package/dist/src/utils/file-system.d.ts +1 -0
  73. package/dist/src/utils/file-system.d.ts.map +1 -1
  74. package/dist/src/utils/file-system.js +24 -47
  75. package/dist/src/utils/file-system.js.map +1 -1
  76. package/dist/src/utils/prompt-execution.d.ts.map +1 -1
  77. package/dist/src/utils/prompt-execution.js +67 -3
  78. package/dist/src/utils/prompt-execution.js.map +1 -1
  79. package/dist/src/utils/research-integration.d.ts +4 -0
  80. package/dist/src/utils/research-integration.d.ts.map +1 -1
  81. package/dist/src/utils/research-integration.js +275 -84
  82. package/dist/src/utils/research-integration.js.map +1 -1
  83. package/dist/src/utils/research-questions.d.ts.map +1 -1
  84. package/dist/src/utils/research-questions.js +134 -38
  85. package/dist/src/utils/research-questions.js.map +1 -1
  86. package/dist/src/utils/rule-generation.d.ts +2 -1
  87. package/dist/src/utils/rule-generation.d.ts.map +1 -1
  88. package/dist/src/utils/rule-generation.js +65 -36
  89. package/dist/src/utils/rule-generation.js.map +1 -1
  90. 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"}