diff --git a/src/components/configurator/VoiceAgentProvider.tsx b/src/components/configurator/VoiceAgentProvider.tsx index ef6e099..18dcded 100644 --- a/src/components/configurator/VoiceAgentProvider.tsx +++ b/src/components/configurator/VoiceAgentProvider.tsx @@ -133,6 +133,7 @@ export default function VoiceAgentProvider({ locale, children }: VoiceAgentProvi const [completedFormData, setCompletedFormData] = useState(null); const turnCompleteRef = useRef(true); + const briefSubmittedRef = useRef(false); const wsRef = useRef(null); const mediaStreamRef = useRef(null); const audioContextRef = useRef(null); @@ -191,6 +192,10 @@ export default function VoiceAgentProvider({ locale, children }: VoiceAgentProvi } if (name === 'complete_brief') { + // Prevent duplicate submissions + if (briefSubmittedRef.current) return JSON.stringify({ success: true, message: 'Brief already submitted' }); + briefSubmittedRef.current = true; + console.log('[VoiceAgent] complete_brief called, generating...'); try { const formData = { ...DEFAULT_FORM_DATA, ...(args as Partial), locale }; const res = await fetch('/api/configure', { @@ -199,12 +204,16 @@ export default function VoiceAgentProvider({ locale, children }: VoiceAgentProvi body: JSON.stringify(formData), }); const data = (await res.json()) as { success: boolean; brief?: string }; + console.log('[VoiceAgent] Brief API response:', data.success); if (data.success && data.brief) { setCompletedBrief(data.brief); setCompletedFormData(formData as WizardFormData); + console.log('[VoiceAgent] completedBrief and completedFormData set'); } - return JSON.stringify(data); - } catch { + return JSON.stringify({ success: true }); + } catch (err) { + console.error('[VoiceAgent] Brief generation failed:', err); + briefSubmittedRef.current = false; return JSON.stringify({ success: false, error: 'Brief generation failed' }); } } @@ -241,6 +250,7 @@ export default function VoiceAgentProvider({ locale, children }: VoiceAgentProvi setSelections({}); setCompletedBrief(null); setCompletedFormData(null); + briefSubmittedRef.current = false; try { const tokenRes = await fetch('/api/gemini-token', {