"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import * as z from "zod"; import { Button } from "@/components/ui/button"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import { Calendar } from "@/components/ui/calendar"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { CalendarIcon } from "lucide-react"; import { format } from "date-fns"; import { cn } from "@/lib/utils"; import { useCopilotAction, useCopilotReadable } from "@copilotkit/react-core"; // Define the form schema with Zod const formSchema = z.object({ name: z.string().min(2, { message: "Name must be at least 2 characters.", }), email: z.string().email({ message: "Please enter a valid email address.", }), incidentType: z.string({ required_error: "Please select an incident type.", }), date: z.date({ required_error: "Please select the date when the incident occurred.", }), description: z.string().min(10, { message: "Description must be at least 10 characters.", }), impactLevel: z.string({ required_error: "Please select an impact level.", }), suggestedActions: z.string().min(10, { message: "Suggested actions must be at least 10 characters.", }), }); export function IncidentReportForm() { const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { name: "", email: "", description: "", suggestedActions: "", incidentType: "", impactLevel: "", }, }); function onSubmit(values: z.infer) { console.log(values); alert("Incident report submitted successfully!"); form.reset({ name: "", email: "", description: "", suggestedActions: "", incidentType: "", impactLevel: "", date: undefined, }); } useCopilotReadable( { description: "The security incident report form fields and their current values", value: form, }, [form], ); useCopilotAction({ name: "fillIncidentReportForm", description: "Fill out the incident report form", parameters: [ { name: "fullName", type: "string", required: true, description: "The full name of the person reporting the incident", }, { name: "email", type: "string", required: true, description: "The email address of the person reporting the incident", }, { name: "description", type: "string", required: true, description: "The description of the incident", }, { name: "date", type: "string", required: true, description: "The date of the incident", }, { name: "impactLevel", type: "string", required: true, description: "The impact level of the incident", }, { name: "incidentType", type: "string", required: true, description: "The type of incident, must be one of the following: phishing, malware, data_breach, unauthorized_access, ddos, other", }, { name: "incidentLevel", type: "string", required: true, description: "The severity of the incident, must be one of the following: low, medium, high, critical", }, { name: "incidentDescription", type: "string", required: true, description: "The description of the incident, be as detailed as possible. At least 30 words.", }, { name: "suggestedActions", type: "string", required: true, description: "The suggested actions to take based on the incident, be as detailed as possible in a bulleted list.", }, ], handler: async (action) => { form.setValue("name", action.fullName); form.setValue("email", action.email); form.setValue("description", action.incidentDescription); form.setValue("date", new Date(action.date)); form.setValue("impactLevel", action.incidentLevel); form.setValue("incidentType", action.incidentType); form.setValue("suggestedActions", action.suggestedActions); }, }); return ( Cyber Security Incident Report Report a security incident to our security operations team. We will respond within 24 hours.
( Full Name )} /> ( Email )} />
( Incident Type )} /> ( Date of Incident date > new Date() || date < new Date("1900-01-01") } initialFocus /> )} />
( Impact Level )} /> ( Incident Description