import { loadFile } from "../utils/fileLoader.js";
import { buildContext } from "../utils/contextBuilder.js";
import { callModel } from "../utils/modelApi.js";
import { REFACTOR_TEMPLATE } from "../utils/promptTemplates.js";
/**
* MCP Tool: refactor
* Refatora um arquivo de código conforme instruções.
* Agora com logs, tratamento de erro e retorno detalhado para fins de apresentação.
*/
export async function run(params: { target_file: string; instructions: string; template?: string }) {
console.log("[refactor] Iniciando refatoração...");
console.log("[refactor] Parâmetros recebidos:", params);
try {
// Carrega o conteúdo do arquivo alvo
const codeContent = await loadFile(params.target_file);
console.log("[refactor] Conteúdo do arquivo carregado (primeiros 200 chars):", codeContent.slice(0, 200));
// Gera o contexto a partir do código
const context = buildContext(codeContent);
console.log("[refactor] Contexto gerado (primeiros 200 chars):", context.slice(0, 200));
// Usa template customizado se fornecido, senão o padrão
const template = params.template || REFACTOR_TEMPLATE;
const prompt = template
.replace("{code}", context)
.replace("{instructions}", params.instructions);
console.log("[refactor] Prompt final (primeiros 200 chars):", prompt.slice(0, 200));
// Chama o modelo
const response = await callModel(prompt);
console.log("[refactor] Resposta do modelo:", response);
// Retorna informações detalhadas para apresentação
return {
refactored: response,
context,
prompt,
params
};
} catch (error: any) {
console.error("[refactor] Erro ao refatorar o código:", error);
return {
error: true,
message: error?.message || String(error),
params
};
}
}