{"version":3,"sources":["../src/components/agent-node.tsx","../src/components/tool-node.tsx","../src/components/agent-flow-visualization.tsx","../src/utils/debug.ts","../src/utils/event-parser.ts","../src/utils/stream-interceptor.ts","../src/hooks/use-ai-devtools.ts","../src/components/devtools-button.tsx","../src/hooks/use-current-state.ts","../src/utils/formatting.tsx","../src/utils/session-grouper.ts","../src/components/event-item.tsx","../src/components/tool-call-session.tsx","../src/components/event-list.tsx","../src/components/state-data-explorer.tsx","../src/components/devtools-panel.tsx","../src/components/ai-dev-tools.tsx","../src/components/store-list.tsx","../src/utils/working-state-detection.ts"],"names":["PlayArrowIcon","CheckCircleIcon","ErrorIcon","ScheduleIcon","jsxs","Fragment","jsx","Handle","Position","BuildIcon","memo","useCallback","useEffect","ImportedChatStoreContext","useState","useRef","React","ErrorOutlineIcon","SendIcon","CircleIcon","CodeIcon","PsychologyIcon","SettingsIcon","ApiIcon","DataObjectIcon","HelpIcon","toolName","useMemo","PauseIcon","ClearIcon","RightPanelIcon","BottomPanelIcon","CloseIcon"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","file":"index.mjs","sourcesContent":["\"use client\";\n\nimport {\n  CheckCircle as CheckCircleIcon,\n  Error as ErrorIcon,\n  PlayArrow as PlayArrowIcon,\n  Schedule as ScheduleIcon,\n} from \"@mui/icons-material\";\nimport { Handle, type NodeProps, Position } from \"@xyflow/react\";\nimport { memo } from \"react\";\nimport type { AgentNode as AgentNodeData } from \"../types\";\n\ninterface AgentNodeComponentData extends AgentNodeData {\n  label: string;\n}\n\nfunction AgentNodeComponent({ data }: NodeProps) {\n  const nodeData = data as unknown as AgentNodeComponentData;\n  const {\n    name,\n    status,\n    duration,\n    // toolCallCount,\n    // model,\n    // routingStrategy,\n    // matchScore,\n    // round,\n  } = nodeData;\n\n  // Status icon and color\n  const getStatusIcon = () => {\n    switch (status) {\n      case \"executing\":\n        return <PlayArrowIcon sx={{ fontSize: 16 }} />;\n      case \"completed\":\n        return <CheckCircleIcon sx={{ fontSize: 16 }} />;\n      case \"error\":\n        return <ErrorIcon sx={{ fontSize: 16 }} />;\n      default:\n        return <ScheduleIcon sx={{ fontSize: 16 }} />;\n    }\n  };\n\n  const getStatusColor = () => {\n    switch (status) {\n      case \"executing\":\n        return \"#f59e0b\"; // orange/yellow accent\n      case \"completed\":\n        return \"#4b5563\"; // darker gray\n      case \"error\":\n        return \"#f59e0b\"; // orange for visibility\n      default:\n        return \"#374151\"; // dark gray\n    }\n  };\n\n  const statusColor = getStatusColor();\n  // const isActive = status === \"executing\";\n\n  return (\n    <>\n      {/* Input handle (left for horizontal layout) */}\n      <Handle\n        type=\"target\"\n        position={Position.Left}\n        style={{\n          background: \"#3f3f46\",\n          width: 10,\n          height: 10,\n          border: \"2px solid #18181b\",\n        }}\n      />\n\n      {/* Node content */}\n      <div\n        className=\"agent-node\"\n        style={{\n          background: \"#18181b\",\n          border: `1px solid #3f3f46`,\n          borderRadius: 0,\n          padding: \"16px 18px\",\n          minWidth: 200,\n          boxShadow: \"0 4px 12px rgba(0, 0, 0, 0.5)\",\n        }}\n      >\n        {/* Label: AGENT */}\n        <div\n          style={{\n            fontSize: 10,\n            fontWeight: 700,\n            letterSpacing: \"0.05em\",\n            color: \"#71717a\",\n            marginBottom: 8,\n            textTransform: \"uppercase\",\n          }}\n        >\n          AGENT\n        </div>\n\n        {/* Header: Name and Status Icon */}\n        <div\n          style={{\n            display: \"flex\",\n            alignItems: \"center\",\n            gap: 8,\n            marginBottom: 12,\n          }}\n        >\n          <div\n            style={{\n              fontWeight: 600,\n              fontSize: 15,\n              color: \"#f4f4f5\",\n            }}\n          >\n            {name}\n          </div>\n          <div style={{ color: statusColor, display: \"flex\", fontSize: 14 }}>\n            {getStatusIcon()}\n          </div>\n        </div>\n\n        {/* Agent ID or description */}\n        <div\n          style={{\n            fontSize: 13,\n            color: \"#a1a1aa\",\n            marginBottom: duration !== undefined ? 12 : 0,\n            fontFamily: \"monospace\",\n          }}\n        >\n          {name.toLowerCase().replace(/\\s+/g, \"-\")}\n        </div>\n\n        {/* Duration */}\n        {duration !== undefined && (\n          <>\n            <div\n              style={{\n                height: 1,\n                background: \"#27272a\",\n                margin: \"12px 0\",\n              }}\n            />\n            <div\n              style={{\n                display: \"flex\",\n                justifyContent: \"space-between\",\n                alignItems: \"center\",\n                fontSize: 12,\n              }}\n            >\n              <span style={{ color: \"#71717a\" }}>Duration</span>\n              <span style={{ color: \"#f4f4f5\", fontWeight: 500 }}>\n                {duration.toFixed(2)}s\n              </span>\n            </div>\n          </>\n        )}\n      </div>\n\n      {/* Output handle (right for horizontal layout) */}\n      <Handle\n        type=\"source\"\n        position={Position.Right}\n        style={{\n          background: \"#3f3f46\",\n          width: 10,\n          height: 10,\n          border: \"2px solid #18181b\",\n        }}\n      />\n\n      {/* Add pulse animation styles inline */}\n      <style>\n        {`\n          @keyframes pulse-glow {\n            0%, 100% {\n              box-shadow: 0 0 20px ${statusColor}40, 0 4px 6px -1px rgb(0 0 0 / 0.3);\n            }\n            50% {\n              box-shadow: 0 0 30px ${statusColor}60, 0 4px 6px -1px rgb(0 0 0 / 0.3);\n            }\n          }\n        `}\n      </style>\n    </>\n  );\n}\n\nexport const AgentNode = memo(AgentNodeComponent);\n","\"use client\";\n\nimport { Build as BuildIcon } from \"@mui/icons-material\";\nimport { Handle, type NodeProps, Position } from \"@xyflow/react\";\nimport { memo } from \"react\";\n\ninterface ToolNodeData {\n  name: string;\n  description?: string;\n  label: string;\n}\n\nfunction ToolNodeComponent({ data }: NodeProps) {\n  const nodeData = data as unknown as ToolNodeData;\n  const { name, description } = nodeData;\n\n  return (\n    <>\n      {/* Input handle (left for horizontal layout) */}\n      <Handle\n        type=\"target\"\n        position={Position.Left}\n        style={{\n          background: \"#3f3f46\",\n          width: 10,\n          height: 10,\n          border: \"2px solid #18181b\",\n        }}\n      />\n\n      {/* Node content */}\n      <div\n        className=\"tool-node\"\n        style={{\n          background: \"#18181b\",\n          border: `1px solid #3f3f46`,\n          borderRadius: 0,\n          padding: \"16px 18px\",\n          minWidth: 200,\n          boxShadow: \"0 4px 12px rgba(0, 0, 0, 0.5)\",\n        }}\n      >\n        {/* Label: TOOL */}\n        <div\n          style={{\n            fontSize: 10,\n            fontWeight: 700,\n            letterSpacing: \"0.05em\",\n            color: \"#71717a\",\n            marginBottom: 8,\n            textTransform: \"uppercase\",\n          }}\n        >\n          TOOL\n        </div>\n\n        {/* Header: Name and Icon */}\n        <div\n          style={{\n            display: \"flex\",\n            alignItems: \"center\",\n            gap: 8,\n            marginBottom: 12,\n          }}\n        >\n          <div\n            style={{\n              fontWeight: 600,\n              fontSize: 15,\n              color: \"#f4f4f5\",\n            }}\n          >\n            {name}\n          </div>\n          <div style={{ color: \"#f59e0b\", display: \"flex\", fontSize: 14 }}>\n            <BuildIcon sx={{ fontSize: 16 }} />\n          </div>\n        </div>\n\n        {/* Description */}\n        {description && (\n          <div\n            style={{\n              fontSize: 13,\n              color: \"#a1a1aa\",\n            }}\n          >\n            {description}\n          </div>\n        )}\n      </div>\n\n      {/* Output handle (right for horizontal layout) */}\n      <Handle\n        type=\"source\"\n        position={Position.Right}\n        style={{\n          background: \"#3f3f46\",\n          width: 10,\n          height: 10,\n          border: \"2px solid #18181b\",\n        }}\n      />\n    </>\n  );\n}\n\nexport const ToolNode = memo(ToolNodeComponent);\n","\"use client\";\n\nimport {\n  Background,\n  type Edge,\n  MarkerType,\n  type Node,\n  Position,\n  ReactFlow,\n  useEdgesState,\n  useNodesState,\n} from \"@xyflow/react\";\nimport dagre from \"dagre\";\nimport { useCallback, useEffect, useMemo } from \"react\";\nimport \"@xyflow/react/dist/style.css\";\nimport type { AgentFlowData, AIEvent } from \"../types\";\nimport { AgentNode } from \"./agent-node\";\nimport { ToolNode } from \"./tool-node\";\n\ninterface AgentFlowVisualizationProps {\n  events: AIEvent[];\n}\n\nconst nodeTypes = {\n  agentNode: AgentNode,\n  toolNode: ToolNode,\n} as const;\n\n// Auto-layout using dagre\nfunction getLayoutedElements(\n  nodes: Node[],\n  edges: Edge[],\n  direction = \"LR\",\n): { nodes: Node[]; edges: Edge[] } {\n  const dagreGraph = new dagre.graphlib.Graph();\n  dagreGraph.setDefaultEdgeLabel(() => ({}));\n\n  const nodeWidth = 220;\n  const nodeHeight = 180;\n  const isHorizontal = direction === \"LR\";\n\n  dagreGraph.setGraph({ rankdir: direction, ranksep: 250, nodesep: 120 });\n\n  nodes.forEach((node) => {\n    dagreGraph.setNode(node.id, { width: nodeWidth, height: nodeHeight });\n  });\n\n  edges.forEach((edge) => {\n    dagreGraph.setEdge(edge.source, edge.target);\n  });\n\n  dagre.layout(dagreGraph);\n\n  const layoutedNodes = nodes.map((node) => {\n    const nodeWithPosition = dagreGraph.node(node.id);\n    return {\n      ...node,\n      targetPosition: isHorizontal ? Position.Left : Position.Top,\n      sourcePosition: isHorizontal ? Position.Right : Position.Bottom,\n      // Shift dagre node position (anchor=center) to top-left\n      // to match React Flow node anchor point (top-left)\n      position: {\n        x: nodeWithPosition.x - nodeWidth / 2,\n        y: nodeWithPosition.y - nodeHeight / 2,\n      },\n    };\n  });\n\n  return { nodes: layoutedNodes, edges };\n}\n\n// Process events into agent flow data\nfunction processAgentEvents(events: AIEvent[]): AgentFlowData {\n  const agentMap = new Map<\n    string,\n    {\n      name: string;\n      status: \"idle\" | \"executing\" | \"completed\" | \"error\";\n      startTime?: number;\n      endTime?: number;\n      toolCallCount: number;\n      routingStrategy?: \"programmatic\" | \"llm\";\n      matchScore?: number;\n      round?: number;\n      model?: string;\n    }\n  >();\n  const handoffs: Array<{\n    id: string;\n    from: string;\n    to: string;\n    reason?: string;\n    routingStrategy?: \"programmatic\" | \"llm\";\n    timestamp: number;\n  }> = [];\n  const toolMap = new Map<\n    string,\n    {\n      name: string;\n      agent?: string;\n      description?: string;\n      callCount: number;\n    }\n  >();\n  let totalRounds = 0;\n  let isActive = false;\n  let currentAgent: string | undefined;\n\n  for (const event of events) {\n    switch (event.type) {\n      case \"agent-start\": {\n        const agentName = event.metadata?.agent;\n        if (agentName) {\n          currentAgent = agentName;\n          const existing = agentMap.get(agentName);\n          agentMap.set(agentName, {\n            name: agentName,\n            status: \"executing\",\n            // Preserve original startTime if it exists (don't overwrite on subsequent starts)\n            startTime: existing?.startTime || event.timestamp,\n            endTime: existing?.endTime,\n            toolCallCount: existing?.toolCallCount || 0,\n            routingStrategy: event.metadata?.routingStrategy,\n            matchScore: event.metadata?.matchScore,\n            round: event.metadata?.round,\n            model: event.metadata?.model || existing?.model,\n          });\n          isActive = true;\n        }\n        break;\n      }\n\n      case \"agent-finish\": {\n        const agentName = event.metadata?.agent;\n        if (agentName && agentMap.has(agentName)) {\n          const agent = agentMap.get(agentName);\n          if (agent) {\n            agentMap.set(agentName, {\n              ...agent,\n              status: \"completed\",\n              endTime: event.timestamp,\n              model: event.metadata?.model || agent.model,\n            });\n          }\n        }\n        break;\n      }\n\n      case \"agent-error\": {\n        const agentName = event.metadata?.agent;\n        if (agentName && agentMap.has(agentName)) {\n          const agent = agentMap.get(agentName);\n          if (agent) {\n            agentMap.set(agentName, {\n              ...agent,\n              status: \"error\",\n              endTime: event.timestamp,\n            });\n          }\n        }\n        break;\n      }\n\n      case \"agent-handoff\": {\n        const fromAgent = event.metadata?.fromAgent;\n        const toAgent = event.metadata?.toAgent;\n        if (fromAgent && toAgent) {\n          handoffs.push({\n            id: `handoff-${handoffs.length}`,\n            from: fromAgent,\n            to: toAgent,\n            reason: event.metadata?.reason,\n            routingStrategy: event.metadata?.routingStrategy,\n            timestamp: event.timestamp,\n          });\n\n          // Set routing strategy on the target agent\n          if (toAgent && event.metadata?.routingStrategy) {\n            const targetAgent = agentMap.get(toAgent);\n            if (targetAgent) {\n              agentMap.set(toAgent, {\n                ...targetAgent,\n                routingStrategy: event.metadata.routingStrategy,\n              });\n            } else {\n              // Create placeholder for target agent if it doesn't exist yet\n              agentMap.set(toAgent, {\n                name: toAgent,\n                status: \"idle\",\n                toolCallCount: 0,\n                routingStrategy: event.metadata.routingStrategy,\n              });\n            }\n          }\n        }\n        break;\n      }\n\n      case \"agent-complete\": {\n        totalRounds = event.metadata?.totalRounds || totalRounds;\n        isActive = false;\n        break;\n      }\n\n      case \"tool-call-start\": {\n        // Track tool calls and create tool nodes\n        const toolName = event.metadata?.toolName || event.data?.toolName;\n        const agentName = currentAgent || event.metadata?.agent;\n\n        // Filter out internal orchestration tools from visualization\n        const isInternalTool = toolName === \"handoff_to_agent\"\n\n        // Only track valid tool names (not undefined, empty, \"unknown\", or internal)\n        if (\n          toolName &&\n          toolName !== \"unknown\" &&\n          toolName.trim() !== \"\" &&\n          !isInternalTool\n        ) {\n          const existing = toolMap.get(toolName);\n          toolMap.set(toolName, {\n            name: toolName,\n            agent: agentName,\n            description: event.metadata?.description || `${toolName} tool`,\n            callCount: (existing?.callCount || 0) + 1,\n          });\n\n          // Also increment agent's tool call count\n          if (agentName && agentMap.has(agentName)) {\n            const agent = agentMap.get(agentName);\n            if (agent) {\n              agentMap.set(agentName, {\n                ...agent,\n                toolCallCount: agent.toolCallCount + 1,\n              });\n            }\n          }\n        }\n        break;\n      }\n\n      case \"finish\": {\n        // Try to extract model from response metadata\n        if (currentAgent && agentMap.has(currentAgent)) {\n          const agent = agentMap.get(currentAgent);\n          const responseModel =\n            event.data?.response?.model || event.data?.model;\n          if (agent && responseModel) {\n            agentMap.set(currentAgent, {\n              ...agent,\n              model: responseModel,\n            });\n          }\n        }\n        break;\n      }\n    }\n  }\n\n  const nodes = Array.from(agentMap.entries()).map(([id, data]) => ({\n    id,\n    ...data,\n    duration:\n      data.startTime && data.endTime\n        ? (data.endTime - data.startTime) / 1000\n        : undefined,\n  }));\n\n  const tools = Array.from(toolMap.entries()).map(([id, data]) => ({\n    id,\n    ...data,\n  }));\n\n  const firstEvent = events.find(\n    (e) => e.type === \"agent-start\" || e.type === \"agent-handoff\",\n  );\n  const lastEvent = [...events]\n    .reverse()\n    .find((e) => e.type === \"agent-finish\" || e.type === \"agent-complete\");\n\n  const totalDuration =\n    firstEvent && lastEvent\n      ? (lastEvent.timestamp - firstEvent.timestamp) / 1000\n      : 0;\n\n  return {\n    nodes,\n    tools,\n    handoffs,\n    totalRounds,\n    totalDuration,\n    isActive,\n  };\n}\n\nexport function AgentFlowVisualization({\n  events,\n}: AgentFlowVisualizationProps) {\n  const agentFlowData = useMemo(() => processAgentEvents(events), [events]);\n\n  // Convert agent flow data to ReactFlow nodes and edges\n  const initialNodes: Node[] = useMemo(() => {\n    const agentNodes = agentFlowData.nodes.map((node, index) => ({\n      id: node.id,\n      type: \"agentNode\",\n      position: { x: index * 300, y: 50 },\n      data: {\n        ...node,\n        label: node.name,\n      },\n    }));\n\n    const toolNodes = agentFlowData.tools.map((tool) => {\n      // Position tool nodes below their associated agents\n      const agentIndex = agentFlowData.nodes.findIndex(\n        (n) => n.id === tool.agent,\n      );\n      return {\n        id: `tool-${tool.id}`,\n        type: \"toolNode\",\n        position: { x: agentIndex >= 0 ? agentIndex * 300 : 0, y: 280 },\n        data: {\n          ...tool,\n          label: tool.name,\n          description: `A ${tool.name} tool`,\n        },\n      };\n    });\n\n    return [...agentNodes, ...toolNodes];\n  }, [agentFlowData.nodes, agentFlowData.tools]);\n\n  const initialEdges: Edge[] = useMemo(() => {\n    // Agent handoff edges\n    const handoffEdges = agentFlowData.handoffs.map((handoff) => {\n      // Format label as \"Routing (strategy)\"\n      const label = handoff.routingStrategy\n        ? `Routing (${handoff.routingStrategy})`\n        : handoff.reason || \"Handoff\";\n\n      return {\n        id: handoff.id,\n        source: handoff.from,\n        target: handoff.to,\n        type: \"smoothstep\",\n        animated: true,\n        label,\n        style: { stroke: \"#3f3f46\", strokeWidth: 1.5 },\n        labelStyle: {\n          fill: \"#71717a\",\n          fontSize: 10,\n          fontWeight: 500,\n        },\n        labelBgStyle: { fill: \"#18181b\", fillOpacity: 0.95 },\n        markerEnd: {\n          type: MarkerType.ArrowClosed,\n          width: 16,\n          height: 16,\n          color: \"#3f3f46\",\n        },\n      };\n    });\n\n    // Agent to tool edges\n    const toolEdges = agentFlowData.tools.map((tool) => ({\n      id: `edge-${tool.agent}-${tool.id}`,\n      source: tool.agent || \"\",\n      target: `tool-${tool.id}`,\n      type: \"smoothstep\",\n      animated: true,\n      style: { stroke: \"#3f3f46\", strokeWidth: 1, strokeDasharray: \"5,5\" },\n      markerEnd: {\n        type: MarkerType.ArrowClosed,\n        width: 12,\n        height: 12,\n        color: \"#3f3f46\",\n      },\n    }));\n\n    return [...handoffEdges, ...toolEdges];\n  }, [agentFlowData.handoffs, agentFlowData.tools]);\n\n  // Apply dagre layout to nodes (LR = left-to-right tree layout)\n  const layoutedElements = useMemo(() => {\n    return getLayoutedElements(initialNodes, initialEdges, \"LR\");\n  }, [initialNodes, initialEdges]);\n\n  const [nodes, setNodes, onNodesChange] = useNodesState(\n    layoutedElements.nodes,\n  );\n  const [edges, setEdges, onEdgesChange] = useEdgesState(\n    layoutedElements.edges,\n  );\n\n  // Update nodes and edges when data changes\n  useEffect(() => {\n    const newLayout = getLayoutedElements(initialNodes, initialEdges, \"LR\");\n    setNodes(newLayout.nodes);\n    setEdges(newLayout.edges);\n  }, [initialNodes, initialEdges, setNodes, setEdges]);\n\n  const onInit = useCallback(() => {\n    // Optional: Add any initialization logic\n  }, []);\n\n  // Show empty state if no agent events\n  if (agentFlowData.nodes.length === 0) {\n    return (\n      <div\n        style={{\n          height: \"100%\",\n          width: \"100%\",\n          display: \"flex\",\n          alignItems: \"center\",\n          justifyContent: \"center\",\n          background: \"#09090b\",\n        }}\n      >\n        <div className=\"ai-devtools-state-explorer-empty-content\">\n          <div className=\"ai-devtools-state-explorer-empty-title\">\n            No Agent Activity\n          </div>\n          <div className=\"ai-devtools-state-explorer-empty-description\">\n            Start a conversation with an agent-based\n            <br /> system to see the orchestration flow here\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div style={{ height: \"100%\", width: \"100%\", background: \"#000000\" }}>\n      {/* ReactFlow canvas */}\n      <div style={{ height: \"100%\", width: \"100%\", position: \"relative\" }}>\n        <ReactFlow\n          nodes={nodes}\n          edges={edges}\n          onNodesChange={onNodesChange}\n          onEdgesChange={onEdgesChange}\n          onInit={onInit}\n          nodeTypes={nodeTypes}\n          fitView\n          fitViewOptions={{ padding: 0.3, maxZoom: 0.8 }}\n          minZoom={0.3}\n          maxZoom={2}\n          nodesConnectable={false}\n          edgesReconnectable={false}\n          edgesFocusable={false}\n          defaultEdgeOptions={{\n            type: \"smoothstep\",\n            animated: true,\n          }}\n        >\n          <Background\n            color=\"#3f3f46\"\n            gap={24}\n            size={1}\n            style={{ background: \"#000000\" }}\n          />\n        </ReactFlow>\n        \n        {/* Agent Stats Footer */}\n        <div style={{\n          position: \"absolute\",\n          bottom: 0,\n          left: 0,\n          right: 0,\n          height: \"24px\",\n          display: \"flex\",\n          justifyContent: \"flex-end\",\n          alignItems: \"center\",\n          padding: \"0 12px\",\n          fontFamily: \"Geist Mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace\",\n          fontSize: \"10px\",\n          color: \"#cccccc\"\n        }}>\n          <div style={{ display: \"flex\", gap: \"16px\", alignItems: \"center\" }}>\n            <div style={{ display: \"flex\", alignItems: \"center\", gap: \"4px\" }}>\n              <span style={{ fontWeight: 600, color: \"#ffffff\" }}>{agentFlowData.nodes.length}</span>\n              <span style={{ color: \"#666666\" }}>Agents</span>\n            </div>\n            <div style={{ display: \"flex\", alignItems: \"center\", gap: \"4px\" }}>\n              <span style={{ fontWeight: 600, color: \"#ffffff\" }}>{agentFlowData.handoffs.length}</span>\n              <span style={{ color: \"#666666\" }}>Handoffs</span>\n            </div>\n            <div style={{ display: \"flex\", alignItems: \"center\", gap: \"4px\" }}>\n              <span style={{ fontWeight: 600, color: \"#ffffff\" }}>{agentFlowData.totalRounds}</span>\n              <span style={{ color: \"#666666\" }}>Rounds</span>\n            </div>\n            <div style={{ display: \"flex\", alignItems: \"center\", gap: \"4px\" }}>\n              <span style={{ fontWeight: 600, color: \"#ffffff\" }}>\n                {agentFlowData.totalDuration > 0 \n                  ? `${(agentFlowData.totalDuration / 1000).toFixed(2)}s`\n                  : \"0s\"\n                }\n              </span>\n              <span style={{ color: \"#666666\" }}>Duration</span>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      {/* Add pulse animation styles */}\n      <style>\n        {`\n          @keyframes pulse {\n            0%, 100% {\n              opacity: 1;\n            }\n            50% {\n              opacity: 0.5;\n            }\n          }\n          \n          /* Dark mode ReactFlow overrides */\n          .react-flow__node {\n            cursor: pointer;\n          }\n          \n          .react-flow__edge-path {\n            stroke: #3f3f46;\n          }\n          \n          .react-flow__edge-text {\n            fill: #71717a;\n          }\n          \n          .react-flow__background {\n            background: #000000;\n          }\n          \n          .react-flow__pane {\n            cursor: default;\n          }\n          \n          /* Hide ReactFlow attribution */\n          .react-flow__panel.react-flow__attribution {\n            display: none;\n          }\n        `}\n      </style>\n    </div>\n  );\n}\n","/**\n * Debug logging utility for AI SDK Devtools\n * Provides controlled logging that only outputs when debug mode is enabled\n */\n\nexport function createDebugLogger(debug: boolean) {\n  return (...args: any[]) => {\n    if (debug) {\n      console.log(...args);\n    }\n  };\n}\n","import type { AIEvent } from \"../types\";\n\n/**\n * Parses a Server-Sent Event message and converts it to an AIEvent\n */\nexport function parseSSEEvent(\n  eventData: string,\n  eventType: string,\n  eventId: string,\n): AIEvent | null {\n  const timestamp = Date.now();\n\n  try {\n    // Handle [DONE] message\n    if (eventData.trim() === \"[DONE]\") {\n      return {\n        id: eventId,\n        timestamp,\n        type: \"stream-done\",\n        data: {\n          message: \"[DONE]\",\n        },\n      };\n    }\n\n    // Try to parse JSON data\n    let parsedData: any;\n    try {\n      parsedData = JSON.parse(eventData);\n    } catch {\n      // If not JSON, treat as plain text\n      parsedData = { message: eventData };\n    }\n\n    // Use the parsed data to create an event\n    return parseEventFromDataPart(parsedData, eventId);\n  } catch (error) {\n    // Create an error event for parsing failures\n    return {\n      id: eventId,\n      timestamp,\n      type: \"error\",\n      data: {\n        error:\n          error instanceof Error ? error.message : \"Failed to parse SSE event\",\n        originalData: eventData,\n        originalType: eventType,\n      },\n    };\n  }\n}\n\n/**\n * Parses a data part from the AI stream and converts it to an AIEvent\n * This function handles AI SDK stream parts and custom event types\n */\nexport function parseEventFromDataPart(\n  dataPart: any,\n  eventId: string,\n): AIEvent | null {\n  const timestamp = Date.now();\n\n  // Handle different types of data parts\n  if (!dataPart || typeof dataPart !== \"object\") {\n    return null;\n  }\n\n  // Check if this is a standard AI SDK stream part\n  if (dataPart.type && isAIStreamPart(dataPart)) {\n    return parseAIStreamPart(dataPart, eventId, timestamp);\n  }\n\n  // Tool call events - these come from the AI SDK\n  if (dataPart.type?.startsWith(\"tool-call\")) {\n    const toolName =\n      extractToolNameFromType(dataPart.type) ||\n      extractToolNameFromData(dataPart) ||\n      \"unknown\";\n\n    if (dataPart.type.endsWith(\"-start\")) {\n      return {\n        id: eventId,\n        timestamp,\n        type: \"tool-call-start\",\n        data: {\n          toolName,\n          toolParams: dataPart.args || dataPart.parameters || {},\n        },\n        metadata: {\n          toolName,\n          toolParams: dataPart.args || dataPart.parameters || {},\n          messageId: dataPart.id,\n        },\n      };\n    }\n\n    if (dataPart.type.endsWith(\"-result\") || dataPart.type.includes(\"result\")) {\n      return {\n        id: eventId,\n        timestamp,\n        type: \"tool-call-result\",\n        data: {\n          toolName,\n          result: dataPart.result || dataPart.data,\n          duration: dataPart.duration,\n        },\n        metadata: {\n          toolName,\n          duration: dataPart.duration,\n          messageId: dataPart.id,\n        },\n      };\n    }\n\n    if (dataPart.type.endsWith(\"-error\") || dataPart.type.includes(\"error\")) {\n      return {\n        id: eventId,\n        timestamp,\n        type: \"tool-call-error\",\n        data: {\n          toolName,\n          error: dataPart.error || dataPart.message || \"Tool execution failed\",\n        },\n        metadata: {\n          toolName,\n          messageId: dataPart.id,\n        },\n      };\n    }\n  }\n\n  // Tool input events\n  if (dataPart.type === \"tool-input-start\") {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"tool-call-start\",\n      data: {\n        toolName: dataPart.toolName,\n        toolCallId: dataPart.toolCallId,\n        toolParams: {},\n      },\n      metadata: {\n        toolName: dataPart.toolName,\n        toolCallId: dataPart.toolCallId,\n        messageId: dataPart.id,\n      },\n    };\n  }\n\n  if (dataPart.type === \"tool-input-delta\") {\n    const toolName =\n      dataPart.toolName || extractToolNameFromData(dataPart) || \"unknown\";\n    return {\n      id: eventId,\n      timestamp,\n      type: \"tool-call-start\",\n      data: {\n        toolName,\n        toolCallId: dataPart.toolCallId,\n        inputDelta: dataPart.inputTextDelta,\n      },\n      metadata: {\n        toolName,\n        toolCallId: dataPart.toolCallId,\n        messageId: dataPart.id,\n      },\n    };\n  }\n\n  if (dataPart.type === \"tool-input-available\") {\n    const toolName =\n      dataPart.toolName || extractToolNameFromData(dataPart) || \"unknown\";\n    return {\n      id: eventId,\n      timestamp,\n      type: \"tool-call-start\",\n      data: {\n        toolName,\n        toolCallId: dataPart.toolCallId,\n        toolParams: dataPart.input || {},\n      },\n      metadata: {\n        toolName,\n        toolCallId: dataPart.toolCallId,\n        messageId: dataPart.id,\n      },\n    };\n  }\n\n  if (dataPart.type === \"tool-output-available\") {\n    // For tool-output-available, we might not have toolName in the data\n    // This will be resolved by the session grouping logic\n    const toolName =\n      dataPart.toolName || extractToolNameFromData(dataPart) || \"unknown\";\n    return {\n      id: eventId,\n      timestamp,\n      type: \"tool-call-result\",\n      data: {\n        toolName,\n        toolCallId: dataPart.toolCallId,\n        result: dataPart.output,\n        preliminary: dataPart.preliminary,\n      },\n      metadata: {\n        toolName,\n        toolCallId: dataPart.toolCallId,\n        preliminary: dataPart.preliminary,\n        messageId: dataPart.id,\n      },\n    };\n  }\n\n  // Tool events with different format\n  if (dataPart.type?.startsWith(\"tool-\")) {\n    const toolName = dataPart.type.replace(\"tool-\", \"\");\n\n    return {\n      id: eventId,\n      timestamp,\n      type: \"tool-call-result\",\n      data: {\n        toolName,\n        result: dataPart.output || dataPart.data,\n        duration: dataPart.duration,\n      },\n      metadata: {\n        toolName,\n        duration: dataPart.duration,\n        messageId: dataPart.id,\n      },\n    };\n  }\n\n  // New streaming event types\n  if (dataPart.type === \"start\") {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"start\",\n      data: dataPart,\n    };\n  }\n\n  if (dataPart.type === \"reasoning-start\") {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"reasoning-start\",\n      data: dataPart,\n      metadata: {\n        messageId: dataPart.id,\n      },\n    };\n  }\n\n  if (dataPart.type === \"reasoning-delta\") {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"reasoning-delta\",\n      data: {\n        id: dataPart.id,\n        delta: dataPart.delta || \"\",\n      },\n      metadata: {\n        messageId: dataPart.id,\n      },\n    };\n  }\n\n  if (dataPart.type === \"reasoning-end\") {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"reasoning-end\",\n      data: dataPart,\n      metadata: {\n        messageId: dataPart.id,\n      },\n    };\n  }\n\n  if (dataPart.type === \"start-step\") {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"start-step\",\n      data: {\n        step: dataPart.step || \"unknown\",\n      },\n    };\n  }\n\n  if (dataPart.type === \"text-start\") {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"text-start\",\n      data: {\n        id: dataPart.id,\n        providerMetadata: dataPart.providerMetadata,\n      },\n      metadata: {\n        messageId: dataPart.id,\n      },\n    };\n  }\n\n  if (dataPart.type === \"text-delta\") {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"text-delta\",\n      data: {\n        id: dataPart.id,\n        delta: dataPart.delta || \"\",\n      },\n      metadata: {\n        messageId: dataPart.id,\n      },\n    };\n  }\n\n  if (dataPart.type === \"text-end\") {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"text-end\",\n      data: {\n        id: dataPart.id,\n      },\n      metadata: {\n        messageId: dataPart.id,\n      },\n    };\n  }\n\n  if (dataPart.type === \"finish-step\") {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"finish-step\",\n      data: {\n        step: dataPart.step || \"unknown\",\n      },\n    };\n  }\n\n  if (dataPart.type === \"finish\") {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"finish\",\n      data: {\n        reason: dataPart.reason,\n      },\n    };\n  }\n\n  // Handle agent orchestration data events (from @ai-sdk-tools/agents)\n  if (dataPart.type === \"data-agent-status\") {\n    const agentData = dataPart.data || {};\n    return {\n      id: eventId,\n      timestamp,\n      type:\n        agentData.status === \"executing\" || agentData.status === \"routing\"\n          ? \"agent-start\"\n          : agentData.status === \"completing\"\n            ? \"agent-finish\"\n            : \"unknown\",\n      data: agentData,\n      metadata: {\n        agent: agentData.agent,\n        originalType: dataPart.type,\n      },\n    };\n  }\n\n  // Handle agent handoff events\n  if (dataPart.type === \"data-agent-handoff\") {\n    const handoffData = dataPart.data || {};\n    return {\n      id: eventId,\n      timestamp,\n      type: \"agent-handoff\",\n      data: handoffData,\n      metadata: {\n        fromAgent: handoffData.from,\n        toAgent: handoffData.to,\n        reason: handoffData.reason,\n        routingStrategy: handoffData.routingStrategy,\n        originalType: dataPart.type,\n      },\n    };\n  }\n\n  // Handle custom data types (data-canvas, data-weather, etc.)\n  if (dataPart.type?.startsWith(\"data-\")) {\n    const dataType = dataPart.type.replace(\"data-\", \"\");\n    return {\n      id: eventId,\n      timestamp,\n      type: \"custom-data\",\n      data: {\n        dataType,\n        data: dataPart.data,\n        id: dataPart.id,\n        transient: dataPart.transient,\n      },\n      metadata: {\n        originalType: dataPart.type,\n        dataType,\n        transient: dataPart.transient,\n      },\n    };\n  }\n\n  // Handle [DONE] message\n  if (\n    dataPart === \"[DONE]\" ||\n    (typeof dataPart === \"string\" && dataPart.trim() === \"[DONE]\")\n  ) {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"stream-done\",\n      data: {\n        message: \"[DONE]\",\n      },\n    };\n  }\n\n  // Message events\n  if (\n    dataPart.type === \"text\" ||\n    (dataPart.type === \"text-delta\" && !dataPart.delta)\n  ) {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"message-chunk\",\n      data: {\n        text: dataPart.text || dataPart.textDelta || \"\",\n        messageId: dataPart.id,\n      },\n      metadata: {\n        messageId: dataPart.id,\n      },\n    };\n  }\n\n  // Message start/complete events\n  if (dataPart.type === \"message-start\") {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"message-start\",\n      data: dataPart,\n      metadata: {\n        messageId: dataPart.id,\n      },\n    };\n  }\n\n  if (dataPart.type === \"message-complete\" || dataPart.type === \"finish\") {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"message-complete\",\n      data: dataPart,\n      metadata: {\n        messageId: dataPart.id,\n      },\n    };\n  }\n\n  // Error events\n  if (dataPart.type === \"error\" || dataPart.error) {\n    return {\n      id: eventId,\n      timestamp,\n      type: \"error\",\n      data: {\n        error: dataPart.error || dataPart.message || \"Unknown error\",\n        details: dataPart,\n      },\n    };\n  }\n\n  // Unknown/generic events - capture everything else\n  return {\n    id: eventId,\n    timestamp,\n    type: \"unknown\",\n    data: dataPart,\n    metadata: {\n      originalType: dataPart.type,\n      messageId: dataPart.id,\n    },\n  };\n}\n\n/**\n * Extracts tool name from event type like 'tool-call-get-expenses-start'\n * Also handles AI SDK stream events with tool names in data\n */\nfunction extractToolNameFromType(type: string): string {\n  // Remove 'tool-call-' prefix and '-start'/'-result'/'error' suffix\n  let toolName = type.replace(/^tool-call-/, \"\");\n  toolName = toolName.replace(/-(?:start|result|error)$/, \"\");\n  return toolName;\n}\n\n/**\n * Checks if a data part is a standard AI SDK stream part\n */\nfunction isAIStreamPart(dataPart: any): boolean {\n  const aiStreamTypes = [\n    \"text-delta\",\n    \"text-done\",\n    \"tool-call\",\n    \"tool-result\",\n    \"data\",\n    \"error\",\n    \"finish\",\n  ];\n  return aiStreamTypes.includes(dataPart.type);\n}\n\n/**\n * Parses a standard AI SDK stream part\n */\nfunction parseAIStreamPart(\n  dataPart: any,\n  eventId: string,\n  timestamp: number,\n): AIEvent | null {\n  switch (dataPart.type) {\n    case \"text-delta\":\n      return {\n        id: eventId,\n        timestamp,\n        type: \"text-delta\",\n        data: dataPart,\n        metadata: {\n          messageId: dataPart.id,\n        },\n      };\n\n    case \"text-done\":\n      return {\n        id: eventId,\n        timestamp,\n        type: \"text-end\",\n        data: dataPart,\n        metadata: {\n          messageId: dataPart.id,\n        },\n      };\n\n    case \"tool-call\":\n      return {\n        id: eventId,\n        timestamp,\n        type: \"tool-call-start\",\n        data: dataPart,\n        metadata: {\n          toolName: dataPart.toolName,\n          toolCallId: dataPart.toolCallId,\n          toolParams: dataPart.args || {},\n        },\n      };\n\n    case \"tool-result\":\n      return {\n        id: eventId,\n        timestamp,\n        type: \"tool-call-result\",\n        data: dataPart,\n        metadata: {\n          toolName: dataPart.toolName,\n          toolCallId: dataPart.toolCallId,\n          duration: dataPart.duration,\n        },\n      };\n\n    case \"data\":\n      return {\n        id: eventId,\n        timestamp,\n        type: \"custom-data\", // Custom data events\n        data: dataPart,\n        metadata: {\n          originalType: dataPart.type,\n        },\n      };\n\n    case \"error\":\n      return {\n        id: eventId,\n        timestamp,\n        type: \"error\",\n        data: dataPart,\n        metadata: {\n          originalType: dataPart.type,\n        },\n      };\n\n    case \"finish\":\n      return {\n        id: eventId,\n        timestamp,\n        type: \"finish\",\n        data: dataPart,\n        metadata: {\n          originalType: dataPart.type,\n        },\n      };\n\n    default:\n      return null;\n  }\n}\n\n/**\n * Extracts tool name from AI SDK stream data\n */\nfunction extractToolNameFromData(dataPart: any): string | null {\n  // Check for tool name in various common locations\n  if (dataPart.toolName) return dataPart.toolName;\n  if (dataPart.name) return dataPart.name;\n  if (dataPart.tool) return dataPart.tool;\n  if (dataPart.function) return dataPart.function;\n\n  // Check in nested objects\n  if (dataPart.toolCall?.name) return dataPart.toolCall.name;\n  if (dataPart.toolCall?.function) return dataPart.toolCall.function;\n\n  // Check for tool name in args or parameters\n  if (dataPart.args?.toolName) return dataPart.args.toolName;\n  if (dataPart.parameters?.toolName) return dataPart.parameters.toolName;\n  if (dataPart.input?.toolName) return dataPart.input.toolName;\n\n  // Check for function name in args\n  if (dataPart.args?.function) return dataPart.args.function;\n  if (dataPart.args?.name) return dataPart.args.name;\n\n  // Check for tool name in metadata\n  if (dataPart.metadata?.toolName) return dataPart.metadata.toolName;\n\n  return null;\n}\n\n/**\n * Formats event data for display\n */\nexport function formatEventData(event: AIEvent): string {\n  try {\n    return JSON.stringify(event.data, null, 2);\n  } catch {\n    return String(event.data);\n  }\n}\n\n/**\n * Gets a human-readable description of the event\n */\nexport function getEventDescription(event: AIEvent): string {\n  switch (event.type) {\n    case \"tool-call-start\": {\n      const toolName =\n        event.data.toolName || event.metadata?.toolName || \"unknown\";\n      const inputDelta = event.data.inputDelta;\n      if (inputDelta) {\n        return `TOOL INPUT ${toolName} \"${inputDelta}\"`;\n      }\n      return `TOOL START ${toolName}`;\n    }\n\n    case \"tool-call-result\": {\n      const toolName =\n        event.data.toolName || event.metadata?.toolName || \"unknown\";\n      const duration = event.metadata?.duration\n        ? ` (${event.metadata.duration}ms)`\n        : \"\";\n      const preliminary = event.metadata?.preliminary ? \" [preliminary]\" : \"\";\n      return `TOOL DONE ${toolName}${duration}${preliminary}`;\n    }\n\n    case \"tool-call-error\":\n      return `TOOL ERROR ${event.metadata?.toolName || event.data.toolName || \"unknown\"}`;\n\n    case \"message-start\":\n      return \"MESSAGE START\";\n\n    case \"message-chunk\": {\n      const textPreview = event.data.text?.substring(0, 30) || \"\";\n      return `CHUNK \"${textPreview}${textPreview.length >= 30 ? \"...\" : \"\"}\"`;\n    }\n\n    case \"message-complete\":\n      return \"MESSAGE DONE\";\n\n    case \"start\":\n      return \"STREAM START\";\n\n    case \"reasoning-start\":\n      return \"REASONING START\";\n\n    case \"reasoning-delta\": {\n      const deltaPreview = event.data.delta?.substring(0, 20) || \"\";\n      return `REASONING \"${deltaPreview}${deltaPreview.length >= 20 ? \"...\" : \"\"}\"`;\n    }\n\n    case \"reasoning-end\":\n      return \"REASONING END\";\n\n    case \"start-step\":\n      return \"STEP START\";\n\n    case \"text-start\":\n      return `TEXT START ${event.data.id}`;\n\n    case \"text-delta\": {\n      const deltaPreview = event.data.delta?.substring(0, 20) || \"\";\n      return `TEXT \"${deltaPreview}${deltaPreview.length >= 20 ? \"...\" : \"\"}\"`;\n    }\n\n    case \"text-end\":\n      return `TEXT END ${event.data.id}`;\n\n    case \"finish-step\":\n      return \"STEP DONE\";\n\n    case \"finish\": {\n      return `STREAM DONE${event.data.reason ? ` (${event.data.reason})` : \"\"}`;\n    }\n\n    case \"stream-done\":\n      return \"STREAM [DONE]\";\n\n    case \"error\":\n      return `ERROR ${event.data.error}`;\n\n    case \"custom-data\": {\n      const dataType =\n        event.metadata?.dataType || event.data.dataType || \"data\";\n      const isTransient = event.metadata?.transient || event.data.transient;\n      const transientLabel = isTransient ? \" (transient)\" : \"\";\n      return `DATA ${dataType.toUpperCase()}${transientLabel}`;\n    }\n\n    case \"agent-start\":\n      return `AGENT START ${event.metadata?.agent || \"unknown\"}`;\n\n    case \"agent-finish\":\n      return `AGENT FINISH ${event.metadata?.agent || \"unknown\"}`;\n\n    case \"agent-error\":\n      return `AGENT ERROR ${event.metadata?.agent || \"unknown\"}`;\n\n    case \"agent-handoff\":\n      return `HANDOFF ${event.metadata?.fromAgent || \"unknown\"} → ${event.metadata?.toAgent || \"unknown\"}`;\n\n    case \"agent-complete\":\n      return `ORCHESTRATION COMPLETE (${event.metadata?.totalRounds || 0} rounds)`;\n\n    case \"agent-step\":\n      return `AGENT STEP ${event.metadata?.agent || \"unknown\"}`;\n\n    case \"unknown\":\n      return `UNKNOWN ${event.metadata?.originalType || \"no type\"}`;\n\n    default:\n      return String(event.type).toUpperCase();\n  }\n}\n","import type { AIEvent } from \"../types\";\nimport { createDebugLogger } from \"./debug\";\nimport { parseSSEEvent } from \"./event-parser\";\n\nexport interface StreamInterceptorOptions {\n  onEvent: (event: AIEvent) => void;\n  endpoints: string[];\n  enabled: boolean;\n  debug?: boolean;\n}\n\nexport class StreamInterceptor {\n  private originalFetch: typeof fetch;\n  private options: StreamInterceptorOptions;\n  private eventIdCounter = 0;\n  private isPatched = false;\n  private hasErrors = false; // Safety flag to disable on errors\n\n  constructor(options: StreamInterceptorOptions) {\n    this.originalFetch = window.fetch.bind(window);\n    this.options = options;\n\n    const debugLog = createDebugLogger(options.debug || false);\n    debugLog(\"[AI Devtools] StreamInterceptor constructor completed\");\n  }\n\n  private generateEventId(): string {\n    return `sse_event_${Date.now()}_${this.eventIdCounter++}`;\n  }\n\n  private shouldInterceptUrl(url: string): boolean {\n    // More flexible matching - check if URL contains any of the endpoints\n    // or if it's a chat-related endpoint\n    const shouldIntercept = this.options.endpoints.some((endpoint) => {\n      // Direct match\n      if (url.includes(endpoint)) {\n        return true;\n      }\n\n      return false;\n    });\n\n    return shouldIntercept;\n  }\n\n  private async interceptStreamResponse(response: Response): Promise<Response> {\n    if (!response.body) {\n      return response;\n    }\n\n    try {\n      const reader = response.body.getReader();\n      const decoder = new TextDecoder();\n\n      // Create a new readable stream that we can intercept\n      const stream = new ReadableStream({\n        start: (controller) => {\n          const pump = async (): Promise<void> => {\n            try {\n              const { done, value } = await reader.read();\n\n              if (done) {\n                controller.close();\n                return;\n              }\n\n              // CRITICAL: Pass the original chunk through FIRST\n              // This ensures the original stream is never blocked\n              controller.enqueue(value);\n\n              try {\n                const chunk = decoder.decode(value, { stream: true });\n                this.parseSSEChunk(chunk);\n              } catch (parseError) {\n                // Log parsing errors but don't break the stream\n              }\n\n              return pump();\n            } catch (error) {\n              // Forward stream errors to the original consumer\n              controller.error(error);\n            }\n          };\n\n          return pump();\n        },\n      });\n\n      // Return a new response with our intercepted stream\n      // Preserve ALL original response properties\n      return new Response(stream, {\n        status: response.status,\n        statusText: response.statusText,\n        headers: new Headers(response.headers), // Clone headers to avoid mutation\n      });\n    } catch (error) {\n      // If anything goes wrong with our interception, return the original response\n      return response;\n    }\n  }\n\n  private parseSSEChunk(chunk: string): void {\n    const debugLog = createDebugLogger(this.options.debug || false);\n\n    // Split chunk into lines\n    const lines = chunk.split(\"\\n\");\n    let eventType = \"\";\n    let eventData = \"\";\n\n    for (const line of lines) {\n      const trimmedLine = line.trim();\n\n      if (trimmedLine === \"\") {\n        // Empty line indicates end of event\n        if (eventData) {\n          const event = parseSSEEvent(\n            eventData,\n            eventType,\n            this.generateEventId(),\n          );\n          if (event) {\n            debugLog(\"[AI Devtools] Event parsed successfully:\", event.type);\n            this.options.onEvent(event);\n          }\n        }\n        eventType = \"\";\n        eventData = \"\";\n      } else if (trimmedLine.startsWith(\"event:\")) {\n        eventType = trimmedLine.substring(6).trim();\n      } else if (trimmedLine.startsWith(\"data:\")) {\n        const data = trimmedLine.substring(5).trim();\n        eventData += (eventData ? \"\\n\" : \"\") + data;\n      }\n    }\n\n    // Handle case where chunk doesn't end with empty line\n    if (eventData) {\n      const event = parseSSEEvent(eventData, eventType, this.generateEventId());\n      if (event) {\n        debugLog(\"[AI Devtools] Event parsed successfully:\", event.type);\n        this.options.onEvent(event);\n      }\n    }\n  }\n\n  public patch(): void {\n    const debugLog = createDebugLogger(this.options.debug || false);\n\n    debugLog(\"[AI Devtools] StreamInterceptor.patch() called\");\n\n    if (this.isPatched || !this.options.enabled) {\n      debugLog(\"[AI Devtools] Patch skipped - already patched or not enabled\");\n      return;\n    }\n\n    (window.fetch as any) = async (\n      input: RequestInfo | URL,\n      init?: RequestInit,\n    ): Promise<Response> => {\n      const url = typeof input === \"string\" ? input : input.toString();\n\n      // Safety: Skip interception if we've had errors\n      if (this.hasErrors) {\n        return this.originalFetch(input, init);\n      }\n\n      // Check if this is a request we should intercept\n      if (this.shouldInterceptUrl(url)) {\n        debugLog(\"[AI Devtools] Intercepting fetch request:\", url);\n        try {\n          const response = await this.originalFetch(input, init);\n\n          // Check if this is a streaming response\n          const contentType = response.headers.get(\"content-type\");\n\n          if (\n            contentType &&\n            (contentType.includes(\"text/event-stream\") ||\n              contentType.includes(\"text/plain\"))\n          ) {\n            // SAFETY: Only intercept if response is successful and has a body\n            if (response.ok && response.body) {\n              try {\n                return await this.interceptStreamResponse(response);\n              } catch (interceptError) {\n                // If interception fails, disable future interceptions and return original response\n                this.hasErrors = true;\n                return response;\n              }\n            } else {\n              // Return original response if not successful or no body\n              return response;\n            }\n          } else {\n            // Return the original response for non-streaming responses\n            return response;\n          }\n        } catch (error) {\n          // Create an error event\n          const errorEvent: AIEvent = {\n            id: this.generateEventId(),\n            timestamp: Date.now(),\n            type: \"error\",\n            data: {\n              error:\n                error instanceof Error\n                  ? error.message\n                  : \"Network request failed\",\n              url,\n              method: init?.method || \"GET\",\n            },\n          };\n          this.options.onEvent(errorEvent);\n          throw error;\n        }\n      }\n\n      // For non-intercepted requests, use original fetch\n      return this.originalFetch(input, init);\n    };\n\n    this.isPatched = true;\n  }\n\n  public unpatch(): void {\n    if (!this.isPatched) {\n      return;\n    }\n\n    window.fetch = this.originalFetch;\n    this.isPatched = false;\n  }\n\n  public updateOptions(options: Partial<StreamInterceptorOptions>): void {\n    this.options = { ...this.options, ...options };\n\n    if (!this.options.enabled && this.isPatched) {\n      this.unpatch();\n    } else if (this.options.enabled && !this.isPatched) {\n      this.patch();\n    }\n  }\n\n  public isActive(): boolean {\n    return this.isPatched;\n  }\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type {\n  AIEvent,\n  AIEventType,\n  UseAIDevtoolsOptions,\n  UseAIDevtoolsReturn,\n} from \"../types\";\nimport { createDebugLogger } from \"../utils/debug\";\nimport { StreamInterceptor } from \"../utils/stream-interceptor\";\n\nexport function useAIDevtools(\n  options: UseAIDevtoolsOptions = {},\n): UseAIDevtoolsReturn {\n  const {\n    enabled = true,\n    maxEvents = 1000,\n    onEvent,\n    debug = false,\n    streamCapture,\n    throttle,\n  } = options;\n\n  const [events, setEvents] = useState<AIEvent[]>([]);\n  const [isCapturing, setIsCapturing] = useState(true); // Always start capturing by default\n  const streamInterceptor = useRef<StreamInterceptor | null>(null);\n\n  const debugLog = createDebugLogger(debug);\n\n  // Throttling state\n  const throttleQueue = useRef<AIEvent[]>([]);\n  const throttleTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n  const lastEventTimes = useRef<Map<string, number>>(new Map());\n\n  // Check if event should be throttled\n  const shouldThrottleEvent = useCallback(\n    (event: AIEvent): boolean => {\n      if (!throttle?.enabled) return false;\n\n      const { includeTypes, excludeTypes } = throttle;\n\n      // If includeTypes is specified, only throttle those types\n      if (includeTypes && includeTypes.length > 0) {\n        return includeTypes.includes(event.type);\n      }\n\n      // If excludeTypes is specified, don't throttle those types\n      if (excludeTypes && excludeTypes.length > 0) {\n        return !excludeTypes.includes(event.type);\n      }\n\n      // Default: throttle all events\n      return true;\n    },\n    [throttle],\n  );\n\n  // Process throttled events\n  const processThrottledEvents = useCallback(() => {\n    if (throttleQueue.current.length === 0) return;\n\n    const eventsToProcess = [...throttleQueue.current];\n    throttleQueue.current = [];\n\n    setEvents((prev) => {\n      const newEvents = [...prev, ...eventsToProcess];\n      // Keep only the most recent events\n      if (newEvents.length > maxEvents) {\n        return newEvents.slice(-maxEvents);\n      }\n      return newEvents;\n    });\n\n    // Call the optional event handler for each event\n    for (const event of eventsToProcess) {\n      onEvent?.(event);\n    }\n  }, [maxEvents, onEvent]);\n\n  // Add event to the list (with throttling)\n  const addEvent = useCallback(\n    (event: AIEvent) => {\n      debugLog(false, \"[AI Devtools] addEvent called:\", event.type); // Only log event type, not full event\n\n      if (!isCapturing) {\n        debugLog(false, \"[AI Devtools] addEvent skipped - not capturing\");\n        return;\n      }\n\n      // Check if this event should be throttled\n      if (shouldThrottleEvent(event)) {\n        const throttleKey = `${event.type}_${event.metadata?.messageId || \"global\"}`;\n        const now = Date.now();\n        const lastTime = lastEventTimes.current.get(throttleKey) || 0;\n        const interval = throttle?.interval || 100;\n\n        if (now - lastTime < interval) {\n          // Add to throttle queue\n          throttleQueue.current.push(event);\n\n          debugLog(false, \"[AI Devtools] Event throttled:\", event.type);\n\n          // Set up timer if not already running\n          if (!throttleTimer.current) {\n            throttleTimer.current = setTimeout(() => {\n              processThrottledEvents();\n              throttleTimer.current = null;\n            }, interval);\n          }\n          return;\n        }\n\n        // Update last event time\n        lastEventTimes.current.set(throttleKey, now);\n      }\n\n      debugLog(false, \"[AI Devtools] Adding event:\", event.type); // Only log essential info\n\n      setEvents((prev) => {\n        const newEvents = [...prev, event];\n        // Keep only the most recent events\n        if (newEvents.length > maxEvents) {\n          return newEvents.slice(-maxEvents);\n        }\n\n        debugLog(false, \"[AI Devtools] Events updated:\", newEvents.length); // Only log count\n\n        return newEvents;\n      });\n\n      // Call the optional event handler\n      onEvent?.(event);\n    },\n    [\n      isCapturing,\n      maxEvents,\n      onEvent,\n      shouldThrottleEvent,\n      throttle,\n      processThrottledEvents,\n    ],\n  );\n\n  // Clear all events\n  const clearEvents = useCallback(() => {\n    setEvents([]);\n  }, []);\n\n  // Toggle capturing\n  const toggleCapturing = useCallback(() => {\n    setIsCapturing((prev: boolean) => {\n      const newCapturing = !prev;\n\n      // Update stream interceptor if it exists\n      if (streamInterceptor.current) {\n        streamInterceptor.current.updateOptions({ enabled: newCapturing });\n      }\n\n      return newCapturing;\n    });\n  }, []);\n\n  // Filter events\n  const filterEvents = useCallback(\n    (\n      filterTypes?: AIEventType[],\n      searchQuery?: string,\n      toolNames?: string[],\n    ) => {\n      return events.filter((event) => {\n        // Filter by type\n        if (\n          filterTypes &&\n          filterTypes.length > 0 &&\n          !filterTypes.includes(event.type)\n        ) {\n          return false;\n        }\n\n        // Filter by tool name\n        if (toolNames && toolNames.length > 0) {\n          const eventToolName = event.metadata?.toolName;\n          if (!eventToolName || !toolNames.includes(eventToolName)) {\n            return false;\n          }\n        }\n\n        // Filter by search query\n        if (searchQuery?.trim()) {\n          const query = searchQuery.toLowerCase().trim();\n          const eventData = JSON.stringify(event.data).toLowerCase();\n          const eventMetadata = JSON.stringify(\n            event.metadata || {},\n          ).toLowerCase();\n\n          if (!eventData.includes(query) && !eventMetadata.includes(query)) {\n            return false;\n          }\n        }\n\n        return true;\n      });\n    },\n    [events],\n  );\n\n  // Get unique tool names from events\n  const getUniqueToolNames = useCallback(() => {\n    const toolNames = new Set<string>();\n    for (const event of events) {\n      if (event.metadata?.toolName) {\n        toolNames.add(event.metadata.toolName);\n      }\n    }\n    return Array.from(toolNames).sort();\n  }, [events]);\n\n  // Get event statistics\n  const getEventStats = useCallback(() => {\n    const stats = {\n      total: events.length,\n      byType: {} as Record<AIEventType, number>,\n      byTool: {} as Record<string, number>,\n      timeRange:\n        events.length > 0\n          ? {\n              start: Math.min(...events.map((e) => e.timestamp)),\n              end: Math.max(...events.map((e) => e.timestamp)),\n            }\n          : null,\n    };\n\n    for (const event of events) {\n      // Count by type\n      stats.byType[event.type] = (stats.byType[event.type] || 0) + 1;\n\n      // Count by tool\n      if (event.metadata?.toolName) {\n        const toolName = event.metadata.toolName;\n        stats.byTool[toolName] = (stats.byTool[toolName] || 0) + 1;\n      }\n    }\n\n    return stats;\n  }, [events]);\n\n  // Initialize and manage stream interceptor\n  useEffect(() => {\n    const streamConfig = streamCapture || {\n      enabled,\n      endpoints: [\"/api/chat\"], // Exact match for most common endpoint\n      autoConnect: true, // Always auto-connect by default\n    };\n\n    debugLog(\"[AI Devtools] Stream interceptor effect running\", {\n      enabled: streamConfig.enabled,\n      autoConnect: streamConfig.autoConnect,\n      endpoints: streamConfig.endpoints,\n      isCapturing,\n    });\n\n    if (streamConfig.enabled && streamConfig.autoConnect) {\n      debugLog(\"[AI Devtools] Creating stream interceptor...\");\n\n      // Create a wrapper function to ensure we're using the latest addEvent\n      const eventHandler = (event: AIEvent) => {\n        debugLog(\"[AI Devtools] Event captured:\", {\n          type: event.type,\n          timestamp: event.timestamp,\n          hasData: !!event.data,\n        });\n        addEvent(event);\n      };\n\n      // Initialize stream interceptor\n      streamInterceptor.current = new StreamInterceptor({\n        onEvent: eventHandler,\n        endpoints: streamConfig.endpoints || [\"/api/chat\"],\n        enabled: isCapturing,\n        debug,\n      });\n\n      debugLog(\"[AI Devtools] Stream interceptor created, patching fetch...\");\n\n      // Start intercepting\n      streamInterceptor.current.patch();\n\n      debugLog(\"[AI Devtools] Fetch patched successfully\");\n\n      // Cleanup on unmount\n      return () => {\n        debugLog(\"[AI Devtools] Cleaning up stream interceptor\");\n        if (streamInterceptor.current) {\n          streamInterceptor.current.unpatch();\n          streamInterceptor.current = null;\n        }\n\n        // Cleanup throttle timer\n        if (throttleTimer.current) {\n          clearTimeout(throttleTimer.current);\n          throttleTimer.current = null;\n        }\n      };\n    }\n  }, [addEvent, isCapturing, streamCapture, enabled]);\n\n  return {\n    events,\n    isCapturing,\n    clearEvents,\n    toggleCapturing,\n    filterEvents,\n    getUniqueToolNames,\n    getEventStats,\n  };\n}\n","\"use client\";\n\ninterface DevtoolsButtonProps {\n  onToggle: () => void;\n  eventCount: number;\n  hasNewEvents: boolean;\n  className?: string;\n}\n\nexport function DevtoolsButton({\n  onToggle,\n  eventCount,\n  hasNewEvents,\n  className = \"\",\n}: DevtoolsButtonProps) {\n  return (\n    <button\n      type=\"button\"\n      onClick={onToggle}\n      className={`ai-devtools-button ${hasNewEvents ? \"receiving-events\" : \"\"} ${className}`}\n      title={`ai-devtools [${eventCount}]`}\n    >\n      {/* AI SDK Tools Logo */}\n      <svg\n        xmlns=\"http://www.w3.org/2000/svg\"\n        width=\"20\"\n        height=\"20\"\n        fill=\"none\"\n        viewBox=\"0 0 95 83\"\n        className=\"ai-devtools-button-icon\"\n      >\n        <title>AI SDK Tools Logo</title>\n        <path fill=\"url(#a)\" d=\"m22 .5 16 52L31 83H0L22 .5Z\" />\n        <path fill=\"#D9D9D9\" d=\"M62 .5H30l13 41.25L56 83h31L62 .5Z\" />\n        <defs>\n          <linearGradient\n            id=\"a\"\n            x1={21.5}\n            x2={21.5}\n            y1={0.5}\n            y2={83}\n            gradientUnits=\"userSpaceOnUse\"\n          >\n            <stop stopColor=\"#737373\" />\n            <stop offset={1} stopColor=\"#D9D9D9\" />\n          </linearGradient>\n        </defs>\n      </svg>\n    </button>\n  );\n}\n","\"use client\";\n\nimport React, {\n  useCallback,\n  useContext,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\n\n// Type for the store API - we'll use any to avoid complex type issues\ntype StoreApi = any;\n\n// Import the store context directly - this will be resolved by the bundler\n// The bundler will handle the optional dependency resolution\nimport { ChatStoreContext as ImportedChatStoreContext } from \"@ai-sdk-tools/store\";\n\n// Use the imported context\nconst ChatStoreContext = ImportedChatStoreContext;\n\nexport interface UseCurrentStateOptions {\n  enabled?: boolean;\n}\n\nexport interface UseCurrentStateReturn {\n  isStoreAvailable: boolean;\n  availableStoreIds: string[];\n  currentStates: Record<string, unknown>;\n  refreshStates: () => void;\n}\n\n// Remove unused dummy context\n\nexport function useCurrentState(\n  options: UseCurrentStateOptions = {},\n): UseCurrentStateReturn {\n  const { enabled = true } = options;\n\n  const [currentStates, setCurrentStates] = useState<Record<string, unknown>>(\n    {},\n  );\n\n  const unsubscribeRef = useRef<(() => void) | null>(null);\n\n  // Create a dummy context for when store is not available\n  const DummyContext = useRef(\n    React.createContext<StoreApi | undefined>(undefined),\n  ).current;\n\n  // Use the store context if available, otherwise use dummy\n  const contextToUse = ChatStoreContext || DummyContext;\n  const storeApi: StoreApi | undefined = useContext(contextToUse);\n\n  const isStoreAvailable = storeApi !== undefined && storeApi !== null;\n  const availableStoreIds = isStoreAvailable ? [\"default\"] : [];\n\n  // Refresh states function\n  const refreshStates = useCallback(() => {\n    if (!storeApi || !isStoreAvailable) return;\n\n    try {\n      const state = storeApi.getState();\n      setCurrentStates({\n        default: state,\n      });\n    } catch {\n      // Failed to get state\n    }\n  }, [storeApi, isStoreAvailable]);\n\n  // Subscribe to store changes\n  useEffect(() => {\n    if (!enabled || !storeApi || !isStoreAvailable) return;\n\n    try {\n      // Subscribe to the Zustand store\n      const unsubscribe = storeApi.subscribe((newState: unknown) => {\n        setCurrentStates({\n          default: newState,\n        });\n      });\n\n      // Initial state sync\n      refreshStates();\n\n      unsubscribeRef.current = unsubscribe;\n\n      return () => {\n        if (unsubscribeRef.current) {\n          unsubscribeRef.current();\n          unsubscribeRef.current = null;\n        }\n      };\n    } catch {\n      // Failed to subscribe\n      return undefined;\n    }\n  }, [enabled, storeApi, isStoreAvailable, refreshStates]);\n\n  return {\n    isStoreAvailable,\n    availableStoreIds,\n    currentStates,\n    refreshStates,\n  };\n}\n","import {\n  Api as ApiIcon,\n  Build as BuildIcon,\n  CheckCircle as CheckCircleIcon,\n  Circle as CircleIcon,\n  Code as CodeIcon,\n  DataObject as DataObjectIcon,\n  ErrorOutline as ErrorOutlineIcon,\n  Help as HelpIcon,\n  Psychology as PsychologyIcon,\n  Send as SendIcon,\n  Settings as SettingsIcon,\n} from \"@mui/icons-material\";\nimport type React from \"react\";\n\n/**\n * Formats a timestamp to a readable time string\n */\nexport function formatTimestamp(timestamp: number): string {\n  const date = new Date(timestamp);\n  return (\n    date.toLocaleTimeString(\"en-US\", {\n      hour12: false,\n      hour: \"2-digit\",\n      minute: \"2-digit\",\n      second: \"2-digit\",\n    }) + `.${date.getMilliseconds().toString().padStart(3, \"0\")}`\n  );\n}\n\n/**\n * Gets a color for an event type\n */\nexport function getEventTypeColor(type: string): string {\n  const colors: Record<string, string> = {\n    \"tool-call-start\": \"#888888\", // medium gray\n    \"tool-call-result\": \"#00ff00\", // green for success (like 200 status)\n    \"tool-call-error\": \"#ff0000\", // red for errors\n    \"message-start\": \"#ffffff\", // white\n    \"message-chunk\": \"#888888\", // medium gray\n    \"message-complete\": \"#00ff00\", // green for completion\n    \"text-start\": \"#ffffff\", // white\n    \"text-delta\": \"#888888\", // medium gray\n    \"text-end\": \"#ffffff\", // white\n    \"reasoning-start\": \"#9c27b0\", // purple for reasoning\n    \"reasoning-delta\": \"#888888\", // medium gray (same as text-delta)\n    \"reasoning-end\": \"#9c27b0\", // purple for reasoning\n    \"start\": \"#87ceeb\", // light blue\n    \"start-step\": \"#888888\", // medium gray\n    \"finish-step\": \"#00ff00\", // green for success\n    finish: \"#00ff00\", // green for success\n    \"stream-done\": \"#00ff00\", // green for success\n    error: \"#ff0000\", // red for errors\n    unknown: \"#888888\", // medium gray\n  };\n\n  return colors[type] || \"#888888\";\n}\n\n/**\n * Gets an icon for an event type (using better Material-UI icons)\n */\nexport function getEventTypeIcon(type: string): React.ReactElement {\n  const icons: Record<string, React.ReactElement> = {\n    // Tool calls - using Build/Settings icons for better semantic meaning\n    \"tool-call-start\": <BuildIcon sx={{ fontSize: \"0.75rem\" }} />,\n    \"tool-call-result\": <CheckCircleIcon sx={{ fontSize: \"0.75rem\" }} />,\n    \"tool-call-error\": <ErrorOutlineIcon sx={{ fontSize: \"0.75rem\" }} />,\n\n    // Messages - using Send/Message icons\n    \"message-start\": <SendIcon sx={{ fontSize: \"0.75rem\" }} />,\n    \"message-chunk\": <CircleIcon sx={{ fontSize: \"0.4rem\" }} />,\n    \"message-complete\": <CheckCircleIcon sx={{ fontSize: \"0.75rem\" }} />,\n\n    // Text events - using Code/TextFields icons\n    \"text-start\": <CodeIcon sx={{ fontSize: \"0.75rem\" }} />,\n    \"text-delta\": <CircleIcon sx={{ fontSize: \"0.4rem\" }} />,\n    \"text-end\": <CodeIcon sx={{ fontSize: \"0.75rem\" }} />,\n\n    // Reasoning events - using Psychology icon\n    \"reasoning-start\": <PsychologyIcon sx={{ fontSize: \"0.75rem\" }} />,\n    \"reasoning-delta\": <CircleIcon sx={{ fontSize: \"0.4rem\" }} />,\n    \"reasoning-end\": <PsychologyIcon sx={{ fontSize: \"0.75rem\" }} />,\n\n    // Steps - using Settings/PlayArrow for process steps\n    \"start-step\": <SettingsIcon sx={{ fontSize: \"0.75rem\" }} />,\n    \"finish-step\": <CheckCircleIcon sx={{ fontSize: \"0.75rem\" }} />,\n\n    // Stream events - using Api/Done icons\n    \"start\": <ApiIcon sx={{ fontSize: \"0.75rem\" }} />,\n    finish: <ApiIcon sx={{ fontSize: \"0.75rem\" }} />,\n    \"stream-done\": <ApiIcon sx={{ fontSize: \"0.75rem\" }} />,\n\n    // Error and data events\n    error: <ErrorOutlineIcon sx={{ fontSize: \"0.75rem\" }} />,\n    \"custom-data\": <DataObjectIcon sx={{ fontSize: \"0.75rem\" }} />,\n    unknown: <HelpIcon sx={{ fontSize: \"0.75rem\" }} />,\n  };\n\n  return icons[type] || <HelpIcon sx={{ fontSize: \"0.75rem\" }} />;\n}\n\n/**\n * Formats a tool name from camelCase/snake_case to readable format\n * Examples: getBurnRate -> Get Burn Rate, get_user_data -> Get User Data\n */\nexport function formatToolName(toolName: string): string {\n  if (!toolName || toolName === \"unknown\") return toolName;\n\n  // Handle snake_case by replacing underscores with spaces\n  let formatted = toolName.replace(/_/g, \" \");\n\n  // Handle camelCase by adding spaces before capital letters\n  formatted = formatted.replace(/([a-z])([A-Z])/g, \"$1 $2\");\n\n  // Capitalize the first letter of each word\n  formatted = formatted\n    .split(\" \")\n    .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n    .join(\" \");\n\n  return formatted;\n}\n","import type { AIEvent, ToolCallSession } from \"../types\";\n\n/**\n * Extracts tool name from an event, trying multiple sources\n */\nfunction extractToolNameFromEvent(event: AIEvent): string {\n  // Try metadata first\n  if (event.metadata?.toolName) return event.metadata.toolName;\n\n  // Try data object\n  if (event.data?.toolName) return event.data.toolName;\n\n  // Try other common locations in data\n  if (event.data?.name) return event.data.name;\n  if (event.data?.tool) return event.data.tool;\n  if (event.data?.function) return event.data.function;\n\n  // Try nested objects\n  if (event.data?.toolCall?.name) return event.data.toolCall.name;\n  if (event.data?.toolCall?.function) return event.data.toolCall.function;\n\n  // Try args\n  if (event.data?.args?.toolName) return event.data.args.toolName;\n  if (event.data?.args?.function) return event.data.args.function;\n  if (event.data?.args?.name) return event.data.args.name;\n\n  // For tool-input-delta events, we can't extract tool name from the event itself\n  // This will be handled by the session context logic\n  return \"unknown\";\n}\n\n/**\n * Groups events into tool call sessions for better debugging experience\n */\nexport function groupEventsIntoSessions(events: AIEvent[]): {\n  sessions: ToolCallSession[];\n  standaloneEvents: AIEvent[];\n} {\n  const sessions: ToolCallSession[] = [];\n  const standaloneEvents: AIEvent[] = [];\n  const activeSessions = new Map<string, ToolCallSession>();\n  let sessionCounter = 0;\n\n  for (const event of events) {\n    // Check if this event belongs to a tool call session\n    const toolCallId = event.metadata?.toolCallId;\n    let toolName = extractToolNameFromEvent(event);\n\n    if (toolCallId) {\n      // This event belongs to a tool call session\n      if (!activeSessions.has(toolCallId)) {\n        // Start a new session with a unique ID that combines toolCallId and counter\n        const uniqueSessionId = `${toolCallId}_${sessionCounter++}`;\n        const session: ToolCallSession = {\n          id: uniqueSessionId,\n          toolName,\n          toolCallId,\n          startTime: event.timestamp,\n          status: \"running\",\n          events: [event],\n          startEvent: event,\n        };\n        activeSessions.set(toolCallId, session);\n      } else {\n        // Add to existing session\n        const session = activeSessions.get(toolCallId)!;\n\n        // If this event doesn't have a tool name but the session does, use the session's tool name\n        if (toolName === \"unknown\" && session.toolName !== \"unknown\") {\n          toolName = session.toolName;\n          // Update the event's metadata to include the tool name for consistency\n          if (!event.metadata) {\n            event.metadata = {};\n          }\n          event.metadata.toolName = toolName;\n          if (!event.data) {\n            event.data = {};\n          }\n          event.data.toolName = toolName;\n        }\n\n        // Also update the event's tool name in the data object for display purposes\n        if (toolName !== \"unknown\") {\n          if (!event.data) {\n            event.data = {};\n          }\n          event.data.toolName = toolName;\n          if (!event.metadata) {\n            event.metadata = {};\n          }\n          event.metadata.toolName = toolName;\n        }\n\n        // If this event has a better tool name than the session, update the session\n        if (toolName !== \"unknown\" && session.toolName === \"unknown\") {\n          session.toolName = toolName;\n        }\n\n        session.events.push(event);\n\n        // Check if this is an end event\n        if (\n          event.type === \"tool-call-result\" ||\n          event.type === \"tool-call-error\"\n        ) {\n          // Ensure the final event has the correct tool name\n          if (session.toolName !== \"unknown\") {\n            if (!event.metadata) {\n              event.metadata = {};\n            }\n            event.metadata.toolName = session.toolName;\n            if (!event.data) {\n              event.data = {};\n            }\n            event.data.toolName = session.toolName;\n          }\n\n          // Only complete the session if this is not a preliminary result\n          // or if it's an error (errors should always complete the session)\n          const isPreliminary = event.metadata?.preliminary === true;\n          const shouldComplete =\n            event.type === \"tool-call-error\" || !isPreliminary;\n\n          if (shouldComplete) {\n            session.endTime = event.timestamp;\n            session.duration = event.timestamp - session.startTime;\n            session.status = \"completed\";\n            session.endEvent = event;\n\n            // Move to completed sessions\n            sessions.push(session);\n            activeSessions.delete(toolCallId);\n          }\n        }\n      }\n    } else if (isToolCallStartEvent(event)) {\n      // Tool call start without toolCallId - create standalone session\n      const toolName = extractToolNameFromEvent(event);\n      const sessionId = `standalone_${event.timestamp}_${sessionCounter++}_${toolName}`;\n      const session: ToolCallSession = {\n        id: sessionId,\n        toolName,\n        startTime: event.timestamp,\n        status: \"running\",\n        events: [event],\n        startEvent: event,\n      };\n      activeSessions.set(sessionId, session);\n    } else {\n      // This is a standalone event (not part of a tool call)\n      standaloneEvents.push(event);\n    }\n  }\n\n  // Add any remaining active sessions\n  for (const session of activeSessions.values()) {\n    sessions.push(session);\n  }\n\n  // Sort sessions by start time\n  sessions.sort((a, b) => a.startTime - b.startTime);\n\n  return { sessions, standaloneEvents };\n}\n\n/**\n * Checks if an event is a tool call start event\n */\nfunction isToolCallStartEvent(event: AIEvent): boolean {\n  return (\n    event.type === \"tool-call-start\" ||\n    (event.type === \"unknown\" &&\n      event.metadata?.originalType === \"tool-input-start\") ||\n    (event.type === \"unknown\" &&\n      event.metadata?.originalType === \"tool-input-available\" &&\n      !!event.metadata?.toolName)\n  );\n}\n\n/**\n * Gets a summary of a tool call session\n */\nexport function getSessionSummary(session: ToolCallSession): string {\n  const duration = session.duration ? `${session.duration}ms` : \"running\";\n  const eventCount = session.events.length;\n  return `${session.toolName} (${eventCount} events, ${duration})`;\n}\n\n/**\n * Gets the status color for a tool call session\n */\nexport function getSessionStatusColor(session: ToolCallSession): string {\n  switch (session.status) {\n    case \"running\":\n      return \"#888888\"; // Gray\n    case \"completed\":\n      return \"#00ff00\"; // Green\n    case \"error\":\n      return \"#ff0000\"; // Red\n    default:\n      return \"#888888\";\n  }\n}\n\n/**\n * Gets the status icon for a tool call session\n */\nexport function getSessionStatusIcon(session: ToolCallSession): string {\n  switch (session.status) {\n    case \"running\":\n      return \"▶\";\n    case \"completed\":\n      return \"✓\";\n    case \"error\":\n      return \"✗\";\n    default:\n      return \"?\";\n  }\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport type { AIEvent } from \"../types\";\nimport { formatEventData, getEventDescription } from \"../utils/event-parser\";\nimport { formatTimestamp, getEventTypeIcon } from \"../utils/formatting\";\n\ninterface EventItemProps {\n  event: AIEvent;\n  className?: string;\n}\n\nexport function EventItem({ event, className = \"\" }: EventItemProps) {\n  const [isExpanded, setIsExpanded] = useState(false);\n\n  const typeIcon = getEventTypeIcon(event.type);\n  const description = getEventDescription(event);\n\n  return (\n    <div\n      className={`ai-devtools-event-item ${className}`}\n      data-type={event.type}\n    >\n      {/* Event header */}\n      <div\n        className=\"ai-devtools-event-header\"\n        onClick={() => setIsExpanded(!isExpanded)}\n      >\n        <div className=\"ai-devtools-event-content\">\n          {/* Event type indicator */}\n          <div className=\"ai-devtools-event-indicator\" title={event.type} />\n\n          {/* Event icon */}\n          <span className=\"ai-devtools-event-icon\">{typeIcon}</span>\n\n          {/* Event description */}\n          <div className=\"ai-devtools-event-description\">\n            <div className=\"ai-devtools-event-text\">{description}</div>\n          </div>\n        </div>\n\n        {/* Timestamp */}\n        <div className=\"ai-devtools-event-timestamp\">\n          {formatTimestamp(event.timestamp)}\n        </div>\n\n        {/* Expand/collapse icon */}\n        <div className=\"ai-devtools-event-expand\">\n          <svg\n            className={`ai-devtools-event-arrow ${\n              isExpanded ? \"ai-devtools-event-arrow-expanded\" : \"\"\n            }`}\n            fill=\"none\"\n            stroke=\"currentColor\"\n            viewBox=\"0 0 24 24\"\n          >\n            <path\n              strokeLinecap=\"round\"\n              strokeLinejoin=\"round\"\n              strokeWidth={2}\n              d=\"M19 9l-7 7-7-7\"\n            />\n          </svg>\n        </div>\n      </div>\n\n      {/* Expanded content */}\n      {isExpanded && (\n        <div className=\"ai-devtools-event-expanded\">\n          <div className=\"ai-devtools-event-details\">\n            {/* Event metadata */}\n            <div className=\"ai-devtools-event-metadata\">\n              <div className=\"ai-devtools-event-metadata-title\">\n                Event Details\n              </div>\n              <div className=\"ai-devtools-event-metadata-grid\">\n                <div className=\"ai-devtools-event-metadata-item\">\n                  <span className=\"ai-devtools-event-metadata-label\">ID:</span>{\" \"}\n                  {event.id}\n                </div>\n                <div className=\"ai-devtools-event-metadata-item\">\n                  <span className=\"ai-devtools-event-metadata-label\">\n                    Type:\n                  </span>{\" \"}\n                  {event.type}\n                </div>\n                <div className=\"ai-devtools-event-metadata-item\">\n                  <span className=\"ai-devtools-event-metadata-label\">\n                    Timestamp:\n                  </span>{\" \"}\n                  {new Date(event.timestamp).toISOString()}\n                </div>\n                {event.metadata?.messageId && (\n                  <div className=\"ai-devtools-event-metadata-item\">\n                    <span className=\"ai-devtools-event-metadata-label\">\n                      Message ID:\n                    </span>{\" \"}\n                    {event.metadata.messageId}\n                  </div>\n                )}\n              </div>\n            </div>\n\n            {/* Event data */}\n            <div>\n              <div className=\"ai-devtools-event-data-title\">Data</div>\n              <pre className=\"ai-devtools-event-data-content\">\n                {formatEventData(event)}\n              </pre>\n            </div>\n\n            {/* Metadata */}\n            {event.metadata && Object.keys(event.metadata).length > 0 && (\n              <div className=\"ai-devtools-event-metadata-section\">\n                <div className=\"ai-devtools-event-metadata-title\">Metadata</div>\n                <pre className=\"ai-devtools-event-metadata-content\">\n                  {JSON.stringify(event.metadata, null, 2)}\n                </pre>\n              </div>\n            )}\n          </div>\n        </div>\n      )}\n    </div>\n  );\n}\n","\"use client\";\n\nimport type React from \"react\";\nimport { useState } from \"react\";\nimport type { ToolCallSession } from \"../types\";\nimport { formatTimestamp, formatToolName } from \"../utils/formatting\";\nimport {\n  getSessionStatusColor,\n  getSessionStatusIcon,\n  getSessionSummary,\n} from \"../utils/session-grouper\";\nimport { EventItem } from \"./event-item\";\n\n// Simple tooltip component\nfunction Tooltip({\n  children,\n  content,\n  show,\n}: {\n  children: React.ReactNode;\n  content: React.ReactNode;\n  show: boolean;\n}) {\n  if (!show) return <>{children}</>;\n\n  return (\n    <div className=\"ai-devtools-tooltip-container\">\n      {children}\n      <div className=\"ai-devtools-tooltip\">{content}</div>\n    </div>\n  );\n}\n\n// Format tool parameters for display\nfunction formatToolParams(toolParams: Record<string, any> | undefined): string {\n  if (!toolParams || Object.keys(toolParams).length === 0) {\n    return \"No parameters\";\n  }\n\n  return Object.entries(toolParams)\n    .map(([key, value]) => {\n      const formattedValue =\n        typeof value === \"object\"\n          ? JSON.stringify(value, null, 2)\n          : String(value);\n      return `${key}: ${formattedValue}`;\n    })\n    .join(\"\\n\");\n}\n\ninterface ToolCallSessionProps {\n  session: ToolCallSession;\n  className?: string;\n}\n\nexport function ToolCallSessionComponent({\n  session,\n  className = \"\",\n}: ToolCallSessionProps) {\n  const [isExpanded, setIsExpanded] = useState(false);\n  const [showTooltip, setShowTooltip] = useState(false);\n\n  const summary = getSessionSummary(session);\n  const statusColor = getSessionStatusColor(session);\n  const statusIcon = getSessionStatusIcon(session);\n\n  // Extract tool parameters from the start event\n  const toolParams =\n    session.startEvent?.metadata?.toolParams ||\n    session.startEvent?.data?.toolParams;\n  const hasParams = toolParams && Object.keys(toolParams).length > 0;\n\n  return (\n    <div\n      className={`ai-devtools-session ${className}`}\n      data-session-id={session.id}\n      data-status={session.status}\n    >\n      {/* Session header */}\n      <Tooltip\n        show={hasParams && showTooltip}\n        content={\n          <div className=\"ai-devtools-tooltip-content\">\n            <div className=\"ai-devtools-tooltip-title\">Tool Parameters</div>\n            <pre className=\"ai-devtools-tooltip-params\">\n              {formatToolParams(toolParams)}\n            </pre>\n          </div>\n        }\n      >\n        <div\n          className=\"ai-devtools-session-header\"\n          onClick={() => setIsExpanded(!isExpanded)}\n          onMouseEnter={() => hasParams && setShowTooltip(true)}\n          onMouseLeave={() => setShowTooltip(false)}\n        >\n          <div className=\"ai-devtools-session-content\">\n            {/* Status indicator */}\n            <div\n              className=\"ai-devtools-session-indicator\"\n              style={{ backgroundColor: statusColor }}\n              title={`${session.status} - ${session.toolName}`}\n            />\n\n            {/* Status icon */}\n            <span className=\"ai-devtools-session-icon\">{statusIcon}</span>\n\n            {/* Session info */}\n            <div className=\"ai-devtools-session-info\">\n              <div className=\"ai-devtools-session-tool-name\">\n                {formatToolName(session.toolName)}\n                {hasParams && (\n                  <span\n                    className=\"ai-devtools-session-params-indicator\"\n                    title=\"Has parameters\"\n                  >\n                    ⚙️\n                  </span>\n                )}\n              </div>\n              <div className=\"ai-devtools-session-summary\">{summary}</div>\n            </div>\n          </div>\n\n          {/* Timestamp */}\n          <div className=\"ai-devtools-session-timestamp\">\n            {formatTimestamp(session.startTime)}\n          </div>\n\n          {/* Expand/collapse icon */}\n          <div className=\"ai-devtools-session-expand\">\n            <svg\n              className={`ai-devtools-session-arrow ${\n                isExpanded ? \"ai-devtools-session-arrow-expanded\" : \"\"\n              }`}\n              fill=\"none\"\n              stroke=\"currentColor\"\n              viewBox=\"0 0 24 24\"\n            >\n              <path\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n                strokeWidth={2}\n                d=\"M19 9l-7 7-7-7\"\n              />\n            </svg>\n          </div>\n        </div>\n      </Tooltip>\n\n      {/* Session events */}\n      {isExpanded && (\n        <div className=\"ai-devtools-session-events\">\n          {session.events.map((event) => (\n            <EventItem\n              key={event.id}\n              event={event}\n              className=\"ai-devtools-session-event\"\n            />\n          ))}\n        </div>\n      )}\n    </div>\n  );\n}\n","\"use client\";\n\nimport type { AIEvent } from \"../types\";\nimport { groupEventsIntoSessions } from \"../utils/session-grouper\";\nimport { EventItem } from \"./event-item\";\nimport { ToolCallSessionComponent } from \"./tool-call-session\";\n\ninterface EventListProps {\n  events: AIEvent[];\n  className?: string;\n  groupByToolCalls?: boolean;\n}\n\nexport function EventList({\n  events,\n  className = \"\",\n  groupByToolCalls = true,\n}: EventListProps) {\n  if (events.length === 0) {\n    return (\n      <div className={`ai-devtools-empty-state ${className}`}>\n        <div className=\"ai-devtools-empty-content\">\n          <div className=\"ai-devtools-empty-title\">▸ waiting for events...</div>\n          <div className=\"ai-devtools-empty-subtitle\">\n            start streaming to capture events\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  if (!groupByToolCalls) {\n    // Show events in flat list (newest first)\n    return (\n      <div className={`ai-devtools-event-list ${className}`}>\n        {events\n          .slice()\n          .reverse()\n          .map((event) => (\n            <EventItem key={event.id} event={event} />\n          ))}\n      </div>\n    );\n  }\n\n  // Group events into tool call sessions (keep chronological order for grouping)\n  const { sessions, standaloneEvents } = groupEventsIntoSessions(events);\n\n  return (\n    <div className={`ai-devtools-event-list ${className}`}>\n      {/* Tool call sessions (newest first) */}\n      {sessions\n        .slice()\n        .reverse()\n        .map((session) => (\n          <ToolCallSessionComponent\n            key={`session-${session.id}`}\n            session={session}\n          />\n        ))}\n\n      {/* Standalone events (newest first) */}\n      {standaloneEvents\n        .slice()\n        .reverse()\n        .map((event) => (\n          <EventItem key={`event-${event.id}`} event={event} />\n        ))}\n    </div>\n  );\n}\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport { darkStyles, JsonView } from \"react-json-view-lite\";\nimport \"react-json-view-lite/dist/index.css\";\n\ninterface StateDataExplorerProps {\n  currentState?: unknown;\n  className?: string;\n}\n\nexport function StateDataExplorer({\n  currentState,\n  className = \"\",\n}: StateDataExplorerProps) {\n  const displayData = useMemo(() => {\n    if (!currentState || typeof currentState !== \"object\") {\n      return currentState;\n    }\n\n    // Filter to only show essential chat properties\n    const essentialProps = [\"id\", \"messages\", \"error\", \"status\"];\n    const filteredState: Record<string, unknown> = {};\n\n    for (const prop of essentialProps) {\n      if (prop in currentState) {\n        filteredState[prop] = (currentState as Record<string, unknown>)[prop];\n      }\n    }\n\n    return filteredState;\n  }, [currentState]);\n\n  if (!displayData) {\n    return (\n      <div className={`ai-devtools-state-explorer-empty ${className}`}>\n        <div className=\"ai-devtools-state-explorer-empty-content\">\n          <div className=\"ai-devtools-state-explorer-empty-icon\">⚡</div>\n          <div className=\"ai-devtools-state-explorer-empty-title\">\n            No State Data\n          </div>\n          <div className=\"ai-devtools-state-explorer-empty-description\">\n            Select a store to view its current state\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div className={`ai-devtools-state-explorer ${className}`}>\n      <div className=\"ai-devtools-state-explorer-content\">\n        <JsonView\n          data={displayData}\n          style={{\n            ...darkStyles,\n            container: \"ai-devtools-json-container\",\n            basicChildStyle: \"ai-devtools-json-basic-child\",\n            label: \"ai-devtools-json-label\",\n            stringValue: \"ai-devtools-json-string-value\",\n            numberValue: \"ai-devtools-json-number-value\",\n            booleanValue: \"ai-devtools-json-boolean-value\",\n            nullValue: \"ai-devtools-json-null-value\",\n            undefinedValue: \"ai-devtools-json-undefined-value\",\n            punctuation: \"ai-devtools-json-punctuation\",\n            collapseIcon: \"ai-devtools-json-collapse-icon\",\n            expandIcon: \"ai-devtools-json-expand-icon\",\n            collapsedContent: \"ai-devtools-json-collapsed-content\",\n            childFieldsContainer: \"ai-devtools-json-child-fields-container\",\n          }}\n        />\n      </div>\n    </div>\n  );\n}\n","\"use client\";\n\nimport {\n  ViewList as BottomPanelIcon,\n  Clear as ClearIcon,\n  Close as CloseIcon,\n  Pause as PauseIcon,\n  PlayArrow as PlayArrowIcon,\n  ViewSidebar as RightPanelIcon,\n} from \"@mui/icons-material\";\nimport React, {\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { useCurrentState } from \"../hooks/use-current-state\";\nimport type { AIEvent, DevtoolsConfig, FilterOptions } from \"../types\";\nimport { formatToolName, getEventTypeIcon } from \"../utils/formatting\";\nimport { AgentFlowVisualization } from \"./agent-flow-visualization\";\nimport { EventList } from \"./event-list\";\nimport { StateDataExplorer } from \"./state-data-explorer\";\n\nconst EVENT_TYPES = [\n  \"tool-call-start\",\n  \"tool-call-result\",\n  \"tool-call-error\",\n  \"message-start\",\n  \"message-chunk\",\n  \"message-complete\",\n  \"start\",\n  \"start-step\",\n  \"text-start\",\n  \"text-delta\",\n  \"text-end\",\n  \"reasoning-start\",\n  \"reasoning-delta\",\n  \"reasoning-end\",\n  \"finish-step\",\n  \"finish\",\n  \"stream-done\",\n  \"error\",\n  \"unknown\",\n] as const;\n\nconst EVENT_TYPE_LABELS: Record<string, string> = {\n  \"tool-call-start\": \"Tool Starts\",\n  \"tool-call-result\": \"Tool Results\",\n  \"tool-call-error\": \"Tool Errors\",\n  \"message-start\": \"Message Starts\",\n  \"message-chunk\": \"Message Chunks\",\n  \"message-complete\": \"Message Complete\",\n  start: \"Stream Start\",\n  \"start-step\": \"Step Starts\",\n  \"text-start\": \"Text Starts\",\n  \"text-delta\": \"Text Deltas\",\n  \"text-end\": \"Text Ends\",\n  \"reasoning-start\": \"Reasoning Start\",\n  \"reasoning-delta\": \"Reasoning Deltas\",\n  \"reasoning-end\": \"Reasoning End\",\n  \"finish-step\": \"Step Finishes\",\n  finish: \"Stream Finishes\",\n  \"stream-done\": \"Stream Done\",\n  error: \"Errors\",\n  unknown: \"Unknown Events\",\n};\n\ninterface DevtoolsPanelProps {\n  events: AIEvent[];\n  isCapturing: boolean;\n  onToggleCapturing: () => void;\n  onClearEvents: () => void;\n  onClose: () => void;\n  onTogglePosition: () => void;\n  config: DevtoolsConfig;\n  className?: string;\n}\n\nexport function DevtoolsPanel({\n  events,\n  isCapturing,\n  onToggleCapturing,\n  onClearEvents,\n  onClose,\n  onTogglePosition,\n  config,\n  className = \"\",\n}: DevtoolsPanelProps) {\n  const [showFilters] = useState(false);\n  const [showSearchSuggestions, setShowSearchSuggestions] = useState(false);\n  const [filters, setFilters] = useState<FilterOptions>({\n    types: [],\n    toolNames: [],\n    searchQuery: \"\",\n  });\n\n  // State watching functionality\n  const [selectedStoreId, setSelectedStoreId] = useState<string | null>(null);\n\n  // Tab state (events, agents, state)\n  const [activeTab, setActiveTab] = useState<\"events\" | \"agents\" | \"state\">(\n    \"events\",\n  );\n\n  const { isStoreAvailable, availableStoreIds, currentStates } =\n    useCurrentState({\n      enabled: true,\n    });\n\n  // Auto-select default store when available\n  useEffect(() => {\n    if (availableStoreIds.length > 0 && !selectedStoreId) {\n      // Prefer \"default\" store if available, otherwise select the first one\n      const defaultStoreId = availableStoreIds.includes(\"default\")\n        ? \"default\"\n        : availableStoreIds[0];\n      setSelectedStoreId(defaultStoreId);\n    }\n  }, [availableStoreIds, selectedStoreId]);\n\n  // Resize functionality\n  const [isResizing, setIsResizing] = useState(false);\n  const [panelHeight, setPanelHeight] = useState(config.height || 300);\n  const [panelWidth, setPanelWidth] = useState(config.width || 500);\n  const panelRef = useRef<HTMLDivElement>(null);\n  const resizeRef = useRef<HTMLButtonElement>(null);\n\n  // Animation state for REC indicator\n  const [isReceivingEvents, setIsReceivingEvents] = useState(false);\n  const lastEventCountRef = useRef(events.length);\n\n  // Calculate available tool names, event counts, and detect model\n  const { availableToolNames, eventCounts } = useMemo(() => {\n    const toolNames = new Set<string>();\n    const counts = {} as Record<string, number>;\n    let detectedModel: string | undefined;\n\n    for (const event of events) {\n      // Count by type\n      counts[event.type] = (counts[event.type] || 0) + 1;\n\n      // Collect tool names\n      if (event.metadata?.toolName) {\n        toolNames.add(event.metadata.toolName);\n      }\n\n      // Try to detect model from event data\n      if (!detectedModel && event.data) {\n        // Check for model info in various common locations\n        const model =\n          event.data.model ||\n          event.data.modelId ||\n          event.data.providerMetadata?.openai?.model ||\n          event.data.providerMetadata?.anthropic?.model ||\n          event.data.providerMetadata?.google?.model;\n\n        if (model) {\n          detectedModel = model;\n        }\n      }\n    }\n\n    return {\n      availableToolNames: Array.from(toolNames).sort(),\n      eventCounts: counts,\n      detectedModelId: detectedModel,\n    };\n  }, [events]);\n\n  // Show all suggestions when dropdown is open (no filtering based on search query)\n  const filteredSuggestions = useMemo(() => {\n    return {\n      eventTypes: EVENT_TYPES,\n      tools: availableToolNames,\n      quickSearches: [\"error\", \"tool\", \"text\", \"message\", \"start\", \"end\"],\n    };\n  }, [availableToolNames]);\n\n  // Filter events based on current filters\n  const filteredEvents = useMemo(() => {\n    return events.filter((event) => {\n      // Filter by type\n      if (filters.types.length > 0 && !filters.types.includes(event.type)) {\n        return false;\n      }\n\n      // Filter by tool name\n      if (filters.toolNames.length > 0) {\n        const eventToolName = event.metadata?.toolName;\n        if (!eventToolName || !filters.toolNames.includes(eventToolName)) {\n          return false;\n        }\n      }\n\n      // Filter by search query\n      if (filters.searchQuery.trim()) {\n        const query = filters.searchQuery.toLowerCase().trim();\n        const eventData = JSON.stringify(event.data).toLowerCase();\n        const eventMetadata = JSON.stringify(\n          event.metadata || {},\n        ).toLowerCase();\n\n        if (!eventData.includes(query) && !eventMetadata.includes(query)) {\n          return false;\n        }\n      }\n\n      return true;\n    });\n  }, [events, filters]);\n\n  const hasActiveFilters =\n    filters.types.length > 0 ||\n    filters.toolNames.length > 0 ||\n    filters.searchQuery.trim().length > 0;\n\n  // Resize handlers\n  const handleMouseDown = useCallback((e: React.MouseEvent) => {\n    e.preventDefault();\n    setIsResizing(true);\n  }, []);\n\n  const handleMouseMove = useCallback(\n    (e: MouseEvent) => {\n      if (!isResizing) return;\n\n      if (config.position === \"bottom\") {\n        const newHeight = window.innerHeight - e.clientY;\n        const minHeight = 200;\n        const maxHeight = window.innerHeight * 0.8;\n        setPanelHeight(Math.max(minHeight, Math.min(maxHeight, newHeight)));\n      } else {\n        const newWidth = window.innerWidth - e.clientX;\n        const minWidth = 500;\n        const maxWidth = window.innerWidth * 0.8;\n        setPanelWidth(Math.max(minWidth, Math.min(maxWidth, newWidth)));\n      }\n    },\n    [isResizing, config.position],\n  );\n\n  const handleMouseUp = useCallback(() => {\n    setIsResizing(false);\n  }, []);\n\n  // Add global mouse event listeners\n  React.useEffect(() => {\n    if (isResizing) {\n      document.addEventListener(\"mousemove\", handleMouseMove);\n      document.addEventListener(\"mouseup\", handleMouseUp);\n      document.body.style.cursor =\n        config.position === \"bottom\" ? \"ns-resize\" : \"ew-resize\";\n      document.body.style.userSelect = \"none\";\n    } else {\n      document.removeEventListener(\"mousemove\", handleMouseMove);\n      document.removeEventListener(\"mouseup\", handleMouseUp);\n      document.body.style.cursor = \"\";\n      document.body.style.userSelect = \"\";\n    }\n\n    return () => {\n      document.removeEventListener(\"mousemove\", handleMouseMove);\n      document.removeEventListener(\"mouseup\", handleMouseUp);\n      document.body.style.cursor = \"\";\n      document.body.style.userSelect = \"\";\n    };\n  }, [isResizing, handleMouseMove, handleMouseUp, config.position]);\n\n  // Add keyboard event listener for Escape key\n  React.useEffect(() => {\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if (e.key === \"Escape\") {\n        onClose();\n      }\n    };\n\n    document.addEventListener(\"keydown\", handleKeyDown);\n    return () => {\n      document.removeEventListener(\"keydown\", handleKeyDown);\n    };\n  }, [onClose]);\n\n  // Calculate streaming speed metrics (tokens per second, characters per second)\n  const streamingSpeed = useMemo(() => {\n    const now = Date.now();\n    const lastMinute = now - 60000; // Last 60 seconds\n\n    // Get text-delta events from the last minute\n    const recentTextDeltas = events.filter(\n      (event) => event.type === \"text-delta\" && event.timestamp >= lastMinute,\n    );\n\n    if (recentTextDeltas.length === 0) {\n      return { tokensPerSecond: 0, charactersPerSecond: 0 };\n    }\n\n    // Calculate total characters and estimate tokens\n    const totalCharacters = recentTextDeltas.reduce((sum, event) => {\n      const content = event.data?.delta || event.data?.text || \"\";\n      return sum + content.length;\n    }, 0);\n\n    // Estimate tokens (common heuristic: 1 token ≈ 4 characters)\n    const totalTokens = Math.round(totalCharacters / 4);\n\n    // Calculate duration in seconds\n    const firstEvent = recentTextDeltas[0];\n    const lastEvent = recentTextDeltas[recentTextDeltas.length - 1];\n\n    if (!firstEvent || !lastEvent) {\n      return { tokensPerSecond: 0, charactersPerSecond: 0 };\n    }\n\n    const firstEventTime = firstEvent.timestamp;\n    const lastEventTime = lastEvent.timestamp;\n    const durationSeconds = (lastEventTime - firstEventTime) / 1000;\n\n    if (durationSeconds === 0) {\n      return { tokensPerSecond: 0, charactersPerSecond: 0 };\n    }\n\n    return {\n      tokensPerSecond: Number.parseFloat(\n        (totalTokens / durationSeconds).toFixed(2),\n      ),\n      charactersPerSecond: Number.parseFloat(\n        (totalCharacters / durationSeconds).toFixed(2),\n      ),\n    };\n  }, [events]);\n\n  // Detect new events and trigger animation\n  React.useEffect(() => {\n    if (events.length > lastEventCountRef.current) {\n      setIsReceivingEvents(true);\n      // Reset animation after 1 second\n      const timer = setTimeout(() => {\n        setIsReceivingEvents(false);\n      }, 1000);\n\n      lastEventCountRef.current = events.length;\n\n      return () => clearTimeout(timer);\n    }\n  }, [events.length]);\n\n  return (\n    <div\n      ref={panelRef}\n      className={`ai-devtools-panel ai-devtools-panel-${config.position} ${className}`}\n      style={{\n        height: config.position === \"bottom\" ? panelHeight : undefined,\n        width: config.position === \"right\" ? panelWidth : undefined,\n      }}\n    >\n      {/* Resize Handle */}\n      <button\n        ref={resizeRef}\n        type=\"button\"\n        className={`ai-devtools-resize-handle ai-devtools-resize-handle-${config.position}`}\n        onMouseDown={handleMouseDown}\n        onKeyDown={(e) => {\n          if (e.key === \"Enter\" || e.key === \" \") {\n            e.preventDefault();\n            // Create a synthetic mouse event for keyboard interaction\n            const syntheticEvent = {\n              ...e,\n              preventDefault: e.preventDefault,\n              clientX: 0,\n              clientY: 0,\n              button: 0,\n              buttons: 0,\n              movementX: 0,\n              movementY: 0,\n              pageX: 0,\n              pageY: 0,\n              screenX: 0,\n              screenY: 0,\n              relatedTarget: null,\n            } as unknown as React.MouseEvent<HTMLButtonElement>;\n            handleMouseDown(syntheticEvent);\n          }\n        }}\n      />\n\n      {/* Header */}\n      <div className=\"ai-devtools-header\">\n        {/* Main Search Bar */}\n        <div className=\"ai-devtools-search-bar\">\n          <div className=\"ai-devtools-search-input-container\">\n            {/* Search Input */}\n            <input\n              type=\"text\"\n              value={filters.searchQuery}\n              onChange={(e) => {\n                const value = e.target.value;\n                setFilters((prev) => ({ ...prev, searchQuery: value }));\n                // Close suggestions when user types to filter the actual list\n                setShowSearchSuggestions(false);\n              }}\n              onFocus={() => {\n                setShowSearchSuggestions(true);\n              }}\n              onBlur={() => {\n                // Delay hiding to allow clicking on suggestions\n                setTimeout(() => setShowSearchSuggestions(false), 200);\n              }}\n              placeholder={`${filteredEvents.length} total events found...`}\n              className=\"ai-devtools-search-input-main\"\n            />\n\n            {/* Filter Indicator */}\n            {(filters.types.length > 0 || filters.toolNames.length > 0) && (\n              <div className=\"ai-devtools-filter-indicator\">\n                <span className=\"ai-devtools-filter-indicator-count\">\n                  {filters.types.length + filters.toolNames.length}\n                </span>\n              </div>\n            )}\n          </div>\n\n          {/* Search Suggestions */}\n          {showSearchSuggestions && (\n            <div className=\"ai-devtools-search-suggestions\">\n              <div className=\"ai-devtools-search-suggestions-content\">\n                {/* Event Types */}\n                {filteredSuggestions.eventTypes.length > 0 && (\n                  <div className=\"ai-devtools-suggestion-section\">\n                    <div className=\"ai-devtools-suggestion-section-title\">\n                      Event Types\n                    </div>\n                    <div className=\"ai-devtools-suggestion-options\">\n                      {filteredSuggestions.eventTypes.map((type) => {\n                        const isActive = filters.types.includes(type);\n                        return (\n                          <button\n                            key={type}\n                            type=\"button\"\n                            className={`ai-devtools-suggestion-option ${isActive ? \"active\" : \"\"}`}\n                            onClick={() => {\n                              setFilters((prev) => ({\n                                ...prev,\n                                types: isActive\n                                  ? prev.types.filter((t) => t !== type)\n                                  : [...prev.types, type],\n                              }));\n                            }}\n                          >\n                            <span className=\"ai-devtools-suggestion-icon\">\n                              {getEventTypeIcon(type)}\n                            </span>\n                            <span className=\"ai-devtools-suggestion-label\">\n                              {EVENT_TYPE_LABELS[type]}\n                            </span>\n                            <span className=\"ai-devtools-suggestion-count\">\n                              {eventCounts[type] || 0}\n                            </span>\n                          </button>\n                        );\n                      })}\n                    </div>\n                  </div>\n                )}\n\n                {/* Tool Names */}\n                {filteredSuggestions.tools.length > 0 && (\n                  <div className=\"ai-devtools-suggestion-section\">\n                    <div className=\"ai-devtools-suggestion-section-title\">\n                      Tools\n                    </div>\n                    <div className=\"ai-devtools-suggestion-options\">\n                      {filteredSuggestions.tools.map((toolName) => {\n                        const isActive = filters.toolNames.includes(toolName);\n                        return (\n                          <button\n                            key={toolName}\n                            type=\"button\"\n                            className={`ai-devtools-suggestion-option ${isActive ? \"active\" : \"\"}`}\n                            onClick={() => {\n                              setFilters((prev) => ({\n                                ...prev,\n                                toolNames: isActive\n                                  ? prev.toolNames.filter((t) => t !== toolName)\n                                  : [...prev.toolNames, toolName],\n                              }));\n                            }}\n                          >\n                            <span className=\"ai-devtools-suggestion-icon\">\n                              🔧\n                            </span>\n                            <span className=\"ai-devtools-suggestion-label\">\n                              {formatToolName(toolName)}\n                            </span>\n                          </button>\n                        );\n                      })}\n                    </div>\n                  </div>\n                )}\n\n                {/* Quick Search Examples */}\n                {filteredSuggestions.quickSearches.length > 0 && (\n                  <div className=\"ai-devtools-suggestion-section\">\n                    <div className=\"ai-devtools-suggestion-section-title\">\n                      Quick Search\n                    </div>\n                    <div className=\"ai-devtools-suggestion-options\">\n                      {filteredSuggestions.quickSearches.map((term) => (\n                        <button\n                          key={term}\n                          type=\"button\"\n                          className=\"ai-devtools-suggestion-option\"\n                          onClick={() => {\n                            setFilters((prev) => ({\n                              ...prev,\n                              searchQuery: term,\n                            }));\n                          }}\n                        >\n                          <span className=\"ai-devtools-suggestion-icon\">\n                            {term === \"error\"\n                              ? \"!\"\n                              : term === \"tool\"\n                                ? \"▶\"\n                                : \"T\"}\n                          </span>\n                          <span className=\"ai-devtools-suggestion-label\">\n                            {term}\n                          </span>\n                        </button>\n                      ))}\n                    </div>\n                  </div>\n                )}\n              </div>\n            </div>\n          )}\n        </div>\n\n        <div className=\"ai-devtools-header-right\">\n          {/* Live Button with Pause/Play */}\n          <button\n            type=\"button\"\n            onClick={onToggleCapturing}\n            className={`ai-devtools-btn ${isReceivingEvents ? \"receiving\" : \"\"}`}\n          >\n            {isCapturing ? (\n              <PauseIcon className=\"ai-devtools-btn-icon\" />\n            ) : (\n              <PlayArrowIcon className=\"ai-devtools-btn-icon\" />\n            )}\n            <span>Live</span>\n          </button>\n\n          {/* Clear events */}\n          <button\n            type=\"button\"\n            onClick={onClearEvents}\n            className=\"ai-devtools-btn\"\n          >\n            <ClearIcon className=\"ai-devtools-btn-icon\" />\n            <span>clear</span>\n          </button>\n\n          {/* Position Toggle Button */}\n          <button\n            type=\"button\"\n            onClick={onTogglePosition}\n            className=\"ai-devtools-position-toggle-btn\"\n            title={`Switch to ${config.position === \"bottom\" ? \"right\" : \"bottom\"} panel`}\n          >\n            {config.position === \"bottom\" ? (\n              <RightPanelIcon className=\"ai-devtools-position-toggle-icon\" />\n            ) : (\n              <BottomPanelIcon className=\"ai-devtools-position-toggle-icon\" />\n            )}\n          </button>\n\n          {/* Close */}\n          <button\n            type=\"button\"\n            onClick={onClose}\n            className=\"ai-devtools-close-btn\"\n          >\n            <CloseIcon className=\"ai-devtools-close-icon\" />\n          </button>\n        </div>\n      </div>\n\n      {/* Filter Badges */}\n      {showFilters && (\n        <div className=\"ai-devtools-filter-badges\">\n          {/* Event Type Filters */}\n          {filters.types.length > 0 && (\n            <div className=\"ai-devtools-filter-group\">\n              <span className=\"ai-devtools-filter-group-label\">Types:</span>\n              {filters.types.map((type) => (\n                <button\n                  key={type}\n                  type=\"button\"\n                  className=\"ai-devtools-filter-badge active\"\n                  onClick={() => {\n                    setFilters((prev) => ({\n                      ...prev,\n                      types: prev.types.filter((t) => t !== type),\n                    }));\n                  }}\n                >\n                  {type.replace(/-/g, \" \")}\n                  <span className=\"ai-devtools-filter-remove\">×</span>\n                </button>\n              ))}\n            </div>\n          )}\n\n          {/* Tool Name Filters */}\n          {filters.toolNames.length > 0 && (\n            <div className=\"ai-devtools-filter-group\">\n              <span className=\"ai-devtools-filter-group-label\">Tools:</span>\n              {filters.toolNames.map((toolName) => (\n                <button\n                  key={toolName}\n                  type=\"button\"\n                  className=\"ai-devtools-filter-badge active\"\n                  onClick={() => {\n                    setFilters((prev) => ({\n                      ...prev,\n                      toolNames: prev.toolNames.filter((t) => t !== toolName),\n                    }));\n                  }}\n                >\n                  {formatToolName(toolName)}\n                  <span className=\"ai-devtools-filter-remove\">×</span>\n                </button>\n              ))}\n            </div>\n          )}\n\n          {/* Quick Filter Options */}\n          <div className=\"ai-devtools-filter-group\">\n            <span className=\"ai-devtools-filter-group-label\">Quick:</span>\n            <button\n              type=\"button\"\n              className={`ai-devtools-filter-badge ${filters.types.includes(\"tool-call-start\") ? \"active\" : \"\"}`}\n              onClick={() => {\n                const isActive = filters.types.includes(\"tool-call-start\");\n                setFilters((prev) => ({\n                  ...prev,\n                  types: isActive\n                    ? prev.types.filter((t) => t !== \"tool-call-start\")\n                    : [...prev.types, \"tool-call-start\"],\n                }));\n              }}\n            >\n              Tool Calls\n            </button>\n            <button\n              type=\"button\"\n              className={`ai-devtools-filter-badge ${filters.types.includes(\"text-delta\") ? \"active\" : \"\"}`}\n              onClick={() => {\n                const isActive = filters.types.includes(\"text-delta\");\n                setFilters((prev) => ({\n                  ...prev,\n                  types: isActive\n                    ? prev.types.filter((t) => t !== \"text-delta\")\n                    : [...prev.types, \"text-delta\"],\n                }));\n              }}\n            >\n              Text Events\n            </button>\n            <button\n              type=\"button\"\n              className={`ai-devtools-filter-badge ${filters.types.includes(\"error\") ? \"active\" : \"\"}`}\n              onClick={() => {\n                const isActive = filters.types.includes(\"error\");\n                setFilters((prev) => ({\n                  ...prev,\n                  types: isActive\n                    ? prev.types.filter((t) => t !== \"error\")\n                    : [...prev.types, \"error\"],\n                }));\n              }}\n            >\n              Errors\n            </button>\n            {hasActiveFilters && (\n              <button\n                type=\"button\"\n                className=\"ai-devtools-filter-badge clear\"\n                onClick={() => {\n                  setFilters((prev) => ({\n                    ...prev,\n                    types: [],\n                    toolNames: [],\n                    searchQuery: \"\",\n                  }));\n                }}\n              >\n                Clear All\n              </button>\n            )}\n          </div>\n        </div>\n      )}\n\n      {/* Tabs Navigation */}\n      <div\n        style={{\n          display: \"flex\",\n          gap: 0,\n          borderBottom: \"1px solid #27272a\",\n        }}\n      >\n        <button\n          type=\"button\"\n          onClick={() => setActiveTab(\"events\")}\n          style={{\n            padding: \"8px 16px\",\n            background: \"transparent\",\n            border: \"none\",\n            color: activeTab === \"events\" ? \"#e5e7eb\" : \"#666666\",\n            fontSize: 11,\n            cursor: \"pointer\",\n            transition: \"all 0.2s\",\n          }}\n        >\n          Events\n        </button>\n        <button\n          type=\"button\"\n          onClick={() => setActiveTab(\"agents\")}\n          style={{\n            padding: \"8px 16px\",\n            background: \"transparent\",\n            border: \"none\",\n            color: activeTab === \"agents\" ? \"#e5e7eb\" : \"#666666\",\n            fontSize: 11,\n            cursor: \"pointer\",\n            transition: \"all 0.2s\",\n          }}\n        >\n          Agents\n        </button>\n        {isStoreAvailable && (\n          <button\n            type=\"button\"\n            onClick={() => setActiveTab(\"state\")}\n            style={{\n              padding: \"8px 16px\",\n              background: \"transparent\",\n              border: \"none\",\n              color: activeTab === \"state\" ? \"#e5e7eb\" : \"#666666\",\n              fontSize: 11,\n              cursor: \"pointer\",\n              transition: \"all 0.2s\",\n            }}\n          >\n            State\n          </button>\n        )}\n      </div>\n\n      {/* Content */}\n      <div className=\"ai-devtools-panel-content\">\n        <div className=\"ai-devtools-content\">\n          {activeTab === \"events\" && (\n            <div className=\"ai-devtools-events\">\n              <EventList events={filteredEvents} />\n            </div>\n          )}\n          {activeTab === \"agents\" && <AgentFlowVisualization events={events} />}\n          {activeTab === \"state\" && isStoreAvailable && (\n            <div className=\"ai-devtools-state-panel-full\">\n              <StateDataExplorer\n                currentState={\n                  selectedStoreId ? currentStates[selectedStoreId] : undefined\n                }\n              />\n            </div>\n          )}\n        </div>\n      </div>\n\n      {/* Bottom Stats Section */}\n      <div className=\"ai-devtools-bottom-stats\">\n        {/* Tokens per second on the left */}\n        <div className=\"ai-devtools-tokens-section\">\n          <div className=\"ai-devtools-speed-metrics\">\n            <div className=\"ai-devtools-speed-metric\">\n              <span className=\"ai-devtools-speed-value\">\n                {streamingSpeed.tokensPerSecond}\n              </span>\n              <span className=\"ai-devtools-speed-label\">tok/s</span>\n            </div>\n            <div className=\"ai-devtools-speed-metric\">\n              <span className=\"ai-devtools-speed-value\">\n                {streamingSpeed.charactersPerSecond}\n              </span>\n              <span className=\"ai-devtools-speed-label\">char/s</span>\n            </div>\n          </div>\n        </div>\n\n      </div>\n    </div>\n  );\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport { useAIDevtools } from \"../hooks/use-ai-devtools\";\nimport type { DevtoolsConfig, UseAIDevtoolsOptions } from \"../types\";\nimport { DevtoolsButton } from \"./devtools-button\";\nimport { DevtoolsPanel } from \"./devtools-panel\";\n\ninterface AIDevtoolsProps extends UseAIDevtoolsOptions {\n  config?: Partial<DevtoolsConfig>;\n  className?: string;\n  debug?: boolean;\n}\n\nconst defaultConfig: DevtoolsConfig = {\n  enabled: true,\n  maxEvents: 1000,\n  position: \"bottom\",\n  height: 400,\n  theme: \"auto\",\n  streamCapture: {\n    enabled: true,\n    endpoint: \"/api/chat\",\n    autoConnect: true,\n  },\n  throttle: {\n    enabled: true,\n    interval: 100, // 100ms throttle by default\n    includeTypes: [\"text-delta\"], // Only throttle high-frequency text-delta events by default\n  },\n};\n\nexport function AIDevtools({\n  enabled = true,\n  maxEvents = 1000,\n  onEvent,\n  config = {},\n  className = \"\",\n  debug = false,\n}: AIDevtoolsProps) {\n  const [isOpen, setIsOpen] = useState(false);\n  const [hasNewEvents, setHasNewEvents] = useState(false);\n  const [isMounted, setIsMounted] = useState(false);\n  const [position, setPosition] = useState<\"bottom\" | \"right\">(\"bottom\");\n  const previousEventCountRef = useRef(0);\n\n  // Load panel state from localStorage on mount\n  useEffect(() => {\n    if (isMounted) {\n      const savedState = localStorage.getItem(\"ai-devtools-panel-open\");\n      if (savedState !== null) {\n        setIsOpen(JSON.parse(savedState));\n      }\n      const savedPosition = localStorage.getItem(\"ai-devtools-panel-position\");\n      if (\n        savedPosition &&\n        (savedPosition === \"bottom\" || savedPosition === \"right\")\n      ) {\n        setPosition(savedPosition);\n      }\n    }\n  }, [isMounted]);\n\n  // Save panel state to localStorage when it changes\n  useEffect(() => {\n    if (isMounted) {\n      localStorage.setItem(\"ai-devtools-panel-open\", JSON.stringify(isOpen));\n    }\n  }, [isOpen, isMounted]);\n\n  // Save position state to localStorage when it changes\n  useEffect(() => {\n    if (isMounted) {\n      localStorage.setItem(\"ai-devtools-panel-position\", position);\n    }\n  }, [position, isMounted]);\n\n  const finalConfig = { ...defaultConfig, ...config, position };\n\n  // Toggle position between bottom and right\n  const togglePosition = () => {\n    setPosition((prev) => (prev === \"bottom\" ? \"right\" : \"bottom\"));\n  };\n\n  // Always call hooks (to maintain hook order)\n  const { events, isCapturing, clearEvents, toggleCapturing } = useAIDevtools({\n    enabled: enabled && isMounted, // Only enable after mounted\n    maxEvents,\n    onEvent,\n    debug,\n    streamCapture: finalConfig.streamCapture\n      ? {\n          enabled: finalConfig.streamCapture.enabled,\n          endpoints: [finalConfig.streamCapture.endpoint],\n          autoConnect: finalConfig.streamCapture.autoConnect,\n        }\n      : undefined,\n    throttle: finalConfig.throttle,\n  });\n\n  // Hydration-safe mounting check\n  useEffect(() => {\n    setIsMounted(true);\n  }, []);\n\n  // Track new events for button animation (always call this hook)\n  useEffect(() => {\n    if (isMounted && events.length > previousEventCountRef.current) {\n      setHasNewEvents(true);\n      // Clear the animation after a short delay\n      const timer = setTimeout(() => setHasNewEvents(false), 2000);\n      return () => clearTimeout(timer);\n    }\n    previousEventCountRef.current = events.length;\n  }, [events.length, isMounted]);\n\n  // Don't render anything until mounted (hydration-safe)\n  if (!isMounted) {\n    return null;\n  }\n\n  if (!finalConfig.enabled) {\n    return null;\n  }\n\n  return (\n    <div className=\"ai-devtools\">\n      {/* Devtools button */}\n      <DevtoolsButton\n        onToggle={() => setIsOpen(!isOpen)}\n        eventCount={events.length}\n        hasNewEvents={hasNewEvents && !isOpen}\n        className={className}\n      />\n\n      {/* Devtools panel */}\n      {isOpen && (\n        <DevtoolsPanel\n          events={events}\n          isCapturing={isCapturing}\n          onToggleCapturing={toggleCapturing}\n          onClearEvents={clearEvents}\n          onClose={() => setIsOpen(false)}\n          onTogglePosition={togglePosition}\n          config={finalConfig}\n        />\n      )}\n    </div>\n  );\n}\n","\"use client\";\n\ninterface StoreListProps {\n  storeIds: string[];\n  selectedStoreId: string | null;\n  onSelectStore: (storeId: string) => void;\n}\n\nexport function StoreList({\n  storeIds,\n  selectedStoreId,\n  onSelectStore,\n}: StoreListProps) {\n  if (storeIds.length === 0) {\n    return (\n      <div className=\"ai-devtools-state-changes-empty\">\n        <div className=\"ai-devtools-state-changes-empty-content\">\n          <div className=\"ai-devtools-state-changes-empty-icon\">📊</div>\n          <div className=\"ai-devtools-state-changes-empty-title\">\n            No Stores Found\n          </div>\n          <div className=\"ai-devtools-state-changes-empty-description\">\n            Ensure you are using `@ai-sdk-tools/store` in your application.\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"ai-devtools-state-changes-list\">\n      <div className=\"ai-devtools-state-changes-header\">\n        <h3>Available Stores</h3>\n        <span className=\"ai-devtools-state-changes-count\">\n          {storeIds.length} store{storeIds.length !== 1 ? \"s\" : \"\"}\n        </span>\n      </div>\n      <div className=\"ai-devtools-state-changes-items\">\n        {storeIds.map((storeId) => (\n          <button\n            key={storeId}\n            type=\"button\"\n            onClick={() => onSelectStore(storeId)}\n            className={`ai-devtools-state-change-item ${\n              selectedStoreId === storeId ? \"selected\" : \"\"\n            }`}\n            onKeyDown={(e) => {\n              if (e.key === \"Enter\" || e.key === \" \") {\n                e.preventDefault();\n                onSelectStore(storeId);\n              }\n            }}\n          >\n            <div className=\"ai-devtools-state-change-item-content\">\n              <div className=\"ai-devtools-state-change-item-header\">\n                <div className=\"ai-devtools-state-change-type\">\n                  <span className=\"ai-devtools-state-change-type-label\">\n                    {storeId === \"default\" ? \"Default\" : storeId}\n                  </span>\n                </div>\n                <span className=\"ai-devtools-state-change-timestamp\">\n                  Store\n                </span>\n              </div>\n            </div>\n          </button>\n        ))}\n      </div>\n    </div>\n  );\n}\n","/**\n * Working state detection utilities\n */\n\n// Check if store package is available\nexport function isStorePackageAvailable(): boolean {\n  try {\n    require(\"@ai-sdk-tools/store\");\n    return true;\n  } catch {\n    return false;\n  }\n}\n"]}