mcp-adr-analysis-server 2.0.2 → 2.0.5

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 (94) hide show
  1. package/dist/src/index.d.ts +26 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +535 -323
  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 +42 -34
  8. package/dist/src/prompts/adr-suggestion-prompts.js.map +1 -1
  9. package/dist/src/prompts/analysis-prompts.js +7 -7
  10. package/dist/src/prompts/deployment-analysis-prompts.js +5 -5
  11. package/dist/src/prompts/environment-analysis-prompts.js +7 -7
  12. package/dist/src/prompts/index.d.ts.map +1 -1
  13. package/dist/src/prompts/index.js +7 -5
  14. package/dist/src/prompts/index.js.map +1 -1
  15. package/dist/src/prompts/research-integration-prompts.js +7 -7
  16. package/dist/src/prompts/research-question-prompts.js +7 -7
  17. package/dist/src/prompts/rule-generation-prompts.d.ts.map +1 -1
  18. package/dist/src/prompts/rule-generation-prompts.js +8 -6
  19. package/dist/src/prompts/rule-generation-prompts.js.map +1 -1
  20. package/dist/src/prompts/security-prompts.js +6 -6
  21. package/dist/src/resources/index.d.ts.map +1 -1
  22. package/dist/src/resources/index.js +31 -15
  23. package/dist/src/resources/index.js.map +1 -1
  24. package/dist/src/tools/adr-suggestion-tool.d.ts +4 -1
  25. package/dist/src/tools/adr-suggestion-tool.d.ts.map +1 -1
  26. package/dist/src/tools/adr-suggestion-tool.js +72 -114
  27. package/dist/src/tools/adr-suggestion-tool.js.map +1 -1
  28. package/dist/src/tools/content-masking-tool.d.ts +7 -0
  29. package/dist/src/tools/content-masking-tool.d.ts.map +1 -1
  30. package/dist/src/tools/content-masking-tool.js +134 -17
  31. package/dist/src/tools/content-masking-tool.js.map +1 -1
  32. package/dist/src/tools/environment-analysis-tool.d.ts +4 -0
  33. package/dist/src/tools/environment-analysis-tool.d.ts.map +1 -1
  34. package/dist/src/tools/environment-analysis-tool.js +209 -25
  35. package/dist/src/tools/environment-analysis-tool.js.map +1 -1
  36. package/dist/src/tools/research-question-tool.d.ts +4 -0
  37. package/dist/src/tools/research-question-tool.d.ts.map +1 -1
  38. package/dist/src/tools/research-question-tool.js +42 -4
  39. package/dist/src/tools/research-question-tool.js.map +1 -1
  40. package/dist/src/tools/rule-generation-tool.d.ts +4 -0
  41. package/dist/src/tools/rule-generation-tool.d.ts.map +1 -1
  42. package/dist/src/tools/rule-generation-tool.js +136 -16
  43. package/dist/src/tools/rule-generation-tool.js.map +1 -1
  44. package/dist/src/types/conversation-context.d.ts +93 -0
  45. package/dist/src/types/conversation-context.d.ts.map +1 -0
  46. package/dist/src/types/conversation-context.js +101 -0
  47. package/dist/src/types/conversation-context.js.map +1 -0
  48. package/dist/src/utils/actual-file-operations.d.ts +40 -0
  49. package/dist/src/utils/actual-file-operations.d.ts.map +1 -0
  50. package/dist/src/utils/actual-file-operations.js +309 -0
  51. package/dist/src/utils/actual-file-operations.js.map +1 -0
  52. package/dist/src/utils/adr-discovery.d.ts +36 -0
  53. package/dist/src/utils/adr-discovery.d.ts.map +1 -0
  54. package/dist/src/utils/adr-discovery.js +237 -0
  55. package/dist/src/utils/adr-discovery.js.map +1 -0
  56. package/dist/src/utils/adr-suggestions.d.ts +2 -1
  57. package/dist/src/utils/adr-suggestions.d.ts.map +1 -1
  58. package/dist/src/utils/adr-suggestions.js +8 -2
  59. package/dist/src/utils/adr-suggestions.js.map +1 -1
  60. package/dist/src/utils/apply-cot-enhancement.d.ts +46 -0
  61. package/dist/src/utils/apply-cot-enhancement.d.ts.map +1 -0
  62. package/dist/src/utils/apply-cot-enhancement.js +165 -0
  63. package/dist/src/utils/apply-cot-enhancement.js.map +1 -0
  64. package/dist/src/utils/chain-of-thought-template.d.ts +48 -0
  65. package/dist/src/utils/chain-of-thought-template.d.ts.map +1 -0
  66. package/dist/src/utils/chain-of-thought-template.js +191 -0
  67. package/dist/src/utils/chain-of-thought-template.js.map +1 -0
  68. package/dist/src/utils/deployment-analysis.d.ts +1 -0
  69. package/dist/src/utils/deployment-analysis.d.ts.map +1 -1
  70. package/dist/src/utils/deployment-analysis.js +82 -39
  71. package/dist/src/utils/deployment-analysis.js.map +1 -1
  72. package/dist/src/utils/environment-analysis.d.ts +6 -1
  73. package/dist/src/utils/environment-analysis.d.ts.map +1 -1
  74. package/dist/src/utils/environment-analysis.js +176 -87
  75. package/dist/src/utils/environment-analysis.js.map +1 -1
  76. package/dist/src/utils/file-system.d.ts +1 -0
  77. package/dist/src/utils/file-system.d.ts.map +1 -1
  78. package/dist/src/utils/file-system.js +24 -47
  79. package/dist/src/utils/file-system.js.map +1 -1
  80. package/dist/src/utils/prompt-execution.d.ts.map +1 -1
  81. package/dist/src/utils/prompt-execution.js +67 -3
  82. package/dist/src/utils/prompt-execution.js.map +1 -1
  83. package/dist/src/utils/research-integration.d.ts +4 -0
  84. package/dist/src/utils/research-integration.d.ts.map +1 -1
  85. package/dist/src/utils/research-integration.js +275 -84
  86. package/dist/src/utils/research-integration.js.map +1 -1
  87. package/dist/src/utils/research-questions.d.ts.map +1 -1
  88. package/dist/src/utils/research-questions.js +134 -38
  89. package/dist/src/utils/research-questions.js.map +1 -1
  90. package/dist/src/utils/rule-generation.d.ts +2 -1
  91. package/dist/src/utils/rule-generation.d.ts.map +1 -1
  92. package/dist/src/utils/rule-generation.js +65 -36
  93. package/dist/src/utils/rule-generation.js.map +1 -1
  94. package/package.json +4 -4
@@ -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"}
@@ -0,0 +1,237 @@
1
+ /**
2
+ * ADR Discovery Utilities
3
+ *
4
+ * Utilities for discovering and analyzing existing ADRs in the project
5
+ */
6
+ import { McpAdrError } from '../types/index.js';
7
+ /**
8
+ * Actually discover ADRs using file system operations
9
+ */
10
+ export async function discoverAdrsInDirectory(adrDirectory, includeContent = false, projectPath) {
11
+ try {
12
+ const fs = await import('fs/promises');
13
+ const path = await import('path');
14
+ // Resolve the ADR directory path
15
+ const fullAdrPath = path.resolve(projectPath, adrDirectory);
16
+ // Check if directory exists
17
+ let dirExists = false;
18
+ try {
19
+ const stat = await fs.stat(fullAdrPath);
20
+ dirExists = stat.isDirectory();
21
+ }
22
+ catch {
23
+ // Directory doesn't exist
24
+ }
25
+ if (!dirExists) {
26
+ return {
27
+ directory: adrDirectory,
28
+ totalAdrs: 0,
29
+ adrs: [],
30
+ summary: { byStatus: {}, byCategory: {} },
31
+ recommendations: [
32
+ `ADR directory '${adrDirectory}' does not exist`,
33
+ 'Consider creating the directory and adding your first ADR',
34
+ 'Use the generate_adr_from_decision tool to create new ADRs'
35
+ ]
36
+ };
37
+ }
38
+ // Read directory contents
39
+ const entries = await fs.readdir(fullAdrPath, { withFileTypes: true });
40
+ const markdownFiles = entries
41
+ .filter(entry => entry.isFile() && entry.name.endsWith('.md'))
42
+ .map(entry => entry.name);
43
+ // Process each markdown file to check if it's an ADR
44
+ const discoveredAdrs = [];
45
+ for (const filename of markdownFiles) {
46
+ const filePath = path.join(fullAdrPath, filename);
47
+ try {
48
+ // Read the file content to check if it's an ADR
49
+ const content = await fs.readFile(filePath, 'utf-8');
50
+ // Check if this looks like an ADR
51
+ const isAdr = isLikelyAdr(content, filename);
52
+ if (isAdr) {
53
+ const adr = parseAdrMetadata(content, filename, path.join(adrDirectory, filename));
54
+ if (includeContent) {
55
+ adr.content = content;
56
+ }
57
+ discoveredAdrs.push(adr);
58
+ }
59
+ }
60
+ catch (error) {
61
+ console.error(`[WARN] Failed to read file ${filename}:`, error);
62
+ }
63
+ }
64
+ // Generate summary
65
+ const summary = generateAdrSummary(discoveredAdrs);
66
+ // Generate recommendations
67
+ const recommendations = generateRecommendations(discoveredAdrs, adrDirectory);
68
+ return {
69
+ directory: adrDirectory,
70
+ totalAdrs: discoveredAdrs.length,
71
+ adrs: discoveredAdrs,
72
+ summary,
73
+ recommendations
74
+ };
75
+ }
76
+ catch (error) {
77
+ throw new McpAdrError(`Failed to discover ADRs: ${error instanceof Error ? error.message : String(error)}`, 'DISCOVERY_ERROR');
78
+ }
79
+ }
80
+ /**
81
+ * Check if a file is likely an ADR based on content and filename
82
+ */
83
+ function isLikelyAdr(content, filename) {
84
+ const contentLower = content.toLowerCase();
85
+ const filenameLower = filename.toLowerCase();
86
+ // Check filename patterns
87
+ const filenamePatterns = [
88
+ /^adr[-_]?\d+/i, // ADR-001, ADR_001, adr-001
89
+ /^\d+[-_]/i, // 001-, 0001_
90
+ /architectural[-_]?decision/i, // architectural-decision
91
+ /decision[-_]?record/i // decision-record
92
+ ];
93
+ const hasAdrFilename = filenamePatterns.some(pattern => pattern.test(filenameLower));
94
+ // Check content patterns
95
+ const contentPatterns = [
96
+ /# .*decision/i,
97
+ /## status/i,
98
+ /## context/i,
99
+ /## decision/i,
100
+ /## consequences/i,
101
+ /architectural decision record/i,
102
+ /decision record/i,
103
+ /adr[-_]?\d+/i
104
+ ];
105
+ const hasAdrContent = contentPatterns.some(pattern => pattern.test(contentLower));
106
+ // Must have either ADR filename pattern OR ADR content patterns
107
+ return hasAdrFilename || hasAdrContent;
108
+ }
109
+ /**
110
+ * Parse ADR metadata from content
111
+ */
112
+ function parseAdrMetadata(content, filename, fullPath) {
113
+ // Extract title (usually first # heading)
114
+ let title = filename.replace(/\.md$/, '');
115
+ const titleMatch = content.match(/^#\s+(.+)$/m);
116
+ if (titleMatch && titleMatch[1]) {
117
+ title = titleMatch[1].trim();
118
+ }
119
+ // Extract status
120
+ let status = 'unknown';
121
+ const statusMatch = content.match(/(?:##?\s*status|status:)\s*(.+?)(?:\n|$)/i);
122
+ if (statusMatch && statusMatch[1]) {
123
+ status = statusMatch[1].trim().toLowerCase();
124
+ }
125
+ // Extract date
126
+ let date;
127
+ const dateMatch = content.match(/(?:##?\s*date|date:)\s*(.+?)(?:\n|$)/i);
128
+ if (dateMatch && dateMatch[1]) {
129
+ date = dateMatch[1].trim();
130
+ }
131
+ // Extract ADR number from filename or content
132
+ let number;
133
+ const numberMatch = filename.match(/(?:adr[-_]?)?(\d+)/i) ||
134
+ content.match(/adr[-_]?(\d+)/i);
135
+ if (numberMatch && numberMatch[1]) {
136
+ number = numberMatch[1];
137
+ }
138
+ // Extract context
139
+ let context;
140
+ const contextMatch = content.match(/##?\s*context\s*\n([\s\S]*?)(?=\n##|\n#|$)/i);
141
+ if (contextMatch && contextMatch[1]) {
142
+ context = contextMatch[1].trim();
143
+ }
144
+ // Extract decision
145
+ let decision;
146
+ const decisionMatch = content.match(/##?\s*decision\s*\n([\s\S]*?)(?=\n##|\n#|$)/i);
147
+ if (decisionMatch && decisionMatch[1]) {
148
+ decision = decisionMatch[1].trim();
149
+ }
150
+ // Extract consequences
151
+ let consequences;
152
+ const consequencesMatch = content.match(/##?\s*consequences\s*\n([\s\S]*?)(?=\n##|\n#|$)/i);
153
+ if (consequencesMatch && consequencesMatch[1]) {
154
+ consequences = consequencesMatch[1].trim();
155
+ }
156
+ // Extract category/tags (if any)
157
+ const tags = [];
158
+ const tagMatch = content.match(/(?:tags?|categories?):\s*(.+?)(?:\n|$)/i);
159
+ if (tagMatch && tagMatch[1]) {
160
+ tags.push(...tagMatch[1].split(',').map(tag => tag.trim()));
161
+ }
162
+ const metadata = { tags };
163
+ if (number)
164
+ metadata.number = number;
165
+ if (tags[0])
166
+ metadata.category = tags[0];
167
+ const result = {
168
+ filename,
169
+ title,
170
+ status,
171
+ date,
172
+ path: fullPath,
173
+ metadata
174
+ };
175
+ if (context)
176
+ result.context = context;
177
+ if (decision)
178
+ result.decision = decision;
179
+ if (consequences)
180
+ result.consequences = consequences;
181
+ return result;
182
+ }
183
+ /**
184
+ * Generate summary statistics
185
+ */
186
+ function generateAdrSummary(adrs) {
187
+ const byStatus = {};
188
+ const byCategory = {};
189
+ for (const adr of adrs) {
190
+ // Count by status
191
+ byStatus[adr.status] = (byStatus[adr.status] || 0) + 1;
192
+ // Count by category
193
+ const category = adr.metadata?.category || 'uncategorized';
194
+ byCategory[category] = (byCategory[category] || 0) + 1;
195
+ }
196
+ return { byStatus, byCategory };
197
+ }
198
+ /**
199
+ * Generate recommendations based on discovered ADRs
200
+ */
201
+ function generateRecommendations(adrs, adrDirectory) {
202
+ const recommendations = [];
203
+ if (adrs.length === 0) {
204
+ recommendations.push(`No ADRs found in ${adrDirectory}`, 'Consider creating your first ADR using the generate_adr_from_decision tool', 'Use suggest_adrs tool to identify architectural decisions that need documentation');
205
+ }
206
+ else {
207
+ recommendations.push(`Found ${adrs.length} ADRs in ${adrDirectory}`);
208
+ // Check for status distribution
209
+ const statuses = [...new Set(adrs.map(adr => adr.status))];
210
+ if (statuses.includes('proposed') || statuses.includes('draft')) {
211
+ recommendations.push('Consider reviewing and updating proposed/draft ADRs');
212
+ }
213
+ // Check for numbering gaps
214
+ const numbers = adrs
215
+ .map(adr => adr.metadata?.number)
216
+ .filter((n) => n !== undefined)
217
+ .map(n => parseInt(n, 10))
218
+ .sort((a, b) => a - b);
219
+ if (numbers.length > 1) {
220
+ const gaps = [];
221
+ for (let i = 1; i < numbers.length; i++) {
222
+ const prev = numbers[i - 1];
223
+ const curr = numbers[i];
224
+ if (prev !== undefined && curr !== undefined && curr - prev > 1) {
225
+ gaps.push(`${prev + 1}-${curr - 1}`);
226
+ }
227
+ }
228
+ if (gaps.length > 0) {
229
+ recommendations.push(`Consider filling ADR numbering gaps: ${gaps.join(', ')}`);
230
+ }
231
+ }
232
+ // Suggest using discovered ADRs for analysis
233
+ recommendations.push('Use suggest_adrs tool with existingAdrs parameter to find missing decisions', 'Use generate_adr_todo tool to create implementation tasks from these ADRs');
234
+ }
235
+ return recommendations;
236
+ }
237
+ //# sourceMappingURL=adr-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adr-discovery.js","sourceRoot":"","sources":["../../../src/utils/adr-discovery.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  * ADR suggestion utilities using prompt-driven AI analysis
3
3
  * Implements intelligent ADR recommendations based on code analysis
4
4
  */
5
+ import { ConversationContext } from '../types/conversation-context.js';
5
6
  export interface ImplicitDecision {
6
7
  id: string;
7
8
  title: string;
@@ -68,7 +69,7 @@ export interface GeneratedAdr {
68
69
  /**
69
70
  * Generate prompt for AI to analyze project for implicit architectural decisions
70
71
  */
71
- export declare function analyzeImplicitDecisions(projectPath: string, existingAdrs?: string[]): Promise<{
72
+ export declare function analyzeImplicitDecisions(projectPath: string, existingAdrs?: string[], conversationContext?: ConversationContext): Promise<{
72
73
  analysisPrompt: string;
73
74
  instructions: string;
74
75
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"adr-suggestions.d.ts","sourceRoot":"","sources":["../../../src/utils/adr-suggestions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adr-suggestions.d.ts","sourceRoot":"","sources":["../../../src/utils/adr-suggestions.ts"],"names":[],"mappings":"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"}