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**
67 lines (66 loc) • 2.78 kB
JavaScript
import { logInputOutput } from '../utils/promptLogHelper.js';
/**
* INTEGRATE FEEDBACK STEP
* Applies collaborator feedback to iteration reasoning and execution targets.
* Converts human input into concrete next actions for the agent.
*/
export const integrateFeedbackStep = {
name: 'integrateFeedbackStep',
description: 'Integrates collaborator feedback into next-iteration planning.',
requires: ['analysis.collaboratorFeedback', 'analysis.iterationReasoning'],
produces: ['analysis.iterationReasoning', 'analysis.collaboratorFeedback'],
async run(context) {
context.analysis || (context.analysis = {});
const feedback = context.analysis.collaboratorFeedback;
const reasoning = context.analysis.iterationReasoning;
if (!feedback || !reasoning)
return;
// Only act when feedback has been received but not yet applied
if (feedback.status !== 'received')
return;
let nextAction = 'continue';
let rationale = 'Collaborator feedback approved continuation';
let nextTargets;
// Process corrections if any
if (feedback.corrections && feedback.corrections.length > 0) {
const blocking = feedback.corrections.filter(c => c.severity === 'blocking');
if (blocking.length > 0) {
nextAction = 'redo-step';
rationale =
'Blocking collaborator feedback requires changes before proceeding';
nextTargets = {
files: blocking
.map(c => c.filePath)
.filter((f) => Boolean(f))
};
}
else {
// Suggestions only → continue but with lowered confidence
nextAction = 'continue';
rationale =
'Non-blocking collaborator suggestions acknowledged';
}
}
// Update iteration reasoning authoritatively
context.analysis.iterationReasoning = {
summary: 'Collaborator feedback integrated',
nextAction,
rationale,
nextTargets,
confidence: nextAction === 'redo-step'
? 0.6
: 0.9
};
// Mark feedback as applied (lifecycle complete)
context.analysis.collaboratorFeedback = {
...feedback,
status: 'applied',
requiresAction: false
};
logInputOutput("integrateFeedbackStep", "output", {
collaboratorFeedback: context.analysis?.collaboratorFeedback,
iterationReasoning: context.analysis?.iterationReasoning,
planSuggestion: context.analysis?.planSuggestion
});
}
};