import { useEffect, useState } from 'react' import { apiFetch } from '@core/lib/api' import { Button } from '@core/components/ui/button' import { Textarea } from '@core/components/ui/textarea' import { ScrollArea } from '@core/components/ui/scroll-area' import { Bot, FileText, MessageSquare, Pencil, Send, User } from 'lucide-react' function formatDate(value?: string | null): string | null { if (!value) return null const d = new Date(value) if (Number.isNaN(d.getTime())) return value return d.toLocaleString() } function authorName(id: string | null, people: any[]): string { if (!id) return 'Unknown' if (id === '00000000000') return 'Devin' const person = people.find((p: any) => p.id === id) return person?.full_name || id } interface MessageProps { author: string content: string createdAt?: string isDescription?: boolean isDevin?: boolean isAgent?: boolean } function Message({ author, content, createdAt, isDescription, isDevin, isAgent }: MessageProps) { const Icon = isDescription ? FileText : (isDevin || isAgent) ? Bot : User return (
{author} {createdAt && {formatDate(createdAt)}}

{content}

) } interface DescriptionMessageProps { author: string display: string raw: string createdAt?: string isDevin?: boolean onUpdate: (value: string) => Promise } function DescriptionMessage({ author, display, raw, createdAt, isDevin, onUpdate }: DescriptionMessageProps) { const [editing, setEditing] = useState(false) const [draft, setDraft] = useState(raw) const [saving, setSaving] = useState(false) useEffect(() => { setDraft(raw) }, [raw]) const handleSave = async () => { setSaving(true) try { await onUpdate(draft) setEditing(false) } finally { setSaving(false) } } const Icon = isDevin ? Bot : FileText return (
{author} {createdAt && {formatDate(createdAt)}}
{editing ? (