import React, { useState, useEffect } from 'react'; import { supabase } from '../services/supabase'; import { Save, CheckCircle, XCircle, ThumbsUp, ThumbsDown } from 'lucide-react'; import { motion } from 'framer-motion'; interface TaskEditorProps { taskId: string; onClose: () => void; } interface EditableTask { id: string; title: string; output_data: unknown; } const TaskEditor: React.FC = ({ taskId, onClose }) => { const [task, setTask] = useState(null); const [editedOutput, setEditedOutput] = useState(''); const [saving, setSaving] = useState(false); useEffect(() => { const fetchTask = async () => { const { data } = await supabase .from('tasks') .select('id,title,output_data') .eq('id', taskId) .single(); if (data) { setTask(data); setEditedOutput(JSON.stringify(data.output_data, null, 2)); } }; fetchTask(); }, [taskId]); const handleSave = async () => { setSaving(true); try { const parsed = JSON.parse(editedOutput); await supabase .from('tasks') .update({ output_data: parsed }) .eq('id', taskId); alert('Task updated successfully!'); } catch { alert('Invalid JSON format'); } setSaving(false); }; const handleFeedback = async (rating: number) => { await supabase.from('task_feedback').upsert({ task_id: taskId, rating: rating }); alert(rating === 1 ? 'Glad you liked it!' : 'Feedback recorded. We will use this to improve.'); }; const handleApprove = async () => { await supabase.from('tasks').update({ status: 'done' }).eq('id', taskId); onClose(); }; if (!task) return null; return (

{task.title}

Review and refine agent output