{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "ai-tool",
  "type": "registry:ui",
  "description": "AI tool component for function calling interfaces",
  "files": [
    {
      "path": "packages/ai/tool.tsx",
      "content": "'use client';\n\nimport {\n  CheckCircleIcon,\n  ChevronDownIcon,\n  CircleIcon,\n  ClockIcon,\n  WrenchIcon,\n  XCircleIcon,\n} from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { Badge } from '@repo/shadcn-ui/components/ui/badge';\nimport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n} from '@repo/shadcn-ui/components/ui/collapsible';\nimport { cn } from '@repo/shadcn-ui/lib/utils';\n\nexport type AIToolStatus = 'pending' | 'running' | 'completed' | 'error';\n\nexport type AIToolProps = ComponentProps<typeof Collapsible> & {\n  status?: AIToolStatus;\n};\n\nexport const AITool = ({\n  className,\n  status = 'pending',\n  ...props\n}: AIToolProps) => (\n  <Collapsible\n    className={cn('not-prose mb-4 w-full rounded-md border', className)}\n    {...props}\n  />\n);\n\nexport type AIToolHeaderProps = ComponentProps<typeof CollapsibleTrigger> & {\n  status?: AIToolStatus;\n  name: string;\n  description?: string;\n};\n\nconst getStatusBadge = (status: AIToolStatus) => {\n  const labels = {\n    pending: 'Pending',\n    running: 'Running',\n    completed: 'Completed',\n    error: 'Error',\n  } as const;\n\n  const icons = {\n    pending: <CircleIcon className=\"size-4\" />,\n    running: <ClockIcon className=\"size-4 animate-pulse\" />,\n    completed: <CheckCircleIcon className=\"size-4 text-green-600\" />,\n    error: <XCircleIcon className=\"size-4 text-red-600\" />,\n  } as const;\n\n  return (\n    <Badge className=\"rounded-full text-xs\" variant=\"outline\">\n      {icons[status]}\n      {labels[status]}\n    </Badge>\n  );\n};\n\nexport const AIToolHeader = ({\n  className,\n  status = 'pending',\n  name,\n  description,\n  ...props\n}: AIToolHeaderProps) => (\n  <CollapsibleTrigger\n    className={cn(\n      'flex w-full items-center justify-between gap-4 p-3',\n      className\n    )}\n    {...props}\n  >\n    <div className=\"flex items-center gap-2\">\n      <WrenchIcon className=\"size-4 text-muted-foreground\" />\n      <span className=\"font-medium text-sm\">{name}</span>\n      {getStatusBadge(status)}\n    </div>\n    <ChevronDownIcon className=\"size-4 text-muted-foreground transition-transform group-data-[state=open]:rotate-180\" />\n  </CollapsibleTrigger>\n);\n\nexport type AIToolContentProps = ComponentProps<typeof CollapsibleContent>;\n\nexport const AIToolContent = ({ className, ...props }: AIToolContentProps) => (\n  <CollapsibleContent\n    className={cn('grid gap-4 overflow-hidden border-t p-4 text-sm', className)}\n    {...props}\n  />\n);\n\nexport type AIToolParametersProps = ComponentProps<'div'> & {\n  parameters: Record<string, unknown>;\n};\n\nexport const AIToolParameters = ({\n  className,\n  parameters,\n  ...props\n}: AIToolParametersProps) => (\n  <div className={cn('space-y-2', className)} {...props}>\n    <h4 className=\"font-medium text-muted-foreground text-xs uppercase tracking-wide\">\n      Parameters\n    </h4>\n    <div className=\"rounded-md bg-muted/50 p-3\">\n      <pre className=\"overflow-x-auto text-muted-foreground text-xs\">\n        {JSON.stringify(parameters, null, 2)}\n      </pre>\n    </div>\n  </div>\n);\n\nexport type AIToolResultProps = ComponentProps<'div'> & {\n  result?: ReactNode;\n  error?: string;\n};\n\nexport const AIToolResult = ({\n  className,\n  result,\n  error,\n  ...props\n}: AIToolResultProps) => {\n  if (!(result || error)) {\n    return null;\n  }\n\n  return (\n    <div className={cn('space-y-2', className)} {...props}>\n      <h4 className=\"font-medium text-muted-foreground text-xs uppercase tracking-wide\">\n        {error ? 'Error' : 'Result'}\n      </h4>\n      <div\n        className={cn(\n          'overflow-x-auto rounded-md p-3 text-xs',\n          error\n            ? 'bg-destructive/10 text-destructive'\n            : 'bg-muted/50 text-foreground'\n        )}\n      >\n        {error ? <div>{error}</div> : <div>{result}</div>}\n      </div>\n    </div>\n  );\n};\n",
      "type": "registry:component"
    }
  ]
}