scai
Version:
> **AI-powered CLI for local code analysis, commit message suggestions, and natural-language queries.** > **100% local • No token cost • Private by design • GDPR-friendly** — made in Denmark/EU with ❤️.
69 lines (63 loc) • 2.48 kB
JavaScript
// File: src/pipeline/modules/explainModule.ts
import { logInputOutput } from "../../utils/promptLogHelper.js";
import { generate } from "../../lib/generate.js";
export const explainModule = {
name: "explainModule",
description: "Generates a textual explanation for explain mode based on query and pre-file check context",
groups: ["finalize"],
run: async (input) => {
const query = input.query;
const context = input.context;
if (!context) {
throw new Error("[explainModule] No context provided");
}
// ---------------------------
// Gather preFileSearchCheck output
// ---------------------------
const focus = context.analysis?.focus ?? {};
const intent = context.analysis?.intent ?? {};
const rationale = context.analysis?.focus?.rationale ?? "No rationale available";
// ---------------------------
// Build prompt for the model
// ---------------------------
const prompt = `
You are an AI assistant tasked with explaining the requested work.
User query:
${query}
Intent (user goal):
${JSON.stringify(intent, null, 2)}
Relevant files:
${JSON.stringify(focus.relevantFiles ?? [], null, 2)}
Rationale for selected files:
${rationale}
INSTRUCTIONS:
- Provide a concise explanation answering the user query based primarily on the query itself.
- Use the intent and file rationale to support your explanation.
- Do NOT suggest code changes.
- Do NOT include unrelated folder summaries or analysis not yet performed.
- Keep answer clear, factual, and direct.
`.trim();
// ---------------------------
// Generate explanation
// ---------------------------
const aiResponse = await generate({
query,
content: prompt,
});
const explanationText = typeof aiResponse.data === "string" ? aiResponse.data : JSON.stringify(aiResponse.data, null, 2);
// ---------------------------
// Show explanation to user
// ---------------------------
console.log(`\n[EXPLAIN OUTPUT]\n${explanationText}\n`);
// ---------------------------
// Keep input/output logging
// ---------------------------
logInputOutput("explainModule", "output", aiResponse.data);
const output = {
query,
content: explanationText,
data: aiResponse.data,
};
return output;
},
};