mcp-adr-analysis-server 2.0.6 → 2.0.8
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 +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +70 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/tools/smart-git-push-tool.d.ts +24 -0
- package/dist/src/tools/smart-git-push-tool.d.ts.map +1 -0
- package/dist/src/tools/smart-git-push-tool.js +480 -0
- package/dist/src/tools/smart-git-push-tool.js.map +1 -0
- package/dist/src/utils/enhanced-sensitive-detector.d.ts +61 -0
- package/dist/src/utils/enhanced-sensitive-detector.d.ts.map +1 -0
- package/dist/src/utils/enhanced-sensitive-detector.js +437 -0
- package/dist/src/utils/enhanced-sensitive-detector.js.map +1 -0
- package/dist/src/utils/interactive-approval.d.ts +63 -0
- package/dist/src/utils/interactive-approval.d.ts.map +1 -0
- package/dist/src/utils/interactive-approval.js +441 -0
- package/dist/src/utils/interactive-approval.js.map +1 -0
- package/dist/src/utils/llm-artifact-detector.d.ts +76 -0
- package/dist/src/utils/llm-artifact-detector.d.ts.map +1 -0
- package/dist/src/utils/llm-artifact-detector.js +422 -0
- package/dist/src/utils/llm-artifact-detector.js.map +1 -0
- package/dist/src/utils/location-filter.d.ts +79 -0
- package/dist/src/utils/location-filter.d.ts.map +1 -0
- package/dist/src/utils/location-filter.js +327 -0
- package/dist/src/utils/location-filter.js.map +1 -0
- package/dist/src/utils/release-readiness-detector.d.ts +47 -0
- package/dist/src/utils/release-readiness-detector.d.ts.map +1 -0
- package/dist/src/utils/release-readiness-detector.js +413 -0
- package/dist/src/utils/release-readiness-detector.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Release Readiness Detector for Smart Git Push
|
|
3
|
+
*
|
|
4
|
+
* Analyzes TODO.md, project state, and commit patterns to determine
|
|
5
|
+
* if a release is ready, preventing endless development cycles
|
|
6
|
+
*/
|
|
7
|
+
import { readFileSync, existsSync } from 'fs';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
/**
|
|
10
|
+
* Main release readiness analysis function
|
|
11
|
+
*/
|
|
12
|
+
export async function analyzeReleaseReadiness(options) {
|
|
13
|
+
const { projectPath, todoPath = join(projectPath, 'TODO.md'), minCompletionRate = 0.8, maxCriticalTodos = 0, includeAnalysis: _includeAnalysis = true, releaseType = 'minor' } = options;
|
|
14
|
+
const result = {
|
|
15
|
+
isReady: false,
|
|
16
|
+
score: 0,
|
|
17
|
+
confidence: 0,
|
|
18
|
+
blockers: [],
|
|
19
|
+
recommendations: [],
|
|
20
|
+
milestones: [],
|
|
21
|
+
summary: ''
|
|
22
|
+
};
|
|
23
|
+
try {
|
|
24
|
+
// 1. Analyze TODO.md if it exists
|
|
25
|
+
if (existsSync(todoPath)) {
|
|
26
|
+
const todoAnalysis = await analyzeTodoFile(todoPath, minCompletionRate);
|
|
27
|
+
result.milestones = todoAnalysis.milestones;
|
|
28
|
+
result.blockers.push(...todoAnalysis.blockers);
|
|
29
|
+
}
|
|
30
|
+
// 2. Analyze project state
|
|
31
|
+
const projectAnalysis = await analyzeProjectState(projectPath);
|
|
32
|
+
result.blockers.push(...projectAnalysis.blockers);
|
|
33
|
+
// 3. Analyze commit patterns
|
|
34
|
+
const commitAnalysis = await analyzeCommitPatterns(projectPath);
|
|
35
|
+
result.blockers.push(...commitAnalysis.blockers);
|
|
36
|
+
// 4. Calculate readiness score
|
|
37
|
+
const scoringResult = calculateReadinessScore(result.milestones, result.blockers, { minCompletionRate, maxCriticalTodos, releaseType });
|
|
38
|
+
result.score = scoringResult.score;
|
|
39
|
+
result.confidence = scoringResult.confidence;
|
|
40
|
+
result.isReady = scoringResult.isReady;
|
|
41
|
+
// 5. Generate recommendations
|
|
42
|
+
result.recommendations = generateReleaseRecommendations(result.blockers, result.milestones, result.score, releaseType);
|
|
43
|
+
// 6. Generate summary
|
|
44
|
+
result.summary = generateSummary(result);
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
console.error('Release readiness analysis failed:', error);
|
|
49
|
+
result.blockers.push({
|
|
50
|
+
type: 'unstable-code',
|
|
51
|
+
severity: 'error',
|
|
52
|
+
message: `Analysis failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
53
|
+
suggestedActions: ['Fix analysis errors before proceeding']
|
|
54
|
+
});
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Analyze TODO.md file for completion status
|
|
60
|
+
*/
|
|
61
|
+
async function analyzeTodoFile(todoPath, minCompletionRate = 0.7) {
|
|
62
|
+
const content = readFileSync(todoPath, 'utf8');
|
|
63
|
+
const milestones = [];
|
|
64
|
+
const blockers = [];
|
|
65
|
+
// Parse TODO.md structure
|
|
66
|
+
const sections = parseTodoSections(content);
|
|
67
|
+
for (const section of sections) {
|
|
68
|
+
const milestone = analyzeTodoSection(section);
|
|
69
|
+
milestones.push(milestone);
|
|
70
|
+
// Check for release blockers
|
|
71
|
+
if (milestone.criticalTodos > 0) {
|
|
72
|
+
blockers.push({
|
|
73
|
+
type: 'critical-todos',
|
|
74
|
+
severity: 'error',
|
|
75
|
+
message: `${milestone.name} has ${milestone.criticalTodos} critical TODO items`,
|
|
76
|
+
todoItems: milestone.blockers,
|
|
77
|
+
suggestedActions: [
|
|
78
|
+
'Complete critical TODO items before release',
|
|
79
|
+
'Reassess priority of TODO items',
|
|
80
|
+
'Consider moving non-critical items to next release'
|
|
81
|
+
]
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
if (milestone.completionRate < minCompletionRate) {
|
|
85
|
+
blockers.push({
|
|
86
|
+
type: 'incomplete-features',
|
|
87
|
+
severity: milestone.completionRate < 0.5 ? 'error' : 'warning',
|
|
88
|
+
message: `${milestone.name} is only ${(milestone.completionRate * 100).toFixed(1)}% complete`,
|
|
89
|
+
suggestedActions: [
|
|
90
|
+
'Complete remaining tasks in this milestone',
|
|
91
|
+
'Consider deferring incomplete features to next release',
|
|
92
|
+
'Review milestone scope and priorities'
|
|
93
|
+
]
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return { milestones, blockers };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Parse TODO.md into sections/milestones
|
|
101
|
+
*/
|
|
102
|
+
function parseTodoSections(content) {
|
|
103
|
+
const sections = [];
|
|
104
|
+
const lines = content.split('\n');
|
|
105
|
+
let currentSection = null;
|
|
106
|
+
for (const line of lines) {
|
|
107
|
+
const trimmed = line.trim();
|
|
108
|
+
// Detect section headers (## Header)
|
|
109
|
+
if (trimmed.startsWith('## ')) {
|
|
110
|
+
if (currentSection) {
|
|
111
|
+
sections.push(currentSection);
|
|
112
|
+
}
|
|
113
|
+
currentSection = {
|
|
114
|
+
name: trimmed.substring(3).trim(),
|
|
115
|
+
todos: []
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
// Detect TODO items
|
|
119
|
+
else if (trimmed.startsWith('- [') && currentSection) {
|
|
120
|
+
const isCompleted = trimmed.startsWith('- [x]') || trimmed.startsWith('- [X]');
|
|
121
|
+
const text = trimmed.substring(isCompleted ? 6 : 5).trim();
|
|
122
|
+
const priority = extractPriority(text);
|
|
123
|
+
const isCritical = priority === 'high' || text.toLowerCase().includes('critical') || text.toLowerCase().includes('blocker');
|
|
124
|
+
currentSection.todos.push({
|
|
125
|
+
text,
|
|
126
|
+
completed: isCompleted,
|
|
127
|
+
priority,
|
|
128
|
+
isCritical
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (currentSection) {
|
|
133
|
+
sections.push(currentSection);
|
|
134
|
+
}
|
|
135
|
+
return sections;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Extract priority from TODO text
|
|
139
|
+
*/
|
|
140
|
+
function extractPriority(text) {
|
|
141
|
+
const lower = text.toLowerCase();
|
|
142
|
+
if (lower.includes('high') || lower.includes('urgent') || lower.includes('critical')) {
|
|
143
|
+
return 'high';
|
|
144
|
+
}
|
|
145
|
+
if (lower.includes('medium') || lower.includes('moderate')) {
|
|
146
|
+
return 'medium';
|
|
147
|
+
}
|
|
148
|
+
return 'low';
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Analyze a TODO section for completion status
|
|
152
|
+
*/
|
|
153
|
+
function analyzeTodoSection(section) {
|
|
154
|
+
const total = section.todos.length;
|
|
155
|
+
const completed = section.todos.filter(t => t.completed).length;
|
|
156
|
+
const criticalTodos = section.todos.filter(t => t.isCritical && !t.completed).length;
|
|
157
|
+
const blockers = section.todos
|
|
158
|
+
.filter(t => t.isCritical && !t.completed)
|
|
159
|
+
.map(t => t.text);
|
|
160
|
+
return {
|
|
161
|
+
name: section.name,
|
|
162
|
+
completed,
|
|
163
|
+
total,
|
|
164
|
+
completionRate: total > 0 ? completed / total : 1,
|
|
165
|
+
criticalTodos,
|
|
166
|
+
blockers
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Analyze project state for release readiness
|
|
171
|
+
*/
|
|
172
|
+
async function analyzeProjectState(projectPath) {
|
|
173
|
+
const blockers = [];
|
|
174
|
+
try {
|
|
175
|
+
// Check if tests are configured (look for test scripts)
|
|
176
|
+
const packageJsonPath = join(projectPath, 'package.json');
|
|
177
|
+
if (existsSync(packageJsonPath)) {
|
|
178
|
+
try {
|
|
179
|
+
const packageJsonContent = readFileSync(packageJsonPath, 'utf8');
|
|
180
|
+
const packageJson = JSON.parse(packageJsonContent);
|
|
181
|
+
if (packageJson.scripts && packageJson.scripts.test) {
|
|
182
|
+
// In a real implementation, we'd run the tests
|
|
183
|
+
// For now, we'll just note that tests should be run
|
|
184
|
+
blockers.push({
|
|
185
|
+
type: 'test-failures',
|
|
186
|
+
severity: 'warning',
|
|
187
|
+
message: 'Tests should be run before release',
|
|
188
|
+
suggestedActions: [
|
|
189
|
+
'Run test suite: npm test',
|
|
190
|
+
'Ensure all tests pass',
|
|
191
|
+
'Review test coverage'
|
|
192
|
+
]
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
catch (parseError) {
|
|
197
|
+
// Invalid package.json, skip test analysis
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Check for common unstable indicators
|
|
201
|
+
const unstablePatterns = [
|
|
202
|
+
'TODO.md', 'FIXME.md', 'debug_*.js', 'temp_*.js', 'test_*.js'
|
|
203
|
+
];
|
|
204
|
+
// This would be expanded to check for actual unstable files
|
|
205
|
+
if (unstablePatterns.length > 0) {
|
|
206
|
+
// Use the patterns for analysis
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
blockers.push({
|
|
211
|
+
type: 'unstable-code',
|
|
212
|
+
severity: 'error',
|
|
213
|
+
message: `Project analysis failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
214
|
+
suggestedActions: ['Fix project structure issues']
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
return { blockers };
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Analyze commit patterns for release readiness
|
|
221
|
+
*/
|
|
222
|
+
async function analyzeCommitPatterns(projectPath) {
|
|
223
|
+
const blockers = [];
|
|
224
|
+
try {
|
|
225
|
+
// Check recent commit activity
|
|
226
|
+
const { execSync } = await import('child_process');
|
|
227
|
+
// Get recent commits
|
|
228
|
+
const recentCommits = execSync('git log --oneline -n 10', {
|
|
229
|
+
cwd: projectPath,
|
|
230
|
+
encoding: 'utf8'
|
|
231
|
+
}).trim();
|
|
232
|
+
// Look for concerning patterns
|
|
233
|
+
const commitLines = recentCommits.split('\n');
|
|
234
|
+
const concerningPatterns = [
|
|
235
|
+
/debug/i, /temp/i, /test/i, /wip/i, /work in progress/i, /fixme/i
|
|
236
|
+
];
|
|
237
|
+
const concerningCommits = commitLines.filter((line) => concerningPatterns.some(pattern => pattern.test(line)));
|
|
238
|
+
if (concerningCommits.length > 0) {
|
|
239
|
+
blockers.push({
|
|
240
|
+
type: 'unstable-code',
|
|
241
|
+
severity: 'warning',
|
|
242
|
+
message: `Recent commits contain concerning patterns: ${concerningCommits.length} commits`,
|
|
243
|
+
suggestedActions: [
|
|
244
|
+
'Review recent commits for temporary/debug code',
|
|
245
|
+
'Clean up any experimental or debug commits',
|
|
246
|
+
'Ensure commits represent stable, production-ready code'
|
|
247
|
+
]
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
// Check for uncommitted changes
|
|
251
|
+
const status = execSync('git status --porcelain', {
|
|
252
|
+
cwd: projectPath,
|
|
253
|
+
encoding: 'utf8'
|
|
254
|
+
}).trim();
|
|
255
|
+
if (status) {
|
|
256
|
+
blockers.push({
|
|
257
|
+
type: 'unstable-code',
|
|
258
|
+
severity: 'warning',
|
|
259
|
+
message: 'Uncommitted changes detected',
|
|
260
|
+
suggestedActions: [
|
|
261
|
+
'Commit or stash uncommitted changes',
|
|
262
|
+
'Ensure working directory is clean before release'
|
|
263
|
+
]
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
// Git commands failed - likely not a git repository
|
|
269
|
+
blockers.push({
|
|
270
|
+
type: 'unstable-code',
|
|
271
|
+
severity: 'info',
|
|
272
|
+
message: 'Could not analyze git history',
|
|
273
|
+
suggestedActions: ['Ensure project is under version control']
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
return { blockers };
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Calculate overall readiness score
|
|
280
|
+
*/
|
|
281
|
+
function calculateReadinessScore(milestones, blockers, options) {
|
|
282
|
+
let score = 1.0;
|
|
283
|
+
let confidence = 1.0;
|
|
284
|
+
// Factor in milestone completion
|
|
285
|
+
if (milestones.length > 0) {
|
|
286
|
+
const avgCompletion = milestones.reduce((sum, m) => sum + m.completionRate, 0) / milestones.length;
|
|
287
|
+
score *= avgCompletion;
|
|
288
|
+
// Reduce confidence if completion rates vary widely
|
|
289
|
+
const completionVariance = milestones.reduce((sum, m) => sum + Math.pow(m.completionRate - avgCompletion, 2), 0) / milestones.length;
|
|
290
|
+
confidence *= Math.max(0.5, 1 - completionVariance);
|
|
291
|
+
}
|
|
292
|
+
// Factor in blockers (excluding test-failures warnings for base scoring)
|
|
293
|
+
const errorCount = blockers.filter(b => b.severity === 'error').length;
|
|
294
|
+
const warningCount = blockers.filter(b => b.severity === 'warning' && b.type !== 'test-failures').length;
|
|
295
|
+
score *= Math.max(0, 1 - (errorCount * 0.3 + warningCount * 0.1));
|
|
296
|
+
// Critical todos are show-stoppers
|
|
297
|
+
const criticalTodos = milestones.reduce((sum, m) => sum + m.criticalTodos, 0);
|
|
298
|
+
if (criticalTodos > options.maxCriticalTodos) {
|
|
299
|
+
score *= 0.3; // Heavily penalize critical todos
|
|
300
|
+
}
|
|
301
|
+
// Determine readiness (ignore test-failures warnings for readiness check)
|
|
302
|
+
const criticalBlockers = blockers.filter(b => b.severity === 'error' || (b.severity === 'warning' && b.type !== 'test-failures'));
|
|
303
|
+
const isReady = score >= options.minCompletionRate && criticalBlockers.length === 0 && criticalTodos <= options.maxCriticalTodos;
|
|
304
|
+
return { score, confidence, isReady };
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Generate release recommendations
|
|
308
|
+
*/
|
|
309
|
+
function generateReleaseRecommendations(blockers, milestones, score, _releaseType) {
|
|
310
|
+
const recommendations = [];
|
|
311
|
+
if (score >= 0.9) {
|
|
312
|
+
recommendations.push('✅ Project appears ready for release');
|
|
313
|
+
recommendations.push('🚀 Consider creating a release candidate');
|
|
314
|
+
recommendations.push('📋 Run final pre-release checklist');
|
|
315
|
+
}
|
|
316
|
+
else if (score >= 0.7) {
|
|
317
|
+
recommendations.push('⚠️ Project is mostly ready with minor issues');
|
|
318
|
+
recommendations.push('🔧 Address remaining blockers before release');
|
|
319
|
+
recommendations.push('📊 Review milestone completion status');
|
|
320
|
+
}
|
|
321
|
+
else if (score >= 0.5) {
|
|
322
|
+
recommendations.push('🚧 Project needs significant work before release');
|
|
323
|
+
recommendations.push('📝 Focus on completing critical TODO items');
|
|
324
|
+
recommendations.push('🔍 Consider reducing scope for this release');
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
recommendations.push('❌ Project is not ready for release');
|
|
328
|
+
recommendations.push('🛠️ Substantial development work required');
|
|
329
|
+
recommendations.push('📋 Review and prioritize TODO items');
|
|
330
|
+
}
|
|
331
|
+
// Add specific recommendations based on blockers
|
|
332
|
+
const criticalBlockers = blockers.filter(b => b.severity === 'error');
|
|
333
|
+
if (criticalBlockers.length > 0) {
|
|
334
|
+
recommendations.push('🚨 Critical blockers must be resolved:');
|
|
335
|
+
criticalBlockers.forEach(blocker => {
|
|
336
|
+
recommendations.push(` - ${blocker.message}`);
|
|
337
|
+
// Add specific TODO items if available
|
|
338
|
+
if (blocker.todoItems && blocker.todoItems.length > 0) {
|
|
339
|
+
blocker.todoItems.forEach(todo => {
|
|
340
|
+
recommendations.push(` • ${todo}`);
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
// Add milestone-specific recommendations
|
|
346
|
+
const incompleteMilestones = milestones.filter(m => m.completionRate < 0.8);
|
|
347
|
+
if (incompleteMilestones.length > 0) {
|
|
348
|
+
recommendations.push('📈 Focus on completing these milestones:');
|
|
349
|
+
incompleteMilestones.forEach(milestone => {
|
|
350
|
+
recommendations.push(` - ${milestone.name}: ${(milestone.completionRate * 100).toFixed(1)}% complete`);
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
return recommendations;
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Generate summary of release readiness
|
|
357
|
+
*/
|
|
358
|
+
function generateSummary(result) {
|
|
359
|
+
const scorePercentage = (result.score * 100).toFixed(1);
|
|
360
|
+
const confidencePercentage = (result.confidence * 100).toFixed(1);
|
|
361
|
+
let summary = `## Release Readiness: ${result.isReady ? '✅ READY' : '❌ NOT READY'}\n\n`;
|
|
362
|
+
summary += `**Score**: ${scorePercentage}% (Confidence: ${confidencePercentage}%)\n\n`;
|
|
363
|
+
if (result.milestones.length > 0) {
|
|
364
|
+
summary += `### Milestone Status\n`;
|
|
365
|
+
result.milestones.forEach(milestone => {
|
|
366
|
+
const status = milestone.completionRate >= 0.8 ? '✅' :
|
|
367
|
+
milestone.completionRate >= 0.5 ? '⚠️' : '❌';
|
|
368
|
+
summary += `- ${status} **${milestone.name}**: ${milestone.completed}/${milestone.total} (${(milestone.completionRate * 100).toFixed(1)}%)\n`;
|
|
369
|
+
});
|
|
370
|
+
summary += '\n';
|
|
371
|
+
}
|
|
372
|
+
if (result.blockers.length > 0) {
|
|
373
|
+
summary += `### Release Blockers (${result.blockers.length})\n`;
|
|
374
|
+
result.blockers.forEach(blocker => {
|
|
375
|
+
const icon = blocker.severity === 'error' ? '🚨' :
|
|
376
|
+
blocker.severity === 'warning' ? '⚠️' : '💡';
|
|
377
|
+
summary += `- ${icon} **${blocker.type}**: ${blocker.message}\n`;
|
|
378
|
+
});
|
|
379
|
+
summary += '\n';
|
|
380
|
+
}
|
|
381
|
+
return summary;
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Integration with existing MCP tools
|
|
385
|
+
*/
|
|
386
|
+
export async function integrateWithMcpTools(projectPath, options = {}) {
|
|
387
|
+
try {
|
|
388
|
+
// Use existing manage_todo tool if available
|
|
389
|
+
// const { manageTodo } = await import('../tools/manage-todo-tool.js');
|
|
390
|
+
// Get current TODO status
|
|
391
|
+
// const todoStatus = await manageTodo({
|
|
392
|
+
// action: 'analyze_progress',
|
|
393
|
+
// projectPath
|
|
394
|
+
// });
|
|
395
|
+
// Enhance analysis with TODO tool data
|
|
396
|
+
const enhancedOptions = {
|
|
397
|
+
projectPath,
|
|
398
|
+
includeAnalysis: true,
|
|
399
|
+
...options
|
|
400
|
+
};
|
|
401
|
+
return await analyzeReleaseReadiness(enhancedOptions);
|
|
402
|
+
}
|
|
403
|
+
catch (error) {
|
|
404
|
+
console.error('MCP tool integration failed:', error);
|
|
405
|
+
// Fallback to standalone analysis
|
|
406
|
+
return await analyzeReleaseReadiness({
|
|
407
|
+
projectPath,
|
|
408
|
+
includeAnalysis: true,
|
|
409
|
+
...options
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
//# sourceMappingURL=release-readiness-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-readiness-detector.js","sourceRoot":"","sources":["../../../src/utils/release-readiness-detector.ts"],"names":[],"mappings":"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"}
|