import { z } from 'zod';
import { CodebaseAnalyzer } from '../analyzers/codebase-analyzer.js';
export const AnalyzeCodebaseSchema = z.object({
path: z.string().describe('Path to file or directory to analyze')
});
export type AnalyzeCodebaseInput = z.infer<typeof AnalyzeCodebaseSchema>;
export async function analyzeCodebase(input: AnalyzeCodebaseInput) {
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 summary = {
totalFiles: results.length,
totalElements: results.reduce((sum, r) => sum + r.totalElements, 0),
documentedElements: results.reduce((sum, r) => sum + r.documentedElements, 0),
averageCoverage: results.reduce((sum, r) => sum + r.documentationCoverage, 0) / results.length
};
return {
success: true,
summary,
results: results.map(r => ({
file: r.filePath,
language: r.language,
elements: r.totalElements,
documented: r.documentedElements,
coverage: r.documentationCoverage,
details: r.elements.map(e => ({
type: e.type,
name: e.name,
line: e.line,
hasDoc: e.hasDocumentation
}))
}))
};
} catch (error) {
return {
success: false,
error: (error as Error).message
};
}
}