import { auth } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; import { sendChatMessage } from "@/lib/claude"; import path from "path"; export async function POST(request: Request) { const session = await auth(); if (!session) return new Response("Unauthorized", { status: 401 }); const { message, sessionId, campaignId } = await request.json(); if (!message || !campaignId) { return Response.json( { error: "message and campaignId required" }, { status: 400 } ); } const campaign = await prisma.campaign.findUnique({ where: { id: campaignId }, }); if (!campaign) { return Response.json({ error: "Campaign not found" }, { status: 404 }); } const pipelineRoot = process.env.PIPELINE_ROOT || path.join(process.cwd(), "pipeline"); // Get or create ClaudeSession let claudeSession = await prisma.claudeSession.findFirst({ where: { campaignId }, orderBy: { updatedAt: "desc" }, }); if (!claudeSession) { claudeSession = await prisma.claudeSession.create({ data: { campaignId }, }); } // Save user message const existingMessages = claudeSession.messages ? JSON.parse(claudeSession.messages) : []; existingMessages.push({ role: "user", content: message }); await prisma.claudeSession.update({ where: { id: claudeSession.id }, data: { messages: JSON.stringify(existingMessages) }, }); const stream = await sendChatMessage( claudeSession.sessionId || sessionId, message, pipelineRoot ); return new Response(stream, { headers: { "Content-Type": "text/event-stream", "Cache-Control": "no-cache", Connection: "keep-alive", }, }); }