import { z } from 'zod';
import { CodebaseAnalyzer } from '../analyzers/codebase-analyzer.js';
import { ImprovementSuggester } from '../generators/improvement-suggester.js';
export const SuggestImprovementsSchema = z.object({
path: z.string().describe('Path to file or directory to analyze'),
limit: z.number().min(1).max(100).default(20).describe('Maximum number of suggestions to return')
});
export type SuggestImprovementsInput = z.infer<typeof SuggestImprovementsSchema>;
export async function suggestImprovements(input: SuggestImprovementsInput) {
try {
const analyzer = new CodebaseAnalyzer();
const results = await analyzer.analyzePath(input.path);
if (results.length === 0) {
return {
success: false,
error: 'No supported source files found in the specified path'
};
}
const suggester = new ImprovementSuggester();
const allSuggestions = suggester.generateSuggestions(results);
// Sort by severity and take top N
const sorted = allSuggestions.sort((a, b) => {
const severityWeight = { critical: 3, medium: 2, low: 1 };
return severityWeight[b.severity] - severityWeight[a.severity];
});
const limited = sorted.slice(0, input.limit);
return {
success: true,
totalSuggestions: allSuggestions.length,
returned: limited.length,
suggestions: limited.map(s => ({
file: s.element.filePath,
line: s.element.line,
type: s.element.type,
name: s.element.name,
severity: s.severity,
reason: s.reason,
currentDoc: s.currentDoc,
suggestedDoc: s.suggestedDoc,
signature: s.element.signature
}))
};
} catch (error) {
return {
success: false,
error: (error as Error).message
};
}
}