UNPKG

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 ❤️.

63 lines (62 loc) 2.67 kB
import { logInputOutput } from "../utils/promptLogHelper.js"; export const planTargetFilesStep = { name: "planTargetFilesStep", description: "Sync relevant files from analysis.focus into plan.targetFiles, skipping irrelevant files. Ensures only workingFiles are moved and does not redo intent or risks.", groups: ["analysis"], run: async (input) => { var _a; const context = input.context; const query = input.query ?? ""; if (!context) { const output = { query, data: { notes: "[planTargetFilesStep] No context provided; skipping." }, }; logInputOutput("planTargetFilesStep", "output", output.data); return output; } const analysis = context.analysis; const focusFiles = analysis?.focus?.relevantFiles ?? []; const fileAnalysisMap = analysis?.fileAnalysis ?? {}; if (!focusFiles.length) { const output = { query, data: { notes: "[planTargetFilesStep] No relevant files in analysis.focus; nothing to move." }, }; logInputOutput("planTargetFilesStep", "output", output.data); return output; } // Ensure plan exists context.plan || (context.plan = {}); const workingFilePaths = new Set(context.workingFiles?.map(f => f.path) ?? []); const targetFiles = new Set(context.plan.targetFiles ?? []); const skippedFiles = []; // Ensure discardedFiles array exists if (context.analysis?.focus) { (_a = context.analysis.focus).discardedFiles || (_a.discardedFiles = []); } // Add only non-irrelevant files focusFiles.forEach(filePath => { const analysisEntry = fileAnalysisMap[filePath]; if (analysisEntry?.intent === "irrelevant") { skippedFiles.push(filePath); context.analysis.focus.discardedFiles.push(filePath); // add to discardedFiles return; } if (workingFilePaths.has(filePath)) { targetFiles.add(filePath); } }); context.plan.targetFiles = Array.from(targetFiles); const output = { query, data: { movedFiles: Array.from(targetFiles), skippedFiles, notes: `Focus files synced to plan.targetFiles. ${skippedFiles.length} irrelevant file(s) skipped and added to discardedFiles.`, }, }; logInputOutput("planTargetFilesStep", "output", output.data); return output; }, };