import { loadFile } from "../utils/fileLoader.js";
import { buildContext } from "../utils/contextBuilder.js";
import { callModel } from "../utils/modelApi.js";
import { CODE_NAVIGATOR_TEMPLATE } from "../utils/promptTemplates.js";
/**
* MCP Tool: codeNavigator
* Navega e responde perguntas sobre um arquivo de código.
* Agora com logs, tratamento de erro e retorno detalhado para fins de apresentação.
*/
export async function run(params: { target_file: string; query: string; template?: string }) {
console.log("[codeNavigator] Iniciando navegação de código...");
console.log("[codeNavigator] Parâmetros recebidos:", params);
try {
// Carrega o conteúdo do arquivo alvo
const codeContent = await loadFile(params.target_file);
console.log("[codeNavigator] 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("[codeNavigator] Contexto gerado (primeiros 200 chars):", context.slice(0, 200));
// Usa template customizado se fornecido, senão o padrão
const template = params.template || CODE_NAVIGATOR_TEMPLATE;
const prompt = template
.replace("{code}", context)
.replace("{query}", params.query);
console.log("[codeNavigator] Prompt final (primeiros 200 chars):", prompt.slice(0, 200));
// Chama o modelo
const response = await callModel(prompt);
console.log("[codeNavigator] Resposta do modelo:", response);
// Retorna informações detalhadas para apresentação
return {
navigation: response,
context,
prompt,
params
};
} catch (error: any) {
console.error("[codeNavigator] Erro ao navegar no código:", error);
return {
error: true,
message: error?.message || String(error),
params
};
}
}