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**

67 lines (66 loc) 2.78 kB
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 }); } };