import type { Request, Response } from "express";
import { runTool } from "../mcp/tool-runner.js";
export async function prImpactHandler(req: Request, res: Response): Promise<void> {
try {
const { repo, from_ref, to_ref } = req.body;
if (!repo || !from_ref || !to_ref) {
res.status(400).json({
error: "Missing required fields",
message: "repo, from_ref, and to_ref are required",
});
return;
}
const result = await runTool("pr_impact_preview", { repo, from_ref, to_ref });
res.json(result);
} catch (error) {
res.status(500).json({
error: "PR impact analysis failed",
message: error instanceof Error ? error.message : String(error),
});
}
}
export async function diffVersionsHandler(req: Request, res: Response): Promise<void> {
try {
const { from_ref, to_ref, repo, extractor } = req.body;
if (!from_ref || !to_ref) {
res.status(400).json({
error: "Missing required fields",
message: "from_ref and to_ref are required",
});
return;
}
const result = await runTool("diff_versions", { from_ref, to_ref, repo, extractor });
res.json(result);
} catch (error) {
res.status(500).json({
error: "Version diff failed",
message: error instanceof Error ? error.message : String(error),
});
}
}
export async function staleDepsHandler(req: Request, res: Response): Promise<void> {
try {
const minSimilarity = req.query.minSimilarity
? parseInt(req.query.minSimilarity as string, 10)
: undefined;
const focusRepo = req.query.focusRepo as string | undefined;
const result = await runTool("detect_stale_dependencies", { minSimilarity, focusRepo });
res.json(result);
} catch (error) {
res.status(500).json({
error: "Stale dependency detection failed",
message: error instanceof Error ? error.message : String(error),
});
}
}