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.
- package/dist/src/index.d.ts +26 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +535 -323
- 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 +42 -34
- package/dist/src/prompts/adr-suggestion-prompts.js.map +1 -1
- package/dist/src/prompts/analysis-prompts.js +7 -7
- package/dist/src/prompts/deployment-analysis-prompts.js +5 -5
- package/dist/src/prompts/environment-analysis-prompts.js +7 -7
- package/dist/src/prompts/index.d.ts.map +1 -1
- package/dist/src/prompts/index.js +7 -5
- package/dist/src/prompts/index.js.map +1 -1
- package/dist/src/prompts/research-integration-prompts.js +7 -7
- package/dist/src/prompts/research-question-prompts.js +7 -7
- package/dist/src/prompts/rule-generation-prompts.d.ts.map +1 -1
- package/dist/src/prompts/rule-generation-prompts.js +8 -6
- package/dist/src/prompts/rule-generation-prompts.js.map +1 -1
- package/dist/src/prompts/security-prompts.js +6 -6
- 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/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/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 +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":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA0BhD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAAmB,EACnB,UAII,EAAE;IAEN,MAAM,EACJ,WAAW,GAAG,IAAI,EAClB,WAAW,GAAG,MAAM,EAAE,YAAY;IAClC,aAAa,GAAG,KAAK,EACtB,GAAG,OAAO,CAAC;IAEZ,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QAElC,uBAAuB;QACvB,MAAM,SAAS,GAAqB;YAClC,QAAQ,EAAE,WAAW;YACrB,YAAY,EAAE,EAAE;YAChB,WAAW,EAAE,EAAE;YACf,gBAAgB,EAAE,EAAE;YACpB,UAAU,EAAE,EAAE;YACd,WAAW,EAAE,EAAE;YACf,eAAe,EAAE,EAAE;YACnB,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,EAAE;YACf,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,EAAE;SAChB,CAAC;QAEF,kCAAkC;QAClC,MAAM,WAAW,GAAG;YAClB,gBAAgB;YAChB,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE;YACrD,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,cAAc,EAAE;YACzD,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE;YAChD,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE;YACpD,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE;YACnD,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE;YAC/C,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE;YAChD,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE;YAErD,oBAAoB;YACpB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE;YACjD,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE;YACvD,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,kBAAkB,EAAE;YAC5D,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,EAAE;YAC7D,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE;YACnD,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE;YACnD,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE;YAElD,eAAe;YACf,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE;YAClD,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,aAAa,EAAE;YAC1D,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,aAAa,EAAE;YAC3D,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE;YAErD,mBAAmB;YACnB,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,IAAI,EAAE;YACnE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,IAAI,EAAE;YAElE,cAAc;YACd,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE;YAC/C,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,YAAY,EAAE;YACxD,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE;YACrD,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE;YAErD,WAAW;YACX,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE;YACxE,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE;YAClD,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE;YAC/C,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE;YAE/C,+BAA+B;YAC/B,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE;YAC7D,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE;YAC/D,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE;YAC9D,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE;YAC/D,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE;YAC9D,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE;YAC9D,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE;YAC9D,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE;YAClE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE;SAC/D,CAAC;QAEF,mBAAmB;QACnB,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACtE,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;QAEpC,0BAA0B;QAC1B,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;YACnC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACzB,qDAAqD;gBACrD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACzD,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACpC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;wBACvB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;wBACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;4BACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;4BAC1C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;4BACrF,IAAI,QAAQ,EAAE,CAAC;gCACb,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC;gCACjC,SAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gCACrD,SAAS,CAAC,UAAU,EAAE,CAAC;4BACzB,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,gCAAgC;gBAClC,CAAC;YACH,CAAC;iBAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAC9B,uBAAuB;gBACvB,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACxE,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;oBAC7B,IAAI,aAAa,GAAG,KAAK,CAAC;oBAE1B,yCAAyC;oBACzC,IAAI,QAAQ,CAAC,QAAQ,KAAK,iBAAiB,EAAE,CAAC;wBAC5C,aAAa,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;oBACnD,CAAC;yBAAM,IAAI,QAAQ,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;wBAC/C,aAAa,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;oBAC/C,CAAC;yBAAM,CAAC;wBACN,aAAa,GAAG,IAAI,CAAC,CAAC,oCAAoC;oBAC5D,CAAC;oBAED,IAAI,aAAa,EAAE,CAAC;wBAClB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;wBACrF,IAAI,QAAQ,EAAE,CAAC;4BACb,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC;4BACjC,SAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;4BACrD,SAAS,CAAC,UAAU,EAAE,CAAC;wBACzB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,wBAAwB;gBACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC1D,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;gBACrF,IAAI,QAAQ,EAAE,CAAC;oBACb,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC;oBACjC,SAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACrD,SAAS,CAAC,UAAU,EAAE,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IAEnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,WAAW,CACnB,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC7F,YAAY,CACb,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,WAAmB,EAAE,aAAsB;IACxE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACvC,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjD,SAAS;gBACX,CAAC;gBACD,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CACzB,QAAgB,EAChB,WAAmB,EACnB,WAAoB,EACpB,WAAmB;IAEnB,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAErC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,qDAAqD;gBACrD,OAAO,GAAG,6BAA6B,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACjC,OAAO;YACP,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC;YAClD,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI;SACb,CAAC;IAEJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,sCAAsC;IACrD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,oBAAoB,CAAC,WAAmB,EAAE,OAAe;IACtE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;YACjC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAE5C,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvD,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB;gBACzC,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC5D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IAC9C,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAE3C,wCAAwC;QACxC,MAAM,WAAW,GAAG;YAClB,YAAY;YACZ,OAAO;YACP,WAAW;YACX,OAAO;YACP,YAAY;YACZ,SAAS;YACT,WAAW;YACX,QAAQ;YACR,SAAS;YACT,WAAW;YACX,KAAK;YACL,YAAY;SACb,CAAC;QAEF,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,QAAgB;IAC1C,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QAEvD,0BAA0B;QAC1B,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACnF,IAAI,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,sEAAsE;QACtE,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACrH,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACrD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEzC,yBAAyB;gBACzB,IAAI,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5C,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;oBACnF,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,sDAAsD;YACxD,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,WAAmB;IAClE,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,WAAW,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjF,OAAO;QACL,GAAG,SAAS,CAAC,gBAAgB;QAC7B,GAAG,SAAS,CAAC,WAAW;QACxB,GAAG,SAAS,CAAC,WAAW;QACxB,GAAG,SAAS,CAAC,eAAe;QAC5B,GAAG,SAAS,CAAC,WAAW;KACzB,CAAC;AACJ,CAAC"}
|
|
@@ -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":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"adr-suggestions.d.ts","sourceRoot":"","sources":["../../../src/utils/adr-suggestions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,mBAAmB,EAA0B,MAAM,kCAAkC,CAAC;AAE/F,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACjD,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAClD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,IAAI,EAAE,KAAK,CAAC;QACV,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CAClD;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAyD3D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAuD3D;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,EACD,cAAc,GAAE,QAAQ,GAAG,MAAM,GAAG,QAAmB,EACvD,YAAY,CAAC,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CA+C7D;AAGD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM,CAmBpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB5E"}
|