UNPKG

scai

Version:

> **AI-powered CLI for local code analysis, commit message suggestions, and natural-language queries.** 100% local, private, GDPR-friendly, made in Denmark/EU with ❤️.

54 lines (49 loc) 2.02 kB
import { logInputOutput } from "../../utils/promptLogHelper.js"; import { generate } from "../../lib/generate.js"; export const finalAnswerModule = { name: "finalAnswer", description: "Generates a final answer using structured context and relevant working files.", groups: ["finalize"], run: async (input) => { const query = input.query; const context = input.context; if (!context) throw new Error("[finalAnswerModule] No context provided"); // Only consider authoritative target files const targetFiles = context.plan?.targetFiles ?? []; const workingFiles = (context.workingFiles ?? []).filter(f => targetFiles.includes(f.path)); const filesSummary = workingFiles.map(f => ({ path: f.path, hasCode: !!f.code, summary: f.summary ?? "", codeSnippet: f.code ? f.code.slice(0, 500) : undefined, // optional snippet, avoid huge content })); const analysisSummary = { intent: context.analysis?.intent, fileAnalysis: context.analysis?.fileAnalysis, combinedAnalysis: context.analysis?.combinedAnalysis, }; const promptText = ` You are an AI assistant answering a developer query. Query: ${query} Analysis summary: ${JSON.stringify(analysisSummary, null, 2)} Target files and content: ${JSON.stringify(filesSummary, null, 2)} Instructions: - Provide a clear, concise answer based only on the available files and analysis. - Highlight risks or important notes from fileAnalysis or combinedAnalysis. - Do not ask for additional files; assume the provided code is authoritative. `; const aiResponse = await generate({ query, content: promptText }); const output = { query, content: '', data: aiResponse.data, }; logInputOutput("finalAnswer", "output", output.data); console.log('\n--> Answer: ', output.data); return output; }, };