160 lines
4.8 KiB
TypeScript
160 lines
4.8 KiB
TypeScript
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 });
|
|
}
|
|
} |