import { z } from "zod"; import { guarded, body, sse } from "@/lib/api"; import { getMessage, deactivateFrom, insertMessage } from "@/lib/chat/store"; import { runAssistant } from "@/lib/chat/engine"; import type { Part } from "@/lib/ai/types"; export const maxDuration = 900; /** Edit a user message: creates a sibling user message (same parent), deactivates the old branch, and answers it. */ export const POST = guarded(async (req) => { const b = await body(req, z.object({ messageId: z.string(), text: z.string().min(1).max(200_000), modelId: z.string().optional(), routingMode: z.enum(["manual", "fast", "quality", "economy", "auto"]).optional(), toolsEnabled: z.boolean().optional() })); const m = await getMessage(b.messageId); if (!m || m.role !== "user") return Response.json({ error: "Message utilisateur introuvable" }, { status: 404 }); await deactivateFrom(m.conversation_id, m.id, true); const keep = (m.parts as Part[]).filter(p => p.type !== "text"); const user = await insertMessage({ conversationId: m.conversation_id, parentId: m.parent_id, role: "user", parts: [...keep, { type: "text", text: b.text }] }); return sse(async (emit, signal) => { emit("conversation", { id: m.conversation_id, userMessageId: user.id, edited: m.id }); await runAssistant({ conversationId: m.conversation_id, modelId: b.modelId, routingMode: b.routingMode, toolsEnabled: b.toolsEnabled, parentMessageId: user.id, signal, emit }); }, req.signal); });