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 ❤️.
49 lines (48 loc) • 1.98 kB
JavaScript
import { logInputOutput } from "../utils/promptLogHelper.js";
export const planTargetFilesStep = {
name: "planTargetFilesStep",
description: "Sync files from analysis.focus into plan.targetFiles. Ensures only workingFiles are moved and does not redo intent or risks.",
groups: ["analysis"],
run: async (input) => {
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;
}
// Ensure analysis.focus exists
const focusFiles = context.analysis?.focus?.relevantFiles ?? [];
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 = {});
// Move relevant files to plan.targetFiles, only if they exist in workingFiles
const workingFilePaths = new Set(context.workingFiles?.map(f => f.path) ?? []);
const targetFiles = new Set(context.plan.targetFiles ?? []);
focusFiles.forEach(f => {
if (workingFilePaths.has(f)) {
targetFiles.add(f);
}
});
context.plan.targetFiles = Array.from(targetFiles);
const output = {
query,
data: {
movedFiles: Array.from(targetFiles),
notes: "Focus files successfully moved to plan.targetFiles.",
},
};
logInputOutput("planTargetFilesStep", "output", output.data);
return output;
},
};