import { NextRequest, NextResponse } from 'next/server'; import type { ConversationState } from '@/types/conversation'; declare global { var conversationState: ConversationState | null; } // GET: Retrieve current conversation state export async function GET() { try { if (!global.conversationState) { return NextResponse.json({ success: true, state: null, message: 'No active conversation' }); } return NextResponse.json({ success: true, state: global.conversationState }); } catch (error) { console.error('[conversation-state] Error getting state:', error); return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 }); } } // POST: Reset or update conversation state export async function POST(request: NextRequest) { try { const { action, data } = await request.json(); switch (action) { case 'reset': global.conversationState = { conversationId: `conv-${Date.now()}`, startedAt: Date.now(), lastUpdated: Date.now(), context: { messages: [], edits: [], projectEvolution: { majorChanges: [] }, userPreferences: {} } }; console.log('[conversation-state] Reset conversation state'); return NextResponse.json({ success: true, message: 'Conversation state reset', state: global.conversationState }); case 'clear-old': // Clear old conversation data but keep recent context if (!global.conversationState) { // Initialize conversation state if it doesn't exist global.conversationState = { conversationId: `conv-${Date.now()}`, startedAt: Date.now(), lastUpdated: Date.now(), context: { messages: [], edits: [], projectEvolution: { majorChanges: [] }, userPreferences: {} } }; console.log('[conversation-state] Initialized new conversation state for clear-old'); return NextResponse.json({ success: true, message: 'New conversation state initialized', state: global.conversationState }); } // Keep only recent data global.conversationState.context.messages = global.conversationState.context.messages.slice(-5); global.conversationState.context.edits = global.conversationState.context.edits.slice(-3); global.conversationState.context.projectEvolution.majorChanges = global.conversationState.context.projectEvolution.majorChanges.slice(-2); console.log('[conversation-state] Cleared old conversation data'); return NextResponse.json({ success: true, message: 'Old conversation data cleared', state: global.conversationState }); case 'update': if (!global.conversationState) { return NextResponse.json({ success: false, error: 'No active conversation to update' }, { status: 400 }); } // Update specific fields if provided if (data) { if (data.currentTopic) { global.conversationState.context.currentTopic = data.currentTopic; } if (data.userPreferences) { global.conversationState.context.userPreferences = { ...global.conversationState.context.userPreferences, ...data.userPreferences }; } global.conversationState.lastUpdated = Date.now(); } return NextResponse.json({ success: true, message: 'Conversation state updated', state: global.conversationState }); default: return NextResponse.json({ success: false, error: 'Invalid action. Use "reset" or "update"' }, { status: 400 }); } } catch (error) { console.error('[conversation-state] Error:', error); return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 }); } } // DELETE: Clear conversation state export async function DELETE() { try { global.conversationState = null; console.log('[conversation-state] Cleared conversation state'); return NextResponse.json({ success: true, message: 'Conversation state cleared' }); } catch (error) { console.error('[conversation-state] Error clearing state:', error); return NextResponse.json({ success: false, error: (error as Error).message }, { status: 500 }); } }