import "./AgentErrorDetailsModal.css"; import { useMemo, useState } from "react"; import { AlertCircle, Check, Copy, ExternalLink } from "lucide-react"; const DEFAULT_ISSUE_URL = "https://github.com/Runfusion/Fusion/issues/new"; export interface AgentErrorIssueContext { surface: string; agentId?: string; agentName?: string; agentState?: string; runId?: string; taskId?: string; timestamp?: string; } interface AgentErrorDetailsModalProps { open: boolean; onClose: () => void; errorText: string; issueContext: AgentErrorIssueContext; } export function buildAgentErrorIssueUrl(errorText: string, context: AgentErrorIssueContext): string { const title = `[Agent Error] ${context.surface}${context.agentName ? ` - ${context.agentName}` : ""}`; const bodyLines = [ "## Agent Error Report", "", `- Surface: ${context.surface}`, `- Agent ID: ${context.agentId ?? "unknown"}`, `- Agent Name: ${context.agentName ?? "unknown"}`, `- Agent State: ${context.agentState ?? "unknown"}`, `- Run ID: ${context.runId ?? "n/a"}`, `- Task ID: ${context.taskId ?? "n/a"}`, `- Timestamp: ${context.timestamp ?? new Date().toISOString()}`, "", "## Error", "```text", errorText, "```", ]; const params = new URLSearchParams({ title, body: bodyLines.join("\n"), }); return `${DEFAULT_ISSUE_URL}?${params.toString()}`; } export function AgentErrorDetailsModal({ open, onClose, errorText, issueContext }: AgentErrorDetailsModalProps) { const [copied, setCopied] = useState(false); const issueUrl = useMemo(() => buildAgentErrorIssueUrl(errorText, issueContext), [errorText, issueContext]); if (!open) { return null; } return (
{errorText}