UNPKG

scai

Version:

> **A local-first AI CLI for understanding, querying, and iterating on large codebases.** > **100% local • No token costs • No cloud • No prompt injection • Private by design**

53 lines (49 loc) 1.93 kB
import { generate } from "../../lib/generate.js"; import { logInputOutput } from "../../utils/promptLogHelper.js"; export const contextReviewModule = { name: "contextReview", description: "Analyzes summaries and global context to decide if reading full files is needed before answering.", groups: ["analysis"], run: async (input) => { const query = input.query; // Convert content to a text blob for the model const contextText = typeof input.content === "string" ? input.content : JSON.stringify(input.content ?? "", null, 2); const promptText = ` You are an AI reasoning agent reviewing file summaries and contextual notes for a software repository. User query: ${query} Context: ${contextText} Your task: 1. Summarize what this context reveals about the codebase. 2. Identify what is still missing or unclear. 3. Decide if reading full file contents is required ("needFullRead") or if current summaries are enough ("enoughForAnswer"). Respond concisely but analytically. `.trim(); // ✅ Call generate() with ModuleIO-compliant input const aiResponse = await generate({ query, content: promptText, }); // ✅ Model output is in aiResponse.data const modelText = typeof aiResponse.data === "string" ? aiResponse.data.trim() : JSON.stringify(aiResponse.data); const lower = modelText.toLowerCase(); const decision = lower.includes("needfullread") || lower.includes("read full") ? "needFullRead" : "enoughForAnswer"; // ✅ Return fully ModuleIO-compliant output const output = { query, data: { decision, understanding: modelText, }, }; logInputOutput("contextReview", "output", output.data); return output; }, };