From 7a73be703fc4c8ccc1bb818197a68235a8ae6da2 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Wed, 29 Oct 2025 14:14:58 +0000 Subject: [PATCH] feat: Implement prompt versioning and editing --- src/components/prompts/EditPromptDialog.tsx | 356 ++++++++++++++++++++ src/pages/Prompts.tsx | 30 +- 2 files changed, 385 insertions(+), 1 deletion(-) create mode 100644 src/components/prompts/EditPromptDialog.tsx diff --git a/src/components/prompts/EditPromptDialog.tsx b/src/components/prompts/EditPromptDialog.tsx new file mode 100644 index 0000000..02d54f1 --- /dev/null +++ b/src/components/prompts/EditPromptDialog.tsx @@ -0,0 +1,356 @@ +import { useState, useEffect } from "react"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, +} from "@/components/ui/dialog"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Textarea } from "@/components/ui/textarea"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { Wand2, GitBranch } from "lucide-react"; + +interface EditPromptDialogProps { + open: boolean; + onOpenChange: (open: boolean) => void; + prompt: { + id: number; + title: string; + systemPrompt?: string; + version?: string; + } | null; +} + +export function EditPromptDialog({ open, onOpenChange, prompt }: EditPromptDialogProps) { + const [title, setTitle] = useState(""); + const [systemPrompt, setSystemPrompt] = useState(""); + const [versionType, setVersionType] = useState<"major" | "minor" | "patch">("minor"); + const [changeDescription, setChangeDescription] = useState(""); + + // Assistente fields + const [agentName, setAgentName] = useState(""); + const [agentRole, setAgentRole] = useState(""); + const [targetAudience, setTargetAudience] = useState(""); + const [mainObjective, setMainObjective] = useState(""); + const [toneOfVoice, setToneOfVoice] = useState(""); + const [forbiddenPatterns, setForbiddenPatterns] = useState(""); + const [refinementInstructions, setRefinementInstructions] = useState(""); + const [isGenerated, setIsGenerated] = useState(false); + + // Carregar dados do prompt quando o dialog abrir + useEffect(() => { + if (prompt && open) { + setTitle(prompt.title); + setSystemPrompt(prompt.systemPrompt || ""); + setChangeDescription(""); + setVersionType("minor"); + } + }, [prompt, open]); + + const handleGeneratePrompt = () => { + let generatedPrompt = `Você é ${agentName}, ${agentRole}. + +Público-alvo: ${targetAudience} + +Objetivo principal: ${mainObjective} + +Tom de voz: ${toneOfVoice} + +${forbiddenPatterns ? `Padrões proibidos:\n${forbiddenPatterns}` : ''} + +Siga estas diretrizes em todas as suas interações.`; + + if (refinementInstructions && isGenerated) { + generatedPrompt += `\n\nInstruções adicionais:\n${refinementInstructions}`; + } + + setSystemPrompt(generatedPrompt); + setIsGenerated(true); + }; + + const handleStartOver = () => { + setAgentName(""); + setAgentRole(""); + setTargetAudience(""); + setMainObjective(""); + setToneOfVoice(""); + setForbiddenPatterns(""); + setRefinementInstructions(""); + setSystemPrompt(""); + setIsGenerated(false); + }; + + const handleSave = () => { + console.log("Salvando nova versão:", { + promptId: prompt?.id, + title, + systemPrompt, + versionType, + changeDescription + }); + // Aqui você implementaria a lógica de salvar nova versão no backend + onOpenChange(false); + }; + + const getVersionDescription = () => { + switch (versionType) { + case "major": + return "Mudanças significativas que alteram a funcionalidade principal"; + case "minor": + return "Novas funcionalidades ou melhorias sem quebrar compatibilidade"; + case "patch": + return "Correções e ajustes menores"; + } + }; + + if (!prompt) return null; + + return ( + + + + Editar Prompt + + Edite o prompt manualmente ou use o assistente. Uma nova versão será criada preservando o histórico. + + + +
+
+ + + Versão atual: {prompt.version || "1.0.0"} + +
+ +
+ + setTitle(e.target.value)} + /> +
+ + + + Manual + + + Assistente + + + + +
+ +