/** * debateBudget.ts — ORCH-4: Coordinatore budget debate (anti-doppia attivazione) * * Problema identificato nell'analisi pro-level: * debateBlock (pre-loop, llama-3.3-70b, 40s max, 2 round) + * dualAgentDebate (AgentRuntime, post-loop, quality<7) * → possono entrambi attivarsi per lo stesso task nello stesso turno. * Risultato: fino a 4 LLM debate calls × 70B = 80s di overhead + burst Groq 429. * * Soluzione: flag module-level con reset esplicito a inizio di ogni run agentLoop. * - resetDebateBudget(): chiamato da agentLoop all'inizio del turn (garantisce isolamento) * - markDebateUsed(): chiamato dopo pre-loop debate riuscito (consensus != null) * - isDebateUsed(): controllato da AgentRuntime prima del post-loop debate * * Design: * - Zero dipendenze — modulo standalone * - Browser single-thread: nessun race condition possibile * - Fail-safe: isDebateUsed() ritorna false se modulo non inizializzato → fallback sicuro * * @module debateBudget */ let _debateUsed = false; /** Reset all'inizio di ogni run agentLoop — isola turni conversazionali. */ export function resetDebateBudget(): void { _debateUsed = false; } /** * Segnala che il pre-loop debate ha prodotto consensus. * Chiamato da agentLoop.ts dopo runDebateIfNeeded() con risultato non-null. */ export function markDebateUsed(): void { _debateUsed = true; } /** * Verifica se il debate è già stato consumato in questo turno. * AgentRuntime lo chiama prima di runDualAgentDebate — se true, skip. */ export function isDebateUsed(): boolean { return _debateUsed; }