// S519 — estratto da agentLoop.ts: FASE3 constraint-first block (S102) // Analizza i vincoli del messaggio utente e costruisce il goal aumentato. import { analyzeConstraints } from "../agent/constraintAnalyzer"; export interface ConstraintGoalResult { constrainedGoal: string; } /** * S519/S102: analizza i vincoli nella query e costruisce il goal aumentato * con il [VINCOLI DA RISPETTARE] header se necessario. * Chiama onStatus se ci sono vincoli bloccanti o irreversibili. */ export function buildConstrainedGoal( lastUserMsg: string, onStatus: (msg: string) => void, ): ConstraintGoalResult { const _constraints = analyzeConstraints(lastUserMsg); if (_constraints.hasConstraints) { const _bCount = _constraints.blockers.length; const _pCount = _constraints.pointsOfNoReturn.length; if (_bCount > 0 || _pCount > 0) { onStatus(`Vincoli rilevati: ${_bCount > 0 ? _bCount + ' bloccante/i' : ''}${_bCount > 0 && _pCount > 0 ? ', ' : ''}${_pCount > 0 ? _pCount + ' irreversibile/i' : ''}`); } } const constrainedGoal = _constraints.constraintHint ? lastUserMsg + '\n\n[VINCOLI DA RISPETTARE]\n' + _constraints.constraintHint : lastUserMsg; return { constrainedGoal }; }