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
JavaScript
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;
},
};