@yourgpt/copilot-sdk 0.1.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{thread-CLmfwine.d.ts → ThreadManager-BCVt-_k_.d.cts} +376 -223
- package/dist/{thread-CLmfwine.d.cts → ThreadManager-BjC15mh8.d.ts} +376 -223
- package/dist/{chunk-IH7WXWX4.cjs → chunk-42YQ4ATO.cjs} +889 -2
- package/dist/chunk-42YQ4ATO.cjs.map +1 -0
- package/dist/{chunk-R452HH3J.cjs → chunk-BN75ZW24.cjs} +455 -26
- package/dist/chunk-BN75ZW24.cjs.map +1 -0
- package/dist/{chunk-QWQELTEB.js → chunk-QSEGNATZ.js} +882 -3
- package/dist/chunk-QSEGNATZ.js.map +1 -0
- package/dist/{chunk-FO75W5UI.js → chunk-XAVZZVUL.js} +428 -4
- package/dist/chunk-XAVZZVUL.js.map +1 -0
- package/dist/core/index.cjs +99 -71
- package/dist/core/index.d.cts +4 -4
- package/dist/core/index.d.ts +4 -4
- package/dist/core/index.js +1 -1
- package/dist/react/index.cjs +66 -34
- package/dist/react/index.d.cts +371 -5
- package/dist/react/index.d.ts +371 -5
- package/dist/react/index.js +2 -2
- package/dist/{tools-eeJ5iEC4.d.ts → types-BtAaOV07.d.cts} +367 -1
- package/dist/{tools-eeJ5iEC4.d.cts → types-BtAaOV07.d.ts} +367 -1
- package/dist/ui/index.cjs +1703 -467
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.d.cts +333 -38
- package/dist/ui/index.d.ts +333 -38
- package/dist/ui/index.js +1699 -467
- package/dist/ui/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-FO75W5UI.js.map +0 -1
- package/dist/chunk-IH7WXWX4.cjs.map +0 -1
- package/dist/chunk-QWQELTEB.js.map +0 -1
- package/dist/chunk-R452HH3J.cjs.map +0 -1
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ui/lib/utils.ts","../../src/ui/components/ui/loader.tsx","../../src/ui/components/ui/code-block.tsx","../../src/ui/components/ui/markdown.tsx","../../src/ui/components/ui/button.tsx","../../src/ui/components/ui/feedback-bar.tsx","../../src/ui/components/ui/chat-container.tsx","../../src/ui/components/ui/scroll-button.tsx","../../src/ui/components/ui/tooltip.tsx","../../src/ui/components/ui/avatar.tsx","../../src/ui/components/ui/message.tsx","../../src/ui/components/ui/textarea.tsx","../../src/ui/components/ui/prompt-input.tsx","../../src/ui/components/ui/hover-card.tsx","../../src/ui/components/ui/source.tsx","../../src/ui/components/ui/reasoning.tsx","../../src/ui/context/copilot-ui-context.tsx","../../src/ui/components/ui/tool-steps.tsx","../../src/ui/components/icons/index.tsx","../../src/ui/components/ui/confirmation.tsx","../../src/ui/components/ui/permission-confirmation.tsx","../../src/ui/components/ui/follow-up.tsx","../../src/ui/components/ui/dev-logger.tsx","../../src/ui/components/ui/capability-badge.tsx","../../src/ui/components/ui/model-selector.tsx","../../src/ui/components/composed/chat/chat-header.tsx","../../src/ui/components/composed/chat/suggestions.tsx","../../src/ui/components/composed/chat/default-message.tsx","../../src/ui/components/composed/chat/chat.tsx","../../src/ui/components/composed/chat/tool-execution-message.tsx","../../src/ui/components/composed/connected-chat.tsx","../../src/ui/components/composed/powered-by.tsx"],"names":["jsx","React2","jsxs","StickToBottomOriginal","BaseTooltip","React","React4","React5","useState","React7","createContext","useContext","React9","React10","ChevronDownIcon","ThumbsUpIcon","ThumbsDownIcon","XIcon","React11","React12","Fragment","React13","React14","useRef","useId","useCallback"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { cn } from \"../../lib/utils\";\nimport React from \"react\";\n\nexport interface LoaderProps {\n variant?:\n | \"circular\"\n | \"classic\"\n | \"pulse\"\n | \"pulse-dot\"\n | \"dots\"\n | \"typing\"\n | \"wave\"\n | \"bars\"\n | \"terminal\"\n | \"text-blink\"\n | \"text-shimmer\"\n | \"loading-dots\";\n size?: \"sm\" | \"md\" | \"lg\";\n text?: string;\n className?: string;\n}\n\nexport function CircularLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const sizeClasses = {\n sm: \"size-4\",\n md: \"size-5\",\n lg: \"size-6\",\n };\n\n return (\n <div\n className={cn(\n \"border-primary animate-spin rounded-full border-2 border-t-transparent\",\n sizeClasses[size],\n className,\n )}\n >\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function ClassicLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const sizeClasses = {\n sm: \"size-4\",\n md: \"size-5\",\n lg: \"size-6\",\n };\n\n const barSizes = {\n sm: { height: \"6px\", width: \"1.5px\" },\n md: { height: \"8px\", width: \"2px\" },\n lg: { height: \"10px\", width: \"2.5px\" },\n };\n\n return (\n <div className={cn(\"relative\", sizeClasses[size], className)}>\n <div className=\"absolute h-full w-full\">\n {[...Array(12)].map((_, i) => (\n <div\n key={i}\n className=\"bg-primary absolute animate-[spinner-fade_1.2s_linear_infinite] rounded-full\"\n style={{\n top: \"0\",\n left: \"50%\",\n marginLeft:\n size === \"sm\" ? \"-0.75px\" : size === \"lg\" ? \"-1.25px\" : \"-1px\",\n transformOrigin: `${size === \"sm\" ? \"0.75px\" : size === \"lg\" ? \"1.25px\" : \"1px\"} ${size === \"sm\" ? \"10px\" : size === \"lg\" ? \"14px\" : \"12px\"}`,\n transform: `rotate(${i * 30}deg)`,\n opacity: 0,\n animationDelay: `${i * 0.1}s`,\n height: barSizes[size].height,\n width: barSizes[size].width,\n }}\n />\n ))}\n </div>\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function PulseLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const sizeClasses = {\n sm: \"size-4\",\n md: \"size-5\",\n lg: \"size-6\",\n };\n\n return (\n <div className={cn(\"relative\", sizeClasses[size], className)}>\n <div className=\"border-primary absolute inset-0 animate-[thin-pulse_1.5s_ease-in-out_infinite] rounded-full border-2\" />\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function PulseDotLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const sizeClasses = {\n sm: \"size-1\",\n md: \"size-2\",\n lg: \"size-3\",\n };\n\n return (\n <div\n className={cn(\n \"bg-primary animate-[pulse-dot_1.2s_ease-in-out_infinite] rounded-full\",\n sizeClasses[size],\n className,\n )}\n >\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function DotsLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const dotSizes = {\n sm: \"h-1.5 w-1.5\",\n md: \"h-2 w-2\",\n lg: \"h-2.5 w-2.5\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n return (\n <div\n className={cn(\n \"flex items-center space-x-1\",\n containerSizes[size],\n className,\n )}\n >\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary animate-[bounce-dots_1.4s_ease-in-out_infinite] rounded-full\",\n dotSizes[size],\n )}\n style={{\n animationDelay: `${i * 160}ms`,\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TypingLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const dotSizes = {\n sm: \"h-1 w-1\",\n md: \"h-1.5 w-1.5\",\n lg: \"h-2 w-2\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n return (\n <div\n className={cn(\n \"flex items-center space-x-1\",\n containerSizes[size],\n className,\n )}\n >\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary animate-[typing_1s_infinite] rounded-full\",\n dotSizes[size],\n )}\n style={{\n animationDelay: `${i * 250}ms`,\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function WaveLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const barWidths = {\n sm: \"w-0.5\",\n md: \"w-0.5\",\n lg: \"w-1\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n const heights = {\n sm: [\"6px\", \"9px\", \"12px\", \"9px\", \"6px\"],\n md: [\"8px\", \"12px\", \"16px\", \"12px\", \"8px\"],\n lg: [\"10px\", \"15px\", \"20px\", \"15px\", \"10px\"],\n };\n\n return (\n <div\n className={cn(\n \"flex items-center gap-0.5\",\n containerSizes[size],\n className,\n )}\n >\n {[...Array(5)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary animate-[wave_1s_ease-in-out_infinite] rounded-full\",\n barWidths[size],\n )}\n style={{\n animationDelay: `${i * 100}ms`,\n height: heights[size][i],\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function BarsLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const barWidths = {\n sm: \"w-1\",\n md: \"w-1.5\",\n lg: \"w-2\",\n };\n\n const containerSizes = {\n sm: \"h-4 gap-1\",\n md: \"h-5 gap-1.5\",\n lg: \"h-6 gap-2\",\n };\n\n return (\n <div className={cn(\"flex\", containerSizes[size], className)}>\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary h-full animate-[wave-bars_1.2s_ease-in-out_infinite]\",\n barWidths[size],\n )}\n style={{\n animationDelay: `${i * 0.2}s`,\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TerminalLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const cursorSizes = {\n sm: \"h-3 w-1.5\",\n md: \"h-4 w-2\",\n lg: \"h-5 w-2.5\",\n };\n\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n return (\n <div\n className={cn(\n \"flex items-center space-x-1\",\n containerSizes[size],\n className,\n )}\n >\n <span className={cn(\"text-primary font-mono\", textSizes[size])}>\n {\">\"}\n </span>\n <div\n className={cn(\n \"bg-primary animate-[blink_1s_step-end_infinite]\",\n cursorSizes[size],\n )}\n />\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TextBlinkLoader({\n text = \"Thinking\",\n className,\n size = \"md\",\n}: {\n text?: string;\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n return (\n <div\n className={cn(\n \"animate-[text-blink_2s_ease-in-out_infinite] font-medium\",\n textSizes[size],\n className,\n )}\n >\n {text}\n </div>\n );\n}\n\nexport function TextShimmerLoader({\n text = \"Thinking\",\n className,\n size = \"md\",\n}: {\n text?: string;\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n return (\n <div\n className={cn(\n \"bg-[linear-gradient(to_right,var(--muted-foreground)_40%,var(--foreground)_60%,var(--muted-foreground)_80%)]\",\n \"bg-size-[200%_auto] bg-clip-text font-medium text-transparent\",\n \"animate-[shimmer_4s_infinite_linear]\",\n textSizes[size],\n className,\n )}\n >\n {text}\n </div>\n );\n}\n\nexport function TextDotsLoader({\n className,\n text = \"Thinking\",\n size = \"md\",\n}: {\n className?: string;\n text?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n return (\n <div className={cn(\"inline-flex items-center\", className)}>\n <span className={cn(\"text-primary font-medium\", textSizes[size])}>\n {text}\n </span>\n <span className=\"inline-flex\">\n <span className=\"text-primary animate-[loading-dots_1.4s_infinite_0.2s]\">\n .\n </span>\n <span className=\"text-primary animate-[loading-dots_1.4s_infinite_0.4s]\">\n .\n </span>\n <span className=\"text-primary animate-[loading-dots_1.4s_infinite_0.6s]\">\n .\n </span>\n </span>\n </div>\n );\n}\n\nfunction Loader({\n variant = \"circular\",\n size = \"md\",\n text,\n className,\n}: LoaderProps) {\n switch (variant) {\n case \"circular\":\n return <CircularLoader size={size} className={className} />;\n case \"classic\":\n return <ClassicLoader size={size} className={className} />;\n case \"pulse\":\n return <PulseLoader size={size} className={className} />;\n case \"pulse-dot\":\n return <PulseDotLoader size={size} className={className} />;\n case \"dots\":\n return <DotsLoader size={size} className={className} />;\n case \"typing\":\n return <TypingLoader size={size} className={className} />;\n case \"wave\":\n return <WaveLoader size={size} className={className} />;\n case \"bars\":\n return <BarsLoader size={size} className={className} />;\n case \"terminal\":\n return <TerminalLoader size={size} className={className} />;\n case \"text-blink\":\n return <TextBlinkLoader text={text} size={size} className={className} />;\n case \"text-shimmer\":\n return (\n <TextShimmerLoader text={text} size={size} className={className} />\n );\n case \"loading-dots\":\n return <TextDotsLoader text={text} size={size} className={className} />;\n default:\n return <CircularLoader size={size} className={className} />;\n }\n}\n\nexport { Loader };\n","import { cn } from \"../../lib/utils\";\nimport React, { useEffect, useState } from \"react\";\nimport { codeToHtml } from \"shiki\";\n\nexport type CodeBlockProps = {\n children?: React.ReactNode;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nfunction CodeBlock({ children, className, ...props }: CodeBlockProps) {\n return (\n <div\n className={cn(\n \"not-prose flex w-full flex-col overflow-clip border\",\n \"border-border bg-card text-card-foreground rounded-xl\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport type CodeBlockCodeProps = {\n code: string;\n language?: string;\n theme?: string;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nfunction CodeBlockCode({\n code,\n language = \"tsx\",\n theme = \"github-light\",\n className,\n ...props\n}: CodeBlockCodeProps) {\n const [highlightedHtml, setHighlightedHtml] = useState<string | null>(null);\n\n useEffect(() => {\n async function highlight() {\n if (!code) {\n setHighlightedHtml(\"<pre><code></code></pre>\");\n return;\n }\n\n const html = await codeToHtml(code, { lang: language, theme });\n setHighlightedHtml(html);\n }\n highlight();\n }, [code, language, theme]);\n\n const classNames = cn(\n \"w-full overflow-x-auto text-[13px] [&>pre]:px-4 [&>pre]:py-4\",\n className,\n );\n\n // SSR fallback: render plain code if not hydrated yet\n return highlightedHtml ? (\n <div\n className={classNames}\n dangerouslySetInnerHTML={{ __html: highlightedHtml }}\n {...props}\n />\n ) : (\n <div className={classNames} {...props}>\n <pre>\n <code>{code}</code>\n </pre>\n </div>\n );\n}\n\nexport type CodeBlockGroupProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction CodeBlockGroup({\n children,\n className,\n ...props\n}: CodeBlockGroupProps) {\n return (\n <div\n className={cn(\"flex items-center justify-between\", className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport { CodeBlockGroup, CodeBlockCode, CodeBlock };\n","import { cn } from \"../../lib/utils\";\nimport { marked } from \"marked\";\nimport { memo, useId, useMemo } from \"react\";\nimport ReactMarkdown, { Components } from \"react-markdown\";\nimport remarkBreaks from \"remark-breaks\";\nimport remarkGfm from \"remark-gfm\";\nimport { CodeBlock, CodeBlockCode } from \"./code-block\";\n\nexport type MarkdownProps = {\n children: string;\n id?: string;\n className?: string;\n components?: Partial<Components>;\n};\n\nfunction parseMarkdownIntoBlocks(markdown: string): string[] {\n const tokens = marked.lexer(markdown);\n return tokens.map((token) => token.raw);\n}\n\nfunction extractLanguage(className?: string): string {\n if (!className) return \"plaintext\";\n const match = className.match(/language-(\\w+)/);\n return match ? match[1] : \"plaintext\";\n}\n\nconst INITIAL_COMPONENTS: Partial<Components> = {\n code: function CodeComponent({ className, children, ...props }) {\n const isInline =\n !props.node?.position?.start.line ||\n props.node?.position?.start.line === props.node?.position?.end.line;\n\n if (isInline) {\n return (\n <span\n className={cn(\n \"bg-primary-foreground rounded-sm px-1 font-mono text-sm\",\n className,\n )}\n {...props}\n >\n {children}\n </span>\n );\n }\n\n const language = extractLanguage(className);\n\n return (\n <CodeBlock className={className}>\n <CodeBlockCode code={children as string} language={language} />\n </CodeBlock>\n );\n },\n pre: function PreComponent({ children }) {\n return <>{children}</>;\n },\n};\n\nconst MemoizedMarkdownBlock = memo(\n function MarkdownBlock({\n content,\n components = INITIAL_COMPONENTS,\n }: {\n content: string;\n components?: Partial<Components>;\n }) {\n return (\n <ReactMarkdown\n remarkPlugins={[remarkGfm, remarkBreaks]}\n components={components}\n >\n {content}\n </ReactMarkdown>\n );\n },\n function propsAreEqual(prevProps, nextProps) {\n return prevProps.content === nextProps.content;\n },\n);\n\nMemoizedMarkdownBlock.displayName = \"MemoizedMarkdownBlock\";\n\nfunction MarkdownComponent({\n children,\n id,\n className,\n components = INITIAL_COMPONENTS,\n}: MarkdownProps) {\n const generatedId = useId();\n const blockId = id ?? generatedId;\n const blocks = useMemo(() => parseMarkdownIntoBlocks(children), [children]);\n\n return (\n <div className={className}>\n {blocks.map((block, index) => (\n <MemoizedMarkdownBlock\n key={`${blockId}-block-${index}`}\n content={block}\n components={components}\n />\n ))}\n </div>\n );\n}\n\nconst Markdown = memo(MarkdownComponent);\nMarkdown.displayName = \"Markdown\";\n\nexport { Markdown };\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import { cn } from \"../../lib/utils\";\n\nfunction ThumbsUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n );\n}\n\nfunction ThumbsDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n );\n}\n\nfunction XIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\ntype FeedbackBarProps = {\n className?: string;\n title?: string;\n icon?: React.ReactNode;\n onHelpful?: () => void;\n onNotHelpful?: () => void;\n onClose?: () => void;\n};\n\nexport function FeedbackBar({\n className,\n title,\n icon,\n onHelpful,\n onNotHelpful,\n onClose,\n}: FeedbackBarProps) {\n return (\n <div\n className={cn(\n \"bg-background border-border inline-flex rounded-[12px] border text-sm\",\n className,\n )}\n >\n <div className=\"flex w-full items-center justify-between\">\n <div className=\"flex flex-1 items-center justify-start gap-4 py-3 pl-4\">\n {icon}\n <span className=\"text-foreground font-medium\">{title}</span>\n </div>\n <div className=\"flex items-center justify-center gap-0.5 px-3 py-0\">\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground flex size-8 items-center justify-center rounded-md transition-colors\"\n aria-label=\"Helpful\"\n onClick={onHelpful}\n >\n <ThumbsUpIcon className=\"size-4\" />\n </button>\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground flex size-8 items-center justify-center rounded-md transition-colors\"\n aria-label=\"Not helpful\"\n onClick={onNotHelpful}\n >\n <ThumbsDownIcon className=\"size-4\" />\n </button>\n </div>\n <div className=\"border-border flex items-center justify-center border-l\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"text-muted-foreground hover:text-foreground flex items-center justify-center rounded-md p-3\"\n aria-label=\"Close\"\n >\n <XIcon className=\"size-5\" />\n </button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n StickToBottom as StickToBottomOriginal,\n useStickToBottomContext,\n} from \"use-stick-to-bottom\";\n\n// Cast to fix React types version mismatch in monorepo\nconst StickToBottom = StickToBottomOriginal as unknown as React.FC<\n React.PropsWithChildren<{\n className?: string;\n resize?: string;\n initial?: string;\n role?: string;\n }>\n> & { Content: React.FC<React.PropsWithChildren<{ className?: string }>> };\n\n// Re-export the context hook for ScrollButton\nfunction useChatContainer() {\n const context = useStickToBottomContext();\n return {\n isAtBottom: context.isAtBottom,\n scrollToBottom: context.scrollToBottom,\n };\n}\n\nexport type ChatContainerRootProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nexport type ChatContainerContentProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nexport type ChatContainerScrollAnchorProps = {\n className?: string;\n ref?: React.RefObject<HTMLDivElement>;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nfunction ChatContainerRoot({\n children,\n className,\n ...props\n}: ChatContainerRootProps) {\n return (\n <StickToBottom\n className={cn(\"flex overflow-y-auto\", className)}\n resize=\"smooth\"\n initial=\"instant\"\n role=\"log\"\n {...props}\n >\n {children}\n </StickToBottom>\n );\n}\n\nfunction ChatContainerContent({\n children,\n className,\n ...props\n}: ChatContainerContentProps) {\n return (\n <StickToBottom.Content\n className={cn(\"flex w-full flex-col\", className)}\n {...props}\n >\n {children}\n </StickToBottom.Content>\n );\n}\n\nfunction ChatContainerScrollAnchor({\n className,\n ...props\n}: ChatContainerScrollAnchorProps) {\n return (\n <div\n className={cn(\"h-px w-full shrink-0 scroll-mt-4\", className)}\n aria-hidden=\"true\"\n {...props}\n />\n );\n}\n\nexport {\n ChatContainerRoot,\n ChatContainerContent,\n ChatContainerScrollAnchor,\n useChatContainer,\n};\n","import { Button, buttonVariants } from \"./button\";\nimport { cn } from \"../../lib/utils\";\nimport { type VariantProps } from \"class-variance-authority\";\nimport { useChatContainer } from \"./chat-container\";\n\nfunction ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nexport type ScrollButtonProps = {\n className?: string;\n variant?: VariantProps<typeof buttonVariants>[\"variant\"];\n size?: VariantProps<typeof buttonVariants>[\"size\"];\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nfunction ScrollButton({\n className,\n variant = \"outline\",\n size = \"sm\",\n ...props\n}: ScrollButtonProps) {\n const { isAtBottom, scrollToBottom } = useChatContainer();\n\n return (\n <Button\n variant={variant}\n size={size}\n className={cn(\n \"h-10 w-10 rounded-full transition-all duration-150 ease-out\",\n !isAtBottom\n ? \"translate-y-0 scale-100 opacity-100\"\n : \"pointer-events-none translate-y-4 scale-95 opacity-0\",\n className,\n )}\n onClick={() => scrollToBottom()}\n {...props}\n >\n <ChevronDownIcon className=\"h-5 w-5\" />\n </Button>\n );\n}\n\nexport { ScrollButton };\n","\"use client\";\n\nimport React from \"react\";\nimport { Tooltip as BaseTooltip } from \"@base-ui/react/tooltip\";\nimport { cn } from \"../../lib/utils\";\n\n// ============================================\n// TooltipProvider\n// ============================================\n\nexport type TooltipProviderProps = {\n children: React.ReactNode;\n delayDuration?: number;\n};\n\nfunction TooltipProvider({\n children,\n delayDuration = 300,\n}: TooltipProviderProps) {\n return (\n <BaseTooltip.Provider delay={delayDuration}>\n {children}\n </BaseTooltip.Provider>\n );\n}\n\n// ============================================\n// Tooltip (Root)\n// ============================================\n\nexport type TooltipProps = {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nfunction Tooltip({ children, open, defaultOpen, onOpenChange }: TooltipProps) {\n return (\n <BaseTooltip.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n >\n {children}\n </BaseTooltip.Root>\n );\n}\n\n// ============================================\n// TooltipTrigger\n// ============================================\n\nexport type TooltipTriggerProps = {\n children: React.ReactNode;\n asChild?: boolean;\n disabled?: boolean;\n} & React.ComponentPropsWithoutRef<\"button\">;\n\nfunction TooltipTrigger({\n children,\n asChild,\n disabled,\n ...props\n}: TooltipTriggerProps) {\n if (asChild && React.isValidElement(children)) {\n return (\n <BaseTooltip.Trigger disabled={disabled} render={children} {...props} />\n );\n }\n\n return (\n <BaseTooltip.Trigger disabled={disabled} {...props}>\n {children}\n </BaseTooltip.Trigger>\n );\n}\n\n// ============================================\n// TooltipContent\n// ============================================\n\nexport type TooltipContentProps = {\n children: React.ReactNode;\n className?: string;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n showArrow?: boolean;\n};\n\nfunction TooltipContent({\n children,\n className,\n side = \"top\",\n align = \"center\",\n sideOffset = 8,\n showArrow = true,\n}: TooltipContentProps) {\n return (\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner side={side} align={align} sideOffset={sideOffset}>\n <BaseTooltip.Popup\n className={cn(\n \"z-50 rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground shadow-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n className,\n )}\n >\n {children}\n {showArrow && <BaseTooltip.Arrow className=\"fill-primary\" />}\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n );\n}\n\n// ============================================\n// Exports\n// ============================================\n\nexport { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent };\n","import * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\",\n className,\n )}\n {...props}\n />\n));\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full\", className)}\n {...props}\n />\n));\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted\",\n className,\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\nexport { Avatar, AvatarImage, AvatarFallback };\n","import { Avatar, AvatarFallback, AvatarImage } from \"./avatar\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\";\nimport { cn } from \"../../lib/utils\";\nimport { Markdown } from \"./markdown\";\n\nexport type MessageProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nconst Message = ({ children, className, ...props }: MessageProps) => (\n <div className={cn(\"flex gap-3\", className)} {...props}>\n {children}\n </div>\n);\n\nexport type MessageAvatarProps = {\n src: string;\n alt: string;\n fallback?: string;\n delayMs?: number;\n className?: string;\n};\n\nconst MessageAvatar = ({\n src,\n alt,\n fallback,\n delayMs,\n className,\n}: MessageAvatarProps) => {\n return (\n <Avatar className={cn(\"size-7 shrink-0\", className)}>\n <AvatarImage src={src} alt={alt} />\n {fallback && (\n <AvatarFallback delayMs={delayMs}>{fallback}</AvatarFallback>\n )}\n </Avatar>\n );\n};\n\nexport type MessageContentProps = {\n children: React.ReactNode;\n markdown?: boolean;\n className?: string;\n /** Font size variant: 'sm' (14px), 'base' (16px), 'lg' (18px) */\n size?: \"sm\" | \"base\" | \"lg\";\n} & React.ComponentProps<typeof Markdown> &\n Omit<React.HTMLProps<HTMLDivElement>, \"size\">;\n\nconst proseSizeMap = {\n sm: \"prose-sm\",\n base: \"prose-base\",\n lg: \"prose-lg\",\n};\n\nconst MessageContent = ({\n children,\n markdown = false,\n className,\n size = \"sm\",\n ...props\n}: MessageContentProps) => {\n const classNames = cn(\n \"rounded-lg p-2 bg-secondary prose break-words whitespace-normal max-w-none\",\n \"text-foreground prose-headings:text-foreground prose-p:text-foreground prose-strong:text-foreground prose-li:text-foreground prose-a:text-foreground prose-ol:text-foreground prose-ul:text-foreground prose-code:text-foreground\",\n proseSizeMap[size],\n className,\n );\n\n return markdown ? (\n <Markdown className={classNames} {...props}>\n {children as string}\n </Markdown>\n ) : (\n <div className={classNames} {...props}>\n {children}\n </div>\n );\n};\n\nexport type MessageActionsProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nconst MessageActions = ({\n children,\n className,\n ...props\n}: MessageActionsProps) => (\n <div\n className={cn(\"text-muted-foreground flex items-center gap-2\", className)}\n {...props}\n >\n {children}\n </div>\n);\n\nexport type MessageActionProps = {\n className?: string;\n tooltip: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n} & React.ComponentProps<typeof Tooltip>;\n\nconst MessageAction = ({\n tooltip,\n children,\n className,\n side = \"top\",\n ...props\n}: MessageActionProps) => {\n return (\n <TooltipProvider>\n <Tooltip {...props}>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent side={side} className={className}>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n\nexport {\n Message,\n MessageAvatar,\n MessageContent,\n MessageActions,\n MessageAction,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n});\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","\"use client\";\n\nimport React, {\n createContext,\n useContext,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { Textarea } from \"./textarea\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\";\nimport { cn } from \"../../lib/utils\";\n\ntype PromptInputContextType = {\n isLoading: boolean;\n value: string;\n setValue: (value: string) => void;\n maxHeight: number | string;\n onSubmit?: () => void;\n disabled?: boolean;\n textareaRef: React.MutableRefObject<HTMLTextAreaElement | null>;\n};\n\nconst PromptInputContext = createContext<PromptInputContextType>({\n isLoading: false,\n value: \"\",\n setValue: () => {},\n maxHeight: 240,\n onSubmit: undefined,\n disabled: false,\n textareaRef: { current: null },\n});\n\nfunction usePromptInput() {\n return useContext(PromptInputContext);\n}\n\nexport type PromptInputProps = {\n isLoading?: boolean;\n value?: string;\n onValueChange?: (value: string) => void;\n maxHeight?: number | string;\n onSubmit?: () => void;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n} & React.ComponentProps<\"div\">;\n\nfunction PromptInput({\n className,\n isLoading = false,\n maxHeight = 240,\n value,\n onValueChange,\n onSubmit,\n children,\n disabled = false,\n onClick,\n ...props\n}: PromptInputProps) {\n const [internalValue, setInternalValue] = useState(value || \"\");\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const handleChange = (newValue: string) => {\n setInternalValue(newValue);\n onValueChange?.(newValue);\n };\n\n const handleClick: React.MouseEventHandler<HTMLDivElement> = (e) => {\n if (!disabled) textareaRef.current?.focus();\n onClick?.(e);\n };\n\n return (\n <TooltipProvider>\n <PromptInputContext.Provider\n value={{\n isLoading,\n value: value ?? internalValue,\n setValue: onValueChange ?? handleChange,\n maxHeight,\n onSubmit,\n disabled,\n textareaRef,\n }}\n >\n <div\n onClick={handleClick}\n className={cn(\n \"border-input bg-background cursor-text rounded-3xl border p-2 shadow-xs\",\n disabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </PromptInputContext.Provider>\n </TooltipProvider>\n );\n}\n\nexport type PromptInputTextareaProps = {\n disableAutosize?: boolean;\n} & React.ComponentProps<typeof Textarea>;\n\nfunction PromptInputTextarea({\n className,\n onKeyDown,\n disableAutosize = false,\n ...props\n}: PromptInputTextareaProps) {\n const { value, setValue, maxHeight, onSubmit, disabled, textareaRef } =\n usePromptInput();\n\n const adjustHeight = (el: HTMLTextAreaElement | null) => {\n if (!el || disableAutosize) return;\n\n el.style.height = \"auto\";\n\n if (typeof maxHeight === \"number\") {\n el.style.height = `${Math.min(el.scrollHeight, maxHeight)}px`;\n } else {\n el.style.height = `min(${el.scrollHeight}px, ${maxHeight})`;\n }\n };\n\n const handleRef = (el: HTMLTextAreaElement | null) => {\n textareaRef.current = el;\n adjustHeight(el);\n };\n\n useLayoutEffect(() => {\n if (!textareaRef.current || disableAutosize) return;\n\n const el = textareaRef.current;\n el.style.height = \"auto\";\n\n if (typeof maxHeight === \"number\") {\n el.style.height = `${Math.min(el.scrollHeight, maxHeight)}px`;\n } else {\n el.style.height = `min(${el.scrollHeight}px, ${maxHeight})`;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, maxHeight, disableAutosize]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n adjustHeight(e.target);\n setValue(e.target.value);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n onSubmit?.();\n }\n onKeyDown?.(e);\n };\n\n return (\n <Textarea\n ref={handleRef}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n className={cn(\n \"text-foreground min-h-[44px] w-full resize-none border-none bg-transparent shadow-none outline-none focus-visible:ring-0 focus-visible:ring-offset-0\",\n className,\n )}\n rows={1}\n disabled={disabled}\n {...props}\n />\n );\n}\n\nexport type PromptInputActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction PromptInputActions({\n children,\n className,\n ...props\n}: PromptInputActionsProps) {\n return (\n <div className={cn(\"flex items-center gap-2\", className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PromptInputActionProps = {\n className?: string;\n tooltip: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n};\n\nfunction PromptInputAction({\n tooltip,\n children,\n className,\n side = \"top\",\n}: PromptInputActionProps) {\n const { disabled } = usePromptInput();\n\n return (\n <Tooltip>\n <TooltipTrigger\n asChild\n disabled={disabled}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n {children}\n </TooltipTrigger>\n <TooltipContent side={side} className={className} showArrow>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n );\n}\n\nexport {\n PromptInput,\n PromptInputTextarea,\n PromptInputActions,\n PromptInputAction,\n};\n","import * as React from \"react\";\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst HoverCard = HoverCardPrimitive.Root;\n\nconst HoverCardTrigger = HoverCardPrimitive.Trigger;\n\nconst HoverCardContent = React.forwardRef<\n React.ElementRef<typeof HoverCardPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <HoverCardPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-hover-card-content-transform-origin]\",\n className,\n )}\n {...props}\n />\n));\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName;\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent };\n","\"use client\";\n\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from \"./hover-card\";\nimport { cn } from \"../../lib/utils\";\nimport { createContext, useContext } from \"react\";\n\nconst SourceContext = createContext<{\n href: string;\n domain: string;\n} | null>(null);\n\nfunction useSourceContext() {\n const ctx = useContext(SourceContext);\n if (!ctx) throw new Error(\"Source.* must be used inside <Source>\");\n return ctx;\n}\n\nexport type SourceProps = {\n href: string;\n children: React.ReactNode;\n};\n\nexport function Source({ href, children }: SourceProps) {\n let domain = \"\";\n try {\n domain = new URL(href).hostname;\n } catch {\n domain = href.split(\"/\").pop() || href;\n }\n\n return (\n <SourceContext.Provider value={{ href, domain }}>\n <HoverCard openDelay={150} closeDelay={0}>\n {children}\n </HoverCard>\n </SourceContext.Provider>\n );\n}\n\nexport type SourceTriggerProps = {\n label?: string | number;\n showFavicon?: boolean;\n className?: string;\n};\n\nexport function SourceTrigger({\n label,\n showFavicon = false,\n className,\n}: SourceTriggerProps) {\n const { href, domain } = useSourceContext();\n const labelToShow = label ?? domain.replace(\"www.\", \"\");\n\n return (\n <HoverCardTrigger asChild>\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n \"bg-muted text-muted-foreground hover:bg-muted-foreground/30 hover:text-primary inline-flex h-5 max-w-32 items-center gap-1 overflow-hidden rounded-full py-0 text-xs no-underline transition-colors duration-150\",\n showFavicon ? \"pr-2 pl-1\" : \"px-1\",\n className,\n )}\n >\n {showFavicon && (\n <img\n src={`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(\n href,\n )}`}\n alt=\"favicon\"\n width={14}\n height={14}\n className=\"size-3.5 rounded-full\"\n />\n )}\n <span className=\"truncate tabular-nums text-center font-normal\">\n {labelToShow}\n </span>\n </a>\n </HoverCardTrigger>\n );\n}\n\nexport type SourceContentProps = {\n title: string;\n description: string;\n className?: string;\n};\n\nexport function SourceContent({\n title,\n description,\n className,\n}: SourceContentProps) {\n const { href, domain } = useSourceContext();\n\n return (\n <HoverCardContent className={cn(\"w-80 p-0 shadow-xs\", className)}>\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex flex-col gap-2 p-3\"\n >\n <div className=\"flex items-center gap-1.5\">\n <img\n src={`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(\n href,\n )}`}\n alt=\"favicon\"\n className=\"size-4 rounded-full\"\n width={16}\n height={16}\n />\n <div className=\"text-primary truncate text-sm\">\n {domain.replace(\"www.\", \"\")}\n </div>\n </div>\n <div className=\"line-clamp-2 text-sm font-medium\">{title}</div>\n <div className=\"text-muted-foreground line-clamp-2 text-sm\">\n {description}\n </div>\n </a>\n </HoverCardContent>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Markdown } from \"./markdown\";\n\n// ============================================\n// Context for Reasoning state\n// ============================================\n\ninterface ReasoningContextValue {\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n isStreaming: boolean;\n}\n\nconst ReasoningContext = React.createContext<ReasoningContextValue | null>(\n null,\n);\n\nfunction useReasoningContext() {\n const context = React.useContext(ReasoningContext);\n if (!context) {\n throw new Error(\n \"Reasoning components must be used within a Reasoning provider\",\n );\n }\n return context;\n}\n\n// ============================================\n// Reasoning Root\n// ============================================\n\nexport interface ReasoningProps {\n children: React.ReactNode;\n /** Whether content is currently streaming */\n isStreaming?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean;\n /** Class name for the container */\n className?: string;\n}\n\n/**\n * Reasoning component - Collapsible container for AI thinking/reasoning content\n *\n * Auto-expands during streaming and collapses when complete.\n *\n * @example\n * ```tsx\n * <Reasoning isStreaming={isStreaming}>\n * <ReasoningTrigger>Thinking...</ReasoningTrigger>\n * <ReasoningContent>{thinkingText}</ReasoningContent>\n * </Reasoning>\n * ```\n */\nexport function Reasoning({\n children,\n isStreaming = false,\n open: controlledOpen,\n onOpenChange,\n defaultOpen = false,\n className,\n}: ReasoningProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const prevStreamingRef = React.useRef(isStreaming);\n\n // Determine if controlled or uncontrolled\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\n\n const setIsOpen = React.useCallback(\n (open: boolean) => {\n if (onOpenChange) {\n onOpenChange(open);\n }\n if (!isControlled) {\n setUncontrolledOpen(open);\n }\n },\n [isControlled, onOpenChange],\n );\n\n // Auto-expand when streaming starts, auto-collapse when streaming ends\n React.useEffect(() => {\n if (isStreaming && !prevStreamingRef.current) {\n // Streaming just started - expand\n setIsOpen(true);\n } else if (!isStreaming && prevStreamingRef.current) {\n // Streaming just ended - collapse\n setIsOpen(false);\n }\n prevStreamingRef.current = isStreaming;\n }, [isStreaming, setIsOpen]);\n\n return (\n <ReasoningContext.Provider value={{ isOpen, setIsOpen, isStreaming }}>\n <div className={cn(\"reasoning\", className)}>{children}</div>\n </ReasoningContext.Provider>\n );\n}\n\n// ============================================\n// Reasoning Trigger\n// ============================================\n\nexport interface ReasoningTriggerProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Clickable trigger to expand/collapse reasoning content\n */\nexport function ReasoningTrigger({\n children,\n className,\n}: ReasoningTriggerProps) {\n const { isOpen, setIsOpen, isStreaming } = useReasoningContext();\n\n return (\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n \"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors\",\n \"py-1 px-0 bg-transparent border-none cursor-pointer\",\n className,\n )}\n aria-expanded={isOpen}\n >\n {/* Chevron icon */}\n <svg\n className={cn(\n \"size-3 transition-transform duration-200\",\n isOpen && \"rotate-90\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n\n {/* Streaming indicator */}\n {isStreaming && (\n <span className=\"relative flex h-2 w-2\">\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75\" />\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-primary\" />\n </span>\n )}\n\n {children}\n </button>\n );\n}\n\n// ============================================\n// Reasoning Content\n// ============================================\n\nexport interface ReasoningContentProps {\n children: React.ReactNode;\n /** Render content as markdown */\n markdown?: boolean;\n /** Class name for the content */\n className?: string;\n}\n\n/**\n * Collapsible content area for reasoning text\n */\nexport function ReasoningContent({\n children,\n markdown = false,\n className,\n}: ReasoningContentProps) {\n const { isOpen } = useReasoningContext();\n const contentRef = React.useRef<HTMLDivElement>(null);\n const [height, setHeight] = React.useState<number | undefined>(0);\n\n // Measure content height for smooth animation\n React.useEffect(() => {\n if (contentRef.current) {\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setHeight(entry.contentRect.height);\n }\n });\n resizeObserver.observe(contentRef.current);\n return () => resizeObserver.disconnect();\n }\n }, []);\n\n return (\n <div\n className={cn(\n \"overflow-hidden transition-[max-height] duration-200 ease-out\",\n isOpen ? \"opacity-100\" : \"opacity-0\",\n )}\n style={{ maxHeight: isOpen ? height : 0 }}\n aria-hidden={!isOpen}\n >\n <div\n ref={contentRef}\n className={cn(\n \"mt-1 pl-3 border-l-2 border-muted-foreground/20\",\n \"text-xs text-muted-foreground\",\n className,\n )}\n >\n {markdown && typeof children === \"string\" ? (\n <Markdown className=\"prose-xs\">{children}</Markdown>\n ) : (\n <div className=\"whitespace-pre-wrap\">{children}</div>\n )}\n </div>\n </div>\n );\n}\n\n// ============================================\n// Convenience component for simple usage\n// ============================================\n\nexport interface SimpleReasoningProps {\n /** The reasoning/thinking content */\n content: string;\n /** Whether content is streaming */\n isStreaming?: boolean;\n /** Label when streaming */\n streamingLabel?: string;\n /** Label when collapsed */\n collapsedLabel?: string;\n /** Render as markdown */\n markdown?: boolean;\n /** Class name */\n className?: string;\n}\n\n/**\n * Simple reasoning display with default trigger labels\n *\n * @example\n * ```tsx\n * <SimpleReasoning\n * content={message.thinking}\n * isStreaming={isLoading}\n * />\n * ```\n */\nexport function SimpleReasoning({\n content,\n isStreaming = false,\n streamingLabel = \"Thinking...\",\n collapsedLabel = \"View reasoning\",\n markdown = true,\n className,\n}: SimpleReasoningProps) {\n if (!content) return null;\n\n return (\n <Reasoning isStreaming={isStreaming} className={className}>\n <ReasoningTrigger>\n {isStreaming ? streamingLabel : collapsedLabel}\n </ReasoningTrigger>\n <ReasoningContent markdown={markdown}>{content}</ReasoningContent>\n </Reasoning>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\n// ============================================\n// Types\n// ============================================\n\nexport interface CopilotUIConfig {\n /**\n * Debug mode - shows JSON args/results in collapsible sections\n * @default false\n */\n debug?: boolean;\n\n /**\n * Default expanded state for debug content\n * @default false\n */\n defaultDebugExpanded?: boolean;\n}\n\nexport interface CopilotUIContextValue extends CopilotUIConfig {\n /** Computed: whether debug mode is active */\n isDebug: boolean;\n}\n\n// ============================================\n// Context\n// ============================================\n\nconst CopilotUIContext = React.createContext<CopilotUIContextValue | null>(\n null,\n);\n\n/**\n * Hook to access CopilotUI configuration\n *\n * Returns defaults if no provider is present (allows standalone component usage)\n */\nexport function useCopilotUI(): CopilotUIContextValue {\n const context = React.useContext(CopilotUIContext);\n\n // Return defaults if no provider (allows standalone usage)\n if (!context) {\n return {\n debug: false,\n defaultDebugExpanded: false,\n isDebug: false,\n };\n }\n\n return context;\n}\n\n// ============================================\n// Provider\n// ============================================\n\nexport interface CopilotUIProviderProps extends CopilotUIConfig {\n children: React.ReactNode;\n}\n\n/**\n * Provider for global UI configuration (debug mode, etc.)\n *\n * @example\n * ```tsx\n * <CopilotUIProvider debug={process.env.NODE_ENV === \"development\"}>\n * <Chat messages={messages} />\n * </CopilotUIProvider>\n * ```\n */\nexport function CopilotUIProvider({\n children,\n debug = false,\n defaultDebugExpanded = false,\n}: CopilotUIProviderProps) {\n const value = React.useMemo<CopilotUIContextValue>(\n () => ({\n debug,\n defaultDebugExpanded,\n isDebug: debug,\n }),\n [debug, defaultDebugExpanded],\n );\n\n return (\n <CopilotUIContext.Provider value={value}>\n {children}\n </CopilotUIContext.Provider>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { TextShimmerLoader } from \"./loader\";\nimport { useCopilotUI } from \"../../context/copilot-ui-context\";\n\n// ============================================\n// Types\n// ============================================\n\nexport type ToolStepStatus =\n | \"pending\"\n | \"executing\"\n | \"completed\"\n | \"error\"\n | \"failed\"\n | \"rejected\";\n\nexport interface ToolStepData {\n id: string;\n name: string;\n args?: Record<string, unknown>;\n status: ToolStepStatus;\n result?: {\n success: boolean;\n message?: string;\n error?: string;\n data?: unknown;\n };\n error?: string;\n /** Human-readable title (resolved from tool definition) */\n title?: string;\n /** Title shown while executing */\n executingTitle?: string;\n /** Title shown after completion */\n completedTitle?: string;\n}\n\n// ============================================\n// Title Utilities\n// ============================================\n\n/**\n * Convert snake_case or camelCase tool name to human-readable title\n * @example \"get_order_details\" -> \"Get order details\"\n * @example \"fetchUserData\" -> \"Fetch user data\"\n */\nfunction toolNameToTitle(name: string): string {\n // Handle snake_case\n let result = name.replace(/_/g, \" \");\n // Handle camelCase\n result = result.replace(/([a-z])([A-Z])/g, \"$1 $2\");\n // Capitalize first letter, lowercase rest\n return result.charAt(0).toUpperCase() + result.slice(1).toLowerCase();\n}\n\n/**\n * Get the display title based on tool step status\n */\nfunction getDisplayTitle(step: ToolStepData): string {\n const fallbackTitle = toolNameToTitle(step.name);\n\n switch (step.status) {\n case \"pending\":\n return step.title ?? fallbackTitle;\n case \"executing\":\n if (step.executingTitle) return step.executingTitle;\n return step.title ? `${step.title}...` : `${fallbackTitle}...`;\n case \"completed\":\n return step.completedTitle ?? step.title ?? fallbackTitle;\n case \"error\":\n case \"failed\":\n case \"rejected\":\n return step.title ?? fallbackTitle;\n default:\n return fallbackTitle;\n }\n}\n\n// ============================================\n// Status Indicator\n// ============================================\n\ninterface StatusIndicatorProps {\n status: ToolStepStatus;\n className?: string;\n}\n\nfunction StatusIndicator({ status, className }: StatusIndicatorProps) {\n const baseClasses = \"flex-shrink-0\";\n\n switch (status) {\n case \"pending\":\n return (\n <div\n className={cn(\n baseClasses,\n \"size-3 flex items-center justify-center\",\n className,\n )}\n >\n <div className=\"size-1.5 rounded-full bg-muted-foreground/40\" />\n </div>\n );\n\n case \"executing\":\n // Return null - shimmer text handles the loading state\n return null;\n\n case \"completed\":\n return (\n <div\n className={cn(\n baseClasses,\n \"size-3 flex items-center justify-center\",\n className,\n )}\n >\n <svg\n className=\"size-3 text-green-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={3}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n </div>\n );\n\n case \"error\":\n case \"failed\":\n case \"rejected\":\n return (\n <div\n className={cn(\n baseClasses,\n \"size-3 flex items-center justify-center\",\n className,\n )}\n >\n <svg\n className=\"size-3 text-red-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={3}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </div>\n );\n }\n}\n\n// ============================================\n// Tool Step\n// ============================================\n\nexport interface ToolStepProps {\n step: ToolStepData;\n /** Show connecting line to next step */\n showLine?: boolean;\n /** Override debug mode from context */\n debug?: boolean;\n /** Expanded by default (for debug mode) */\n defaultExpanded?: boolean;\n className?: string;\n}\n\n/**\n * Format result for display\n */\nfunction formatResult(result: ToolStepData[\"result\"]): string {\n if (!result) return \"\";\n if (result.message) return result.message;\n if (result.error) return result.error;\n if (result.data) {\n // Don't stringify image data - it's too long\n const data = result.data as Record<string, unknown>;\n if (\n data.image &&\n typeof data.image === \"string\" &&\n (data.image as string).startsWith(\"data:image\")\n ) {\n return `Image (${data.width || \"?\"}x${data.height || \"?\"})`;\n }\n return JSON.stringify(result.data);\n }\n return result.success ? \"Success\" : \"Failed\";\n}\n\n/**\n * Check if result contains an image\n */\nfunction getResultImage(result: ToolStepData[\"result\"]): string | null {\n if (!result?.data) return null;\n const data = result.data as Record<string, unknown>;\n if (\n data.image &&\n typeof data.image === \"string\" &&\n (data.image as string).startsWith(\"data:image\")\n ) {\n return data.image as string;\n }\n return null;\n}\n\n/**\n * Individual tool step with shimmer loading, status icons, and debug mode\n */\nexport function ToolStep({\n step,\n showLine = false,\n debug: debugProp,\n defaultExpanded,\n className,\n}: ToolStepProps) {\n const { isDebug, defaultDebugExpanded } = useCopilotUI();\n const debug = debugProp ?? isDebug;\n\n const [expanded, setExpanded] = React.useState(\n defaultExpanded ?? defaultDebugExpanded ?? false,\n );\n\n const displayTitle = getDisplayTitle(step);\n const hasDebugContent =\n (step.args && Object.keys(step.args).length > 0) || step.result;\n const isExecuting = step.status === \"executing\";\n const isCompleted = step.status === \"completed\";\n const isError =\n step.status === \"error\" ||\n step.status === \"failed\" ||\n step.status === \"rejected\";\n\n return (\n <div className={cn(\"relative\", className)}>\n {/* Connecting line */}\n {showLine && (\n <div\n className=\"absolute left-[5px] top-4 bottom-0 w-px bg-border\"\n aria-hidden=\"true\"\n />\n )}\n\n {/* Step row */}\n <div className=\"flex items-start gap-2\">\n {/* Status indicator - only show for non-executing states */}\n {!isExecuting && (\n <StatusIndicator status={step.status} className=\"mt-0.5\" />\n )}\n\n <div className=\"flex-1 min-w-0\">\n {/* Clickable trigger */}\n <button\n type=\"button\"\n onClick={() => debug && hasDebugContent && setExpanded(!expanded)}\n disabled={!debug || !hasDebugContent}\n className={cn(\n \"flex items-center gap-2 text-left min-w-0 w-full\",\n debug &&\n hasDebugContent &&\n \"cursor-pointer hover:text-foreground\",\n !debug && \"cursor-default\",\n )}\n >\n {/* Title with shimmer for executing state */}\n {isExecuting ? (\n <TextShimmerLoader text={displayTitle} size=\"sm\" />\n ) : (\n <span\n className={cn(\n \"text-sm truncate\",\n isCompleted && \"text-foreground\",\n isError && \"text-red-500\",\n step.status === \"pending\" && \"text-muted-foreground/60\",\n )}\n >\n {displayTitle}\n </span>\n )}\n\n {/* Expand indicator - only in debug mode with content */}\n {debug && hasDebugContent && (\n <svg\n className={cn(\n \"size-3 text-muted-foreground/40 transition-transform ml-auto flex-shrink-0\",\n expanded && \"rotate-90\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n )}\n </button>\n\n {/* Debug: Collapsible content (args + results) */}\n {debug && expanded && hasDebugContent && (\n <div className=\"mt-1.5 space-y-1.5\">\n {/* Arguments */}\n {step.args && Object.keys(step.args).length > 0 && (\n <div className=\"text-[10px] font-mono bg-muted/50 rounded px-2 py-1 overflow-x-auto\">\n <span className=\"text-muted-foreground\">args: </span>\n {JSON.stringify(step.args)}\n </div>\n )}\n\n {/* Result */}\n {step.result && (\n <div\n className={cn(\n \"text-[10px] font-mono rounded px-2 py-1 overflow-x-auto whitespace-pre-wrap break-all\",\n step.result.success !== false\n ? \"bg-green-500/10 text-green-600 dark:text-green-400\"\n : \"bg-red-500/10 text-red-600 dark:text-red-400\",\n )}\n >\n <span className=\"text-muted-foreground\">result: </span>\n {formatResult(step.result)}\n {/* Render image if present */}\n {getResultImage(step.result) && (\n <img\n src={getResultImage(step.result)!}\n alt=\"Screenshot\"\n className=\"mt-1.5 rounded border border-border max-w-full max-h-48 object-contain\"\n />\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Error display (always visible, not just in debug) */}\n {isError && step.error && !step.result && (\n <div className=\"mt-0.5 text-[10px] font-mono bg-red-500/10 text-red-600 dark:text-red-400 rounded px-1.5 py-0.5\">\n {step.error}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n// ============================================\n// Tool Steps Container\n// ============================================\n\nexport interface ToolStepsProps {\n steps: ToolStepData[];\n /** Override debug mode from context */\n debug?: boolean;\n /** Expand all by default (in debug mode) */\n defaultExpanded?: boolean;\n /** Class name */\n className?: string;\n}\n\n/**\n * Compact tool steps display with shimmer loading and debug mode\n *\n * @example\n * ```tsx\n * <ToolSteps\n * steps={[\n * { id: \"1\", name: \"get_weather\", status: \"completed\", title: \"Get weather\" },\n * { id: \"2\", name: \"navigate\", status: \"executing\", executingTitle: \"Navigating...\" },\n * ]}\n * debug={true}\n * />\n * ```\n */\nexport function ToolSteps({\n steps,\n debug,\n defaultExpanded = false,\n className,\n}: ToolStepsProps) {\n if (steps.length === 0) return null;\n\n return (\n <div className={cn(\"space-y-1.5\", className)}>\n {steps.map((step, index) => (\n <ToolStep\n key={step.id}\n step={step}\n showLine={index < steps.length - 1}\n debug={debug}\n defaultExpanded={defaultExpanded}\n />\n ))}\n </div>\n );\n}\n\n// ============================================\n// Inline Tool Steps (super compact, single line)\n// ============================================\n\nexport interface InlineToolStepsProps {\n steps: ToolStepData[];\n /** Max steps to show before collapsing */\n maxVisible?: number;\n className?: string;\n}\n\n/**\n * Ultra-compact inline display showing just status icons\n *\n * @example\n * ```tsx\n * <InlineToolSteps steps={toolExecutions} />\n * // Shows: ✓ ✓ ⟳ ○\n * ```\n */\nexport function InlineToolSteps({\n steps,\n maxVisible = 5,\n className,\n}: InlineToolStepsProps) {\n if (steps.length === 0) return null;\n\n const visibleSteps = steps.slice(0, maxVisible);\n const hiddenCount = steps.length - maxVisible;\n\n return (\n <div className={cn(\"flex items-center gap-1\", className)}>\n {visibleSteps.map((step) => (\n <div\n key={step.id}\n title={`${step.name}: ${step.status}`}\n className=\"flex items-center\"\n >\n <StatusIndicator status={step.status} />\n </div>\n ))}\n {hiddenCount > 0 && (\n <span className=\"text-[10px] text-muted-foreground\">\n +{hiddenCount}\n </span>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\n\nexport function SendIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m22 2-7 20-4-9-9-4Z\" />\n <path d=\"M22 2 11 13\" />\n </svg>\n );\n}\n\nexport function StopIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\n </svg>\n );\n}\n\nexport function CloseIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport function ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nexport function ChevronUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n );\n}\n\nexport function CopyIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </svg>\n );\n}\n\nexport function CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nexport function ThumbsUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n );\n}\n\nexport function ThumbsDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n );\n}\n\nexport function RefreshIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </svg>\n );\n}\n\nexport function UserIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\n </svg>\n );\n}\n\nexport function BotIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M12 8V4H8\" />\n <rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" />\n <path d=\"M2 14h2\" />\n <path d=\"M20 14h2\" />\n <path d=\"M15 13v2\" />\n <path d=\"M9 13v2\" />\n </svg>\n );\n}\n\nexport function PlusIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M5 12h14\" />\n <path d=\"M12 5v14\" />\n </svg>\n );\n}\n\nexport function ArrowUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </svg>\n );\n}\n\nexport function XIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport function AlertTriangleIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport { CheckIcon, XIcon, AlertTriangleIcon } from \"../icons\";\n\n// ============================================\n// Types\n// ============================================\n\nexport type ConfirmationState =\n | \"pending\" // Waiting for user decision\n | \"approved\" // User approved\n | \"rejected\"; // User rejected\n\nexport interface ConfirmationContextValue {\n state: ConfirmationState;\n message?: string;\n onApprove?: () => void;\n onReject?: () => void;\n}\n\n// ============================================\n// Context\n// ============================================\n\nconst ConfirmationContext =\n React.createContext<ConfirmationContextValue | null>(null);\n\nfunction useConfirmationContext() {\n const context = React.useContext(ConfirmationContext);\n if (!context) {\n throw new Error(\n \"Confirmation components must be used within a Confirmation provider\",\n );\n }\n return context;\n}\n\n// ============================================\n// Confirmation Root\n// ============================================\n\nexport interface ConfirmationProps {\n children?: React.ReactNode;\n /** Current approval state */\n state?: ConfirmationState;\n /** Message to display */\n message?: string;\n /** Called when user approves */\n onApprove?: () => void;\n /** Called when user rejects */\n onReject?: () => void;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Confirmation component - Tool approval/rejection UI\n *\n * Similar to Vercel AI SDK's Confirmation component for human-in-the-loop patterns.\n *\n * @example\n * ```tsx\n * <Confirmation\n * state={execution.approvalStatus}\n * message=\"This tool wants to delete a file.\"\n * onApprove={() => approveToolExecution(execution.id)}\n * onReject={() => rejectToolExecution(execution.id)}\n * >\n * <ConfirmationPending>\n * <ConfirmationMessage />\n * <ConfirmationActions />\n * </ConfirmationPending>\n * <ConfirmationApproved />\n * <ConfirmationRejected />\n * </Confirmation>\n * ```\n */\nexport function Confirmation({\n children,\n state = \"pending\",\n message,\n onApprove,\n onReject,\n className,\n}: ConfirmationProps) {\n return (\n <ConfirmationContext.Provider\n value={{ state, message, onApprove, onReject }}\n >\n <div\n className={cn(\n \"confirmation rounded-lg border bg-card text-card-foreground\",\n className,\n )}\n >\n {children}\n </div>\n </ConfirmationContext.Provider>\n );\n}\n\n// ============================================\n// Conditional Rendering Components\n// ============================================\n\nexport interface ConfirmationPendingProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Renders children only when state is \"pending\"\n */\nexport function ConfirmationPending({\n children,\n className,\n}: ConfirmationPendingProps) {\n const { state } = useConfirmationContext();\n if (state !== \"pending\") return null;\n\n return <div className={cn(\"p-4\", className)}>{children}</div>;\n}\n\nexport interface ConfirmationApprovedProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Renders children (or default approved message) when state is \"approved\"\n */\nexport function ConfirmationApproved({\n children,\n className,\n}: ConfirmationApprovedProps) {\n const { state } = useConfirmationContext();\n if (state !== \"approved\") return null;\n\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-green-600 dark:text-green-400\",\n className,\n )}\n >\n <CheckIcon className=\"h-4 w-4\" />\n {children || <span>Approved</span>}\n </div>\n );\n}\n\nexport interface ConfirmationRejectedProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Renders children (or default rejected message) when state is \"rejected\"\n */\nexport function ConfirmationRejected({\n children,\n className,\n}: ConfirmationRejectedProps) {\n const { state } = useConfirmationContext();\n if (state !== \"rejected\") return null;\n\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-red-600 dark:text-red-400\",\n className,\n )}\n >\n <XIcon className=\"h-4 w-4\" />\n {children || <span>Rejected</span>}\n </div>\n );\n}\n\n// ============================================\n// Content Components\n// ============================================\n\nexport interface ConfirmationMessageProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Displays the approval message\n */\nexport function ConfirmationMessage({\n children,\n className,\n}: ConfirmationMessageProps) {\n const { message } = useConfirmationContext();\n\n return (\n <div className={cn(\"flex items-start gap-3\", className)}>\n <AlertTriangleIcon className=\"mt-0.5 h-5 w-5 flex-shrink-0 text-amber-500\" />\n <p className=\"text-sm text-foreground\">\n {children || message || \"This action requires your approval.\"}\n </p>\n </div>\n );\n}\n\nexport interface ConfirmationActionsProps {\n children?: React.ReactNode;\n className?: string;\n /** Label for reject button */\n rejectLabel?: string;\n /** Label for approve button */\n approveLabel?: string;\n}\n\n/**\n * Renders approval/rejection action buttons\n */\nexport function ConfirmationActions({\n children,\n className,\n rejectLabel = \"Reject\",\n approveLabel = \"Approve\",\n}: ConfirmationActionsProps) {\n const { onApprove, onReject } = useConfirmationContext();\n\n // Allow custom buttons via children\n if (children) {\n return (\n <div className={cn(\"mt-3 flex justify-end gap-2\", className)}>\n {children}\n </div>\n );\n }\n\n return (\n <div className={cn(\"mt-3 flex justify-end gap-2\", className)}>\n <Button variant=\"outline\" size=\"sm\" onClick={onReject}>\n {rejectLabel}\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={onApprove}>\n {approveLabel}\n </Button>\n </div>\n );\n}\n\n// ============================================\n// Simple Confirmation (Convenience Component)\n// ============================================\n\nexport interface SimpleConfirmationProps {\n /** Current approval state */\n state: ConfirmationState;\n /** Message to display */\n message?: string;\n /** Called when user approves */\n onApprove?: () => void;\n /** Called when user rejects */\n onReject?: () => void;\n /** Label for reject button */\n rejectLabel?: string;\n /** Label for approve button */\n approveLabel?: string;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * SimpleConfirmation - Convenience wrapper with all states built-in\n *\n * @example\n * ```tsx\n * <SimpleConfirmation\n * state={execution.approvalStatus === \"required\" ? \"pending\" : execution.approvalStatus}\n * message=\"Delete file /tmp/example.txt?\"\n * onApprove={() => approveToolExecution(execution.id)}\n * onReject={() => rejectToolExecution(execution.id)}\n * />\n * ```\n */\nexport function SimpleConfirmation({\n state,\n message,\n onApprove,\n onReject,\n rejectLabel,\n approveLabel,\n className,\n}: SimpleConfirmationProps) {\n return (\n <Confirmation\n state={state}\n message={message}\n onApprove={onApprove}\n onReject={onReject}\n className={className}\n >\n <ConfirmationPending>\n <ConfirmationMessage />\n <ConfirmationActions\n rejectLabel={rejectLabel}\n approveLabel={approveLabel}\n />\n </ConfirmationPending>\n <ConfirmationApproved />\n <ConfirmationRejected />\n </Confirmation>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport { CheckIcon, XIcon, AlertTriangleIcon } from \"../icons\";\n\n// ============================================\n// Types\n// ============================================\n\n/**\n * Permission level for tool execution\n */\nexport type PermissionLevel =\n | \"ask\"\n | \"allow_always\"\n | \"deny_always\"\n | \"session\";\n\n/**\n * Permission option for dropdown/selection\n */\nexport interface PermissionOption {\n value: PermissionLevel;\n label: string;\n description?: string;\n}\n\n/**\n * Default permission options\n */\nexport const DEFAULT_PERMISSION_OPTIONS: PermissionOption[] = [\n {\n value: \"ask\",\n label: \"Ask every time\",\n description: \"Always prompt before this tool runs\",\n },\n {\n value: \"allow_always\",\n label: \"Allow always\",\n description: \"Never ask again, always approve\",\n },\n {\n value: \"session\",\n label: \"Allow this session\",\n description: \"Allow until you close this page\",\n },\n {\n value: \"deny_always\",\n label: \"Deny always\",\n description: \"Never ask again, always deny\",\n },\n];\n\nexport type ConfirmationState = \"pending\" | \"approved\" | \"rejected\";\n\n// ============================================\n// PermissionConfirmation Component\n// ============================================\n\nexport interface PermissionConfirmationProps {\n /** Current state: pending, approved, or rejected */\n state: ConfirmationState;\n /** Tool name */\n toolName?: string;\n /** Message to display */\n message?: string;\n /** Called when user approves with permission level */\n onApprove?: (permissionLevel: PermissionLevel) => void;\n /** Called when user rejects with permission level */\n onReject?: (permissionLevel?: PermissionLevel) => void;\n /** Show permission options (default: true) */\n showPermissionOptions?: boolean;\n /** Available permission options */\n permissionOptions?: PermissionOption[];\n /** Additional class name */\n className?: string;\n}\n\n/**\n * PermissionConfirmation - Enhanced confirmation with permission level selection\n *\n * Shows a confirmation dialog for tool approval with options to remember the choice.\n *\n * @example\n * ```tsx\n * <PermissionConfirmation\n * state=\"pending\"\n * toolName=\"capture_screenshot\"\n * message=\"Take a screenshot of the current screen?\"\n * onApprove={(level) => approveToolExecution(tool.id, level)}\n * onReject={(level) => rejectToolExecution(tool.id, undefined, level)}\n * />\n * ```\n */\nexport function PermissionConfirmation({\n state,\n toolName,\n message,\n onApprove,\n onReject,\n showPermissionOptions = true,\n permissionOptions = DEFAULT_PERMISSION_OPTIONS,\n className,\n}: PermissionConfirmationProps) {\n const [selectedPermission, setSelectedPermission] =\n React.useState<PermissionLevel>(\"ask\");\n const [showOptions, setShowOptions] = React.useState(false);\n\n const handleApprove = () => {\n onApprove?.(selectedPermission);\n };\n\n const handleReject = () => {\n // Only pass permission level if it's \"deny_always\"\n onReject?.(\n selectedPermission === \"deny_always\" ? \"deny_always\" : undefined,\n );\n };\n\n // Approved state\n if (state === \"approved\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-green-600 dark:text-green-400 rounded-lg border bg-green-50 dark:bg-green-950/20\",\n className,\n )}\n >\n <CheckIcon className=\"h-4 w-4\" />\n <span>Approved</span>\n </div>\n );\n }\n\n // Rejected state\n if (state === \"rejected\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-red-600 dark:text-red-400 rounded-lg border bg-red-50 dark:bg-red-950/20\",\n className,\n )}\n >\n <XIcon className=\"h-4 w-4\" />\n <span>Rejected</span>\n </div>\n );\n }\n\n // Pending state - show confirmation UI\n return (\n <div\n className={cn(\n \"rounded-lg border bg-card text-card-foreground p-4\",\n className,\n )}\n >\n {/* Header with tool name */}\n <div className=\"flex items-start gap-3 mb-3\">\n <AlertTriangleIcon className=\"mt-0.5 h-5 w-5 flex-shrink-0 text-amber-500\" />\n <div className=\"flex-1 min-w-0\">\n {toolName && (\n <p className=\"text-sm font-medium text-foreground\">{toolName}</p>\n )}\n <p className=\"text-sm text-muted-foreground\">\n {message || \"This tool requires your approval to execute.\"}\n </p>\n </div>\n </div>\n\n {/* Permission options */}\n {showPermissionOptions && (\n <div className=\"mb-4\">\n <button\n type=\"button\"\n onClick={() => setShowOptions(!showOptions)}\n className=\"flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n <span>\n {\n permissionOptions.find((o) => o.value === selectedPermission)\n ?.label\n }\n </span>\n <svg\n className={cn(\n \"h-4 w-4 transition-transform\",\n showOptions && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </button>\n\n {showOptions && (\n <div className=\"mt-2 space-y-1 pl-1\">\n {permissionOptions.map((option) => (\n <label\n key={option.value}\n className={cn(\n \"flex items-start gap-2 p-2 rounded-md cursor-pointer transition-colors\",\n selectedPermission === option.value\n ? \"bg-primary/10\"\n : \"hover:bg-muted/50\",\n )}\n >\n <input\n type=\"radio\"\n name=\"permission\"\n value={option.value}\n checked={selectedPermission === option.value}\n onChange={() => setSelectedPermission(option.value)}\n className=\"mt-0.5\"\n />\n <div>\n <div className=\"text-sm font-medium\">{option.label}</div>\n {option.description && (\n <div className=\"text-xs text-muted-foreground\">\n {option.description}\n </div>\n )}\n </div>\n </label>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Action buttons */}\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleReject}>\n Deny\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={handleApprove}>\n Allow\n </Button>\n </div>\n </div>\n );\n}\n\n// ============================================\n// CompactPermissionConfirmation Component\n// ============================================\n\nexport interface CompactPermissionConfirmationProps {\n /** Current state: pending, approved, or rejected */\n state: ConfirmationState;\n /** Message to display */\n message?: string;\n /** Called when user approves */\n onApprove?: (permissionLevel: PermissionLevel) => void;\n /** Called when user rejects */\n onReject?: (permissionLevel?: PermissionLevel) => void;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * CompactPermissionConfirmation - Simpler version with \"Don't ask again\" checkbox\n *\n * @example\n * ```tsx\n * <CompactPermissionConfirmation\n * state=\"pending\"\n * message=\"Take a screenshot?\"\n * onApprove={(level) => approveToolExecution(tool.id, level)}\n * onReject={(level) => rejectToolExecution(tool.id, undefined, level)}\n * />\n * ```\n */\nexport function CompactPermissionConfirmation({\n state,\n message,\n onApprove,\n onReject,\n className,\n}: CompactPermissionConfirmationProps) {\n const [rememberChoice, setRememberChoice] = React.useState(false);\n\n const handleApprove = () => {\n onApprove?.(rememberChoice ? \"allow_always\" : \"ask\");\n };\n\n const handleReject = () => {\n onReject?.(rememberChoice ? \"deny_always\" : undefined);\n };\n\n // Approved state\n if (state === \"approved\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-green-600 dark:text-green-400\",\n className,\n )}\n >\n <CheckIcon className=\"h-4 w-4\" />\n <span>Approved</span>\n </div>\n );\n }\n\n // Rejected state\n if (state === \"rejected\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-red-600 dark:text-red-400\",\n className,\n )}\n >\n <XIcon className=\"h-4 w-4\" />\n <span>Rejected</span>\n </div>\n );\n }\n\n // Pending state\n return (\n <div\n className={cn(\n \"rounded-lg border bg-card text-card-foreground p-4\",\n className,\n )}\n >\n <div className=\"flex items-start gap-3 mb-3\">\n <AlertTriangleIcon className=\"mt-0.5 h-5 w-5 flex-shrink-0 text-amber-500\" />\n <p className=\"text-sm text-foreground\">\n {message || \"This action requires your approval.\"}\n </p>\n </div>\n\n <div className=\"flex items-center justify-between\">\n <label className=\"flex items-center gap-2 text-sm text-muted-foreground cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={rememberChoice}\n onChange={(e) => setRememberChoice(e.target.checked)}\n className=\"rounded border-gray-300\"\n />\n Don't ask again\n </label>\n\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleReject}>\n Deny\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={handleApprove}>\n Allow\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport type FollowUpProps = {\n /** Follow-up questions to display */\n questions: string[];\n /** Called when a follow-up is clicked */\n onSelect: (question: string) => void;\n /** Custom class for container */\n className?: string;\n /** Custom class for buttons */\n buttonClassName?: string;\n};\n\n/**\n * Parse follow-up questions from message content\n * Format: [FOLLOWUP: question1 | question2 | question3]\n */\nexport function parseFollowUps(content: string): {\n cleanContent: string;\n followUps: string[];\n} {\n if (!content) {\n return { cleanContent: content, followUps: [] };\n }\n\n const followUpRegex = /\\[FOLLOWUP:\\s*([^\\]]+)\\]/gi;\n const matches = content.match(followUpRegex);\n\n if (!matches || matches.length === 0) {\n return { cleanContent: content, followUps: [] };\n }\n\n // Extract follow-ups from the last match\n const lastMatch = matches[matches.length - 1];\n const innerContent = lastMatch.replace(/\\[FOLLOWUP:\\s*|\\]/gi, \"\");\n const followUps = innerContent\n .split(\"|\")\n .map((q) => q.trim())\n .filter((q) => q.length > 0);\n\n // Remove ALL FOLLOWUP tags from content\n const cleanContent = content.replace(followUpRegex, \"\").trim();\n\n return { cleanContent, followUps };\n}\n\n/**\n * Follow-up questions component\n * Displays clickable chips for suggested follow-up actions\n */\nexport function FollowUpQuestions({\n questions,\n onSelect,\n className,\n buttonClassName,\n}: FollowUpProps) {\n if (!questions || questions.length === 0) {\n return null;\n }\n\n return (\n <div className={cn(\"flex flex-wrap gap-2 mt-2\", className)}>\n {questions.map((question, index) => (\n <button\n key={index}\n onClick={() => onSelect(question)}\n className={cn(\n \"px-3 py-1.5 text-sm rounded-full\",\n \"bg-primary/10 hover:bg-primary/20 text-primary\",\n \"border border-primary/20 hover:border-primary/40\",\n \"transition-colors duration-150\",\n \"text-left whitespace-nowrap\",\n buttonClassName,\n )}\n >\n {question}\n </button>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/**\n * SDK State for DevLogger\n */\nexport interface DevLoggerState {\n // Chat state\n chat: {\n isLoading: boolean;\n messageCount: number;\n threadId: string;\n error: string | null;\n };\n // Tools state\n tools: {\n isEnabled: boolean;\n isCapturing: boolean;\n pendingConsent: boolean;\n };\n // Agent loop state\n agentLoop: {\n toolExecutions: Array<{\n id: string;\n name: string;\n status: string;\n approvalStatus: string;\n }>;\n pendingApprovals: number;\n iteration: number;\n maxIterations: number;\n };\n // Registered items\n registered: {\n tools: Array<{ name: string; location: string }>;\n actions: Array<{ name: string }>;\n contextCount: number;\n };\n // Permissions\n permissions: {\n stored: Array<{ toolName: string; level: string }>;\n loaded: boolean;\n };\n // Config\n config: {\n provider: string;\n model: string;\n runtimeUrl: string;\n };\n}\n\nexport interface DevLoggerProps {\n /** SDK state to display */\n state: DevLoggerState;\n /** Position of the floating button */\n position?: \"bottom-left\" | \"bottom-right\" | \"top-left\" | \"top-right\";\n /** Custom class name */\n className?: string;\n}\n\n/**\n * DevLogger - Floating debug panel for SDK development\n *\n * Shows a floating button that opens a modal with all SDK state\n * for debugging purposes.\n */\nexport function DevLogger({\n state,\n position = \"bottom-right\",\n className,\n}: DevLoggerProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [activeTab, setActiveTab] = useState<\n \"chat\" | \"tools\" | \"agent\" | \"config\"\n >(\"chat\");\n\n // Position classes\n const positionClasses = {\n \"bottom-left\": \"bottom-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"top-left\": \"top-4 left-4\",\n \"top-right\": \"top-4 right-4\",\n };\n\n return (\n <>\n {/* Floating Button */}\n <button\n type=\"button\"\n onClick={() => setIsOpen(true)}\n className={cn(\n \"fixed z-[9999] flex items-center justify-center\",\n \"w-12 h-12 rounded-full shadow-lg\",\n \"bg-orange-500 hover:bg-orange-600 text-white\",\n \"transition-transform hover:scale-110\",\n positionClasses[position],\n className,\n )}\n title=\"Open SDK DevLogger\"\n >\n <svg\n className=\"w-6 h-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\"\n />\n </svg>\n </button>\n\n {/* Modal Overlay */}\n {isOpen && (\n <div\n className=\"fixed inset-0 z-[10000] flex items-center justify-center bg-black/50\"\n onClick={() => setIsOpen(false)}\n >\n {/* Modal Content */}\n <div\n className=\"bg-background border rounded-lg shadow-xl w-[600px] max-h-[80vh] overflow-hidden\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b bg-muted/50\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-3 h-3 rounded-full bg-orange-500\" />\n <h2 className=\"font-semibold text-sm\">Copilot SDK DevLogger</h2>\n </div>\n <button\n type=\"button\"\n onClick={() => setIsOpen(false)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <svg\n className=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n\n {/* Tabs */}\n <div className=\"flex border-b\">\n {([\"chat\", \"tools\", \"agent\", \"config\"] as const).map((tab) => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setActiveTab(tab)}\n className={cn(\n \"px-4 py-2 text-sm font-medium capitalize\",\n activeTab === tab\n ? \"border-b-2 border-primary text-primary\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n {tab}\n </button>\n ))}\n </div>\n\n {/* Content */}\n <div className=\"p-4 overflow-y-auto max-h-[60vh]\">\n {activeTab === \"chat\" && <ChatTab state={state} />}\n {activeTab === \"tools\" && <ToolsTab state={state} />}\n {activeTab === \"agent\" && <AgentTab state={state} />}\n {activeTab === \"config\" && <ConfigTab state={state} />}\n </div>\n </div>\n </div>\n )}\n </>\n );\n}\n\n/**\n * Chat Tab Content\n */\nfunction ChatTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Status\">\n <Row label=\"Loading\" value={state.chat.isLoading ? \"Yes\" : \"No\"} />\n <Row label=\"Message Count\" value={state.chat.messageCount} />\n <Row label=\"Thread ID\" value={state.chat.threadId} mono />\n <Row\n label=\"Error\"\n value={state.chat.error || \"None\"}\n valueClass={state.chat.error ? \"text-red-500\" : \"text-green-500\"}\n />\n </Section>\n </div>\n );\n}\n\n/**\n * Tools Tab Content\n */\nfunction ToolsTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Smart Context\">\n <Row label=\"Enabled\" value={state.tools.isEnabled ? \"Yes\" : \"No\"} />\n <Row label=\"Capturing\" value={state.tools.isCapturing ? \"Yes\" : \"No\"} />\n <Row\n label=\"Pending Consent\"\n value={state.tools.pendingConsent ? \"Yes\" : \"No\"}\n />\n </Section>\n\n <Section title=\"Registered Tools\">\n {state.registered.tools.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No tools registered</p>\n ) : (\n <div className=\"space-y-1\">\n {state.registered.tools.map((tool) => (\n <div\n key={tool.name}\n className=\"flex items-center justify-between text-sm\"\n >\n <code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">\n {tool.name}\n </code>\n <span className=\"text-muted-foreground text-xs\">\n {tool.location}\n </span>\n </div>\n ))}\n </div>\n )}\n </Section>\n\n <Section title=\"Permissions\">\n <Row label=\"Loaded\" value={state.permissions.loaded ? \"Yes\" : \"No\"} />\n {state.permissions.stored.length > 0 && (\n <div className=\"mt-2 space-y-1\">\n {state.permissions.stored.map((p) => (\n <div\n key={p.toolName}\n className=\"flex items-center justify-between text-sm\"\n >\n <code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">\n {p.toolName}\n </code>\n <Badge level={p.level} />\n </div>\n ))}\n </div>\n )}\n </Section>\n </div>\n );\n}\n\n/**\n * Agent Tab Content\n */\nfunction AgentTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Loop State\">\n <Row\n label=\"Iteration\"\n value={`${state.agentLoop.iteration} / ${state.agentLoop.maxIterations}`}\n />\n <Row\n label=\"Pending Approvals\"\n value={state.agentLoop.pendingApprovals}\n />\n </Section>\n\n <Section title=\"Tool Executions\">\n {state.agentLoop.toolExecutions.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No executions</p>\n ) : (\n <div className=\"space-y-2\">\n {state.agentLoop.toolExecutions.map((exec) => (\n <div\n key={exec.id}\n className=\"border rounded p-2 text-sm space-y-1\"\n >\n <div className=\"flex items-center justify-between\">\n <code className=\"font-medium\">{exec.name}</code>\n <StatusBadge status={exec.status} />\n </div>\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>ID: {exec.id.slice(0, 12)}...</span>\n <span>Approval: {exec.approvalStatus}</span>\n </div>\n </div>\n ))}\n </div>\n )}\n </Section>\n\n <Section title=\"Registered Actions\">\n {state.registered.actions.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No actions registered</p>\n ) : (\n <div className=\"flex flex-wrap gap-1\">\n {state.registered.actions.map((action) => (\n <code\n key={action.name}\n className=\"bg-muted px-1.5 py-0.5 rounded text-xs\"\n >\n {action.name}\n </code>\n ))}\n </div>\n )}\n </Section>\n\n <Section title=\"Context Tree\">\n <Row label=\"Context Items\" value={state.registered.contextCount} />\n </Section>\n </div>\n );\n}\n\n/**\n * Config Tab Content\n */\nfunction ConfigTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Provider\">\n <Row label=\"Provider\" value={state.config.provider || \"Not set\"} />\n <Row label=\"Model\" value={state.config.model || \"Default\"} />\n <Row\n label=\"Runtime URL\"\n value={state.config.runtimeUrl || \"Not set\"}\n mono\n />\n </Section>\n </div>\n );\n}\n\n// Helper Components\n\nfunction Section({\n title,\n children,\n}: {\n title: string;\n children: React.ReactNode;\n}) {\n return (\n <div>\n <h3 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\n {title}\n </h3>\n {children}\n </div>\n );\n}\n\nfunction Row({\n label,\n value,\n mono,\n valueClass,\n}: {\n label: string;\n value: string | number;\n mono?: boolean;\n valueClass?: string;\n}) {\n return (\n <div className=\"flex items-center justify-between py-1 text-sm\">\n <span className=\"text-muted-foreground\">{label}</span>\n <span\n className={cn(\n mono && \"font-mono text-xs bg-muted px-1.5 py-0.5 rounded\",\n valueClass,\n )}\n >\n {value}\n </span>\n </div>\n );\n}\n\nfunction Badge({ level }: { level: string }) {\n const colors: Record<string, string> = {\n allow_always: \"bg-green-100 text-green-800\",\n deny_always: \"bg-red-100 text-red-800\",\n session: \"bg-blue-100 text-blue-800\",\n ask: \"bg-gray-100 text-gray-800\",\n };\n\n return (\n <span\n className={cn(\n \"px-1.5 py-0.5 rounded text-xs font-medium\",\n colors[level] || colors.ask,\n )}\n >\n {level}\n </span>\n );\n}\n\nfunction StatusBadge({ status }: { status: string }) {\n const colors: Record<string, string> = {\n pending: \"bg-yellow-100 text-yellow-800\",\n executing: \"bg-blue-100 text-blue-800\",\n completed: \"bg-green-100 text-green-800\",\n error: \"bg-red-100 text-red-800\",\n };\n\n return (\n <span\n className={cn(\n \"px-1.5 py-0.5 rounded text-xs font-medium\",\n colors[status] || \"bg-gray-100 text-gray-800\",\n )}\n >\n {status}\n </span>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n// ============================================\n// Types\n// ============================================\n\nexport type CapabilityType =\n | \"vision\"\n | \"tools\"\n | \"thinking\"\n | \"streaming\"\n | \"pdf\"\n | \"audio\"\n | \"video\"\n | \"json\";\n\nexport interface CapabilityBadgeProps {\n /** Capability type to display */\n type: CapabilityType;\n /** Whether the capability is supported */\n supported?: boolean;\n /** Show label text next to icon */\n showLabel?: boolean;\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Additional class name */\n className?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nconst icons: Record<CapabilityType, React.ReactNode> = {\n vision: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n ),\n tools: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\" />\n </svg>\n ),\n thinking: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n ),\n streaming: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M22 12h-4l-3 9L9 3l-3 9H2\" />\n </svg>\n ),\n pdf: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n ),\n audio: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\" />\n <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\" />\n </svg>\n ),\n video: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <polygon points=\"23 7 16 12 23 17 23 7\" />\n <rect x=\"1\" y=\"5\" width=\"15\" height=\"14\" rx=\"2\" ry=\"2\" />\n </svg>\n ),\n json: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M4 6h16\" />\n <path d=\"M4 12h16\" />\n <path d=\"M4 18h12\" />\n </svg>\n ),\n};\n\nconst labels: Record<CapabilityType, string> = {\n vision: \"Vision\",\n tools: \"Tools\",\n thinking: \"Thinking\",\n streaming: \"Streaming\",\n pdf: \"PDF\",\n audio: \"Audio\",\n video: \"Video\",\n json: \"JSON\",\n};\n\nconst descriptions: Record<CapabilityType, string> = {\n vision: \"Supports image inputs\",\n tools: \"Supports function calling\",\n thinking: \"Extended reasoning mode\",\n streaming: \"Real-time streaming\",\n pdf: \"Can process PDF files\",\n audio: \"Supports audio inputs\",\n video: \"Supports video inputs\",\n json: \"Structured JSON output\",\n};\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Badge showing a model capability with icon\n *\n * @example\n * ```tsx\n * <CapabilityBadge type=\"vision\" supported />\n * <CapabilityBadge type=\"audio\" supported={false} />\n * ```\n */\nexport function CapabilityBadge({\n type,\n supported = true,\n showLabel = false,\n size = \"sm\",\n className,\n}: CapabilityBadgeProps) {\n const sizeClasses = {\n sm: \"h-5 px-1.5 text-[10px]\",\n md: \"h-6 px-2 text-xs\",\n lg: \"h-7 px-2.5 text-sm\",\n };\n\n const iconSizes = {\n sm: \"w-3 h-3\",\n md: \"w-3.5 h-3.5\",\n lg: \"w-4 h-4\",\n };\n\n return (\n <div\n className={cn(\n \"inline-flex items-center gap-1 rounded-full font-medium transition-colors\",\n sizeClasses[size],\n supported\n ? \"bg-primary/10 text-primary\"\n : \"bg-muted text-muted-foreground opacity-50\",\n className,\n )}\n title={`${labels[type]}: ${descriptions[type]}`}\n >\n <span className={cn(\"flex-shrink-0\", iconSizes[size])}>\n {icons[type]}\n </span>\n {showLabel && <span>{labels[type]}</span>}\n </div>\n );\n}\n\n// ============================================\n// Capability List\n// ============================================\n\nexport interface CapabilityListProps {\n /** Capabilities object */\n capabilities: {\n supportsVision?: boolean;\n supportsTools?: boolean;\n supportsThinking?: boolean;\n supportsStreaming?: boolean;\n supportsPDF?: boolean;\n supportsAudio?: boolean;\n supportsVideo?: boolean;\n supportsJsonMode?: boolean;\n };\n /** Show labels */\n showLabels?: boolean;\n /** Only show supported capabilities */\n onlySupported?: boolean;\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Display a list of capability badges\n *\n * @example\n * ```tsx\n * const { capabilities } = useCapabilities();\n * <CapabilityList capabilities={capabilities} />\n * ```\n */\nexport function CapabilityList({\n capabilities,\n showLabels = false,\n onlySupported = true,\n size = \"sm\",\n className,\n}: CapabilityListProps) {\n const items: Array<{ type: CapabilityType; supported: boolean }> = [\n { type: \"vision\", supported: capabilities.supportsVision ?? false },\n { type: \"tools\", supported: capabilities.supportsTools ?? false },\n { type: \"thinking\", supported: capabilities.supportsThinking ?? false },\n { type: \"streaming\", supported: capabilities.supportsStreaming ?? false },\n { type: \"pdf\", supported: capabilities.supportsPDF ?? false },\n { type: \"audio\", supported: capabilities.supportsAudio ?? false },\n { type: \"video\", supported: capabilities.supportsVideo ?? false },\n { type: \"json\", supported: capabilities.supportsJsonMode ?? false },\n ];\n\n const filteredItems = onlySupported\n ? items.filter((item) => item.supported)\n : items;\n\n if (filteredItems.length === 0) return null;\n\n return (\n <div className={cn(\"flex flex-wrap gap-1\", className)}>\n {filteredItems.map((item) => (\n <CapabilityBadge\n key={item.type}\n type={item.type}\n supported={item.supported}\n showLabel={showLabels}\n size={size}\n />\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { CapabilityList } from \"./capability-badge\";\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ModelOption {\n /** Model ID */\n id: string;\n /** Display name */\n name?: string;\n /** Provider name */\n provider?: string;\n /** Model capabilities (optional, for showing badges) */\n capabilities?: {\n supportsVision?: boolean;\n supportsTools?: boolean;\n supportsThinking?: boolean;\n supportsStreaming?: boolean;\n supportsPDF?: boolean;\n supportsAudio?: boolean;\n supportsVideo?: boolean;\n supportsJsonMode?: boolean;\n };\n}\n\nexport interface ProviderGroup {\n /** Provider name */\n name: string;\n /** Provider display label */\n label?: string;\n /** Models in this provider */\n models: ModelOption[];\n}\n\nexport interface ModelSelectorProps {\n /** Currently selected model ID */\n value?: string;\n /** Called when selection changes */\n onChange?: (modelId: string, provider?: string) => void;\n /** Models grouped by provider */\n providers?: ProviderGroup[];\n /** Flat list of models (alternative to providers) */\n models?: ModelOption[];\n /** Current capabilities (for showing in header) */\n currentCapabilities?: ModelOption[\"capabilities\"];\n /** Placeholder text */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Show capability badges */\n showCapabilities?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Model selector dropdown with provider grouping\n *\n * @example\n * ```tsx\n * const { provider, model, supportedModels } = useCapabilities();\n *\n * <ModelSelector\n * value={model}\n * onChange={(modelId) => console.log('Selected:', modelId)}\n * providers={[\n * {\n * name: 'openai',\n * label: 'OpenAI',\n * models: [\n * { id: 'gpt-4o', name: 'GPT-4o' },\n * { id: 'gpt-4o-mini', name: 'GPT-4o Mini' },\n * ],\n * },\n * ]}\n * />\n * ```\n */\nexport function ModelSelector({\n value,\n onChange,\n providers,\n models,\n currentCapabilities,\n placeholder = \"Select model...\",\n disabled = false,\n size = \"md\",\n showCapabilities = true,\n className,\n}: ModelSelectorProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // Close on outside click\n React.useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n // Find selected model info\n const selectedModel = React.useMemo(() => {\n if (!value) return null;\n\n // Check providers first\n if (providers) {\n for (const provider of providers) {\n const model = provider.models.find((m) => m.id === value);\n if (model) return { ...model, provider: provider.name };\n }\n }\n\n // Check flat models list\n if (models) {\n return models.find((m) => m.id === value) || null;\n }\n\n return null;\n }, [value, providers, models]);\n\n const sizeClasses = {\n sm: \"h-8 text-xs px-2\",\n md: \"h-9 text-sm px-3\",\n lg: \"h-10 text-base px-4\",\n };\n\n const handleSelect = (modelId: string, provider?: string) => {\n onChange?.(modelId, provider);\n setIsOpen(false);\n };\n\n return (\n <div ref={containerRef} className={cn(\"relative\", className)}>\n {/* Trigger button */}\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n className={cn(\n \"flex items-center justify-between gap-2 w-full rounded-md border bg-background\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n sizeClasses[size],\n )}\n >\n <div className=\"flex items-center gap-2 min-w-0\">\n {selectedModel ? (\n <>\n <span className=\"truncate font-medium\">\n {selectedModel.name || selectedModel.id}\n </span>\n {selectedModel.provider && (\n <span className=\"text-muted-foreground text-[10px] uppercase\">\n {selectedModel.provider}\n </span>\n )}\n </>\n ) : (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n )}\n </div>\n\n {/* Chevron */}\n <svg\n className={cn(\n \"w-4 h-4 flex-shrink-0 text-muted-foreground transition-transform\",\n isOpen && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </button>\n\n {/* Show capabilities below button if provided */}\n {showCapabilities && currentCapabilities && (\n <div className=\"mt-1\">\n <CapabilityList\n capabilities={currentCapabilities}\n size=\"sm\"\n onlySupported\n />\n </div>\n )}\n\n {/* Dropdown */}\n {isOpen && (\n <div\n className={cn(\n \"absolute z-50 top-full left-0 right-0 mt-1\",\n \"max-h-[300px] overflow-auto\",\n \"rounded-md border bg-popover text-popover-foreground shadow-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n )}\n >\n {/* Providers with groups */}\n {providers?.map((provider) => (\n <div key={provider.name}>\n {/* Provider header */}\n <div className=\"px-2 py-1.5 text-[10px] font-semibold text-muted-foreground uppercase tracking-wider bg-muted/50\">\n {provider.label || provider.name}\n </div>\n\n {/* Models */}\n {provider.models.map((model) => (\n <button\n key={model.id}\n type=\"button\"\n onClick={() => handleSelect(model.id, provider.name)}\n className={cn(\n \"flex flex-col gap-0.5 w-full px-3 py-2 text-left\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n value === model.id && \"bg-accent\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-sm\">\n {model.name || model.id}\n </span>\n {value === model.id && (\n <svg\n className=\"w-4 h-4 text-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n </div>\n {showCapabilities && model.capabilities && (\n <CapabilityList\n capabilities={model.capabilities}\n size=\"sm\"\n onlySupported\n />\n )}\n </button>\n ))}\n </div>\n ))}\n\n {/* Flat models list */}\n {models?.map((model) => (\n <button\n key={model.id}\n type=\"button\"\n onClick={() => handleSelect(model.id, model.provider)}\n className={cn(\n \"flex flex-col gap-0.5 w-full px-3 py-2 text-left\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n value === model.id && \"bg-accent\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-sm\">\n {model.name || model.id}\n </span>\n {model.provider && (\n <span className=\"text-muted-foreground text-[10px] uppercase\">\n {model.provider}\n </span>\n )}\n {value === model.id && (\n <svg\n className=\"w-4 h-4 text-primary ml-auto\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n </div>\n {showCapabilities && model.capabilities && (\n <CapabilityList\n capabilities={model.capabilities}\n size=\"sm\"\n onlySupported\n />\n )}\n </button>\n ))}\n\n {/* Empty state */}\n {!providers?.length && !models?.length && (\n <div className=\"px-3 py-4 text-center text-sm text-muted-foreground\">\n No models available\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\n// ============================================\n// Simple Model Selector (just a native select)\n// ============================================\n\nexport interface SimpleModelSelectorProps {\n /** Currently selected model ID */\n value?: string;\n /** Called when selection changes */\n onChange?: (modelId: string) => void;\n /** List of model IDs */\n models: string[];\n /** Disabled state */\n disabled?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Simple native select for model selection\n *\n * @example\n * ```tsx\n * const { model, supportedModels } = useCapabilities();\n *\n * <SimpleModelSelector\n * value={model}\n * onChange={(id) => console.log('Selected:', id)}\n * models={supportedModels}\n * />\n * ```\n */\nexport function SimpleModelSelector({\n value,\n onChange,\n models,\n disabled = false,\n className,\n}: SimpleModelSelectorProps) {\n return (\n <select\n value={value || \"\"}\n onChange={(e) => onChange?.(e.target.value)}\n disabled={disabled}\n className={cn(\n \"h-9 px-3 rounded-md border bg-background text-sm\",\n \"focus:outline-none focus:ring-2 focus:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n >\n <option value=\"\" disabled>\n Select model...\n </option>\n {models.map((modelId) => (\n <option key={modelId} value={modelId}>\n {modelId}\n </option>\n ))}\n </select>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { CloseIcon } from \"../../icons\";\n\ntype ChatHeaderProps = {\n title?: string;\n onClose?: () => void;\n className?: string;\n};\n\nexport function ChatHeader({ title, onClose, className }: ChatHeaderProps) {\n return (\n <div\n className={cn(\n \"flex items-center justify-between border-b px-4 py-3\",\n className,\n )}\n >\n <h2 className=\"font-semibold text-foreground\">{title || \"Chat\"}</h2>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"rounded-md p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n aria-label=\"Close chat\"\n >\n <CloseIcon className=\"h-5 w-5\" />\n </button>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../../lib/utils\";\n\ntype SuggestionsProps = {\n suggestions: string[];\n onSuggestionClick?: (suggestion: string) => void;\n className?: string;\n};\n\nexport function Suggestions({\n suggestions,\n onSuggestionClick,\n className,\n}: SuggestionsProps) {\n if (!suggestions.length) return null;\n\n return (\n <div className={cn(\"flex flex-wrap gap-2 px-4 py-2\", className)}>\n {suggestions.map((suggestion, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => onSuggestionClick?.(suggestion)}\n className=\"inline-flex items-center rounded-full border bg-background px-3 py-1.5 text-sm transition-colors hover:bg-muted\"\n >\n {suggestion}\n </button>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Message, MessageAvatar, MessageContent } from \"../../ui/message\";\nimport { SimpleReasoning } from \"../../ui/reasoning\";\nimport { ToolSteps } from \"../../ui/tool-steps\";\nimport {\n PermissionConfirmation,\n type PermissionLevel,\n} from \"../../ui/permission-confirmation\";\nimport { FollowUpQuestions, parseFollowUps } from \"../../ui/follow-up\";\nimport type { ChatMessage, MessageAttachment, ToolRenderers } from \"./types\";\nimport type { ToolDefinition, ToolRenderProps } from \"../../../../core\";\n\ntype DefaultMessageProps = {\n message: ChatMessage;\n userAvatar: { src?: string; fallback?: string };\n assistantAvatar: { src?: string; fallback?: string };\n showUserAvatar?: boolean;\n userMessageClassName?: string;\n assistantMessageClassName?: string;\n /** Font size variant: 'sm' (14px), 'base' (16px), 'lg' (18px) */\n size?: \"sm\" | \"base\" | \"lg\";\n /** Whether this is the last message (for streaming state) */\n isLastMessage?: boolean;\n /** Whether the chat is currently loading/streaming */\n isLoading?: boolean;\n /** Registered tools (for accessing tool's render function) */\n registeredTools?: ToolDefinition[];\n /** Custom renderers for tool results (Generative UI) - higher priority than tool.render */\n toolRenderers?: ToolRenderers;\n /** Called when user approves a tool execution */\n onApproveToolExecution?: (\n executionId: string,\n extraData?: Record<string, unknown>,\n permissionLevel?: PermissionLevel,\n ) => void;\n /** Called when user rejects a tool execution */\n onRejectToolExecution?: (\n executionId: string,\n reason?: string,\n permissionLevel?: PermissionLevel,\n ) => void;\n /** Show follow-up questions (default: true) */\n showFollowUps?: boolean;\n /** Called when a follow-up question is clicked */\n onFollowUpClick?: (question: string) => void;\n /** Custom class for follow-up container */\n followUpClassName?: string;\n /** Custom class for follow-up buttons */\n followUpButtonClassName?: string;\n};\n\nexport function DefaultMessage({\n message,\n userAvatar,\n assistantAvatar,\n showUserAvatar = false,\n userMessageClassName,\n assistantMessageClassName,\n size = \"sm\",\n isLastMessage = false,\n isLoading = false,\n registeredTools,\n toolRenderers,\n onApproveToolExecution,\n onRejectToolExecution,\n showFollowUps = true,\n onFollowUpClick,\n followUpClassName,\n followUpButtonClassName,\n}: DefaultMessageProps) {\n const isUser = message.role === \"user\";\n const isStreaming = isLastMessage && isLoading;\n\n // Parse follow-up questions from assistant messages\n const { cleanContent, followUps } = React.useMemo(() => {\n if (isUser || !message.content) {\n return { cleanContent: message.content, followUps: [] };\n }\n return parseFollowUps(message.content);\n }, [message.content, isUser]);\n\n // Only show follow-ups on the last assistant message when not loading\n const shouldShowFollowUps =\n showFollowUps &&\n !isUser &&\n isLastMessage &&\n !isLoading &&\n followUps.length > 0 &&\n onFollowUpClick;\n\n // User message - right aligned, avatar optional\n if (isUser) {\n const hasAttachments =\n message.attachments && message.attachments.length > 0;\n\n return (\n <Message\n className={cn(\n \"flex gap-2\",\n showUserAvatar ? \"justify-end\" : \"justify-end\",\n )}\n >\n <div className=\"flex flex-col items-end max-w-[80%]\">\n {/* Text content */}\n {message.content && (\n <MessageContent\n className={cn(\n \"rounded-lg px-4 py-2 bg-primary text-primary-foreground\",\n userMessageClassName,\n )}\n size={size}\n >\n {message.content}\n </MessageContent>\n )}\n {/* Image Attachments */}\n {hasAttachments && (\n <div className=\"mt-2 flex flex-wrap gap-2 justify-end\">\n {message.attachments!.map((attachment, index) => (\n <AttachmentPreview key={index} attachment={attachment} />\n ))}\n </div>\n )}\n </div>\n {showUserAvatar && (\n <MessageAvatar\n src={userAvatar.src || \"\"}\n alt=\"User\"\n fallback={userAvatar.fallback}\n />\n )}\n </Message>\n );\n }\n\n // Separate tool executions into categories\n const pendingApprovalTools = message.toolExecutions?.filter(\n (exec) => exec.approvalStatus === \"required\",\n );\n const completedTools = message.toolExecutions?.filter(\n (exec) => exec.approvalStatus !== \"required\",\n );\n\n // Helper: check if tool has any custom render (toolRenderers or tool.render)\n const hasCustomRender = (toolName: string): boolean => {\n if (toolRenderers?.[toolName]) return true;\n const toolDef = registeredTools?.find((t) => t.name === toolName);\n if (toolDef?.render) return true;\n return false;\n };\n\n // Split completed tools: those with custom render vs default ToolSteps\n const toolsWithCustomRender = completedTools?.filter((exec) =>\n hasCustomRender(exec.name),\n );\n const toolsWithoutCustomRender = completedTools?.filter(\n (exec) => !hasCustomRender(exec.name),\n );\n\n // Convert tools without custom render to ToolStepData format\n const toolSteps = toolsWithoutCustomRender?.map((exec) => ({\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n }));\n\n // Assistant message - left aligned with avatar\n return (\n <Message className=\"flex gap-2\">\n <MessageAvatar\n src={assistantAvatar.src || \"\"}\n alt=\"Assistant\"\n fallback={assistantAvatar.fallback}\n className=\"bg-primary text-primary-foreground\"\n />\n <div className=\"flex-1 min-w-0 max-w-[80%]\">\n {/* Reasoning/Thinking (collapsible, above content) */}\n {message.thinking && (\n <SimpleReasoning\n content={message.thinking}\n isStreaming={isStreaming}\n className=\"mb-2\"\n />\n )}\n\n {/* Message Content - show FIRST (AI's words before tool calls) */}\n {cleanContent?.trim() && (\n <MessageContent\n className={cn(\n \"rounded-lg px-4 py-2 bg-muted\",\n assistantMessageClassName,\n )}\n markdown\n size={size}\n >\n {cleanContent}\n </MessageContent>\n )}\n\n {/* Custom Tool Renderers - Priority: toolRenderers > tool.render */}\n {toolsWithCustomRender && toolsWithCustomRender.length > 0 && (\n <div className=\"mt-2 space-y-2\">\n {toolsWithCustomRender.map((exec) => {\n // PRIORITY 1: toolRenderers (app-level override)\n const Renderer = toolRenderers?.[exec.name];\n if (Renderer) {\n return (\n <Renderer\n key={exec.id}\n execution={{\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n approvalStatus: exec.approvalStatus,\n }}\n />\n );\n }\n\n // PRIORITY 2: tool's own render function\n const toolDef = registeredTools?.find(\n (t) => t.name === exec.name,\n );\n if (toolDef?.render) {\n // Map execution status to ToolRenderProps status\n let status: ToolRenderProps[\"status\"] = \"pending\";\n if (exec.status === \"executing\") status = \"executing\";\n else if (exec.status === \"completed\") status = \"completed\";\n else if (\n exec.status === \"error\" ||\n exec.status === \"failed\" ||\n exec.status === \"rejected\"\n )\n status = \"error\";\n\n const renderProps: ToolRenderProps = {\n status,\n args: exec.args,\n result: exec.result,\n error: exec.error,\n toolCallId: exec.id,\n toolName: exec.name,\n };\n const output = toolDef.render(renderProps) as React.ReactNode;\n return <React.Fragment key={exec.id}>{output}</React.Fragment>;\n }\n\n // Shouldn't reach here since we filtered, but fallback\n return null;\n })}\n </div>\n )}\n\n {/* Tool Steps (default display for tools without custom renderers) */}\n {toolSteps && toolSteps.length > 0 && (\n <div className=\"mt-2 rounded-lg bg-muted/50 px-3 py-2\">\n <ToolSteps steps={toolSteps} />\n </div>\n )}\n\n {/* Tool Approval Confirmations - Priority: toolRenderers > tool.render > default */}\n {pendingApprovalTools && pendingApprovalTools.length > 0 && (\n <div className=\"mt-2 space-y-2\">\n {pendingApprovalTools.map((tool) => {\n // Approval callbacks for custom renders\n const approvalCallbacks = {\n onApprove: (extraData?: Record<string, unknown>) =>\n onApproveToolExecution?.(tool.id, extraData),\n onReject: (reason?: string) =>\n onRejectToolExecution?.(tool.id, reason),\n message: tool.approvalMessage,\n };\n\n // PRIORITY 1: toolRenderers (app-level override)\n const CustomRenderer = toolRenderers?.[tool.name];\n if (CustomRenderer) {\n return (\n <CustomRenderer\n key={tool.id}\n execution={tool}\n approval={approvalCallbacks}\n />\n );\n }\n\n // PRIORITY 2: tool's own render function\n const toolDef = registeredTools?.find(\n (t) => t.name === tool.name,\n );\n if (toolDef?.render) {\n const renderProps: ToolRenderProps = {\n status: \"approval-required\",\n args: tool.args,\n result: tool.result,\n error: tool.error,\n toolCallId: tool.id,\n toolName: tool.name,\n approval: approvalCallbacks,\n };\n const output = toolDef.render(renderProps) as React.ReactNode;\n return <React.Fragment key={tool.id}>{output}</React.Fragment>;\n }\n\n // PRIORITY 3: Default PermissionConfirmation\n return (\n <PermissionConfirmation\n key={tool.id}\n state=\"pending\"\n toolName={tool.name}\n message={\n tool.approvalMessage ||\n `This tool wants to execute. Do you approve?`\n }\n onApprove={(permissionLevel) =>\n onApproveToolExecution?.(\n tool.id,\n undefined,\n permissionLevel,\n )\n }\n onReject={(permissionLevel) =>\n onRejectToolExecution?.(tool.id, undefined, permissionLevel)\n }\n />\n );\n })}\n </div>\n )}\n\n {/* Image Attachments */}\n {message.attachments && message.attachments.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {message.attachments.map((attachment, index) => (\n <AttachmentPreview key={index} attachment={attachment} />\n ))}\n </div>\n )}\n\n {/* Follow-up Questions */}\n {shouldShowFollowUps && (\n <FollowUpQuestions\n questions={followUps}\n onSelect={onFollowUpClick!}\n className={followUpClassName}\n buttonClassName={followUpButtonClassName}\n />\n )}\n </div>\n </Message>\n );\n}\n\n/**\n * Attachment preview component\n */\nfunction AttachmentPreview({ attachment }: { attachment: MessageAttachment }) {\n const [expanded, setExpanded] = React.useState(false);\n\n if (attachment.type !== \"image\") {\n // For non-image attachments, show a simple file indicator\n return (\n <div className=\"flex items-center gap-2 rounded-lg border bg-muted/50 px-3 py-2 text-sm\">\n <span className=\"text-muted-foreground\">{attachment.type}</span>\n <span>{attachment.filename || \"Attachment\"}</span>\n </div>\n );\n }\n\n // Image preview - use URL if available, otherwise use base64 data\n let src: string;\n if (attachment.url) {\n src = attachment.url;\n } else if (attachment.data) {\n src = attachment.data.startsWith(\"data:\")\n ? attachment.data\n : `data:${attachment.mimeType};base64,${attachment.data}`;\n } else {\n // No source available - shouldn't happen but handle gracefully\n return null;\n }\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n className=\"relative rounded-lg overflow-hidden border bg-muted/50 hover:opacity-90 transition-opacity\"\n >\n <img\n src={src}\n alt={attachment.filename || \"Image\"}\n className=\"max-w-[200px] max-h-[150px] object-cover\"\n />\n </button>\n\n {/* Fullscreen modal */}\n {expanded && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/80\"\n onClick={() => setExpanded(false)}\n >\n <div className=\"relative max-w-[90vw] max-h-[90vh]\">\n <img\n src={src}\n alt={attachment.filename || \"Image (expanded)\"}\n className=\"max-w-full max-h-full object-contain rounded-lg\"\n />\n <button\n type=\"button\"\n className=\"absolute top-2 right-2 bg-white/90 rounded-full p-2 hover:bg-white transition-colors\"\n onClick={(e) => {\n e.stopPropagation();\n setExpanded(false);\n }}\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n </div>\n )}\n </>\n );\n}\n","\"use client\";\n\nimport React, { useState, useCallback, useRef, useId } from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n ChatContainerRoot,\n ChatContainerContent,\n ChatContainerScrollAnchor,\n} from \"../../ui/chat-container\";\nimport { ScrollButton } from \"../../ui/scroll-button\";\nimport { Message, MessageAvatar } from \"../../ui/message\";\nimport {\n PromptInput,\n PromptInputTextarea,\n PromptInputActions,\n PromptInputAction,\n} from \"../../ui/prompt-input\";\nimport { Loader } from \"../../ui/loader\";\nimport { Button } from \"../../ui/button\";\nimport { StopIcon, PlusIcon, ArrowUpIcon, XIcon } from \"../../icons\";\nimport { ChatHeader } from \"./chat-header\";\nimport { Suggestions } from \"./suggestions\";\nimport { DefaultMessage } from \"./default-message\";\nimport type { ChatProps, PendingAttachment } from \"./types\";\nimport type { ToolExecutionData } from \"../tools\";\n\n// Constants\nconst DEFAULT_MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB\nconst DEFAULT_ALLOWED_TYPES = [\"image/*\", \"application/pdf\"];\n\n/**\n * Get attachment type from MIME type\n */\nfunction getAttachmentType(\n mimeType: string,\n): \"image\" | \"file\" | \"audio\" | \"video\" {\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n return \"file\";\n}\n\n/**\n * Convert file to base64 data URL\n */\nfunction fileToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === \"string\") {\n resolve(reader.result);\n } else {\n reject(new Error(\"Failed to read file\"));\n }\n };\n reader.onerror = () => reject(new Error(\"Failed to read file\"));\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Generate unique attachment ID\n */\nfunction generateAttachmentId(): string {\n return `att_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\n\nexport function Chat({\n // Core\n messages = [],\n onSendMessage,\n onStop,\n isLoading = false,\n // Labels\n placeholder = \"Type a message...\",\n welcomeMessage,\n title,\n // Header\n showHeader = false,\n onClose,\n // Appearance\n showPoweredBy = true,\n showUserAvatar = false,\n userAvatar = { fallback: \"U\" },\n assistantAvatar = { fallback: \"AI\" },\n loaderVariant = \"typing\",\n fontSize = \"sm\",\n // Attachments\n maxFileSize = DEFAULT_MAX_FILE_SIZE,\n allowedFileTypes = DEFAULT_ALLOWED_TYPES,\n attachmentsEnabled = true,\n attachmentsDisabledTooltip = \"Attachments not supported by this model\",\n processAttachment: processAttachmentProp,\n // Suggestions\n suggestions = [],\n onSuggestionClick,\n // Tool Executions\n isProcessing = false,\n registeredTools,\n toolRenderers,\n onApproveToolExecution,\n onRejectToolExecution,\n // Follow-up Questions\n showFollowUps = true,\n followUpClassName,\n followUpButtonClassName,\n // Custom rendering\n renderMessage,\n renderInput,\n renderHeader,\n // Styling\n className,\n classNames = {},\n}: ChatProps) {\n const [input, setInput] = useState(\"\");\n const [pendingAttachments, setPendingAttachments] = useState<\n PendingAttachment[]\n >([]);\n const [isDragging, setIsDragging] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const fileInputId = useId(); // Unique ID for this Chat instance's file input\n\n // Check if file type is allowed\n const isFileTypeAllowed = useCallback(\n (file: File): boolean => {\n for (const type of allowedFileTypes) {\n if (type.endsWith(\"/*\")) {\n const category = type.slice(0, -2);\n if (file.type.startsWith(category + \"/\")) return true;\n } else if (file.type === type) {\n return true;\n }\n }\n return false;\n },\n [allowedFileTypes],\n );\n\n // Handle file selection\n const handleFileSelect = useCallback(\n async (files: FileList | null) => {\n if (!files || !attachmentsEnabled) return;\n\n for (const file of Array.from(files)) {\n // Validate file size\n if (file.size > maxFileSize) {\n const sizeMB = (maxFileSize / (1024 * 1024)).toFixed(0);\n console.warn(`File ${file.name} exceeds ${sizeMB}MB limit`);\n continue;\n }\n\n // Validate file type\n if (!isFileTypeAllowed(file)) {\n console.warn(`File type ${file.type} is not allowed`);\n continue;\n }\n\n const id = generateAttachmentId();\n const previewUrl = URL.createObjectURL(file);\n\n // Add as processing\n setPendingAttachments((prev) => [\n ...prev,\n {\n id,\n file,\n previewUrl,\n attachment: {\n type: getAttachmentType(file.type),\n data: \"\",\n mimeType: file.type,\n filename: file.name,\n },\n status: \"processing\",\n },\n ]);\n\n // Process attachment (cloud upload or base64 conversion)\n try {\n let attachment: {\n type: \"image\" | \"file\" | \"audio\" | \"video\";\n data?: string;\n url?: string;\n mimeType: string;\n filename?: string;\n };\n\n if (processAttachmentProp) {\n // Use provided processor (e.g., cloud storage upload)\n attachment = await processAttachmentProp(file);\n } else {\n // Default: convert to base64\n const data = await fileToBase64(file);\n attachment = {\n type: getAttachmentType(file.type),\n data,\n mimeType: file.type,\n filename: file.name,\n };\n }\n\n setPendingAttachments((prev) =>\n prev.map((att) =>\n att.id === id\n ? { ...att, status: \"ready\" as const, attachment }\n : att,\n ),\n );\n } catch (error) {\n setPendingAttachments((prev) =>\n prev.map((att) =>\n att.id === id\n ? {\n ...att,\n status: \"error\" as const,\n error: \"Failed to process file\",\n }\n : att,\n ),\n );\n }\n }\n },\n [attachmentsEnabled, maxFileSize, isFileTypeAllowed, processAttachmentProp],\n );\n\n // Handle file input change\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFileSelect(e.target.files);\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n },\n [handleFileSelect],\n );\n\n // Remove pending attachment\n const removePendingAttachment = useCallback((id: string) => {\n setPendingAttachments((prev) => {\n const att = prev.find((a) => a.id === id);\n if (att) {\n URL.revokeObjectURL(att.previewUrl);\n }\n return prev.filter((a) => a.id !== id);\n });\n }, []);\n\n // Drag and drop handlers\n const handleDragOver = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (attachmentsEnabled) {\n setIsDragging(true);\n }\n },\n [attachmentsEnabled],\n );\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n if (attachmentsEnabled) {\n handleFileSelect(e.dataTransfer.files);\n }\n },\n [attachmentsEnabled, handleFileSelect],\n );\n\n const handleSubmit = useCallback(() => {\n const hasContent = input.trim();\n const hasAttachments = pendingAttachments.some(\n (att) => att.status === \"ready\",\n );\n\n if ((!hasContent && !hasAttachments) || isLoading) return;\n\n // Get ready attachments\n const attachments = pendingAttachments\n .filter((att) => att.status === \"ready\")\n .map((att) => att.attachment);\n\n onSendMessage?.(input, attachments.length > 0 ? attachments : undefined);\n\n // Cleanup\n pendingAttachments.forEach((att) => URL.revokeObjectURL(att.previewUrl));\n setPendingAttachments([]);\n setInput(\"\");\n }, [input, isLoading, onSendMessage, pendingAttachments]);\n\n const handleSuggestionClick = useCallback(\n (suggestion: string) => {\n if (onSuggestionClick) {\n onSuggestionClick(suggestion);\n } else {\n onSendMessage?.(suggestion);\n }\n },\n [onSuggestionClick, onSendMessage],\n );\n\n // Compute accept string from allowed types\n const acceptString = allowedFileTypes.join(\",\");\n\n return (\n <div\n className={cn(\n \"flex h-full flex-col bg-background relative\",\n className,\n classNames.root,\n )}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n {/* Drag overlay */}\n {isDragging && (\n <div className=\"absolute inset-0 z-50 bg-primary/10 border-2 border-dashed border-primary flex items-center justify-center\">\n <div className=\"text-primary font-medium text-lg\">\n Drop files here\n </div>\n </div>\n )}\n {/* Header */}\n {showHeader &&\n (renderHeader ? (\n renderHeader()\n ) : (\n <ChatHeader\n title={title}\n onClose={onClose}\n className={classNames.header}\n />\n ))}\n\n {/* Messages */}\n <ChatContainerRoot\n className={cn(\"relative flex-1\", classNames.container)}\n >\n <ChatContainerContent\n className={cn(\"gap-4 p-4\", classNames.messageList)}\n >\n {/* Welcome message */}\n {messages.length === 0 && (\n <div className=\"py-8 text-center text-muted-foreground\">\n {welcomeMessage || \"Send a message to start the conversation\"}\n </div>\n )}\n\n {/* Messages */}\n {messages.map((message, index) => {\n const isLastMessage = index === messages.length - 1;\n const isEmptyAssistant =\n message.role === \"assistant\" && !message.content?.trim();\n\n // Check if message has tool_calls or toolExecutions\n const hasToolCalls =\n message.tool_calls && message.tool_calls.length > 0;\n const hasToolExecutions =\n message.toolExecutions && message.toolExecutions.length > 0;\n\n // Check if this message has pending tool approvals\n const hasPendingApprovals = message.toolExecutions?.some(\n (exec) => exec.approvalStatus === \"required\",\n );\n\n if (isEmptyAssistant) {\n if (hasToolCalls || hasToolExecutions) {\n // Has tools - continue to render\n } else if (isLastMessage && hasPendingApprovals) {\n // Has pending approvals - continue to render\n } else if (isLastMessage && isLoading && !isProcessing) {\n // Show streaming loader\n return (\n <Message key={message.id} className=\"flex gap-2\">\n <MessageAvatar\n src={assistantAvatar.src || \"\"}\n alt=\"Assistant\"\n fallback={assistantAvatar.fallback}\n className=\"bg-primary text-primary-foreground\"\n />\n <div className=\"rounded-lg bg-muted px-4 py-2\">\n <Loader variant={loaderVariant} size=\"sm\" />\n </div>\n </Message>\n );\n } else {\n // Hide empty assistant messages\n return null;\n }\n }\n\n // Check for saved executions in metadata (historical)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const savedExecutions = (message as any).metadata\n ?.toolExecutions as ToolExecutionData[] | undefined;\n const messageToolExecutions =\n message.toolExecutions || savedExecutions;\n\n const messageWithExecutions = messageToolExecutions\n ? { ...message, toolExecutions: messageToolExecutions }\n : message;\n\n // Handle follow-up click - use onSendMessage if available\n const handleFollowUpClick = (question: string) => {\n if (onSuggestionClick) {\n onSuggestionClick(question);\n } else {\n onSendMessage?.(question);\n }\n };\n\n return renderMessage ? (\n <React.Fragment key={message.id}>\n {renderMessage(messageWithExecutions, index)}\n </React.Fragment>\n ) : (\n <DefaultMessage\n key={message.id}\n message={messageWithExecutions}\n userAvatar={userAvatar}\n assistantAvatar={assistantAvatar}\n showUserAvatar={showUserAvatar}\n userMessageClassName={classNames.userMessage}\n assistantMessageClassName={classNames.assistantMessage}\n size={fontSize}\n isLastMessage={isLastMessage}\n isLoading={isLoading}\n registeredTools={registeredTools}\n toolRenderers={toolRenderers}\n onApproveToolExecution={onApproveToolExecution}\n onRejectToolExecution={onRejectToolExecution}\n showFollowUps={showFollowUps}\n onFollowUpClick={handleFollowUpClick}\n followUpClassName={followUpClassName}\n followUpButtonClassName={followUpButtonClassName}\n />\n );\n })}\n\n {/* \"Continuing...\" loader - shown after tool completion while waiting for server */}\n {isProcessing && (\n <Message className=\"flex gap-2\">\n <MessageAvatar\n src={assistantAvatar?.src || \"\"}\n alt=\"Assistant\"\n fallback={assistantAvatar?.fallback || \"AI\"}\n className=\"bg-primary text-primary-foreground\"\n />\n <div className=\"rounded-lg bg-muted px-4 py-2 flex items-center gap-2\">\n <Loader variant=\"dots\" size=\"sm\" />\n <span className=\"text-sm text-muted-foreground\">\n Continuing...\n </span>\n </div>\n </Message>\n )}\n\n {/* Loading indicator for non-streaming - when last message is user and waiting for response */}\n {isLoading &&\n !isProcessing &&\n (() => {\n const lastMessage = messages[messages.length - 1];\n // Show loader if last message is from user (non-streaming doesn't create empty assistant message)\n if (lastMessage?.role === \"user\") {\n return (\n <Message className=\"flex gap-2\">\n <MessageAvatar\n src={assistantAvatar?.src || \"\"}\n alt=\"Assistant\"\n fallback={assistantAvatar?.fallback || \"AI\"}\n className=\"bg-primary text-primary-foreground\"\n />\n <div className=\"rounded-lg bg-muted px-4 py-2\">\n <Loader variant={loaderVariant} size=\"sm\" />\n </div>\n </Message>\n );\n }\n return null;\n })()}\n\n <ChatContainerScrollAnchor />\n </ChatContainerContent>\n\n {/* Scroll to bottom button */}\n <div className=\"absolute right-4 bottom-4\">\n <ScrollButton className=\"shadow-sm\" />\n </div>\n </ChatContainerRoot>\n\n {/* Suggestions */}\n {suggestions.length > 0 && !isLoading && (\n <Suggestions\n suggestions={suggestions}\n onSuggestionClick={handleSuggestionClick}\n className={classNames.suggestions}\n />\n )}\n\n {/* Input */}\n {renderInput ? (\n renderInput()\n ) : (\n <div className={cn(\"p-2\", classNames.input)}>\n {/* Pending Attachments Preview */}\n {pendingAttachments.length > 0 && (\n <div className=\"flex flex-wrap gap-2 p-2 mb-2 bg-muted/30 rounded-lg\">\n {pendingAttachments.map((att) => (\n <div key={att.id} className=\"relative group\">\n {att.attachment.type === \"image\" ? (\n <img\n src={att.previewUrl}\n alt={att.file.name}\n className=\"w-16 h-16 object-cover rounded-lg border\"\n />\n ) : (\n <div className=\"w-16 h-16 bg-muted rounded-lg border flex flex-col items-center justify-center p-1\">\n <svg\n className=\"w-6 h-6 text-muted-foreground\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n <span className=\"text-[10px] text-muted-foreground truncate w-full text-center mt-1\">\n {att.file.name.length > 10\n ? att.file.name.slice(0, 8) + \"...\"\n : att.file.name}\n </span>\n </div>\n )}\n {/* Loading overlay */}\n {att.status === \"processing\" && (\n <div className=\"absolute inset-0 bg-background/80 rounded-lg flex items-center justify-center\">\n <Loader variant=\"dots\" size=\"sm\" />\n </div>\n )}\n {/* Error overlay */}\n {att.status === \"error\" && (\n <div className=\"absolute inset-0 bg-destructive/20 rounded-lg flex items-center justify-center\">\n <span className=\"text-destructive text-xs\">Error</span>\n </div>\n )}\n {/* Remove button */}\n <button\n onClick={() => removePendingAttachment(att.id)}\n className=\"absolute -top-1.5 -right-1.5 bg-destructive text-destructive-foreground rounded-full p-0.5 opacity-0 group-hover:opacity-100 transition-opacity\"\n type=\"button\"\n >\n <XIcon className=\"w-3 h-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n <PromptInput\n value={input}\n onValueChange={setInput}\n isLoading={isLoading}\n onSubmit={handleSubmit}\n className=\"\"\n >\n <PromptInputTextarea placeholder={placeholder} />\n <PromptInputActions className=\"flex justify-between\">\n <div>\n <PromptInputAction\n tooltip={\n attachmentsEnabled\n ? \"Attach files\"\n : attachmentsDisabledTooltip\n }\n >\n <label\n htmlFor={fileInputId}\n className={cn(\n \"flex h-8 w-8 items-center justify-center rounded-2xl\",\n attachmentsEnabled\n ? \"hover:bg-secondary-foreground/10 cursor-pointer\"\n : \"opacity-50 cursor-not-allowed\",\n )}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={acceptString}\n onChange={handleInputChange}\n className=\"hidden\"\n id={fileInputId}\n disabled={!attachmentsEnabled}\n />\n <PlusIcon className=\"text-primary size-5\" />\n </label>\n </PromptInputAction>\n </div>\n <PromptInputAction tooltip={isLoading ? \"Stop\" : \"Send\"}>\n {isLoading ? (\n <Button\n size=\"sm\"\n variant=\"destructive\"\n className=\"rounded-full size-9\"\n onClick={onStop}\n >\n <StopIcon className=\"h-4 w-4\" />\n </Button>\n ) : (\n <Button\n size=\"sm\"\n className=\"rounded-full size-9\"\n onClick={handleSubmit}\n disabled={\n !input.trim() &&\n !pendingAttachments.some((att) => att.status === \"ready\")\n }\n >\n <ArrowUpIcon className=\"h-4 w-4\" />\n </Button>\n )}\n </PromptInputAction>\n </PromptInputActions>\n </PromptInput>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Message, MessageAvatar } from \"../../ui/message\";\nimport { ToolSteps, type ToolStepData } from \"../../ui/tool-steps\";\nimport {\n PermissionConfirmation,\n type PermissionLevel,\n} from \"../../ui/permission-confirmation\";\nimport type { ToolExecutionData } from \"../tools/tool-execution-list\";\n\ninterface ToolExecutionMessageProps {\n executions: ToolExecutionData[];\n assistantAvatar?: { src?: string; fallback?: string };\n /** Called when user approves with optional extraData from custom UI */\n onApprove?: (\n executionId: string,\n extraData?: Record<string, unknown>,\n permissionLevel?: PermissionLevel,\n ) => void;\n onReject?: (\n executionId: string,\n reason?: string,\n permissionLevel?: PermissionLevel,\n ) => void;\n /** Custom tool renderers that can handle approval UI */\n toolRenderers?: Record<\n string,\n React.ComponentType<{\n execution: ToolExecutionData;\n approval?: {\n onApprove: (extraData?: Record<string, unknown>) => void;\n onReject: (reason?: string) => void;\n message?: string;\n };\n }>\n >;\n className?: string;\n}\n\n/**\n * Standalone tool execution message shown during agentic loop\n * Displays tool calls with status, progress, and approval UI\n */\nexport function ToolExecutionMessage({\n executions,\n assistantAvatar = { fallback: \"AI\" },\n onApprove,\n onReject,\n toolRenderers,\n className,\n}: ToolExecutionMessageProps) {\n if (!executions || executions.length === 0) return null;\n\n // Separate pending approvals from other executions\n const pendingApprovals = executions.filter(\n (exec) => exec.approvalStatus === \"required\",\n );\n const otherExecutions = executions.filter(\n (exec) => exec.approvalStatus !== \"required\",\n );\n\n // Convert to ToolStepData format\n const toolSteps: ToolStepData[] = otherExecutions.map((exec) => ({\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n }));\n\n // Check if any tool is currently executing\n const hasExecuting = executions.some((exec) => exec.status === \"executing\");\n const hasCompleted = executions.some((exec) => exec.status === \"completed\");\n const allCompleted = executions.every(\n (exec) => exec.status === \"completed\" || exec.status === \"error\",\n );\n\n return (\n <Message className={cn(\"flex gap-2\", className)}>\n <MessageAvatar\n src={assistantAvatar.src || \"\"}\n alt=\"Assistant\"\n fallback={assistantAvatar.fallback}\n className=\"bg-primary text-primary-foreground\"\n />\n <div className=\"flex-1 min-w-0 max-w-[85%]\">\n {/* Header with status */}\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"flex items-center gap-1.5\">\n {hasExecuting && (\n <svg\n className=\"size-3.5 animate-spin text-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )}\n {!hasExecuting && allCompleted && (\n <svg\n className=\"size-3.5 text-green-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n <span className=\"text-xs font-medium text-muted-foreground\">\n {hasExecuting\n ? \"Running tools...\"\n : allCompleted\n ? `${executions.length} tool${executions.length > 1 ? \"s\" : \"\"} completed`\n : \"Tools\"}\n </span>\n </div>\n </div>\n\n {/* Tool Approval Confirmations */}\n {pendingApprovals.length > 0 && (\n <div className=\"mb-2 space-y-2\">\n {pendingApprovals.map((tool) => {\n // Check if there's a custom renderer for this tool\n const CustomRenderer = toolRenderers?.[tool.name];\n\n if (CustomRenderer) {\n // Use custom renderer with approval callbacks\n return (\n <CustomRenderer\n key={tool.id}\n execution={tool}\n approval={{\n onApprove: (extraData) => onApprove?.(tool.id, extraData),\n onReject: (reason) => onReject?.(tool.id, reason),\n message: tool.approvalMessage,\n }}\n />\n );\n }\n\n // Default: use PermissionConfirmation\n return (\n <PermissionConfirmation\n key={tool.id}\n state=\"pending\"\n toolName={tool.name}\n message={\n tool.approvalMessage ||\n `This tool wants to execute. Do you approve?`\n }\n onApprove={(permissionLevel) =>\n onApprove?.(tool.id, undefined, permissionLevel)\n }\n onReject={(permissionLevel) =>\n onReject?.(tool.id, undefined, permissionLevel)\n }\n />\n );\n })}\n </div>\n )}\n\n {/* Tool Steps */}\n {toolSteps.length > 0 && (\n <div className=\"rounded-lg border bg-card px-3 py-2.5 shadow-sm\">\n <ToolSteps steps={toolSteps} />\n </div>\n )}\n </div>\n </Message>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport {\n useCopilot,\n type UIMessage,\n type ChatToolExecution,\n} from \"../../../react\";\nimport { Chat, type ChatProps } from \"./chat\";\nimport type { ToolExecutionData } from \"./tools/tool-execution-list\";\n\n/**\n * Props for CopilotChat - auto-connects to CopilotProvider context\n * No need to pass messages, sendMessage, etc. - handled internally\n */\nexport type CopilotChatProps = Omit<\n ChatProps,\n | \"messages\"\n | \"onSendMessage\"\n | \"onStop\"\n | \"isLoading\"\n | \"isProcessing\"\n | \"onApproveToolExecution\"\n | \"onRejectToolExecution\"\n | \"processAttachment\"\n>;\n\n/**\n * CopilotChat - Auto-connected chat component\n *\n * Automatically connects to CopilotProvider context.\n * No need to use hooks or pass messages - everything is handled internally.\n *\n * @example\n * ```tsx\n * import { CopilotProvider } from '../../react';\n * import { CopilotChat } from '@yourgpt/copilot-sdk-ui';\n *\n * function App() {\n * return (\n * <CopilotProvider runtimeUrl=\"/api/chat\">\n * <CopilotChat\n * title=\"AI Assistant\"\n * placeholder=\"Ask anything...\"\n * />\n * </CopilotProvider>\n * );\n * }\n * ```\n *\n * @example Generative UI with custom tool renderers\n * ```tsx\n * import { CopilotChat, type ToolRendererProps } from '@yourgpt/copilot-sdk-ui';\n *\n * function WeatherCard({ execution }: ToolRendererProps) {\n * if (execution.status !== 'completed') return <div>Loading...</div>;\n * return <div>{execution.result.city}: {execution.result.temperature}°</div>;\n * }\n *\n * <CopilotChat\n * toolRenderers={{\n * get_weather: WeatherCard,\n * }}\n * />\n * ```\n */\nexport function CopilotChat(props: CopilotChatProps) {\n // Auto-connect to context internally\n const {\n messages,\n isLoading,\n sendMessage,\n stop,\n toolExecutions: rawToolExecutions,\n approveToolExecution,\n rejectToolExecution,\n registeredTools,\n } = useCopilot();\n\n // Convert tool executions to the expected format\n const toolExecutions: ToolExecutionData[] = rawToolExecutions.map(\n (exec: ChatToolExecution) => ({\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result as ToolExecutionData[\"result\"],\n error: exec.error,\n timestamp: exec.startedAt ? exec.startedAt.getTime() : Date.now(),\n approvalStatus: exec.approvalStatus,\n }),\n );\n\n // Build map of tool results from tool messages (for merging)\n const toolResultsMap = new Map<string, string>();\n messages\n .filter((m: UIMessage) => m.role === \"tool\" && m.toolCallId)\n .forEach((m: UIMessage) => {\n toolResultsMap.set(m.toolCallId!, m.content ?? \"\");\n });\n\n // Filter out tool messages and merge results into parent assistant messages\n const visibleMessages = messages\n .filter((m: UIMessage) => m.role !== \"tool\") // Hide tool messages - results merged into assistant\n .map((m: UIMessage) => {\n // For assistant messages with tool_calls, merge results\n let messageToolExecutions: ToolExecutionData[] | undefined;\n\n if (m.role === \"assistant\" && m.toolCalls && m.toolCalls.length > 0) {\n const toolCallIds = new Set(\n m.toolCalls.map((tc: { id: string }) => tc.id),\n );\n\n // Try live executions first (from agentLoop)\n const liveExecutions = toolExecutions.filter(\n (exec: ToolExecutionData) => toolCallIds.has(exec.id),\n );\n\n if (liveExecutions.length > 0) {\n // Enrich live executions with results from tool messages if not already present\n messageToolExecutions = liveExecutions.map(\n (exec: ToolExecutionData) => {\n if (!exec.result && toolResultsMap.has(exec.id)) {\n const resultContent = toolResultsMap.get(exec.id)!;\n try {\n return { ...exec, result: JSON.parse(resultContent) };\n } catch {\n return {\n ...exec,\n result: { success: true, message: resultContent },\n };\n }\n }\n return exec;\n },\n );\n } else {\n // Build from stored tool_calls + tool messages (historical)\n messageToolExecutions = m.toolCalls.map(\n (tc: {\n id: string;\n function: { name: string; arguments: string };\n }) => {\n const resultContent = toolResultsMap.get(tc.id);\n let result: ToolExecutionData[\"result\"] = undefined;\n if (resultContent) {\n try {\n result = JSON.parse(resultContent);\n } catch {\n result = { success: true, message: resultContent };\n }\n }\n let args: Record<string, unknown> = {};\n try {\n args = JSON.parse(tc.function.arguments || \"{}\");\n } catch {\n // Keep empty args\n }\n return {\n id: tc.id,\n name: tc.function.name,\n args,\n status: (result\n ? \"completed\"\n : \"pending\") as ToolExecutionData[\"status\"],\n result,\n timestamp: Date.now(), // Historical - use current time\n };\n },\n );\n }\n }\n\n // Check for saved executions in metadata (for historical messages without tool_calls)\n const savedExecutions = (\n m.metadata as { toolExecutions?: ToolExecutionData[] }\n )?.toolExecutions;\n if (\n savedExecutions &&\n savedExecutions.length > 0 &&\n !messageToolExecutions\n ) {\n messageToolExecutions = savedExecutions;\n }\n\n return {\n id: m.id,\n role: m.role as \"user\" | \"assistant\" | \"system\",\n content: m.content ?? \"\",\n thinking: m.thinking,\n // Include attachments (images, files)\n attachments: m.attachments,\n // Include tool_calls for assistant messages\n tool_calls: m.toolCalls,\n // Attach matched tool executions to assistant messages\n toolExecutions: messageToolExecutions,\n };\n });\n\n // Show suggestions only when no messages\n const suggestions =\n visibleMessages.length === 0 && props.suggestions?.length\n ? props.suggestions\n : [];\n\n // isProcessing: Show \"Continuing...\" loader ONLY when we're in an active tool flow\n // Condition: Last message must be assistant with tool_calls (not user starting new request)\n const lastMessage = messages[messages.length - 1];\n const isInToolFlow =\n lastMessage?.role === \"assistant\" &&\n (lastMessage as UIMessage).toolCalls?.length;\n\n let isProcessingToolResults = false;\n\n if (isLoading && isInToolFlow) {\n const currentToolCallIds = new Set(\n (lastMessage as UIMessage).toolCalls?.map(\n (tc: { id: string }) => tc.id,\n ) || [],\n );\n const currentExecutions = toolExecutions.filter((exec) =>\n currentToolCallIds.has(exec.id),\n );\n\n const hasCompletedTools = currentExecutions.some(\n (exec) =>\n exec.status === \"completed\" ||\n exec.status === \"error\" ||\n exec.status === \"failed\",\n );\n const hasExecutingTools = currentExecutions.some(\n (exec) => exec.status === \"executing\" || exec.status === \"pending\",\n );\n\n // Show \"Continuing...\" only when tools completed and waiting for AI to continue\n isProcessingToolResults = hasCompletedTools && !hasExecutingTools;\n }\n\n return (\n <Chat\n {...props}\n messages={visibleMessages}\n onSendMessage={sendMessage}\n onStop={stop}\n isLoading={isLoading}\n showPoweredBy={props.showPoweredBy ?? true}\n suggestions={suggestions}\n isProcessing={isProcessingToolResults}\n onApproveToolExecution={approveToolExecution}\n onRejectToolExecution={rejectToolExecution}\n registeredTools={registeredTools}\n />\n );\n}\n\n// Alias for backwards compatibility\nexport const ConnectedChat = CopilotChat;\nexport type ConnectedChatProps = CopilotChatProps;\n","\"use client\";\n\nimport { cn } from \"../../lib/utils\";\n\nexport type PoweredByProps = {\n className?: string;\n showLogo?: boolean;\n};\n\nfunction YourGPTLogo({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\" />\n <path d=\"M2 17l10 5 10-5\" />\n <path d=\"M2 12l10 5 10-5\" />\n </svg>\n );\n}\n\nexport function PoweredBy({ className, showLogo = true }: PoweredByProps) {\n return (\n <div\n className={cn(\n \"flex items-center justify-center gap-1.5 py-2 text-xs text-muted-foreground\",\n className,\n )}\n >\n <span>Powered by</span>\n {showLogo && <YourGPTLogo className=\"h-3 w-3\" />}\n <a\n href=\"https://yourgpt.ai\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"font-medium text-foreground hover:underline\"\n >\n YourGPT\n </a>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/ui/lib/utils.ts","../../src/ui/components/ui/loader.tsx","../../src/ui/components/ui/code-block.tsx","../../src/ui/components/ui/markdown.tsx","../../src/ui/components/ui/button.tsx","../../src/ui/components/ui/feedback-bar.tsx","../../src/ui/components/ui/chat-container.tsx","../../src/ui/components/ui/scroll-button.tsx","../../src/ui/components/ui/tooltip.tsx","../../src/ui/components/ui/avatar.tsx","../../src/ui/components/ui/message.tsx","../../src/ui/components/ui/textarea.tsx","../../src/ui/components/ui/prompt-input.tsx","../../src/ui/components/ui/hover-card.tsx","../../src/ui/components/ui/source.tsx","../../src/ui/components/ui/reasoning.tsx","../../src/ui/context/copilot-ui-context.tsx","../../src/ui/components/ui/tool-steps.tsx","../../src/ui/components/icons/index.tsx","../../src/ui/components/ui/confirmation.tsx","../../src/ui/components/ui/permission-confirmation.tsx","../../src/ui/components/ui/follow-up.tsx","../../src/ui/components/ui/dev-logger.tsx","../../src/ui/components/ui/capability-badge.tsx","../../src/ui/components/ui/model-selector.tsx","../../src/ui/components/ui/popover.tsx","../../src/ui/components/ui/thread-picker.tsx","../../src/ui/components/ui/thread-list.tsx","../../src/ui/components/icons/copilot-sdk-logo.tsx","../../src/ui/components/composed/chat/chat-header.tsx","../../src/ui/components/composed/chat/suggestions.tsx","../../src/ui/components/composed/chat/default-message.tsx","../../src/ui/components/composed/chat/chat-welcome.tsx","../../src/ui/components/composed/chat/chat.tsx","../../src/ui/components/composed/chat/tool-execution-message.tsx","../../src/ui/hooks/useInternalThreadManager.ts","../../src/ui/components/composed/connected-chat.tsx","../../src/ui/components/composed/powered-by.tsx"],"names":["jsx","React2","jsxs","StickToBottomOriginal","BaseTooltip","React","React4","React5","useState","React7","createContext","useContext","React9","React10","ChevronDownIcon","ThumbsUpIcon","ThumbsDownIcon","XIcon","React11","React12","Fragment","React13","BasePopover","React14","PlusIcon","CheckIcon","React15","formatDate","TrashIcon","React16","React17","useRef","useId","useCallback","DEFAULT_MAX_FILE_SIZE","DEFAULT_ALLOWED_TYPES","getAttachmentType","fileToBase64","generateAttachmentId","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import { cn } from \"../../lib/utils\";\nimport React from \"react\";\n\nexport interface LoaderProps {\n variant?:\n | \"circular\"\n | \"classic\"\n | \"pulse\"\n | \"pulse-dot\"\n | \"dots\"\n | \"typing\"\n | \"wave\"\n | \"bars\"\n | \"terminal\"\n | \"text-blink\"\n | \"text-shimmer\"\n | \"loading-dots\";\n size?: \"sm\" | \"md\" | \"lg\";\n text?: string;\n className?: string;\n}\n\nexport function CircularLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const sizeClasses = {\n sm: \"size-4\",\n md: \"size-5\",\n lg: \"size-6\",\n };\n\n return (\n <div\n className={cn(\n \"border-primary animate-spin rounded-full border-2 border-t-transparent\",\n sizeClasses[size],\n className,\n )}\n >\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function ClassicLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const sizeClasses = {\n sm: \"size-4\",\n md: \"size-5\",\n lg: \"size-6\",\n };\n\n const barSizes = {\n sm: { height: \"6px\", width: \"1.5px\" },\n md: { height: \"8px\", width: \"2px\" },\n lg: { height: \"10px\", width: \"2.5px\" },\n };\n\n return (\n <div className={cn(\"relative\", sizeClasses[size], className)}>\n <div className=\"absolute h-full w-full\">\n {[...Array(12)].map((_, i) => (\n <div\n key={i}\n className=\"bg-primary absolute animate-[spinner-fade_1.2s_linear_infinite] rounded-full\"\n style={{\n top: \"0\",\n left: \"50%\",\n marginLeft:\n size === \"sm\" ? \"-0.75px\" : size === \"lg\" ? \"-1.25px\" : \"-1px\",\n transformOrigin: `${size === \"sm\" ? \"0.75px\" : size === \"lg\" ? \"1.25px\" : \"1px\"} ${size === \"sm\" ? \"10px\" : size === \"lg\" ? \"14px\" : \"12px\"}`,\n transform: `rotate(${i * 30}deg)`,\n opacity: 0,\n animationDelay: `${i * 0.1}s`,\n height: barSizes[size].height,\n width: barSizes[size].width,\n }}\n />\n ))}\n </div>\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function PulseLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const sizeClasses = {\n sm: \"size-4\",\n md: \"size-5\",\n lg: \"size-6\",\n };\n\n return (\n <div className={cn(\"relative\", sizeClasses[size], className)}>\n <div className=\"border-primary absolute inset-0 animate-[thin-pulse_1.5s_ease-in-out_infinite] rounded-full border-2\" />\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function PulseDotLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const sizeClasses = {\n sm: \"size-1\",\n md: \"size-2\",\n lg: \"size-3\",\n };\n\n return (\n <div\n className={cn(\n \"bg-primary animate-[pulse-dot_1.2s_ease-in-out_infinite] rounded-full\",\n sizeClasses[size],\n className,\n )}\n >\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function DotsLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const dotSizes = {\n sm: \"h-1.5 w-1.5\",\n md: \"h-2 w-2\",\n lg: \"h-2.5 w-2.5\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n return (\n <div\n className={cn(\n \"flex items-center space-x-1\",\n containerSizes[size],\n className,\n )}\n >\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary animate-[bounce-dots_1.4s_ease-in-out_infinite] rounded-full\",\n dotSizes[size],\n )}\n style={{\n animationDelay: `${i * 160}ms`,\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TypingLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const dotSizes = {\n sm: \"h-1 w-1\",\n md: \"h-1.5 w-1.5\",\n lg: \"h-2 w-2\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n return (\n <div\n className={cn(\n \"flex items-center space-x-1\",\n containerSizes[size],\n className,\n )}\n >\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary animate-[typing_1s_infinite] rounded-full\",\n dotSizes[size],\n )}\n style={{\n animationDelay: `${i * 250}ms`,\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function WaveLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const barWidths = {\n sm: \"w-0.5\",\n md: \"w-0.5\",\n lg: \"w-1\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n const heights = {\n sm: [\"6px\", \"9px\", \"12px\", \"9px\", \"6px\"],\n md: [\"8px\", \"12px\", \"16px\", \"12px\", \"8px\"],\n lg: [\"10px\", \"15px\", \"20px\", \"15px\", \"10px\"],\n };\n\n return (\n <div\n className={cn(\n \"flex items-center gap-0.5\",\n containerSizes[size],\n className,\n )}\n >\n {[...Array(5)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary animate-[wave_1s_ease-in-out_infinite] rounded-full\",\n barWidths[size],\n )}\n style={{\n animationDelay: `${i * 100}ms`,\n height: heights[size][i],\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function BarsLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const barWidths = {\n sm: \"w-1\",\n md: \"w-1.5\",\n lg: \"w-2\",\n };\n\n const containerSizes = {\n sm: \"h-4 gap-1\",\n md: \"h-5 gap-1.5\",\n lg: \"h-6 gap-2\",\n };\n\n return (\n <div className={cn(\"flex\", containerSizes[size], className)}>\n {[...Array(3)].map((_, i) => (\n <div\n key={i}\n className={cn(\n \"bg-primary h-full animate-[wave-bars_1.2s_ease-in-out_infinite]\",\n barWidths[size],\n )}\n style={{\n animationDelay: `${i * 0.2}s`,\n }}\n />\n ))}\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TerminalLoader({\n className,\n size = \"md\",\n}: {\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const cursorSizes = {\n sm: \"h-3 w-1.5\",\n md: \"h-4 w-2\",\n lg: \"h-5 w-2.5\",\n };\n\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n const containerSizes = {\n sm: \"h-4\",\n md: \"h-5\",\n lg: \"h-6\",\n };\n\n return (\n <div\n className={cn(\n \"flex items-center space-x-1\",\n containerSizes[size],\n className,\n )}\n >\n <span className={cn(\"text-primary font-mono\", textSizes[size])}>\n {\">\"}\n </span>\n <div\n className={cn(\n \"bg-primary animate-[blink_1s_step-end_infinite]\",\n cursorSizes[size],\n )}\n />\n <span className=\"sr-only\">Loading</span>\n </div>\n );\n}\n\nexport function TextBlinkLoader({\n text = \"Thinking\",\n className,\n size = \"md\",\n}: {\n text?: string;\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n return (\n <div\n className={cn(\n \"animate-[text-blink_2s_ease-in-out_infinite] font-medium\",\n textSizes[size],\n className,\n )}\n >\n {text}\n </div>\n );\n}\n\nexport function TextShimmerLoader({\n text = \"Thinking\",\n className,\n size = \"md\",\n}: {\n text?: string;\n className?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n return (\n <div\n className={cn(\n \"bg-[linear-gradient(to_right,var(--muted-foreground)_40%,var(--foreground)_60%,var(--muted-foreground)_80%)]\",\n \"bg-size-[200%_auto] bg-clip-text font-medium text-transparent\",\n \"animate-[shimmer_4s_infinite_linear]\",\n textSizes[size],\n className,\n )}\n >\n {text}\n </div>\n );\n}\n\nexport function TextDotsLoader({\n className,\n text = \"Thinking\",\n size = \"md\",\n}: {\n className?: string;\n text?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n}) {\n const textSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n };\n\n return (\n <div className={cn(\"inline-flex items-center\", className)}>\n <span className={cn(\"text-primary font-medium\", textSizes[size])}>\n {text}\n </span>\n <span className=\"inline-flex\">\n <span className=\"text-primary animate-[loading-dots_1.4s_infinite_0.2s]\">\n .\n </span>\n <span className=\"text-primary animate-[loading-dots_1.4s_infinite_0.4s]\">\n .\n </span>\n <span className=\"text-primary animate-[loading-dots_1.4s_infinite_0.6s]\">\n .\n </span>\n </span>\n </div>\n );\n}\n\nfunction Loader({\n variant = \"circular\",\n size = \"md\",\n text,\n className,\n}: LoaderProps) {\n switch (variant) {\n case \"circular\":\n return <CircularLoader size={size} className={className} />;\n case \"classic\":\n return <ClassicLoader size={size} className={className} />;\n case \"pulse\":\n return <PulseLoader size={size} className={className} />;\n case \"pulse-dot\":\n return <PulseDotLoader size={size} className={className} />;\n case \"dots\":\n return <DotsLoader size={size} className={className} />;\n case \"typing\":\n return <TypingLoader size={size} className={className} />;\n case \"wave\":\n return <WaveLoader size={size} className={className} />;\n case \"bars\":\n return <BarsLoader size={size} className={className} />;\n case \"terminal\":\n return <TerminalLoader size={size} className={className} />;\n case \"text-blink\":\n return <TextBlinkLoader text={text} size={size} className={className} />;\n case \"text-shimmer\":\n return (\n <TextShimmerLoader text={text} size={size} className={className} />\n );\n case \"loading-dots\":\n return <TextDotsLoader text={text} size={size} className={className} />;\n default:\n return <CircularLoader size={size} className={className} />;\n }\n}\n\nexport { Loader };\n","import { cn } from \"../../lib/utils\";\nimport React, { useEffect, useState } from \"react\";\nimport { codeToHtml } from \"shiki\";\n\nexport type CodeBlockProps = {\n children?: React.ReactNode;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nfunction CodeBlock({ children, className, ...props }: CodeBlockProps) {\n return (\n <div\n className={cn(\n \"not-prose flex w-full flex-col overflow-clip border\",\n \"border-border bg-card text-card-foreground rounded-xl\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport type CodeBlockCodeProps = {\n code: string;\n language?: string;\n theme?: string;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nfunction CodeBlockCode({\n code,\n language = \"tsx\",\n theme = \"github-light\",\n className,\n ...props\n}: CodeBlockCodeProps) {\n const [highlightedHtml, setHighlightedHtml] = useState<string | null>(null);\n\n useEffect(() => {\n async function highlight() {\n if (!code) {\n setHighlightedHtml(\"<pre><code></code></pre>\");\n return;\n }\n\n const html = await codeToHtml(code, { lang: language, theme });\n setHighlightedHtml(html);\n }\n highlight();\n }, [code, language, theme]);\n\n const classNames = cn(\n \"w-full overflow-x-auto text-[13px] [&>pre]:px-4 [&>pre]:py-4\",\n className,\n );\n\n // SSR fallback: render plain code if not hydrated yet\n return highlightedHtml ? (\n <div\n className={classNames}\n dangerouslySetInnerHTML={{ __html: highlightedHtml }}\n {...props}\n />\n ) : (\n <div className={classNames} {...props}>\n <pre>\n <code>{code}</code>\n </pre>\n </div>\n );\n}\n\nexport type CodeBlockGroupProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction CodeBlockGroup({\n children,\n className,\n ...props\n}: CodeBlockGroupProps) {\n return (\n <div\n className={cn(\"flex items-center justify-between\", className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport { CodeBlockGroup, CodeBlockCode, CodeBlock };\n","import { cn } from \"../../lib/utils\";\nimport { marked } from \"marked\";\nimport { memo, useId, useMemo } from \"react\";\nimport ReactMarkdown, { Components } from \"react-markdown\";\nimport remarkBreaks from \"remark-breaks\";\nimport remarkGfm from \"remark-gfm\";\nimport { CodeBlock, CodeBlockCode } from \"./code-block\";\n\nexport type MarkdownProps = {\n children: string;\n id?: string;\n className?: string;\n components?: Partial<Components>;\n};\n\nfunction parseMarkdownIntoBlocks(markdown: string): string[] {\n const tokens = marked.lexer(markdown);\n return tokens.map((token) => token.raw);\n}\n\nfunction extractLanguage(className?: string): string {\n if (!className) return \"plaintext\";\n const match = className.match(/language-(\\w+)/);\n return match ? match[1] : \"plaintext\";\n}\n\nconst INITIAL_COMPONENTS: Partial<Components> = {\n code: function CodeComponent({ className, children, ...props }) {\n const isInline =\n !props.node?.position?.start.line ||\n props.node?.position?.start.line === props.node?.position?.end.line;\n\n if (isInline) {\n return (\n <span\n className={cn(\n \"bg-primary-foreground rounded-sm px-1 font-mono text-sm\",\n className,\n )}\n {...props}\n >\n {children}\n </span>\n );\n }\n\n const language = extractLanguage(className);\n\n return (\n <CodeBlock className={className}>\n <CodeBlockCode code={children as string} language={language} />\n </CodeBlock>\n );\n },\n pre: function PreComponent({ children }) {\n return <>{children}</>;\n },\n};\n\nconst MemoizedMarkdownBlock = memo(\n function MarkdownBlock({\n content,\n components = INITIAL_COMPONENTS,\n }: {\n content: string;\n components?: Partial<Components>;\n }) {\n return (\n <ReactMarkdown\n remarkPlugins={[remarkGfm, remarkBreaks]}\n components={components}\n >\n {content}\n </ReactMarkdown>\n );\n },\n function propsAreEqual(prevProps, nextProps) {\n return prevProps.content === nextProps.content;\n },\n);\n\nMemoizedMarkdownBlock.displayName = \"MemoizedMarkdownBlock\";\n\nfunction MarkdownComponent({\n children,\n id,\n className,\n components = INITIAL_COMPONENTS,\n}: MarkdownProps) {\n const generatedId = useId();\n const blockId = id ?? generatedId;\n const blocks = useMemo(() => parseMarkdownIntoBlocks(children), [children]);\n\n return (\n <div className={className}>\n {blocks.map((block, index) => (\n <MemoizedMarkdownBlock\n key={`${blockId}-block-${index}`}\n content={block}\n components={components}\n />\n ))}\n </div>\n );\n}\n\nconst Markdown = memo(MarkdownComponent);\nMarkdown.displayName = \"Markdown\";\n\nexport { Markdown };\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-sm hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2\",\n sm: \"h-8 rounded-md px-3 text-xs\",\n lg: \"h-10 rounded-md px-8\",\n icon: \"h-9 w-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport interface ButtonProps\n extends\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button, buttonVariants };\n","import { cn } from \"../../lib/utils\";\n\nfunction ThumbsUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n );\n}\n\nfunction ThumbsDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n );\n}\n\nfunction XIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\ntype FeedbackBarProps = {\n className?: string;\n title?: string;\n icon?: React.ReactNode;\n onHelpful?: () => void;\n onNotHelpful?: () => void;\n onClose?: () => void;\n};\n\nexport function FeedbackBar({\n className,\n title,\n icon,\n onHelpful,\n onNotHelpful,\n onClose,\n}: FeedbackBarProps) {\n return (\n <div\n className={cn(\n \"bg-background border-border inline-flex rounded-[12px] border text-sm\",\n className,\n )}\n >\n <div className=\"flex w-full items-center justify-between\">\n <div className=\"flex flex-1 items-center justify-start gap-4 py-3 pl-4\">\n {icon}\n <span className=\"text-foreground font-medium\">{title}</span>\n </div>\n <div className=\"flex items-center justify-center gap-0.5 px-3 py-0\">\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground flex size-8 items-center justify-center rounded-md transition-colors\"\n aria-label=\"Helpful\"\n onClick={onHelpful}\n >\n <ThumbsUpIcon className=\"size-4\" />\n </button>\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground flex size-8 items-center justify-center rounded-md transition-colors\"\n aria-label=\"Not helpful\"\n onClick={onNotHelpful}\n >\n <ThumbsDownIcon className=\"size-4\" />\n </button>\n </div>\n <div className=\"border-border flex items-center justify-center border-l\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"text-muted-foreground hover:text-foreground flex items-center justify-center rounded-md p-3\"\n aria-label=\"Close\"\n >\n <XIcon className=\"size-5\" />\n </button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n StickToBottom as StickToBottomOriginal,\n useStickToBottomContext,\n} from \"use-stick-to-bottom\";\n\n// Cast to fix React types version mismatch in monorepo\nconst StickToBottom = StickToBottomOriginal as unknown as React.FC<\n React.PropsWithChildren<{\n className?: string;\n resize?: string;\n initial?: string;\n role?: string;\n }>\n> & { Content: React.FC<React.PropsWithChildren<{ className?: string }>> };\n\n// Re-export the context hook for ScrollButton\nfunction useChatContainer() {\n const context = useStickToBottomContext();\n return {\n isAtBottom: context.isAtBottom,\n scrollToBottom: context.scrollToBottom,\n };\n}\n\nexport type ChatContainerRootProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nexport type ChatContainerContentProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nexport type ChatContainerScrollAnchorProps = {\n className?: string;\n ref?: React.RefObject<HTMLDivElement>;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nfunction ChatContainerRoot({\n children,\n className,\n ...props\n}: ChatContainerRootProps) {\n return (\n <StickToBottom\n className={cn(\"flex overflow-y-auto\", className)}\n resize=\"smooth\"\n initial=\"instant\"\n role=\"log\"\n {...props}\n >\n {children}\n </StickToBottom>\n );\n}\n\nfunction ChatContainerContent({\n children,\n className,\n ...props\n}: ChatContainerContentProps) {\n return (\n <StickToBottom.Content\n className={cn(\"flex w-full flex-col\", className)}\n {...props}\n >\n {children}\n </StickToBottom.Content>\n );\n}\n\nfunction ChatContainerScrollAnchor({\n className,\n ...props\n}: ChatContainerScrollAnchorProps) {\n return (\n <div\n className={cn(\"h-px w-full shrink-0 scroll-mt-4\", className)}\n aria-hidden=\"true\"\n {...props}\n />\n );\n}\n\nexport {\n ChatContainerRoot,\n ChatContainerContent,\n ChatContainerScrollAnchor,\n useChatContainer,\n};\n","import { Button, buttonVariants } from \"./button\";\nimport { cn } from \"../../lib/utils\";\nimport { type VariantProps } from \"class-variance-authority\";\nimport { useChatContainer } from \"./chat-container\";\n\nfunction ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nexport type ScrollButtonProps = {\n className?: string;\n variant?: VariantProps<typeof buttonVariants>[\"variant\"];\n size?: VariantProps<typeof buttonVariants>[\"size\"];\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nfunction ScrollButton({\n className,\n variant = \"outline\",\n size = \"sm\",\n ...props\n}: ScrollButtonProps) {\n const { isAtBottom, scrollToBottom } = useChatContainer();\n\n return (\n <Button\n variant={variant}\n size={size}\n className={cn(\n \"h-10 w-10 rounded-full transition-all duration-150 ease-out\",\n !isAtBottom\n ? \"translate-y-0 scale-100 opacity-100\"\n : \"pointer-events-none translate-y-4 scale-95 opacity-0\",\n className,\n )}\n onClick={() => scrollToBottom()}\n {...props}\n >\n <ChevronDownIcon className=\"h-5 w-5\" />\n </Button>\n );\n}\n\nexport { ScrollButton };\n","\"use client\";\n\nimport React from \"react\";\nimport { Tooltip as BaseTooltip } from \"@base-ui/react/tooltip\";\nimport { cn } from \"../../lib/utils\";\n\n// ============================================\n// TooltipProvider\n// ============================================\n\nexport type TooltipProviderProps = {\n children: React.ReactNode;\n delayDuration?: number;\n};\n\nfunction TooltipProvider({\n children,\n delayDuration = 300,\n}: TooltipProviderProps) {\n return (\n <BaseTooltip.Provider delay={delayDuration}>\n {children}\n </BaseTooltip.Provider>\n );\n}\n\n// ============================================\n// Tooltip (Root)\n// ============================================\n\nexport type TooltipProps = {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nfunction Tooltip({ children, open, defaultOpen, onOpenChange }: TooltipProps) {\n return (\n <BaseTooltip.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n >\n {children}\n </BaseTooltip.Root>\n );\n}\n\n// ============================================\n// TooltipTrigger\n// ============================================\n\nexport type TooltipTriggerProps = {\n children: React.ReactNode;\n asChild?: boolean;\n disabled?: boolean;\n} & React.ComponentPropsWithoutRef<\"button\">;\n\nfunction TooltipTrigger({\n children,\n asChild,\n disabled,\n ...props\n}: TooltipTriggerProps) {\n if (asChild && React.isValidElement(children)) {\n return (\n <BaseTooltip.Trigger disabled={disabled} render={children} {...props} />\n );\n }\n\n return (\n <BaseTooltip.Trigger disabled={disabled} {...props}>\n {children}\n </BaseTooltip.Trigger>\n );\n}\n\n// ============================================\n// TooltipContent\n// ============================================\n\nexport type TooltipContentProps = {\n children: React.ReactNode;\n className?: string;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n showArrow?: boolean;\n};\n\nfunction TooltipContent({\n children,\n className,\n side = \"top\",\n align = \"center\",\n sideOffset = 8,\n showArrow = true,\n}: TooltipContentProps) {\n return (\n <BaseTooltip.Portal>\n <BaseTooltip.Positioner side={side} align={align} sideOffset={sideOffset}>\n <BaseTooltip.Popup\n className={cn(\n \"z-50 rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground shadow-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n className,\n )}\n >\n {children}\n {showArrow && <BaseTooltip.Arrow className=\"fill-primary\" />}\n </BaseTooltip.Popup>\n </BaseTooltip.Positioner>\n </BaseTooltip.Portal>\n );\n}\n\n// ============================================\n// Exports\n// ============================================\n\nexport { TooltipProvider, Tooltip, TooltipTrigger, TooltipContent };\n","import * as React from \"react\";\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full\",\n className,\n )}\n {...props}\n />\n));\nAvatar.displayName = AvatarPrimitive.Root.displayName;\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square h-full w-full\", className)}\n {...props}\n />\n));\nAvatarImage.displayName = AvatarPrimitive.Image.displayName;\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex h-full w-full items-center justify-center rounded-full bg-muted\",\n className,\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;\n\nexport { Avatar, AvatarImage, AvatarFallback };\n","import { Avatar, AvatarFallback, AvatarImage } from \"./avatar\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\";\nimport { cn } from \"../../lib/utils\";\nimport { Markdown } from \"./markdown\";\n\nexport type MessageProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nconst Message = ({ children, className, ...props }: MessageProps) => (\n <div className={cn(\"flex gap-3\", className)} {...props}>\n {children}\n </div>\n);\n\nexport type MessageAvatarProps = {\n src: string;\n alt: string;\n /** Text fallback (e.g. \"AI\") */\n fallback?: string;\n /** Icon/component fallback (takes precedence over text fallback when src is empty) */\n fallbackIcon?: React.ReactNode;\n delayMs?: number;\n className?: string;\n};\n\nconst MessageAvatar = ({\n src,\n alt,\n fallback,\n fallbackIcon,\n delayMs,\n className,\n}: MessageAvatarProps) => {\n return (\n <Avatar className={cn(\"size-7 shrink-0\", className)}>\n <AvatarImage src={src} alt={alt} />\n <AvatarFallback delayMs={delayMs}>\n {fallbackIcon || fallback}\n </AvatarFallback>\n </Avatar>\n );\n};\n\nexport type MessageContentProps = {\n children: React.ReactNode;\n markdown?: boolean;\n className?: string;\n /** Font size variant: 'sm' (14px), 'base' (16px), 'lg' (18px) */\n size?: \"sm\" | \"base\" | \"lg\";\n} & React.ComponentProps<typeof Markdown> &\n Omit<React.HTMLProps<HTMLDivElement>, \"size\">;\n\nconst proseSizeMap = {\n sm: \"prose-sm\",\n base: \"prose-base\",\n lg: \"prose-lg\",\n};\n\nconst MessageContent = ({\n children,\n markdown = false,\n className,\n size = \"sm\",\n ...props\n}: MessageContentProps) => {\n const classNames = cn(\n \"rounded-lg p-2 bg-secondary prose break-words whitespace-normal max-w-none\",\n \"text-foreground prose-headings:text-foreground prose-p:text-foreground prose-strong:text-foreground prose-li:text-foreground prose-a:text-foreground prose-ol:text-foreground prose-ul:text-foreground prose-code:text-foreground\",\n proseSizeMap[size],\n className,\n );\n\n return markdown ? (\n <Markdown className={classNames} {...props}>\n {children as string}\n </Markdown>\n ) : (\n <div className={classNames} {...props}>\n {children}\n </div>\n );\n};\n\nexport type MessageActionsProps = {\n children: React.ReactNode;\n className?: string;\n} & React.HTMLProps<HTMLDivElement>;\n\nconst MessageActions = ({\n children,\n className,\n ...props\n}: MessageActionsProps) => (\n <div\n className={cn(\"text-muted-foreground flex items-center gap-2\", className)}\n {...props}\n >\n {children}\n </div>\n);\n\nexport type MessageActionProps = {\n className?: string;\n tooltip: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n} & React.ComponentProps<typeof Tooltip>;\n\nconst MessageAction = ({\n tooltip,\n children,\n className,\n side = \"top\",\n ...props\n}: MessageActionProps) => {\n return (\n <TooltipProvider>\n <Tooltip {...props}>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent side={side} className={className}>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n\nexport {\n Message,\n MessageAvatar,\n MessageContent,\n MessageActions,\n MessageAction,\n};\n","import * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\">\n>(({ className, ...props }, ref) => {\n return (\n <textarea\n className={cn(\n \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n});\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","\"use client\";\n\nimport React, {\n createContext,\n useContext,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport { Textarea } from \"./textarea\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"./tooltip\";\nimport { cn } from \"../../lib/utils\";\n\ntype PromptInputContextType = {\n isLoading: boolean;\n value: string;\n setValue: (value: string) => void;\n maxHeight: number | string;\n onSubmit?: () => void;\n disabled?: boolean;\n textareaRef: React.MutableRefObject<HTMLTextAreaElement | null>;\n};\n\nconst PromptInputContext = createContext<PromptInputContextType>({\n isLoading: false,\n value: \"\",\n setValue: () => {},\n maxHeight: 240,\n onSubmit: undefined,\n disabled: false,\n textareaRef: { current: null },\n});\n\nfunction usePromptInput() {\n return useContext(PromptInputContext);\n}\n\nexport type PromptInputProps = {\n isLoading?: boolean;\n value?: string;\n onValueChange?: (value: string) => void;\n maxHeight?: number | string;\n onSubmit?: () => void;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n} & React.ComponentProps<\"div\">;\n\nfunction PromptInput({\n className,\n isLoading = false,\n maxHeight = 240,\n value,\n onValueChange,\n onSubmit,\n children,\n disabled = false,\n onClick,\n ...props\n}: PromptInputProps) {\n const [internalValue, setInternalValue] = useState(value || \"\");\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const handleChange = (newValue: string) => {\n setInternalValue(newValue);\n onValueChange?.(newValue);\n };\n\n const handleClick: React.MouseEventHandler<HTMLDivElement> = (e) => {\n if (!disabled) textareaRef.current?.focus();\n onClick?.(e);\n };\n\n return (\n <TooltipProvider>\n <PromptInputContext.Provider\n value={{\n isLoading,\n value: value ?? internalValue,\n setValue: onValueChange ?? handleChange,\n maxHeight,\n onSubmit,\n disabled,\n textareaRef,\n }}\n >\n <div\n onClick={handleClick}\n className={cn(\n \"border-input bg-background cursor-text rounded-3xl border p-2 shadow-xs\",\n disabled && \"cursor-not-allowed opacity-60\",\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </PromptInputContext.Provider>\n </TooltipProvider>\n );\n}\n\nexport type PromptInputTextareaProps = {\n disableAutosize?: boolean;\n} & React.ComponentProps<typeof Textarea>;\n\nfunction PromptInputTextarea({\n className,\n onKeyDown,\n disableAutosize = false,\n ...props\n}: PromptInputTextareaProps) {\n const { value, setValue, maxHeight, onSubmit, disabled, textareaRef } =\n usePromptInput();\n\n const adjustHeight = (el: HTMLTextAreaElement | null) => {\n if (!el || disableAutosize) return;\n\n el.style.height = \"auto\";\n\n if (typeof maxHeight === \"number\") {\n el.style.height = `${Math.min(el.scrollHeight, maxHeight)}px`;\n } else {\n el.style.height = `min(${el.scrollHeight}px, ${maxHeight})`;\n }\n };\n\n const handleRef = (el: HTMLTextAreaElement | null) => {\n textareaRef.current = el;\n adjustHeight(el);\n };\n\n useLayoutEffect(() => {\n if (!textareaRef.current || disableAutosize) return;\n\n const el = textareaRef.current;\n el.style.height = \"auto\";\n\n if (typeof maxHeight === \"number\") {\n el.style.height = `${Math.min(el.scrollHeight, maxHeight)}px`;\n } else {\n el.style.height = `min(${el.scrollHeight}px, ${maxHeight})`;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, maxHeight, disableAutosize]);\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n adjustHeight(e.target);\n setValue(e.target.value);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n onSubmit?.();\n }\n onKeyDown?.(e);\n };\n\n return (\n <Textarea\n ref={handleRef}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n className={cn(\n \"text-foreground min-h-[44px] w-full resize-none border-none bg-transparent shadow-none outline-none focus-visible:ring-0 focus-visible:ring-offset-0\",\n className,\n )}\n rows={1}\n disabled={disabled}\n {...props}\n />\n );\n}\n\nexport type PromptInputActionsProps = React.HTMLAttributes<HTMLDivElement>;\n\nfunction PromptInputActions({\n children,\n className,\n ...props\n}: PromptInputActionsProps) {\n return (\n <div className={cn(\"flex items-center gap-2\", className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type PromptInputActionProps = {\n className?: string;\n tooltip: React.ReactNode;\n children: React.ReactNode;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n};\n\nfunction PromptInputAction({\n tooltip,\n children,\n className,\n side = \"top\",\n}: PromptInputActionProps) {\n const { disabled } = usePromptInput();\n\n return (\n <Tooltip>\n <TooltipTrigger\n asChild\n disabled={disabled}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n {children}\n </TooltipTrigger>\n <TooltipContent side={side} className={className} showArrow>\n {tooltip}\n </TooltipContent>\n </Tooltip>\n );\n}\n\nexport {\n PromptInput,\n PromptInputTextarea,\n PromptInputActions,\n PromptInputAction,\n};\n","import * as React from \"react\";\nimport * as HoverCardPrimitive from \"@radix-ui/react-hover-card\";\n\nimport { cn } from \"../../lib/utils\";\n\nconst HoverCard = HoverCardPrimitive.Root;\n\nconst HoverCardTrigger = HoverCardPrimitive.Trigger;\n\nconst HoverCardContent = React.forwardRef<\n React.ElementRef<typeof HoverCardPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <HoverCardPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-hover-card-content-transform-origin]\",\n className,\n )}\n {...props}\n />\n));\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName;\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent };\n","\"use client\";\n\nimport { HoverCard, HoverCardContent, HoverCardTrigger } from \"./hover-card\";\nimport { cn } from \"../../lib/utils\";\nimport { createContext, useContext } from \"react\";\n\nconst SourceContext = createContext<{\n href: string;\n domain: string;\n} | null>(null);\n\nfunction useSourceContext() {\n const ctx = useContext(SourceContext);\n if (!ctx) throw new Error(\"Source.* must be used inside <Source>\");\n return ctx;\n}\n\nexport type SourceProps = {\n href: string;\n children: React.ReactNode;\n};\n\nexport function Source({ href, children }: SourceProps) {\n let domain = \"\";\n try {\n domain = new URL(href).hostname;\n } catch {\n domain = href.split(\"/\").pop() || href;\n }\n\n return (\n <SourceContext.Provider value={{ href, domain }}>\n <HoverCard openDelay={150} closeDelay={0}>\n {children}\n </HoverCard>\n </SourceContext.Provider>\n );\n}\n\nexport type SourceTriggerProps = {\n label?: string | number;\n showFavicon?: boolean;\n className?: string;\n};\n\nexport function SourceTrigger({\n label,\n showFavicon = false,\n className,\n}: SourceTriggerProps) {\n const { href, domain } = useSourceContext();\n const labelToShow = label ?? domain.replace(\"www.\", \"\");\n\n return (\n <HoverCardTrigger asChild>\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n \"bg-muted text-muted-foreground hover:bg-muted-foreground/30 hover:text-primary inline-flex h-5 max-w-32 items-center gap-1 overflow-hidden rounded-full py-0 text-xs no-underline transition-colors duration-150\",\n showFavicon ? \"pr-2 pl-1\" : \"px-1\",\n className,\n )}\n >\n {showFavicon && (\n <img\n src={`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(\n href,\n )}`}\n alt=\"favicon\"\n width={14}\n height={14}\n className=\"size-3.5 rounded-full\"\n />\n )}\n <span className=\"truncate tabular-nums text-center font-normal\">\n {labelToShow}\n </span>\n </a>\n </HoverCardTrigger>\n );\n}\n\nexport type SourceContentProps = {\n title: string;\n description: string;\n className?: string;\n};\n\nexport function SourceContent({\n title,\n description,\n className,\n}: SourceContentProps) {\n const { href, domain } = useSourceContext();\n\n return (\n <HoverCardContent className={cn(\"w-80 p-0 shadow-xs\", className)}>\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex flex-col gap-2 p-3\"\n >\n <div className=\"flex items-center gap-1.5\">\n <img\n src={`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(\n href,\n )}`}\n alt=\"favicon\"\n className=\"size-4 rounded-full\"\n width={16}\n height={16}\n />\n <div className=\"text-primary truncate text-sm\">\n {domain.replace(\"www.\", \"\")}\n </div>\n </div>\n <div className=\"line-clamp-2 text-sm font-medium\">{title}</div>\n <div className=\"text-muted-foreground line-clamp-2 text-sm\">\n {description}\n </div>\n </a>\n </HoverCardContent>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Markdown } from \"./markdown\";\n\n// ============================================\n// Context for Reasoning state\n// ============================================\n\ninterface ReasoningContextValue {\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n isStreaming: boolean;\n}\n\nconst ReasoningContext = React.createContext<ReasoningContextValue | null>(\n null,\n);\n\nfunction useReasoningContext() {\n const context = React.useContext(ReasoningContext);\n if (!context) {\n throw new Error(\n \"Reasoning components must be used within a Reasoning provider\",\n );\n }\n return context;\n}\n\n// ============================================\n// Reasoning Root\n// ============================================\n\nexport interface ReasoningProps {\n children: React.ReactNode;\n /** Whether content is currently streaming */\n isStreaming?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean;\n /** Class name for the container */\n className?: string;\n}\n\n/**\n * Reasoning component - Collapsible container for AI thinking/reasoning content\n *\n * Auto-expands during streaming and collapses when complete.\n *\n * @example\n * ```tsx\n * <Reasoning isStreaming={isStreaming}>\n * <ReasoningTrigger>Thinking...</ReasoningTrigger>\n * <ReasoningContent>{thinkingText}</ReasoningContent>\n * </Reasoning>\n * ```\n */\nexport function Reasoning({\n children,\n isStreaming = false,\n open: controlledOpen,\n onOpenChange,\n defaultOpen = false,\n className,\n}: ReasoningProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const prevStreamingRef = React.useRef(isStreaming);\n\n // Determine if controlled or uncontrolled\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\n\n const setIsOpen = React.useCallback(\n (open: boolean) => {\n if (onOpenChange) {\n onOpenChange(open);\n }\n if (!isControlled) {\n setUncontrolledOpen(open);\n }\n },\n [isControlled, onOpenChange],\n );\n\n // Auto-expand when streaming starts, auto-collapse when streaming ends\n React.useEffect(() => {\n if (isStreaming && !prevStreamingRef.current) {\n // Streaming just started - expand\n setIsOpen(true);\n } else if (!isStreaming && prevStreamingRef.current) {\n // Streaming just ended - collapse\n setIsOpen(false);\n }\n prevStreamingRef.current = isStreaming;\n }, [isStreaming, setIsOpen]);\n\n return (\n <ReasoningContext.Provider value={{ isOpen, setIsOpen, isStreaming }}>\n <div className={cn(\"reasoning\", className)}>{children}</div>\n </ReasoningContext.Provider>\n );\n}\n\n// ============================================\n// Reasoning Trigger\n// ============================================\n\nexport interface ReasoningTriggerProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Clickable trigger to expand/collapse reasoning content\n */\nexport function ReasoningTrigger({\n children,\n className,\n}: ReasoningTriggerProps) {\n const { isOpen, setIsOpen, isStreaming } = useReasoningContext();\n\n return (\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n \"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors\",\n \"py-1 px-0 bg-transparent border-none cursor-pointer\",\n className,\n )}\n aria-expanded={isOpen}\n >\n {/* Chevron icon */}\n <svg\n className={cn(\n \"size-3 transition-transform duration-200\",\n isOpen && \"rotate-90\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9 5l7 7-7 7\" />\n </svg>\n\n {/* Streaming indicator */}\n {isStreaming && (\n <span className=\"relative flex h-2 w-2\">\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75\" />\n <span className=\"relative inline-flex rounded-full h-2 w-2 bg-primary\" />\n </span>\n )}\n\n {children}\n </button>\n );\n}\n\n// ============================================\n// Reasoning Content\n// ============================================\n\nexport interface ReasoningContentProps {\n children: React.ReactNode;\n /** Render content as markdown */\n markdown?: boolean;\n /** Class name for the content */\n className?: string;\n}\n\n/**\n * Collapsible content area for reasoning text\n */\nexport function ReasoningContent({\n children,\n markdown = false,\n className,\n}: ReasoningContentProps) {\n const { isOpen } = useReasoningContext();\n const contentRef = React.useRef<HTMLDivElement>(null);\n const [height, setHeight] = React.useState<number | undefined>(0);\n\n // Measure content height for smooth animation\n React.useEffect(() => {\n if (contentRef.current) {\n const resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n setHeight(entry.contentRect.height);\n }\n });\n resizeObserver.observe(contentRef.current);\n return () => resizeObserver.disconnect();\n }\n }, []);\n\n return (\n <div\n className={cn(\n \"overflow-hidden transition-[max-height] duration-200 ease-out\",\n isOpen ? \"opacity-100\" : \"opacity-0\",\n )}\n style={{ maxHeight: isOpen ? height : 0 }}\n aria-hidden={!isOpen}\n >\n <div\n ref={contentRef}\n className={cn(\n \"mt-1 pl-3 border-l-2 border-muted-foreground/20\",\n \"text-xs text-muted-foreground\",\n className,\n )}\n >\n {markdown && typeof children === \"string\" ? (\n <Markdown className=\"prose-xs\">{children}</Markdown>\n ) : (\n <div className=\"whitespace-pre-wrap\">{children}</div>\n )}\n </div>\n </div>\n );\n}\n\n// ============================================\n// Convenience component for simple usage\n// ============================================\n\nexport interface SimpleReasoningProps {\n /** The reasoning/thinking content */\n content: string;\n /** Whether content is streaming */\n isStreaming?: boolean;\n /** Label when streaming */\n streamingLabel?: string;\n /** Label when collapsed */\n collapsedLabel?: string;\n /** Render as markdown */\n markdown?: boolean;\n /** Class name */\n className?: string;\n}\n\n/**\n * Simple reasoning display with default trigger labels\n *\n * @example\n * ```tsx\n * <SimpleReasoning\n * content={message.thinking}\n * isStreaming={isLoading}\n * />\n * ```\n */\nexport function SimpleReasoning({\n content,\n isStreaming = false,\n streamingLabel = \"Thinking...\",\n collapsedLabel = \"View reasoning\",\n markdown = true,\n className,\n}: SimpleReasoningProps) {\n if (!content) return null;\n\n return (\n <Reasoning isStreaming={isStreaming} className={className}>\n <ReasoningTrigger>\n {isStreaming ? streamingLabel : collapsedLabel}\n </ReasoningTrigger>\n <ReasoningContent markdown={markdown}>{content}</ReasoningContent>\n </Reasoning>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\n\n// ============================================\n// Types\n// ============================================\n\nexport interface CopilotUIConfig {\n /**\n * Debug mode - shows JSON args/results in collapsible sections\n * @default false\n */\n debug?: boolean;\n\n /**\n * Default expanded state for debug content\n * @default false\n */\n defaultDebugExpanded?: boolean;\n}\n\nexport interface CopilotUIContextValue extends CopilotUIConfig {\n /** Computed: whether debug mode is active */\n isDebug: boolean;\n}\n\n// ============================================\n// Context\n// ============================================\n\nconst CopilotUIContext = React.createContext<CopilotUIContextValue | null>(\n null,\n);\n\n/**\n * Hook to access CopilotUI configuration\n *\n * Returns defaults if no provider is present (allows standalone component usage)\n */\nexport function useCopilotUI(): CopilotUIContextValue {\n const context = React.useContext(CopilotUIContext);\n\n // Return defaults if no provider (allows standalone usage)\n if (!context) {\n return {\n debug: false,\n defaultDebugExpanded: false,\n isDebug: false,\n };\n }\n\n return context;\n}\n\n// ============================================\n// Provider\n// ============================================\n\nexport interface CopilotUIProviderProps extends CopilotUIConfig {\n children: React.ReactNode;\n}\n\n/**\n * Provider for global UI configuration (debug mode, etc.)\n *\n * @example\n * ```tsx\n * <CopilotUIProvider debug={process.env.NODE_ENV === \"development\"}>\n * <Chat messages={messages} />\n * </CopilotUIProvider>\n * ```\n */\nexport function CopilotUIProvider({\n children,\n debug = false,\n defaultDebugExpanded = false,\n}: CopilotUIProviderProps) {\n const value = React.useMemo<CopilotUIContextValue>(\n () => ({\n debug,\n defaultDebugExpanded,\n isDebug: debug,\n }),\n [debug, defaultDebugExpanded],\n );\n\n return (\n <CopilotUIContext.Provider value={value}>\n {children}\n </CopilotUIContext.Provider>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { TextShimmerLoader } from \"./loader\";\nimport { useCopilotUI } from \"../../context/copilot-ui-context\";\n\n// ============================================\n// Types\n// ============================================\n\nexport type ToolStepStatus =\n | \"pending\"\n | \"executing\"\n | \"completed\"\n | \"error\"\n | \"failed\"\n | \"rejected\";\n\nexport interface ToolStepData {\n id: string;\n name: string;\n args?: Record<string, unknown>;\n status: ToolStepStatus;\n result?: {\n success: boolean;\n message?: string;\n error?: string;\n data?: unknown;\n };\n error?: string;\n /** Human-readable title (resolved from tool definition) */\n title?: string;\n /** Title shown while executing */\n executingTitle?: string;\n /** Title shown after completion */\n completedTitle?: string;\n}\n\n// ============================================\n// Title Utilities\n// ============================================\n\n/**\n * Convert snake_case or camelCase tool name to human-readable title\n * @example \"get_order_details\" -> \"Get order details\"\n * @example \"fetchUserData\" -> \"Fetch user data\"\n */\nfunction toolNameToTitle(name: string): string {\n // Handle snake_case\n let result = name.replace(/_/g, \" \");\n // Handle camelCase\n result = result.replace(/([a-z])([A-Z])/g, \"$1 $2\");\n // Capitalize first letter, lowercase rest\n return result.charAt(0).toUpperCase() + result.slice(1).toLowerCase();\n}\n\n/**\n * Get the display title based on tool step status\n */\nfunction getDisplayTitle(step: ToolStepData): string {\n const fallbackTitle = toolNameToTitle(step.name);\n\n switch (step.status) {\n case \"pending\":\n return step.title ?? fallbackTitle;\n case \"executing\":\n if (step.executingTitle) return step.executingTitle;\n return step.title ? `${step.title}...` : `${fallbackTitle}...`;\n case \"completed\":\n return step.completedTitle ?? step.title ?? fallbackTitle;\n case \"error\":\n case \"failed\":\n case \"rejected\":\n return step.title ?? fallbackTitle;\n default:\n return fallbackTitle;\n }\n}\n\n// ============================================\n// Status Indicator\n// ============================================\n\ninterface StatusIndicatorProps {\n status: ToolStepStatus;\n className?: string;\n}\n\nfunction StatusIndicator({ status, className }: StatusIndicatorProps) {\n const baseClasses = \"flex-shrink-0\";\n\n switch (status) {\n case \"pending\":\n return (\n <div\n className={cn(\n baseClasses,\n \"size-3 flex items-center justify-center\",\n className,\n )}\n >\n <div className=\"size-1.5 rounded-full bg-muted-foreground/40\" />\n </div>\n );\n\n case \"executing\":\n // Return null - shimmer text handles the loading state\n return null;\n\n case \"completed\":\n return (\n <div\n className={cn(\n baseClasses,\n \"size-3 flex items-center justify-center\",\n className,\n )}\n >\n <svg\n className=\"size-3 text-green-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={3}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n </div>\n );\n\n case \"error\":\n case \"failed\":\n case \"rejected\":\n return (\n <div\n className={cn(\n baseClasses,\n \"size-3 flex items-center justify-center\",\n className,\n )}\n >\n <svg\n className=\"size-3 text-red-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={3}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </div>\n );\n }\n}\n\n// ============================================\n// Tool Step\n// ============================================\n\nexport interface ToolStepProps {\n step: ToolStepData;\n /** Show connecting line to next step */\n showLine?: boolean;\n /** Override debug mode from context */\n debug?: boolean;\n /** Expanded by default (for debug mode) */\n defaultExpanded?: boolean;\n className?: string;\n}\n\n/**\n * Format result for display\n */\nfunction formatResult(result: ToolStepData[\"result\"]): string {\n if (!result) return \"\";\n if (result.message) return result.message;\n if (result.error) return result.error;\n if (result.data) {\n // Don't stringify image data - it's too long\n const data = result.data as Record<string, unknown>;\n if (\n data.image &&\n typeof data.image === \"string\" &&\n (data.image as string).startsWith(\"data:image\")\n ) {\n return `Image (${data.width || \"?\"}x${data.height || \"?\"})`;\n }\n return JSON.stringify(result.data);\n }\n return result.success ? \"Success\" : \"Failed\";\n}\n\n/**\n * Check if result contains an image\n */\nfunction getResultImage(result: ToolStepData[\"result\"]): string | null {\n if (!result?.data) return null;\n const data = result.data as Record<string, unknown>;\n if (\n data.image &&\n typeof data.image === \"string\" &&\n (data.image as string).startsWith(\"data:image\")\n ) {\n return data.image as string;\n }\n return null;\n}\n\n/**\n * Individual tool step with shimmer loading, status icons, and debug mode\n */\nexport function ToolStep({\n step,\n showLine = false,\n debug: debugProp,\n defaultExpanded,\n className,\n}: ToolStepProps) {\n const { isDebug, defaultDebugExpanded } = useCopilotUI();\n const debug = debugProp ?? isDebug;\n\n const [expanded, setExpanded] = React.useState(\n defaultExpanded ?? defaultDebugExpanded ?? false,\n );\n\n const displayTitle = getDisplayTitle(step);\n const hasDebugContent =\n (step.args && Object.keys(step.args).length > 0) || step.result;\n const isExecuting = step.status === \"executing\";\n const isCompleted = step.status === \"completed\";\n const isError =\n step.status === \"error\" ||\n step.status === \"failed\" ||\n step.status === \"rejected\";\n\n return (\n <div className={cn(\"relative\", className)}>\n {/* Connecting line */}\n {showLine && (\n <div\n className=\"absolute left-[5px] top-4 bottom-0 w-px bg-border\"\n aria-hidden=\"true\"\n />\n )}\n\n {/* Step row */}\n <div className=\"flex items-start gap-2\">\n {/* Status indicator - only show for non-executing states */}\n {!isExecuting && (\n <StatusIndicator status={step.status} className=\"mt-0.5\" />\n )}\n\n <div className=\"flex-1 min-w-0\">\n {/* Clickable trigger */}\n <button\n type=\"button\"\n onClick={() => debug && hasDebugContent && setExpanded(!expanded)}\n disabled={!debug || !hasDebugContent}\n className={cn(\n \"flex items-center gap-2 text-left min-w-0 w-full\",\n debug &&\n hasDebugContent &&\n \"cursor-pointer hover:text-foreground\",\n !debug && \"cursor-default\",\n )}\n >\n {/* Title with shimmer for executing state */}\n {isExecuting ? (\n <TextShimmerLoader text={displayTitle} size=\"sm\" />\n ) : (\n <span\n className={cn(\n \"text-sm truncate\",\n isCompleted && \"text-foreground\",\n isError && \"text-red-500\",\n step.status === \"pending\" && \"text-muted-foreground/60\",\n )}\n >\n {displayTitle}\n </span>\n )}\n\n {/* Expand indicator - only in debug mode with content */}\n {debug && hasDebugContent && (\n <svg\n className={cn(\n \"size-3 text-muted-foreground/40 transition-transform ml-auto flex-shrink-0\",\n expanded && \"rotate-90\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M9 5l7 7-7 7\"\n />\n </svg>\n )}\n </button>\n\n {/* Debug: Collapsible content (args + results) */}\n {debug && expanded && hasDebugContent && (\n <div className=\"mt-1.5 space-y-1.5\">\n {/* Arguments */}\n {step.args && Object.keys(step.args).length > 0 && (\n <div className=\"text-[10px] font-mono bg-muted/50 rounded px-2 py-1 overflow-x-auto\">\n <span className=\"text-muted-foreground\">args: </span>\n {JSON.stringify(step.args)}\n </div>\n )}\n\n {/* Result */}\n {step.result && (\n <div\n className={cn(\n \"text-[10px] font-mono rounded px-2 py-1 overflow-x-auto whitespace-pre-wrap break-all\",\n step.result.success !== false\n ? \"bg-green-500/10 text-green-600 dark:text-green-400\"\n : \"bg-red-500/10 text-red-600 dark:text-red-400\",\n )}\n >\n <span className=\"text-muted-foreground\">result: </span>\n {formatResult(step.result)}\n {/* Render image if present */}\n {getResultImage(step.result) && (\n <img\n src={getResultImage(step.result)!}\n alt=\"Screenshot\"\n className=\"mt-1.5 rounded border border-border max-w-full max-h-48 object-contain\"\n />\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Error display (always visible, not just in debug) */}\n {isError && step.error && !step.result && (\n <div className=\"mt-0.5 text-[10px] font-mono bg-red-500/10 text-red-600 dark:text-red-400 rounded px-1.5 py-0.5\">\n {step.error}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n// ============================================\n// Tool Steps Container\n// ============================================\n\nexport interface ToolStepsProps {\n steps: ToolStepData[];\n /** Override debug mode from context */\n debug?: boolean;\n /** Expand all by default (in debug mode) */\n defaultExpanded?: boolean;\n /** Class name */\n className?: string;\n}\n\n/**\n * Compact tool steps display with shimmer loading and debug mode\n *\n * @example\n * ```tsx\n * <ToolSteps\n * steps={[\n * { id: \"1\", name: \"get_weather\", status: \"completed\", title: \"Get weather\" },\n * { id: \"2\", name: \"navigate\", status: \"executing\", executingTitle: \"Navigating...\" },\n * ]}\n * debug={true}\n * />\n * ```\n */\nexport function ToolSteps({\n steps,\n debug,\n defaultExpanded = false,\n className,\n}: ToolStepsProps) {\n if (steps.length === 0) return null;\n\n return (\n <div className={cn(\"space-y-1.5\", className)}>\n {steps.map((step, index) => (\n <ToolStep\n key={step.id}\n step={step}\n showLine={index < steps.length - 1}\n debug={debug}\n defaultExpanded={defaultExpanded}\n />\n ))}\n </div>\n );\n}\n\n// ============================================\n// Inline Tool Steps (super compact, single line)\n// ============================================\n\nexport interface InlineToolStepsProps {\n steps: ToolStepData[];\n /** Max steps to show before collapsing */\n maxVisible?: number;\n className?: string;\n}\n\n/**\n * Ultra-compact inline display showing just status icons\n *\n * @example\n * ```tsx\n * <InlineToolSteps steps={toolExecutions} />\n * // Shows: ✓ ✓ ⟳ ○\n * ```\n */\nexport function InlineToolSteps({\n steps,\n maxVisible = 5,\n className,\n}: InlineToolStepsProps) {\n if (steps.length === 0) return null;\n\n const visibleSteps = steps.slice(0, maxVisible);\n const hiddenCount = steps.length - maxVisible;\n\n return (\n <div className={cn(\"flex items-center gap-1\", className)}>\n {visibleSteps.map((step) => (\n <div\n key={step.id}\n title={`${step.name}: ${step.status}`}\n className=\"flex items-center\"\n >\n <StatusIndicator status={step.status} />\n </div>\n ))}\n {hiddenCount > 0 && (\n <span className=\"text-[10px] text-muted-foreground\">\n +{hiddenCount}\n </span>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\n\nexport function SendIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m22 2-7 20-4-9-9-4Z\" />\n <path d=\"M22 2 11 13\" />\n </svg>\n );\n}\n\nexport function StopIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n >\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\n </svg>\n );\n}\n\nexport function CloseIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport function ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nexport function ChevronUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n );\n}\n\nexport function CopyIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </svg>\n );\n}\n\nexport function CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nexport function ThumbsUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M7 10v12\" />\n <path d=\"M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z\" />\n </svg>\n );\n}\n\nexport function ThumbsDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M17 14V2\" />\n <path d=\"M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z\" />\n </svg>\n );\n}\n\nexport function RefreshIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </svg>\n );\n}\n\nexport function UserIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\n </svg>\n );\n}\n\nexport function BotIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M12 8V4H8\" />\n <rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" />\n <path d=\"M2 14h2\" />\n <path d=\"M20 14h2\" />\n <path d=\"M15 13v2\" />\n <path d=\"M9 13v2\" />\n </svg>\n );\n}\n\nexport function PlusIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M5 12h14\" />\n <path d=\"M12 5v14\" />\n </svg>\n );\n}\n\nexport function ArrowUpIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </svg>\n );\n}\n\nexport function XIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n );\n}\n\nexport function AlertTriangleIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n}\n\nexport function TrashIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M3 6h18\" />\n <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" />\n <path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n </svg>\n );\n}\n\nexport function ArrowUpRightIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M7 7h10v10\" />\n <path d=\"M7 17 17 7\" />\n </svg>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport { CheckIcon, XIcon, AlertTriangleIcon } from \"../icons\";\n\n// ============================================\n// Types\n// ============================================\n\nexport type ConfirmationState =\n | \"pending\" // Waiting for user decision\n | \"approved\" // User approved\n | \"rejected\"; // User rejected\n\nexport interface ConfirmationContextValue {\n state: ConfirmationState;\n message?: string;\n onApprove?: () => void;\n onReject?: () => void;\n}\n\n// ============================================\n// Context\n// ============================================\n\nconst ConfirmationContext =\n React.createContext<ConfirmationContextValue | null>(null);\n\nfunction useConfirmationContext() {\n const context = React.useContext(ConfirmationContext);\n if (!context) {\n throw new Error(\n \"Confirmation components must be used within a Confirmation provider\",\n );\n }\n return context;\n}\n\n// ============================================\n// Confirmation Root\n// ============================================\n\nexport interface ConfirmationProps {\n children?: React.ReactNode;\n /** Current approval state */\n state?: ConfirmationState;\n /** Message to display */\n message?: string;\n /** Called when user approves */\n onApprove?: () => void;\n /** Called when user rejects */\n onReject?: () => void;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Confirmation component - Tool approval/rejection UI\n *\n * Similar to Vercel AI SDK's Confirmation component for human-in-the-loop patterns.\n *\n * @example\n * ```tsx\n * <Confirmation\n * state={execution.approvalStatus}\n * message=\"This tool wants to delete a file.\"\n * onApprove={() => approveToolExecution(execution.id)}\n * onReject={() => rejectToolExecution(execution.id)}\n * >\n * <ConfirmationPending>\n * <ConfirmationMessage />\n * <ConfirmationActions />\n * </ConfirmationPending>\n * <ConfirmationApproved />\n * <ConfirmationRejected />\n * </Confirmation>\n * ```\n */\nexport function Confirmation({\n children,\n state = \"pending\",\n message,\n onApprove,\n onReject,\n className,\n}: ConfirmationProps) {\n return (\n <ConfirmationContext.Provider\n value={{ state, message, onApprove, onReject }}\n >\n <div\n className={cn(\n \"confirmation rounded-lg border bg-card text-card-foreground\",\n className,\n )}\n >\n {children}\n </div>\n </ConfirmationContext.Provider>\n );\n}\n\n// ============================================\n// Conditional Rendering Components\n// ============================================\n\nexport interface ConfirmationPendingProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Renders children only when state is \"pending\"\n */\nexport function ConfirmationPending({\n children,\n className,\n}: ConfirmationPendingProps) {\n const { state } = useConfirmationContext();\n if (state !== \"pending\") return null;\n\n return <div className={cn(\"p-4\", className)}>{children}</div>;\n}\n\nexport interface ConfirmationApprovedProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Renders children (or default approved message) when state is \"approved\"\n */\nexport function ConfirmationApproved({\n children,\n className,\n}: ConfirmationApprovedProps) {\n const { state } = useConfirmationContext();\n if (state !== \"approved\") return null;\n\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-green-600 dark:text-green-400\",\n className,\n )}\n >\n <CheckIcon className=\"h-4 w-4\" />\n {children || <span>Approved</span>}\n </div>\n );\n}\n\nexport interface ConfirmationRejectedProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Renders children (or default rejected message) when state is \"rejected\"\n */\nexport function ConfirmationRejected({\n children,\n className,\n}: ConfirmationRejectedProps) {\n const { state } = useConfirmationContext();\n if (state !== \"rejected\") return null;\n\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-red-600 dark:text-red-400\",\n className,\n )}\n >\n <XIcon className=\"h-4 w-4\" />\n {children || <span>Rejected</span>}\n </div>\n );\n}\n\n// ============================================\n// Content Components\n// ============================================\n\nexport interface ConfirmationMessageProps {\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Displays the approval message\n */\nexport function ConfirmationMessage({\n children,\n className,\n}: ConfirmationMessageProps) {\n const { message } = useConfirmationContext();\n\n return (\n <div className={cn(\"flex items-start gap-3\", className)}>\n <AlertTriangleIcon className=\"mt-0.5 h-5 w-5 flex-shrink-0 text-amber-500\" />\n <p className=\"text-sm text-foreground\">\n {children || message || \"This action requires your approval.\"}\n </p>\n </div>\n );\n}\n\nexport interface ConfirmationActionsProps {\n children?: React.ReactNode;\n className?: string;\n /** Label for reject button */\n rejectLabel?: string;\n /** Label for approve button */\n approveLabel?: string;\n}\n\n/**\n * Renders approval/rejection action buttons\n */\nexport function ConfirmationActions({\n children,\n className,\n rejectLabel = \"Reject\",\n approveLabel = \"Approve\",\n}: ConfirmationActionsProps) {\n const { onApprove, onReject } = useConfirmationContext();\n\n // Allow custom buttons via children\n if (children) {\n return (\n <div className={cn(\"mt-3 flex justify-end gap-2\", className)}>\n {children}\n </div>\n );\n }\n\n return (\n <div className={cn(\"mt-3 flex justify-end gap-2\", className)}>\n <Button variant=\"outline\" size=\"sm\" onClick={onReject}>\n {rejectLabel}\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={onApprove}>\n {approveLabel}\n </Button>\n </div>\n );\n}\n\n// ============================================\n// Simple Confirmation (Convenience Component)\n// ============================================\n\nexport interface SimpleConfirmationProps {\n /** Current approval state */\n state: ConfirmationState;\n /** Message to display */\n message?: string;\n /** Called when user approves */\n onApprove?: () => void;\n /** Called when user rejects */\n onReject?: () => void;\n /** Label for reject button */\n rejectLabel?: string;\n /** Label for approve button */\n approveLabel?: string;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * SimpleConfirmation - Convenience wrapper with all states built-in\n *\n * @example\n * ```tsx\n * <SimpleConfirmation\n * state={execution.approvalStatus === \"required\" ? \"pending\" : execution.approvalStatus}\n * message=\"Delete file /tmp/example.txt?\"\n * onApprove={() => approveToolExecution(execution.id)}\n * onReject={() => rejectToolExecution(execution.id)}\n * />\n * ```\n */\nexport function SimpleConfirmation({\n state,\n message,\n onApprove,\n onReject,\n rejectLabel,\n approveLabel,\n className,\n}: SimpleConfirmationProps) {\n return (\n <Confirmation\n state={state}\n message={message}\n onApprove={onApprove}\n onReject={onReject}\n className={className}\n >\n <ConfirmationPending>\n <ConfirmationMessage />\n <ConfirmationActions\n rejectLabel={rejectLabel}\n approveLabel={approveLabel}\n />\n </ConfirmationPending>\n <ConfirmationApproved />\n <ConfirmationRejected />\n </Confirmation>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"./button\";\nimport { CheckIcon, XIcon, AlertTriangleIcon } from \"../icons\";\n\n// ============================================\n// Types\n// ============================================\n\n/**\n * Permission level for tool execution\n */\nexport type PermissionLevel =\n | \"ask\"\n | \"allow_always\"\n | \"deny_always\"\n | \"session\";\n\n/**\n * Permission option for dropdown/selection\n */\nexport interface PermissionOption {\n value: PermissionLevel;\n label: string;\n description?: string;\n}\n\n/**\n * Default permission options\n */\nexport const DEFAULT_PERMISSION_OPTIONS: PermissionOption[] = [\n {\n value: \"ask\",\n label: \"Ask every time\",\n description: \"Always prompt before this tool runs\",\n },\n {\n value: \"allow_always\",\n label: \"Allow always\",\n description: \"Never ask again, always approve\",\n },\n {\n value: \"session\",\n label: \"Allow this session\",\n description: \"Allow until you close this page\",\n },\n {\n value: \"deny_always\",\n label: \"Deny always\",\n description: \"Never ask again, always deny\",\n },\n];\n\nexport type ConfirmationState = \"pending\" | \"approved\" | \"rejected\";\n\n// ============================================\n// PermissionConfirmation Component\n// ============================================\n\nexport interface PermissionConfirmationProps {\n /** Current state: pending, approved, or rejected */\n state: ConfirmationState;\n /** Tool name */\n toolName?: string;\n /** Message to display */\n message?: string;\n /** Called when user approves with permission level */\n onApprove?: (permissionLevel: PermissionLevel) => void;\n /** Called when user rejects with permission level */\n onReject?: (permissionLevel?: PermissionLevel) => void;\n /** Show permission options (default: true) */\n showPermissionOptions?: boolean;\n /** Available permission options */\n permissionOptions?: PermissionOption[];\n /** Additional class name */\n className?: string;\n}\n\n/**\n * PermissionConfirmation - Enhanced confirmation with permission level selection\n *\n * Shows a confirmation dialog for tool approval with options to remember the choice.\n *\n * @example\n * ```tsx\n * <PermissionConfirmation\n * state=\"pending\"\n * toolName=\"capture_screenshot\"\n * message=\"Take a screenshot of the current screen?\"\n * onApprove={(level) => approveToolExecution(tool.id, level)}\n * onReject={(level) => rejectToolExecution(tool.id, undefined, level)}\n * />\n * ```\n */\nexport function PermissionConfirmation({\n state,\n toolName,\n message,\n onApprove,\n onReject,\n showPermissionOptions = true,\n permissionOptions = DEFAULT_PERMISSION_OPTIONS,\n className,\n}: PermissionConfirmationProps) {\n const [selectedPermission, setSelectedPermission] =\n React.useState<PermissionLevel>(\"ask\");\n const [showOptions, setShowOptions] = React.useState(false);\n\n const handleApprove = () => {\n onApprove?.(selectedPermission);\n };\n\n const handleReject = () => {\n // Only pass permission level if it's \"deny_always\"\n onReject?.(\n selectedPermission === \"deny_always\" ? \"deny_always\" : undefined,\n );\n };\n\n // Approved state\n if (state === \"approved\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-green-600 dark:text-green-400 rounded-lg border bg-green-50 dark:bg-green-950/20\",\n className,\n )}\n >\n <CheckIcon className=\"h-4 w-4\" />\n <span>Approved</span>\n </div>\n );\n }\n\n // Rejected state\n if (state === \"rejected\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-red-600 dark:text-red-400 rounded-lg border bg-red-50 dark:bg-red-950/20\",\n className,\n )}\n >\n <XIcon className=\"h-4 w-4\" />\n <span>Rejected</span>\n </div>\n );\n }\n\n // Pending state - show confirmation UI\n return (\n <div\n className={cn(\n \"rounded-lg border bg-card text-card-foreground p-4\",\n className,\n )}\n >\n {/* Header with tool name */}\n <div className=\"flex items-start gap-3 mb-3\">\n <AlertTriangleIcon className=\"mt-0.5 h-5 w-5 flex-shrink-0 text-amber-500\" />\n <div className=\"flex-1 min-w-0\">\n {toolName && (\n <p className=\"text-sm font-medium text-foreground\">{toolName}</p>\n )}\n <p className=\"text-sm text-muted-foreground\">\n {message || \"This tool requires your approval to execute.\"}\n </p>\n </div>\n </div>\n\n {/* Permission options */}\n {showPermissionOptions && (\n <div className=\"mb-4\">\n <button\n type=\"button\"\n onClick={() => setShowOptions(!showOptions)}\n className=\"flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors\"\n >\n <span>\n {\n permissionOptions.find((o) => o.value === selectedPermission)\n ?.label\n }\n </span>\n <svg\n className={cn(\n \"h-4 w-4 transition-transform\",\n showOptions && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </button>\n\n {showOptions && (\n <div className=\"mt-2 space-y-1 pl-1\">\n {permissionOptions.map((option) => (\n <label\n key={option.value}\n className={cn(\n \"flex items-start gap-2 p-2 rounded-md cursor-pointer transition-colors\",\n selectedPermission === option.value\n ? \"bg-primary/10\"\n : \"hover:bg-muted/50\",\n )}\n >\n <input\n type=\"radio\"\n name=\"permission\"\n value={option.value}\n checked={selectedPermission === option.value}\n onChange={() => setSelectedPermission(option.value)}\n className=\"mt-0.5\"\n />\n <div>\n <div className=\"text-sm font-medium\">{option.label}</div>\n {option.description && (\n <div className=\"text-xs text-muted-foreground\">\n {option.description}\n </div>\n )}\n </div>\n </label>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Action buttons */}\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleReject}>\n Deny\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={handleApprove}>\n Allow\n </Button>\n </div>\n </div>\n );\n}\n\n// ============================================\n// CompactPermissionConfirmation Component\n// ============================================\n\nexport interface CompactPermissionConfirmationProps {\n /** Current state: pending, approved, or rejected */\n state: ConfirmationState;\n /** Message to display */\n message?: string;\n /** Called when user approves */\n onApprove?: (permissionLevel: PermissionLevel) => void;\n /** Called when user rejects */\n onReject?: (permissionLevel?: PermissionLevel) => void;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * CompactPermissionConfirmation - Simpler version with \"Don't ask again\" checkbox\n *\n * @example\n * ```tsx\n * <CompactPermissionConfirmation\n * state=\"pending\"\n * message=\"Take a screenshot?\"\n * onApprove={(level) => approveToolExecution(tool.id, level)}\n * onReject={(level) => rejectToolExecution(tool.id, undefined, level)}\n * />\n * ```\n */\nexport function CompactPermissionConfirmation({\n state,\n message,\n onApprove,\n onReject,\n className,\n}: CompactPermissionConfirmationProps) {\n const [rememberChoice, setRememberChoice] = React.useState(false);\n\n const handleApprove = () => {\n onApprove?.(rememberChoice ? \"allow_always\" : \"ask\");\n };\n\n const handleReject = () => {\n onReject?.(rememberChoice ? \"deny_always\" : undefined);\n };\n\n // Approved state\n if (state === \"approved\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-green-600 dark:text-green-400\",\n className,\n )}\n >\n <CheckIcon className=\"h-4 w-4\" />\n <span>Approved</span>\n </div>\n );\n }\n\n // Rejected state\n if (state === \"rejected\") {\n return (\n <div\n className={cn(\n \"flex items-center gap-2 px-4 py-2 text-sm text-red-600 dark:text-red-400\",\n className,\n )}\n >\n <XIcon className=\"h-4 w-4\" />\n <span>Rejected</span>\n </div>\n );\n }\n\n // Pending state\n return (\n <div\n className={cn(\n \"rounded-lg border bg-card text-card-foreground p-4\",\n className,\n )}\n >\n <div className=\"flex items-start gap-3 mb-3\">\n <AlertTriangleIcon className=\"mt-0.5 h-5 w-5 flex-shrink-0 text-amber-500\" />\n <p className=\"text-sm text-foreground\">\n {message || \"This action requires your approval.\"}\n </p>\n </div>\n\n <div className=\"flex items-center justify-between\">\n <label className=\"flex items-center gap-2 text-sm text-muted-foreground cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={rememberChoice}\n onChange={(e) => setRememberChoice(e.target.checked)}\n className=\"rounded border-gray-300\"\n />\n Don't ask again\n </label>\n\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleReject}>\n Deny\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={handleApprove}>\n Allow\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport type FollowUpProps = {\n /** Follow-up questions to display */\n questions: string[];\n /** Called when a follow-up is clicked */\n onSelect: (question: string) => void;\n /** Custom class for container */\n className?: string;\n /** Custom class for buttons */\n buttonClassName?: string;\n};\n\n/**\n * Parse follow-up questions from message content\n * Format: [FOLLOWUP: question1 | question2 | question3]\n */\nexport function parseFollowUps(content: string): {\n cleanContent: string;\n followUps: string[];\n} {\n if (!content) {\n return { cleanContent: content, followUps: [] };\n }\n\n const followUpRegex = /\\[FOLLOWUP:\\s*([^\\]]+)\\]/gi;\n const matches = content.match(followUpRegex);\n\n if (!matches || matches.length === 0) {\n return { cleanContent: content, followUps: [] };\n }\n\n // Extract follow-ups from the last match\n const lastMatch = matches[matches.length - 1];\n const innerContent = lastMatch.replace(/\\[FOLLOWUP:\\s*|\\]/gi, \"\");\n const followUps = innerContent\n .split(\"|\")\n .map((q) => q.trim())\n .filter((q) => q.length > 0);\n\n // Remove ALL FOLLOWUP tags from content\n const cleanContent = content.replace(followUpRegex, \"\").trim();\n\n return { cleanContent, followUps };\n}\n\n/**\n * Follow-up questions component\n * Displays clickable chips for suggested follow-up actions\n */\nexport function FollowUpQuestions({\n questions,\n onSelect,\n className,\n buttonClassName,\n}: FollowUpProps) {\n if (!questions || questions.length === 0) {\n return null;\n }\n\n return (\n <div className={cn(\"flex flex-wrap gap-2 mt-2\", className)}>\n {questions.map((question, index) => (\n <button\n key={index}\n onClick={() => onSelect(question)}\n className={cn(\n \"px-3 py-1.5 text-sm rounded-full\",\n \"bg-primary/10 hover:bg-primary/20 text-primary\",\n \"border border-primary/20 hover:border-primary/40\",\n \"transition-colors duration-150\",\n \"text-left whitespace-nowrap\",\n buttonClassName,\n )}\n >\n {question}\n </button>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useState, useEffect } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n/**\n * SDK State for DevLogger\n */\nexport interface DevLoggerState {\n // Chat state\n chat: {\n isLoading: boolean;\n messageCount: number;\n threadId: string;\n error: string | null;\n };\n // Tools state\n tools: {\n isEnabled: boolean;\n isCapturing: boolean;\n pendingConsent: boolean;\n };\n // Agent loop state\n agentLoop: {\n toolExecutions: Array<{\n id: string;\n name: string;\n status: string;\n approvalStatus: string;\n }>;\n pendingApprovals: number;\n iteration: number;\n maxIterations: number;\n };\n // Registered items\n registered: {\n tools: Array<{ name: string; location: string }>;\n actions: Array<{ name: string }>;\n contextCount: number;\n };\n // Permissions\n permissions: {\n stored: Array<{ toolName: string; level: string }>;\n loaded: boolean;\n };\n // Config\n config: {\n provider: string;\n model: string;\n runtimeUrl: string;\n };\n}\n\nexport interface DevLoggerProps {\n /** SDK state to display */\n state: DevLoggerState;\n /** Position of the floating button */\n position?: \"bottom-left\" | \"bottom-right\" | \"top-left\" | \"top-right\";\n /** Custom class name */\n className?: string;\n}\n\n/**\n * DevLogger - Floating debug panel for SDK development\n *\n * Shows a floating button that opens a modal with all SDK state\n * for debugging purposes.\n */\nexport function DevLogger({\n state,\n position = \"bottom-right\",\n className,\n}: DevLoggerProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [activeTab, setActiveTab] = useState<\n \"chat\" | \"tools\" | \"agent\" | \"config\"\n >(\"chat\");\n\n // Position classes\n const positionClasses = {\n \"bottom-left\": \"bottom-4 left-4\",\n \"bottom-right\": \"bottom-4 right-4\",\n \"top-left\": \"top-4 left-4\",\n \"top-right\": \"top-4 right-4\",\n };\n\n return (\n <>\n {/* Floating Button */}\n <button\n type=\"button\"\n onClick={() => setIsOpen(true)}\n className={cn(\n \"fixed z-[9999] flex items-center justify-center\",\n \"w-12 h-12 rounded-full shadow-lg\",\n \"bg-orange-500 hover:bg-orange-600 text-white\",\n \"transition-transform hover:scale-110\",\n positionClasses[position],\n className,\n )}\n title=\"Open SDK DevLogger\"\n >\n <svg\n className=\"w-6 h-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\"\n />\n </svg>\n </button>\n\n {/* Modal Overlay */}\n {isOpen && (\n <div\n className=\"fixed inset-0 z-[10000] flex items-center justify-center bg-black/50\"\n onClick={() => setIsOpen(false)}\n >\n {/* Modal Content */}\n <div\n className=\"bg-background border rounded-lg shadow-xl w-[600px] max-h-[80vh] overflow-hidden\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b bg-muted/50\">\n <div className=\"flex items-center gap-2\">\n <div className=\"w-3 h-3 rounded-full bg-orange-500\" />\n <h2 className=\"font-semibold text-sm\">Copilot SDK DevLogger</h2>\n </div>\n <button\n type=\"button\"\n onClick={() => setIsOpen(false)}\n className=\"text-muted-foreground hover:text-foreground\"\n >\n <svg\n className=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n\n {/* Tabs */}\n <div className=\"flex border-b\">\n {([\"chat\", \"tools\", \"agent\", \"config\"] as const).map((tab) => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setActiveTab(tab)}\n className={cn(\n \"px-4 py-2 text-sm font-medium capitalize\",\n activeTab === tab\n ? \"border-b-2 border-primary text-primary\"\n : \"text-muted-foreground hover:text-foreground\",\n )}\n >\n {tab}\n </button>\n ))}\n </div>\n\n {/* Content */}\n <div className=\"p-4 overflow-y-auto max-h-[60vh]\">\n {activeTab === \"chat\" && <ChatTab state={state} />}\n {activeTab === \"tools\" && <ToolsTab state={state} />}\n {activeTab === \"agent\" && <AgentTab state={state} />}\n {activeTab === \"config\" && <ConfigTab state={state} />}\n </div>\n </div>\n </div>\n )}\n </>\n );\n}\n\n/**\n * Chat Tab Content\n */\nfunction ChatTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Status\">\n <Row label=\"Loading\" value={state.chat.isLoading ? \"Yes\" : \"No\"} />\n <Row label=\"Message Count\" value={state.chat.messageCount} />\n <Row label=\"Thread ID\" value={state.chat.threadId} mono />\n <Row\n label=\"Error\"\n value={state.chat.error || \"None\"}\n valueClass={state.chat.error ? \"text-red-500\" : \"text-green-500\"}\n />\n </Section>\n </div>\n );\n}\n\n/**\n * Tools Tab Content\n */\nfunction ToolsTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Smart Context\">\n <Row label=\"Enabled\" value={state.tools.isEnabled ? \"Yes\" : \"No\"} />\n <Row label=\"Capturing\" value={state.tools.isCapturing ? \"Yes\" : \"No\"} />\n <Row\n label=\"Pending Consent\"\n value={state.tools.pendingConsent ? \"Yes\" : \"No\"}\n />\n </Section>\n\n <Section title=\"Registered Tools\">\n {state.registered.tools.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No tools registered</p>\n ) : (\n <div className=\"space-y-1\">\n {state.registered.tools.map((tool) => (\n <div\n key={tool.name}\n className=\"flex items-center justify-between text-sm\"\n >\n <code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">\n {tool.name}\n </code>\n <span className=\"text-muted-foreground text-xs\">\n {tool.location}\n </span>\n </div>\n ))}\n </div>\n )}\n </Section>\n\n <Section title=\"Permissions\">\n <Row label=\"Loaded\" value={state.permissions.loaded ? \"Yes\" : \"No\"} />\n {state.permissions.stored.length > 0 && (\n <div className=\"mt-2 space-y-1\">\n {state.permissions.stored.map((p) => (\n <div\n key={p.toolName}\n className=\"flex items-center justify-between text-sm\"\n >\n <code className=\"bg-muted px-1.5 py-0.5 rounded text-xs\">\n {p.toolName}\n </code>\n <Badge level={p.level} />\n </div>\n ))}\n </div>\n )}\n </Section>\n </div>\n );\n}\n\n/**\n * Agent Tab Content\n */\nfunction AgentTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Loop State\">\n <Row\n label=\"Iteration\"\n value={`${state.agentLoop.iteration} / ${state.agentLoop.maxIterations}`}\n />\n <Row\n label=\"Pending Approvals\"\n value={state.agentLoop.pendingApprovals}\n />\n </Section>\n\n <Section title=\"Tool Executions\">\n {state.agentLoop.toolExecutions.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No executions</p>\n ) : (\n <div className=\"space-y-2\">\n {state.agentLoop.toolExecutions.map((exec) => (\n <div\n key={exec.id}\n className=\"border rounded p-2 text-sm space-y-1\"\n >\n <div className=\"flex items-center justify-between\">\n <code className=\"font-medium\">{exec.name}</code>\n <StatusBadge status={exec.status} />\n </div>\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>ID: {exec.id.slice(0, 12)}...</span>\n <span>Approval: {exec.approvalStatus}</span>\n </div>\n </div>\n ))}\n </div>\n )}\n </Section>\n\n <Section title=\"Registered Actions\">\n {state.registered.actions.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">No actions registered</p>\n ) : (\n <div className=\"flex flex-wrap gap-1\">\n {state.registered.actions.map((action) => (\n <code\n key={action.name}\n className=\"bg-muted px-1.5 py-0.5 rounded text-xs\"\n >\n {action.name}\n </code>\n ))}\n </div>\n )}\n </Section>\n\n <Section title=\"Context Tree\">\n <Row label=\"Context Items\" value={state.registered.contextCount} />\n </Section>\n </div>\n );\n}\n\n/**\n * Config Tab Content\n */\nfunction ConfigTab({ state }: { state: DevLoggerState }) {\n return (\n <div className=\"space-y-4\">\n <Section title=\"Provider\">\n <Row label=\"Provider\" value={state.config.provider || \"Not set\"} />\n <Row label=\"Model\" value={state.config.model || \"Default\"} />\n <Row\n label=\"Runtime URL\"\n value={state.config.runtimeUrl || \"Not set\"}\n mono\n />\n </Section>\n </div>\n );\n}\n\n// Helper Components\n\nfunction Section({\n title,\n children,\n}: {\n title: string;\n children: React.ReactNode;\n}) {\n return (\n <div>\n <h3 className=\"text-xs font-semibold text-muted-foreground uppercase tracking-wide mb-2\">\n {title}\n </h3>\n {children}\n </div>\n );\n}\n\nfunction Row({\n label,\n value,\n mono,\n valueClass,\n}: {\n label: string;\n value: string | number;\n mono?: boolean;\n valueClass?: string;\n}) {\n return (\n <div className=\"flex items-center justify-between py-1 text-sm\">\n <span className=\"text-muted-foreground\">{label}</span>\n <span\n className={cn(\n mono && \"font-mono text-xs bg-muted px-1.5 py-0.5 rounded\",\n valueClass,\n )}\n >\n {value}\n </span>\n </div>\n );\n}\n\nfunction Badge({ level }: { level: string }) {\n const colors: Record<string, string> = {\n allow_always: \"bg-green-100 text-green-800\",\n deny_always: \"bg-red-100 text-red-800\",\n session: \"bg-blue-100 text-blue-800\",\n ask: \"bg-gray-100 text-gray-800\",\n };\n\n return (\n <span\n className={cn(\n \"px-1.5 py-0.5 rounded text-xs font-medium\",\n colors[level] || colors.ask,\n )}\n >\n {level}\n </span>\n );\n}\n\nfunction StatusBadge({ status }: { status: string }) {\n const colors: Record<string, string> = {\n pending: \"bg-yellow-100 text-yellow-800\",\n executing: \"bg-blue-100 text-blue-800\",\n completed: \"bg-green-100 text-green-800\",\n error: \"bg-red-100 text-red-800\",\n };\n\n return (\n <span\n className={cn(\n \"px-1.5 py-0.5 rounded text-xs font-medium\",\n colors[status] || \"bg-gray-100 text-gray-800\",\n )}\n >\n {status}\n </span>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\n// ============================================\n// Types\n// ============================================\n\nexport type CapabilityType =\n | \"vision\"\n | \"tools\"\n | \"thinking\"\n | \"streaming\"\n | \"pdf\"\n | \"audio\"\n | \"video\"\n | \"json\";\n\nexport interface CapabilityBadgeProps {\n /** Capability type to display */\n type: CapabilityType;\n /** Whether the capability is supported */\n supported?: boolean;\n /** Show label text next to icon */\n showLabel?: boolean;\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Additional class name */\n className?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nconst icons: Record<CapabilityType, React.ReactNode> = {\n vision: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n ),\n tools: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\" />\n </svg>\n ),\n thinking: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n ),\n streaming: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M22 12h-4l-3 9L9 3l-3 9H2\" />\n </svg>\n ),\n pdf: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n ),\n audio: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\" />\n <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\" />\n </svg>\n ),\n video: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <polygon points=\"23 7 16 12 23 17 23 7\" />\n <rect x=\"1\" y=\"5\" width=\"15\" height=\"14\" rx=\"2\" ry=\"2\" />\n </svg>\n ),\n json: (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={2}>\n <path d=\"M4 6h16\" />\n <path d=\"M4 12h16\" />\n <path d=\"M4 18h12\" />\n </svg>\n ),\n};\n\nconst labels: Record<CapabilityType, string> = {\n vision: \"Vision\",\n tools: \"Tools\",\n thinking: \"Thinking\",\n streaming: \"Streaming\",\n pdf: \"PDF\",\n audio: \"Audio\",\n video: \"Video\",\n json: \"JSON\",\n};\n\nconst descriptions: Record<CapabilityType, string> = {\n vision: \"Supports image inputs\",\n tools: \"Supports function calling\",\n thinking: \"Extended reasoning mode\",\n streaming: \"Real-time streaming\",\n pdf: \"Can process PDF files\",\n audio: \"Supports audio inputs\",\n video: \"Supports video inputs\",\n json: \"Structured JSON output\",\n};\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Badge showing a model capability with icon\n *\n * @example\n * ```tsx\n * <CapabilityBadge type=\"vision\" supported />\n * <CapabilityBadge type=\"audio\" supported={false} />\n * ```\n */\nexport function CapabilityBadge({\n type,\n supported = true,\n showLabel = false,\n size = \"sm\",\n className,\n}: CapabilityBadgeProps) {\n const sizeClasses = {\n sm: \"h-5 px-1.5 text-[10px]\",\n md: \"h-6 px-2 text-xs\",\n lg: \"h-7 px-2.5 text-sm\",\n };\n\n const iconSizes = {\n sm: \"w-3 h-3\",\n md: \"w-3.5 h-3.5\",\n lg: \"w-4 h-4\",\n };\n\n return (\n <div\n className={cn(\n \"inline-flex items-center gap-1 rounded-full font-medium transition-colors\",\n sizeClasses[size],\n supported\n ? \"bg-primary/10 text-primary\"\n : \"bg-muted text-muted-foreground opacity-50\",\n className,\n )}\n title={`${labels[type]}: ${descriptions[type]}`}\n >\n <span className={cn(\"flex-shrink-0\", iconSizes[size])}>\n {icons[type]}\n </span>\n {showLabel && <span>{labels[type]}</span>}\n </div>\n );\n}\n\n// ============================================\n// Capability List\n// ============================================\n\nexport interface CapabilityListProps {\n /** Capabilities object */\n capabilities: {\n supportsVision?: boolean;\n supportsTools?: boolean;\n supportsThinking?: boolean;\n supportsStreaming?: boolean;\n supportsPDF?: boolean;\n supportsAudio?: boolean;\n supportsVideo?: boolean;\n supportsJsonMode?: boolean;\n };\n /** Show labels */\n showLabels?: boolean;\n /** Only show supported capabilities */\n onlySupported?: boolean;\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Display a list of capability badges\n *\n * @example\n * ```tsx\n * const { capabilities } = useCapabilities();\n * <CapabilityList capabilities={capabilities} />\n * ```\n */\nexport function CapabilityList({\n capabilities,\n showLabels = false,\n onlySupported = true,\n size = \"sm\",\n className,\n}: CapabilityListProps) {\n const items: Array<{ type: CapabilityType; supported: boolean }> = [\n { type: \"vision\", supported: capabilities.supportsVision ?? false },\n { type: \"tools\", supported: capabilities.supportsTools ?? false },\n { type: \"thinking\", supported: capabilities.supportsThinking ?? false },\n { type: \"streaming\", supported: capabilities.supportsStreaming ?? false },\n { type: \"pdf\", supported: capabilities.supportsPDF ?? false },\n { type: \"audio\", supported: capabilities.supportsAudio ?? false },\n { type: \"video\", supported: capabilities.supportsVideo ?? false },\n { type: \"json\", supported: capabilities.supportsJsonMode ?? false },\n ];\n\n const filteredItems = onlySupported\n ? items.filter((item) => item.supported)\n : items;\n\n if (filteredItems.length === 0) return null;\n\n return (\n <div className={cn(\"flex flex-wrap gap-1\", className)}>\n {filteredItems.map((item) => (\n <CapabilityBadge\n key={item.type}\n type={item.type}\n supported={item.supported}\n showLabel={showLabels}\n size={size}\n />\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { CapabilityList } from \"./capability-badge\";\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ModelOption {\n /** Model ID */\n id: string;\n /** Display name */\n name?: string;\n /** Provider name */\n provider?: string;\n /** Model capabilities (optional, for showing badges) */\n capabilities?: {\n supportsVision?: boolean;\n supportsTools?: boolean;\n supportsThinking?: boolean;\n supportsStreaming?: boolean;\n supportsPDF?: boolean;\n supportsAudio?: boolean;\n supportsVideo?: boolean;\n supportsJsonMode?: boolean;\n };\n}\n\nexport interface ProviderGroup {\n /** Provider name */\n name: string;\n /** Provider display label */\n label?: string;\n /** Models in this provider */\n models: ModelOption[];\n}\n\nexport interface ModelSelectorProps {\n /** Currently selected model ID */\n value?: string;\n /** Called when selection changes */\n onChange?: (modelId: string, provider?: string) => void;\n /** Models grouped by provider */\n providers?: ProviderGroup[];\n /** Flat list of models (alternative to providers) */\n models?: ModelOption[];\n /** Current capabilities (for showing in header) */\n currentCapabilities?: ModelOption[\"capabilities\"];\n /** Placeholder text */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Show capability badges */\n showCapabilities?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Model selector dropdown with provider grouping\n *\n * @example\n * ```tsx\n * const { provider, model, supportedModels } = useCapabilities();\n *\n * <ModelSelector\n * value={model}\n * onChange={(modelId) => console.log('Selected:', modelId)}\n * providers={[\n * {\n * name: 'openai',\n * label: 'OpenAI',\n * models: [\n * { id: 'gpt-4o', name: 'GPT-4o' },\n * { id: 'gpt-4o-mini', name: 'GPT-4o Mini' },\n * ],\n * },\n * ]}\n * />\n * ```\n */\nexport function ModelSelector({\n value,\n onChange,\n providers,\n models,\n currentCapabilities,\n placeholder = \"Select model...\",\n disabled = false,\n size = \"md\",\n showCapabilities = true,\n className,\n}: ModelSelectorProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const containerRef = React.useRef<HTMLDivElement>(null);\n\n // Close on outside click\n React.useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n // Find selected model info\n const selectedModel = React.useMemo(() => {\n if (!value) return null;\n\n // Check providers first\n if (providers) {\n for (const provider of providers) {\n const model = provider.models.find((m) => m.id === value);\n if (model) return { ...model, provider: provider.name };\n }\n }\n\n // Check flat models list\n if (models) {\n return models.find((m) => m.id === value) || null;\n }\n\n return null;\n }, [value, providers, models]);\n\n const sizeClasses = {\n sm: \"h-8 text-xs px-2\",\n md: \"h-9 text-sm px-3\",\n lg: \"h-10 text-base px-4\",\n };\n\n const handleSelect = (modelId: string, provider?: string) => {\n onChange?.(modelId, provider);\n setIsOpen(false);\n };\n\n return (\n <div ref={containerRef} className={cn(\"relative\", className)}>\n {/* Trigger button */}\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n className={cn(\n \"flex items-center justify-between gap-2 w-full rounded-md border bg-background\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n sizeClasses[size],\n )}\n >\n <div className=\"flex items-center gap-2 min-w-0\">\n {selectedModel ? (\n <>\n <span className=\"truncate font-medium\">\n {selectedModel.name || selectedModel.id}\n </span>\n {selectedModel.provider && (\n <span className=\"text-muted-foreground text-[10px] uppercase\">\n {selectedModel.provider}\n </span>\n )}\n </>\n ) : (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n )}\n </div>\n\n {/* Chevron */}\n <svg\n className={cn(\n \"w-4 h-4 flex-shrink-0 text-muted-foreground transition-transform\",\n isOpen && \"rotate-180\",\n )}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </button>\n\n {/* Show capabilities below button if provided */}\n {showCapabilities && currentCapabilities && (\n <div className=\"mt-1\">\n <CapabilityList\n capabilities={currentCapabilities}\n size=\"sm\"\n onlySupported\n />\n </div>\n )}\n\n {/* Dropdown */}\n {isOpen && (\n <div\n className={cn(\n \"absolute z-50 top-full left-0 right-0 mt-1\",\n \"max-h-[300px] overflow-auto\",\n \"rounded-md border bg-popover text-popover-foreground shadow-md\",\n \"animate-in fade-in-0 zoom-in-95\",\n )}\n >\n {/* Providers with groups */}\n {providers?.map((provider) => (\n <div key={provider.name}>\n {/* Provider header */}\n <div className=\"px-2 py-1.5 text-[10px] font-semibold text-muted-foreground uppercase tracking-wider bg-muted/50\">\n {provider.label || provider.name}\n </div>\n\n {/* Models */}\n {provider.models.map((model) => (\n <button\n key={model.id}\n type=\"button\"\n onClick={() => handleSelect(model.id, provider.name)}\n className={cn(\n \"flex flex-col gap-0.5 w-full px-3 py-2 text-left\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n value === model.id && \"bg-accent\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-sm\">\n {model.name || model.id}\n </span>\n {value === model.id && (\n <svg\n className=\"w-4 h-4 text-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n </div>\n {showCapabilities && model.capabilities && (\n <CapabilityList\n capabilities={model.capabilities}\n size=\"sm\"\n onlySupported\n />\n )}\n </button>\n ))}\n </div>\n ))}\n\n {/* Flat models list */}\n {models?.map((model) => (\n <button\n key={model.id}\n type=\"button\"\n onClick={() => handleSelect(model.id, model.provider)}\n className={cn(\n \"flex flex-col gap-0.5 w-full px-3 py-2 text-left\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n value === model.id && \"bg-accent\",\n )}\n >\n <div className=\"flex items-center gap-2\">\n <span className=\"font-medium text-sm\">\n {model.name || model.id}\n </span>\n {model.provider && (\n <span className=\"text-muted-foreground text-[10px] uppercase\">\n {model.provider}\n </span>\n )}\n {value === model.id && (\n <svg\n className=\"w-4 h-4 text-primary ml-auto\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n </div>\n {showCapabilities && model.capabilities && (\n <CapabilityList\n capabilities={model.capabilities}\n size=\"sm\"\n onlySupported\n />\n )}\n </button>\n ))}\n\n {/* Empty state */}\n {!providers?.length && !models?.length && (\n <div className=\"px-3 py-4 text-center text-sm text-muted-foreground\">\n No models available\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\n// ============================================\n// Simple Model Selector (just a native select)\n// ============================================\n\nexport interface SimpleModelSelectorProps {\n /** Currently selected model ID */\n value?: string;\n /** Called when selection changes */\n onChange?: (modelId: string) => void;\n /** List of model IDs */\n models: string[];\n /** Disabled state */\n disabled?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n/**\n * Simple native select for model selection\n *\n * @example\n * ```tsx\n * const { model, supportedModels } = useCapabilities();\n *\n * <SimpleModelSelector\n * value={model}\n * onChange={(id) => console.log('Selected:', id)}\n * models={supportedModels}\n * />\n * ```\n */\nexport function SimpleModelSelector({\n value,\n onChange,\n models,\n disabled = false,\n className,\n}: SimpleModelSelectorProps) {\n return (\n <select\n value={value || \"\"}\n onChange={(e) => onChange?.(e.target.value)}\n disabled={disabled}\n className={cn(\n \"h-9 px-3 rounded-md border bg-background text-sm\",\n \"focus:outline-none focus:ring-2 focus:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n >\n <option value=\"\" disabled>\n Select model...\n </option>\n {models.map((modelId) => (\n <option key={modelId} value={modelId}>\n {modelId}\n </option>\n ))}\n </select>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { Popover as BasePopover } from \"@base-ui/react/popover\";\nimport { cn } from \"../../lib/utils\";\n\n// ============================================\n// Popover (Root)\n// ============================================\n\nexport type PopoverProps = {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nfunction Popover({ children, open, defaultOpen, onOpenChange }: PopoverProps) {\n return (\n <BasePopover.Root\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n >\n {children}\n </BasePopover.Root>\n );\n}\n\n// ============================================\n// PopoverTrigger\n// ============================================\n\nexport type PopoverTriggerProps = {\n children: React.ReactNode;\n asChild?: boolean;\n className?: string;\n} & React.ComponentPropsWithoutRef<\"button\">;\n\nfunction PopoverTrigger({\n children,\n asChild,\n className,\n ...props\n}: PopoverTriggerProps) {\n if (asChild && React.isValidElement(children)) {\n return (\n <BasePopover.Trigger render={children} className={className} {...props} />\n );\n }\n\n return (\n <BasePopover.Trigger className={className} {...props}>\n {children}\n </BasePopover.Trigger>\n );\n}\n\n// ============================================\n// PopoverContent\n// ============================================\n\nexport type PopoverContentProps = {\n children: React.ReactNode;\n className?: string;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n};\n\nfunction PopoverContent({\n children,\n className,\n side = \"bottom\",\n align = \"start\",\n sideOffset = 4,\n}: PopoverContentProps) {\n return (\n <BasePopover.Portal>\n <BasePopover.Positioner side={side} align={align} sideOffset={sideOffset}>\n <BasePopover.Popup\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n \"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2\",\n \"data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className,\n )}\n >\n {children}\n </BasePopover.Popup>\n </BasePopover.Positioner>\n </BasePopover.Portal>\n );\n}\n\n// ============================================\n// Exports\n// ============================================\n\nexport { Popover, PopoverTrigger, PopoverContent };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { Thread } from \"../../../core/types/thread\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"./popover\";\n\n// ============================================\n// Helper Functions\n// ============================================\n\n/**\n * Format a date for display\n */\nfunction formatDate(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n\n // Less than 1 minute\n if (diff < 60 * 1000) {\n return \"Just now\";\n }\n\n // Less than 1 hour\n if (diff < 60 * 60 * 1000) {\n const mins = Math.floor(diff / (60 * 1000));\n return `${mins}m ago`;\n }\n\n // Less than 24 hours\n if (diff < 24 * 60 * 60 * 1000) {\n const hours = Math.floor(diff / (60 * 60 * 1000));\n return `${hours}h ago`;\n }\n\n // Less than 7 days\n if (diff < 7 * 24 * 60 * 60 * 1000) {\n const days = Math.floor(diff / (24 * 60 * 60 * 1000));\n return `${days}d ago`;\n }\n\n // Otherwise show date\n return date.toLocaleDateString();\n}\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ThreadPickerProps {\n /** Currently selected thread ID */\n value?: string | null;\n /** List of threads to display */\n threads: Thread[];\n /** Called when a thread is selected */\n onSelect?: (threadId: string) => void;\n /** Called when a thread is deleted */\n onDeleteThread?: (threadId: string) => void;\n /** Called when \"New conversation\" is clicked */\n onNewThread?: () => void;\n /** Placeholder text when no thread is selected */\n placeholder?: string;\n /** Text for new conversation button */\n newThreadLabel?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Size variant */\n size?: \"sm\" | \"md\" | \"lg\";\n /** Additional class name for root container */\n className?: string;\n /** Class name for the trigger button */\n buttonClassName?: string;\n /** Class name for the dropdown container */\n dropdownClassName?: string;\n /** Class name for thread items */\n itemClassName?: string;\n /** Class name for the new conversation button */\n newButtonClassName?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction ChevronIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n );\n}\n\nfunction PlusIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 4v16m8-8H4\" />\n </svg>\n );\n}\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n );\n}\n\nfunction TrashIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M3 6h18\" />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"\n />\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\"\n />\n </svg>\n );\n}\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * ThreadPicker - Dropdown for selecting conversations\n *\n * @example\n * ```tsx\n * const { threads, currentThread, switchThread, createThread } = useThreadManager();\n *\n * <ThreadPicker\n * value={currentThread?.id}\n * threads={threads}\n * onSelect={switchThread}\n * onNewThread={() => createThread()}\n * />\n * ```\n */\nexport function ThreadPicker({\n value,\n threads,\n onSelect,\n onDeleteThread,\n onNewThread,\n placeholder = \"Select conversation...\",\n newThreadLabel = \"New conversation\",\n disabled = false,\n loading = false,\n size = \"md\",\n className,\n buttonClassName,\n dropdownClassName,\n itemClassName,\n newButtonClassName,\n}: ThreadPickerProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n\n // Find selected thread\n const selectedThread = React.useMemo(() => {\n if (!value) return null;\n return threads.find((t) => t.id === value) ?? null;\n }, [value, threads]);\n\n const handleSelect = (threadId: string) => {\n onSelect?.(threadId);\n setIsOpen(false);\n };\n\n const handleNewThread = () => {\n onNewThread?.();\n setIsOpen(false);\n };\n\n return (\n <Popover open={isOpen} onOpenChange={setIsOpen}>\n <PopoverTrigger\n disabled={disabled || loading}\n className={cn(\n \"flex items-center gap-1 w-full\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className,\n buttonClassName,\n )}\n >\n <div className=\"flex items-center gap-1 text-xs \">\n {loading ? (\n <span className=\"text-muted-foreground\">Loading...</span>\n ) : selectedThread ? (\n <span className=\"truncate font-medium text-muted-foreground hover:text-foreground\">\n {selectedThread.title || \"Untitled conversation\"}\n </span>\n ) : (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n )}\n </div>\n\n <ChevronIcon\n className={cn(\n \"flex-shrink-0 size-3 text-muted-foreground transition-transform\",\n isOpen && \"rotate-180\",\n )}\n />\n </PopoverTrigger>\n\n <PopoverContent\n align=\"start\"\n className={cn(\n \"w-[var(--anchor-width)] min-w-[250px] p-0 max-h-[300px] overflow-auto\",\n dropdownClassName,\n )}\n >\n {/* New conversation button */}\n {onNewThread && (\n <button\n type=\"button\"\n onClick={handleNewThread}\n className={cn(\n \"flex items-center gap-2 w-full px-2.5 py-1.5 text-left\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n \"border-b\",\n newButtonClassName,\n )}\n >\n <PlusIcon className=\"text-primary size-3\" />\n <span className=\"font-medium text-xs\">{newThreadLabel}</span>\n </button>\n )}\n\n {/* Thread list */}\n {threads.length > 0 ? (\n threads.map((thread) => (\n <div\n key={thread.id}\n className={cn(\n \"group flex items-center gap-1 w-full px-2.5 py-1.5\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus-within:bg-accent focus-within:text-accent-foreground\",\n value === thread.id && \"bg-accent\",\n itemClassName,\n )}\n >\n <button\n type=\"button\"\n onClick={() => handleSelect(thread.id)}\n className=\"flex-1 flex flex-col gap-0.5 text-left focus:outline-none min-w-0\"\n >\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"font-medium text-xs truncate\">\n {thread.title || \"Untitled conversation\"}\n </span>\n {value === thread.id && (\n <CheckIcon className=\"flex-shrink-0 text-primary size-3\" />\n )}\n </div>\n <div className=\"flex items-center gap-1.5 text-[11px] text-muted-foreground\">\n {thread.preview && (\n <span className=\"truncate max-w-[180px]\">\n {thread.preview}\n </span>\n )}\n {thread.preview && thread.updatedAt && (\n <span className=\"flex-shrink-0\">·</span>\n )}\n {thread.updatedAt && (\n <span className=\"flex-shrink-0\">\n {formatDate(thread.updatedAt)}\n </span>\n )}\n </div>\n </button>\n {/* Delete button - appears on hover */}\n {onDeleteThread && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onDeleteThread(thread.id);\n }}\n className=\"flex-shrink-0 p-1 rounded opacity-0 group-hover:opacity-100 text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-all focus:opacity-100 focus:outline-none\"\n aria-label=\"Delete thread\"\n >\n <TrashIcon className=\"size-3\" />\n </button>\n )}\n </div>\n ))\n ) : (\n <div className=\"px-2.5 py-3 text-center text-xs text-muted-foreground\">\n No conversations yet\n </div>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { Thread } from \"../../../core/types/thread\";\n\n// ============================================\n// Helper Functions\n// ============================================\n\n/**\n * Format a date for display\n */\nfunction formatDate(date: Date): string {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n\n // Less than 1 minute\n if (diff < 60 * 1000) {\n return \"Just now\";\n }\n\n // Less than 1 hour\n if (diff < 60 * 60 * 1000) {\n const mins = Math.floor(diff / (60 * 1000));\n return `${mins}m ago`;\n }\n\n // Less than 24 hours\n if (diff < 24 * 60 * 60 * 1000) {\n const hours = Math.floor(diff / (60 * 60 * 1000));\n return `${hours}h ago`;\n }\n\n // Less than 7 days\n if (diff < 7 * 24 * 60 * 60 * 1000) {\n const days = Math.floor(diff / (24 * 60 * 60 * 1000));\n return `${days}d ago`;\n }\n\n // Otherwise show date\n return date.toLocaleDateString();\n}\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ThreadListProps {\n /** List of threads to display */\n threads: Thread[];\n /** Currently selected thread ID */\n selectedId?: string | null;\n /** Called when a thread is selected */\n onSelect?: (threadId: string) => void;\n /** Called when a thread's delete button is clicked */\n onDelete?: (threadId: string) => void;\n /** Called when \"New conversation\" is clicked */\n onNewThread?: () => void;\n /** Text for new conversation button */\n newThreadLabel?: string;\n /** Loading state */\n loading?: boolean;\n /** Empty state text */\n emptyText?: string;\n /** Show delete buttons */\n showDelete?: boolean;\n /** Additional class name */\n className?: string;\n}\n\nexport interface ThreadCardProps {\n /** Thread data */\n thread: Thread;\n /** Whether this thread is selected */\n selected?: boolean;\n /** Called when clicked */\n onClick?: () => void;\n /** Called when delete is clicked */\n onDelete?: () => void;\n /** Show delete button */\n showDelete?: boolean;\n /** Additional class name */\n className?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction TrashIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n />\n </svg>\n );\n}\n\nfunction PlusIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M12 4v16m8-8H4\" />\n </svg>\n );\n}\n\nfunction MessageIcon({ className }: { className?: string }) {\n return (\n <svg\n className={cn(\"w-4 h-4\", className)}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z\"\n />\n </svg>\n );\n}\n\n// ============================================\n// Loading Skeleton\n// ============================================\n\nfunction ThreadCardSkeleton() {\n return (\n <div className=\"p-3 rounded-lg border bg-card animate-pulse\">\n <div className=\"flex items-start gap-3\">\n <div className=\"w-8 h-8 rounded-full bg-muted\" />\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-4 w-3/4 bg-muted rounded\" />\n <div className=\"h-3 w-1/2 bg-muted rounded\" />\n </div>\n </div>\n </div>\n );\n}\n\n// ============================================\n// Thread Card Component\n// ============================================\n\n/**\n * ThreadCard - Individual thread item in the list\n */\nexport function ThreadCard({\n thread,\n selected = false,\n onClick,\n onDelete,\n showDelete = true,\n className,\n}: ThreadCardProps) {\n const [isHovered, setIsHovered] = React.useState(false);\n\n const handleDelete = (e: React.MouseEvent) => {\n e.stopPropagation();\n onDelete?.();\n };\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n className={cn(\n \"w-full p-3 rounded-lg border bg-card text-left transition-colors\",\n \"hover:bg-accent hover:border-accent-foreground/20\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n selected && \"bg-accent border-primary/50\",\n className,\n )}\n >\n <div className=\"flex items-start gap-3\">\n {/* Icon */}\n <div\n className={cn(\n \"flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center\",\n selected\n ? \"bg-primary/10 text-primary\"\n : \"bg-muted text-muted-foreground\",\n )}\n >\n <MessageIcon />\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between gap-2\">\n <h3 className=\"font-medium text-sm truncate\">\n {thread.title || \"Untitled conversation\"}\n </h3>\n {showDelete && isHovered && onDelete && (\n <button\n type=\"button\"\n onClick={handleDelete}\n className={cn(\n \"flex-shrink-0 p-1 rounded\",\n \"hover:bg-destructive/10 hover:text-destructive\",\n \"focus:outline-none focus:ring-2 focus:ring-destructive\",\n )}\n aria-label=\"Delete conversation\"\n >\n <TrashIcon className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n\n {thread.preview && (\n <p className=\"text-xs text-muted-foreground truncate mt-0.5\">\n {thread.preview}\n </p>\n )}\n\n <div className=\"flex items-center gap-2 mt-1 text-xs text-muted-foreground\">\n {thread.messageCount !== undefined && thread.messageCount > 0 && (\n <span>{thread.messageCount} messages</span>\n )}\n {thread.messageCount !== undefined &&\n thread.messageCount > 0 &&\n thread.updatedAt && <span>·</span>}\n {thread.updatedAt && <span>{formatDate(thread.updatedAt)}</span>}\n </div>\n </div>\n </div>\n </button>\n );\n}\n\n// ============================================\n// Thread List Component\n// ============================================\n\n/**\n * ThreadList - Card-based list of conversations\n *\n * @example\n * ```tsx\n * const { threads, currentThread, switchThread, deleteThread, createThread } = useThreadManager();\n *\n * <ThreadList\n * threads={threads}\n * selectedId={currentThread?.id}\n * onSelect={switchThread}\n * onDelete={deleteThread}\n * onNewThread={() => createThread()}\n * />\n * ```\n */\nexport function ThreadList({\n threads,\n selectedId,\n onSelect,\n onDelete,\n onNewThread,\n newThreadLabel = \"New conversation\",\n loading = false,\n emptyText = \"No conversations yet\",\n showDelete = true,\n className,\n}: ThreadListProps) {\n return (\n <div className={cn(\"flex flex-col gap-2\", className)}>\n {/* New conversation button */}\n {onNewThread && (\n <button\n type=\"button\"\n onClick={onNewThread}\n className={cn(\n \"flex items-center gap-2 p-3 rounded-lg border border-dashed\",\n \"hover:bg-accent hover:border-accent-foreground/20\",\n \"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n \"transition-colors\",\n )}\n >\n <div className=\"flex-shrink-0 w-8 h-8 rounded-full bg-primary/10 flex items-center justify-center\">\n <PlusIcon className=\"text-primary\" />\n </div>\n <span className=\"font-medium text-sm\">{newThreadLabel}</span>\n </button>\n )}\n\n {/* Loading state */}\n {loading && (\n <>\n <ThreadCardSkeleton />\n <ThreadCardSkeleton />\n <ThreadCardSkeleton />\n </>\n )}\n\n {/* Thread list */}\n {!loading &&\n threads.length > 0 &&\n threads.map((thread) => (\n <ThreadCard\n key={thread.id}\n thread={thread}\n selected={selectedId === thread.id}\n onClick={() => onSelect?.(thread.id)}\n onDelete={() => onDelete?.(thread.id)}\n showDelete={showDelete}\n />\n ))}\n\n {/* Empty state */}\n {!loading && threads.length === 0 && (\n <div className=\"py-8 text-center text-sm text-muted-foreground\">\n {emptyText}\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nconst CopilotSDKLogo = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n width={props.width || 170}\n height={props.height || 170}\n viewBox=\"0 0 170 170\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n className={cn(\"w-auto h-[30px]\", props.className)}\n >\n <path\n opacity={0.4}\n d=\"M108.379 0C111.143 0 113.538 1.91574 114.146 4.61243L118.392 23.4631C121.492 37.2253 132.239 47.9726 146.001 51.0727L164.852 55.319C167.549 55.9265 169.465 58.3218 169.465 61.0861C169.465 63.8504 167.549 66.2457 164.852 66.8532L146.001 71.0995C132.239 74.1995 121.492 84.9467 118.392 98.7088L114.146 117.56C113.538 120.257 111.143 122.172 108.379 122.172C105.614 122.172 103.219 120.257 102.611 117.56L98.3651 98.7088C95.2651 84.9467 84.5179 74.1995 70.7558 71.0995L51.9049 66.8532C49.2082 66.2457 47.2924 63.8504 47.2924 61.0861C47.2924 58.3218 49.2082 55.9265 51.9049 55.319L70.7558 51.0727C84.5179 47.9726 95.2651 37.2253 98.3651 23.4631L102.611 4.61243C103.219 1.91574 105.614 0 108.379 0Z\"\n fill=\"#6352FF\"\n />\n <path\n d=\"M45.3219 78.8207C48.0863 78.8207 50.4816 80.736 51.089 83.4333L54.1221 96.8982C56.1931 106.092 63.3728 113.272 72.5663 115.342L86.0313 118.375C88.7285 118.983 90.6439 121.378 90.6439 124.143C90.6439 126.907 88.7285 129.302 86.0313 129.91L72.5663 132.943C63.3728 135.014 56.1931 142.193 54.1221 151.387L51.089 164.852C50.4816 167.549 48.0863 169.465 45.3219 169.465C42.5576 169.465 40.1623 167.549 39.5549 164.852L36.5218 151.387C34.4507 142.193 27.271 135.014 18.0772 132.943L4.61243 129.91C1.91574 129.302 0 126.907 0 124.143C0 121.378 1.91574 118.983 4.61243 118.375L18.0772 115.342C27.271 113.272 34.4507 106.092 36.5218 96.8982L39.5549 83.4333C40.1623 80.736 42.5576 78.8207 45.3219 78.8207Z\"\n fill=\"#523FFF\"\n />\n <line\n x1={137.266}\n y1={162.316}\n x2={83.1281}\n y2={162.316}\n stroke=\"currentColor\"\n strokeWidth={11.8231}\n />\n <line\n x1={160.188}\n y1={162.316}\n x2={140.811}\n y2={162.316}\n stroke=\"currentColor\"\n strokeOpacity={0.26}\n strokeWidth={11.8231}\n />\n </svg>\n);\nexport default CopilotSDKLogo;\n","\"use client\";\n\nimport React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { CloseIcon } from \"../../icons\";\nimport CopilotSDKLogo from \"../../icons/copilot-sdk-logo\";\n\nconst DEFAULT_NAME = \"AI Copilot\";\n\nexport type ChatHeaderProps = {\n /** Logo image URL (pass empty string to hide logo) */\n logo?: string;\n /** Copilot name */\n name?: string;\n /** @deprecated Use `name` instead */\n title?: string;\n /** Thread picker element (injected by parent) */\n threadPicker?: React.ReactNode;\n /** Called when close button is clicked */\n onClose?: () => void;\n /** Additional class names */\n className?: string;\n};\n\nexport function ChatHeader({\n logo,\n name,\n title,\n threadPicker,\n onClose,\n className,\n}: ChatHeaderProps) {\n const displayName = name || title || DEFAULT_NAME;\n // Use custom logo URL if provided, otherwise use default SDK logo\n // Pass empty string to hide logo entirely\n const showDefaultLogo = logo === undefined;\n const showCustomLogo = typeof logo === \"string\" && logo.length > 0;\n\n return (\n <div\n className={cn(\n \"flex flex-col border-b border-border bg-background\",\n className,\n )}\n >\n {/* Top row: Logo + Name + Close */}\n <div className=\"flex items-center justify-between px-4 py-2\">\n <div className=\"flex items-center gap-2.5 shrink-0\">\n {showDefaultLogo && <CopilotSDKLogo className=\"h-6 w-auto\" />}\n {showCustomLogo && (\n <img\n src={logo}\n alt={displayName}\n className=\"size-6 rounded-md object-contain\"\n />\n )}\n <div>\n <div className=\"font-semibold text-foreground text-sm mb-0.5\">\n {displayName}\n </div>\n {/* Bottom row: Thread Picker */}\n {threadPicker && <div className=\"\">{threadPicker}</div>}\n </div>\n </div>\n\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"rounded-md p-1 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground\"\n aria-label=\"Close chat\"\n >\n <CloseIcon className=\"h-5 w-5\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { cn } from \"../../../lib/utils\";\n\ntype SuggestionsProps = {\n suggestions: string[];\n onSuggestionClick?: (suggestion: string) => void;\n className?: string;\n};\n\nexport function Suggestions({\n suggestions,\n onSuggestionClick,\n className,\n}: SuggestionsProps) {\n if (!suggestions.length) return null;\n\n return (\n <div className={cn(\"flex flex-wrap gap-2 px-4 py-2\", className)}>\n {suggestions.map((suggestion, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => onSuggestionClick?.(suggestion)}\n className=\"inline-flex items-center rounded-full border bg-background px-3 py-1.5 text-sm transition-colors hover:bg-muted\"\n >\n {suggestion}\n </button>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Message, MessageAvatar, MessageContent } from \"../../ui/message\";\nimport { SimpleReasoning } from \"../../ui/reasoning\";\nimport { ToolSteps } from \"../../ui/tool-steps\";\nimport {\n PermissionConfirmation,\n type PermissionLevel,\n} from \"../../ui/permission-confirmation\";\nimport { FollowUpQuestions, parseFollowUps } from \"../../ui/follow-up\";\nimport type { ChatMessage, MessageAttachment, ToolRenderers } from \"./types\";\nimport type { ToolDefinition, ToolRenderProps } from \"../../../../core\";\nimport CopilotSDKLogo from \"../../icons/copilot-sdk-logo\";\n\ntype DefaultMessageProps = {\n message: ChatMessage;\n userAvatar: { src?: string; fallback?: string };\n assistantAvatar: { src?: string; fallback?: string };\n showUserAvatar?: boolean;\n userMessageClassName?: string;\n assistantMessageClassName?: string;\n /** Font size variant: 'sm' (14px), 'base' (16px), 'lg' (18px) */\n size?: \"sm\" | \"base\" | \"lg\";\n /** Whether this is the last message (for streaming state) */\n isLastMessage?: boolean;\n /** Whether the chat is currently loading/streaming */\n isLoading?: boolean;\n /** Registered tools (for accessing tool's render function) */\n registeredTools?: ToolDefinition[];\n /** Custom renderers for tool results (Generative UI) - higher priority than tool.render */\n toolRenderers?: ToolRenderers;\n /** Called when user approves a tool execution */\n onApproveToolExecution?: (\n executionId: string,\n extraData?: Record<string, unknown>,\n permissionLevel?: PermissionLevel,\n ) => void;\n /** Called when user rejects a tool execution */\n onRejectToolExecution?: (\n executionId: string,\n reason?: string,\n permissionLevel?: PermissionLevel,\n ) => void;\n /** Show follow-up questions (default: true) */\n showFollowUps?: boolean;\n /** Called when a follow-up question is clicked */\n onFollowUpClick?: (question: string) => void;\n /** Custom class for follow-up container */\n followUpClassName?: string;\n /** Custom class for follow-up buttons */\n followUpButtonClassName?: string;\n};\n\nexport function DefaultMessage({\n message,\n userAvatar,\n assistantAvatar,\n showUserAvatar = false,\n userMessageClassName,\n assistantMessageClassName,\n size = \"sm\",\n isLastMessage = false,\n isLoading = false,\n registeredTools,\n toolRenderers,\n onApproveToolExecution,\n onRejectToolExecution,\n showFollowUps = true,\n onFollowUpClick,\n followUpClassName,\n followUpButtonClassName,\n}: DefaultMessageProps) {\n const isUser = message.role === \"user\";\n const isStreaming = isLastMessage && isLoading;\n\n // Parse follow-up questions from assistant messages\n const { cleanContent, followUps } = React.useMemo(() => {\n if (isUser || !message.content) {\n return { cleanContent: message.content, followUps: [] };\n }\n return parseFollowUps(message.content);\n }, [message.content, isUser]);\n\n // Only show follow-ups on the last assistant message when not loading\n const shouldShowFollowUps =\n showFollowUps &&\n !isUser &&\n isLastMessage &&\n !isLoading &&\n followUps.length > 0 &&\n onFollowUpClick;\n\n // User message - right aligned, avatar optional\n if (isUser) {\n const hasAttachments =\n message.attachments && message.attachments.length > 0;\n\n return (\n <Message\n className={cn(\n \"flex gap-2\",\n showUserAvatar ? \"justify-end\" : \"justify-end\",\n )}\n >\n <div className=\"flex flex-col items-end max-w-[80%]\">\n {/* Text content */}\n {message.content && (\n <MessageContent\n className={cn(\n \"rounded-lg px-4 py-2 bg-primary text-primary-foreground\",\n userMessageClassName,\n )}\n size={size}\n >\n {message.content}\n </MessageContent>\n )}\n {/* Image Attachments */}\n {hasAttachments && (\n <div className=\"mt-2 flex flex-wrap gap-2 justify-end\">\n {message.attachments!.map((attachment, index) => (\n <AttachmentPreview key={index} attachment={attachment} />\n ))}\n </div>\n )}\n </div>\n {showUserAvatar && (\n <MessageAvatar\n src={userAvatar.src || \"\"}\n alt=\"User\"\n fallback={userAvatar.fallback}\n />\n )}\n </Message>\n );\n }\n\n // Separate tool executions into categories\n const pendingApprovalTools = message.toolExecutions?.filter(\n (exec) => exec.approvalStatus === \"required\",\n );\n const completedTools = message.toolExecutions?.filter(\n (exec) => exec.approvalStatus !== \"required\",\n );\n\n // Helper: check if tool has any custom render (toolRenderers or tool.render)\n const hasCustomRender = (toolName: string): boolean => {\n if (toolRenderers?.[toolName]) return true;\n const toolDef = registeredTools?.find((t) => t.name === toolName);\n if (toolDef?.render) return true;\n return false;\n };\n\n // Split completed tools: those with custom render vs default ToolSteps\n const toolsWithCustomRender = completedTools?.filter((exec) =>\n hasCustomRender(exec.name),\n );\n const toolsWithoutCustomRender = completedTools?.filter(\n (exec) => !hasCustomRender(exec.name),\n );\n\n // Convert tools without custom render to ToolStepData format\n const toolSteps = toolsWithoutCustomRender?.map((exec) => ({\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n }));\n\n // Assistant message - left aligned with avatar\n return (\n <Message className=\"flex gap-2\">\n <MessageAvatar\n src={assistantAvatar.src || \"\"}\n alt=\"Assistant\"\n fallback={assistantAvatar.fallback}\n fallbackIcon={\n !assistantAvatar.src ? (\n <CopilotSDKLogo className=\"size-5\" />\n ) : undefined\n }\n className=\"bg-background\"\n />\n <div className=\"flex-1 min-w-0 max-w-[80%]\">\n {/* Reasoning/Thinking (collapsible, above content) */}\n {message.thinking && (\n <SimpleReasoning\n content={message.thinking}\n isStreaming={isStreaming}\n className=\"mb-2\"\n />\n )}\n\n {/* Message Content - show FIRST (AI's words before tool calls) */}\n {cleanContent?.trim() && (\n <MessageContent\n className={cn(\n \"rounded-lg px-4 py-2 bg-muted\",\n assistantMessageClassName,\n )}\n markdown\n size={size}\n >\n {cleanContent}\n </MessageContent>\n )}\n\n {/* Custom Tool Renderers - Priority: toolRenderers > tool.render */}\n {toolsWithCustomRender && toolsWithCustomRender.length > 0 && (\n <div className=\"mt-2 space-y-2\">\n {toolsWithCustomRender.map((exec) => {\n // PRIORITY 1: toolRenderers (app-level override)\n const Renderer = toolRenderers?.[exec.name];\n if (Renderer) {\n return (\n <Renderer\n key={exec.id}\n execution={{\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n approvalStatus: exec.approvalStatus,\n }}\n />\n );\n }\n\n // PRIORITY 2: tool's own render function\n const toolDef = registeredTools?.find(\n (t) => t.name === exec.name,\n );\n if (toolDef?.render) {\n // Map execution status to ToolRenderProps status\n let status: ToolRenderProps[\"status\"] = \"pending\";\n if (exec.status === \"executing\") status = \"executing\";\n else if (exec.status === \"completed\") status = \"completed\";\n else if (\n exec.status === \"error\" ||\n exec.status === \"failed\" ||\n exec.status === \"rejected\"\n )\n status = \"error\";\n\n const renderProps: ToolRenderProps = {\n status,\n args: exec.args,\n result: exec.result,\n error: exec.error,\n toolCallId: exec.id,\n toolName: exec.name,\n };\n const output = toolDef.render(renderProps) as React.ReactNode;\n return <React.Fragment key={exec.id}>{output}</React.Fragment>;\n }\n\n // Shouldn't reach here since we filtered, but fallback\n return null;\n })}\n </div>\n )}\n\n {/* Tool Steps (default display for tools without custom renderers) */}\n {toolSteps && toolSteps.length > 0 && (\n <div className=\"mt-2 rounded-lg bg-muted/50 px-3 py-2\">\n <ToolSteps steps={toolSteps} />\n </div>\n )}\n\n {/* Tool Approval Confirmations - Priority: toolRenderers > tool.render > default */}\n {pendingApprovalTools && pendingApprovalTools.length > 0 && (\n <div className=\"mt-2 space-y-2\">\n {pendingApprovalTools.map((tool) => {\n // Approval callbacks for custom renders\n const approvalCallbacks = {\n onApprove: (extraData?: Record<string, unknown>) =>\n onApproveToolExecution?.(tool.id, extraData),\n onReject: (reason?: string) =>\n onRejectToolExecution?.(tool.id, reason),\n message: tool.approvalMessage,\n };\n\n // PRIORITY 1: toolRenderers (app-level override)\n const CustomRenderer = toolRenderers?.[tool.name];\n if (CustomRenderer) {\n return (\n <CustomRenderer\n key={tool.id}\n execution={tool}\n approval={approvalCallbacks}\n />\n );\n }\n\n // PRIORITY 2: tool's own render function\n const toolDef = registeredTools?.find(\n (t) => t.name === tool.name,\n );\n if (toolDef?.render) {\n const renderProps: ToolRenderProps = {\n status: \"approval-required\",\n args: tool.args,\n result: tool.result,\n error: tool.error,\n toolCallId: tool.id,\n toolName: tool.name,\n approval: approvalCallbacks,\n };\n const output = toolDef.render(renderProps) as React.ReactNode;\n return <React.Fragment key={tool.id}>{output}</React.Fragment>;\n }\n\n // PRIORITY 3: Default PermissionConfirmation\n return (\n <PermissionConfirmation\n key={tool.id}\n state=\"pending\"\n toolName={tool.name}\n message={\n tool.approvalMessage ||\n `This tool wants to execute. Do you approve?`\n }\n onApprove={(permissionLevel) =>\n onApproveToolExecution?.(\n tool.id,\n undefined,\n permissionLevel,\n )\n }\n onReject={(permissionLevel) =>\n onRejectToolExecution?.(tool.id, undefined, permissionLevel)\n }\n />\n );\n })}\n </div>\n )}\n\n {/* Image Attachments */}\n {message.attachments && message.attachments.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-2\">\n {message.attachments.map((attachment, index) => (\n <AttachmentPreview key={index} attachment={attachment} />\n ))}\n </div>\n )}\n\n {/* Follow-up Questions */}\n {shouldShowFollowUps && (\n <FollowUpQuestions\n questions={followUps}\n onSelect={onFollowUpClick!}\n className={followUpClassName}\n buttonClassName={followUpButtonClassName}\n />\n )}\n </div>\n </Message>\n );\n}\n\n/**\n * Attachment preview component\n */\nfunction AttachmentPreview({ attachment }: { attachment: MessageAttachment }) {\n const [expanded, setExpanded] = React.useState(false);\n\n if (attachment.type !== \"image\") {\n // For non-image attachments, show a simple file indicator\n return (\n <div className=\"flex items-center gap-2 rounded-lg border bg-muted/50 px-3 py-2 text-sm\">\n <span className=\"text-muted-foreground\">{attachment.type}</span>\n <span>{attachment.filename || \"Attachment\"}</span>\n </div>\n );\n }\n\n // Image preview - use URL if available, otherwise use base64 data\n let src: string;\n if (attachment.url) {\n src = attachment.url;\n } else if (attachment.data) {\n src = attachment.data.startsWith(\"data:\")\n ? attachment.data\n : `data:${attachment.mimeType};base64,${attachment.data}`;\n } else {\n // No source available - shouldn't happen but handle gracefully\n return null;\n }\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n className=\"relative rounded-lg overflow-hidden border bg-muted/50 hover:opacity-90 transition-opacity\"\n >\n <img\n src={src}\n alt={attachment.filename || \"Image\"}\n className=\"max-w-[200px] max-h-[150px] object-cover\"\n />\n </button>\n\n {/* Fullscreen modal */}\n {expanded && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/80\"\n onClick={() => setExpanded(false)}\n >\n <div className=\"relative max-w-[90vw] max-h-[90vh]\">\n <img\n src={src}\n alt={attachment.filename || \"Image (expanded)\"}\n className=\"max-w-full max-h-full object-contain rounded-lg\"\n />\n <button\n type=\"button\"\n className=\"absolute top-2 right-2 bg-white/90 rounded-full p-2 hover:bg-white transition-colors\"\n onClick={(e) => {\n e.stopPropagation();\n setExpanded(false);\n }}\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n </button>\n </div>\n </div>\n )}\n </>\n );\n}\n","\"use client\";\n\nimport React, { useState, useCallback, useRef, useId } from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n PromptInput,\n PromptInputTextarea,\n PromptInputActions,\n PromptInputAction,\n} from \"../../ui/prompt-input\";\nimport { Button } from \"../../ui/button\";\nimport { Loader } from \"../../ui/loader\";\nimport {\n PlusIcon,\n ArrowUpIcon,\n StopIcon,\n XIcon,\n ArrowUpRightIcon,\n} from \"../../icons\";\nimport CopilotSDKLogo from \"../../icons/copilot-sdk-logo\";\nimport type {\n WelcomeConfig,\n PendingAttachment,\n MessageAttachment,\n} from \"./types\";\nimport type { Thread } from \"../../../../core/types/thread\";\n\n// Constants\nconst DEFAULT_MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB\nconst DEFAULT_ALLOWED_TYPES = [\"image/*\", \"application/pdf\"];\n\n// Default welcome config values\nconst DEFAULT_TITLE = \"How can I help you today?\";\nconst DEFAULT_SUBTITLE = \"Ask anything and get it done.\";\nconst DEFAULT_SUGGESTIONS_LABEL = \"Try AI Copilot\";\nconst DEFAULT_RECENT_CHATS_LABEL = \"Recent chats\";\nconst DEFAULT_MAX_RECENT_CHATS = 3;\nconst DEFAULT_VIEW_MORE_LABEL = \"View more..\";\n\n/**\n * Get attachment type from MIME type\n */\nfunction getAttachmentType(\n mimeType: string,\n): \"image\" | \"file\" | \"audio\" | \"video\" {\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n return \"file\";\n}\n\n/**\n * Convert file to base64 data URL\n */\nfunction fileToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === \"string\") {\n resolve(reader.result);\n } else {\n reject(new Error(\"Failed to read file\"));\n }\n };\n reader.onerror = () => reject(new Error(\"Failed to read file\"));\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Generate unique attachment ID\n */\nfunction generateAttachmentId(): string {\n return `att_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\n\nexport interface ChatWelcomeProps {\n /** Welcome screen configuration */\n config?: WelcomeConfig;\n /** Suggestions to show */\n suggestions?: string[];\n /** Recent threads for the recent chats section */\n recentThreads?: Thread[];\n /** Called when user sends a message */\n onSendMessage: (message: string, attachments?: MessageAttachment[]) => void;\n /** Called when user selects a recent thread */\n onSelectThread?: (threadId: string) => void;\n /** Called when user deletes a recent thread */\n onDeleteThread?: (threadId: string) => void;\n /** Called when user clicks \"View more\" */\n onViewMoreThreads?: () => void;\n /** Whether AI is currently generating */\n isLoading?: boolean;\n /** Called when user stops generation */\n onStop?: () => void;\n /** Placeholder for input */\n placeholder?: string;\n /** Whether attachments are enabled */\n attachmentsEnabled?: boolean;\n /** Tooltip when attachments are disabled */\n attachmentsDisabledTooltip?: string;\n /** Maximum file size in bytes */\n maxFileSize?: number;\n /** Allowed file types */\n allowedFileTypes?: string[];\n /** Custom attachment processor */\n processAttachment?: (file: File) => Promise<MessageAttachment>;\n /** Custom class names */\n classNames?: {\n root?: string;\n hero?: string;\n input?: string;\n suggestions?: string;\n recentChats?: string;\n };\n}\n\nexport function ChatWelcome({\n config,\n suggestions = [],\n recentThreads = [],\n onSendMessage,\n onSelectThread,\n onDeleteThread,\n onViewMoreThreads,\n isLoading = false,\n onStop,\n placeholder = \"Type a message...\",\n attachmentsEnabled = true,\n attachmentsDisabledTooltip = \"Attachments not supported by this model\",\n maxFileSize = DEFAULT_MAX_FILE_SIZE,\n allowedFileTypes = DEFAULT_ALLOWED_TYPES,\n processAttachment: processAttachmentProp,\n classNames = {},\n}: ChatWelcomeProps) {\n const [input, setInput] = useState(\"\");\n const [pendingAttachments, setPendingAttachments] = useState<\n PendingAttachment[]\n >([]);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const fileInputId = useId();\n\n // Extract config values with defaults\n const title = config?.title ?? DEFAULT_TITLE;\n const subtitle = config?.subtitle ?? DEFAULT_SUBTITLE;\n const logo = config?.logo;\n const suggestionsLabel =\n config?.suggestionsLabel ?? DEFAULT_SUGGESTIONS_LABEL;\n const showRecentChats = config?.showRecentChats ?? true;\n const recentChatsLabel =\n config?.recentChatsLabel ?? DEFAULT_RECENT_CHATS_LABEL;\n const maxRecentChats = config?.maxRecentChats ?? DEFAULT_MAX_RECENT_CHATS;\n const viewMoreLabel = config?.viewMoreLabel ?? DEFAULT_VIEW_MORE_LABEL;\n\n // Check if file type is allowed\n const isFileTypeAllowed = useCallback(\n (file: File): boolean => {\n for (const type of allowedFileTypes) {\n if (type.endsWith(\"/*\")) {\n const category = type.slice(0, -2);\n if (file.type.startsWith(category + \"/\")) return true;\n } else if (file.type === type) {\n return true;\n }\n }\n return false;\n },\n [allowedFileTypes],\n );\n\n // Handle file selection\n const handleFileSelect = useCallback(\n async (files: FileList | null) => {\n if (!files || !attachmentsEnabled) return;\n\n for (const file of Array.from(files)) {\n // Validate file size\n if (file.size > maxFileSize) {\n const sizeMB = (maxFileSize / (1024 * 1024)).toFixed(0);\n console.warn(`File ${file.name} exceeds ${sizeMB}MB limit`);\n continue;\n }\n\n // Validate file type\n if (!isFileTypeAllowed(file)) {\n console.warn(`File type ${file.type} is not allowed`);\n continue;\n }\n\n const id = generateAttachmentId();\n const previewUrl = URL.createObjectURL(file);\n\n // Add as processing\n setPendingAttachments((prev) => [\n ...prev,\n {\n id,\n file,\n previewUrl,\n attachment: {\n type: getAttachmentType(file.type),\n data: \"\",\n mimeType: file.type,\n filename: file.name,\n },\n status: \"processing\",\n },\n ]);\n\n // Process attachment\n try {\n let attachment: MessageAttachment;\n\n if (processAttachmentProp) {\n attachment = await processAttachmentProp(file);\n } else {\n const data = await fileToBase64(file);\n attachment = {\n type: getAttachmentType(file.type),\n data,\n mimeType: file.type,\n filename: file.name,\n };\n }\n\n setPendingAttachments((prev) =>\n prev.map((att) =>\n att.id === id\n ? { ...att, status: \"ready\" as const, attachment }\n : att,\n ),\n );\n } catch (error) {\n setPendingAttachments((prev) =>\n prev.map((att) =>\n att.id === id\n ? {\n ...att,\n status: \"error\" as const,\n error: \"Failed to process file\",\n }\n : att,\n ),\n );\n }\n }\n },\n [attachmentsEnabled, maxFileSize, isFileTypeAllowed, processAttachmentProp],\n );\n\n // Handle file input change\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFileSelect(e.target.files);\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n },\n [handleFileSelect],\n );\n\n // Remove pending attachment\n const removePendingAttachment = useCallback((id: string) => {\n setPendingAttachments((prev) => {\n const att = prev.find((a) => a.id === id);\n if (att) {\n URL.revokeObjectURL(att.previewUrl);\n }\n return prev.filter((a) => a.id !== id);\n });\n }, []);\n\n const handleSubmit = useCallback(() => {\n const hasContent = input.trim();\n const hasAttachments = pendingAttachments.some(\n (att) => att.status === \"ready\",\n );\n\n if ((!hasContent && !hasAttachments) || isLoading) return;\n\n // Get ready attachments\n const attachments = pendingAttachments\n .filter((att) => att.status === \"ready\")\n .map((att) => att.attachment);\n\n onSendMessage(input, attachments.length > 0 ? attachments : undefined);\n\n // Cleanup\n pendingAttachments.forEach((att) => URL.revokeObjectURL(att.previewUrl));\n setPendingAttachments([]);\n setInput(\"\");\n }, [input, isLoading, onSendMessage, pendingAttachments]);\n\n const handleSuggestionClick = useCallback(\n (suggestion: string) => {\n onSendMessage(suggestion);\n },\n [onSendMessage],\n );\n\n // Compute accept string from allowed types\n const acceptString = allowedFileTypes.join(\",\");\n\n // Determine which threads to show\n const visibleThreads = showRecentChats\n ? recentThreads.slice(0, maxRecentChats)\n : [];\n const hasMoreThreads = recentThreads.length > maxRecentChats;\n\n return (\n <div\n className={cn(\n \"flex flex-1 flex-col items-center justify-center px-4 py-8 overflow-auto\",\n classNames.root,\n )}\n >\n {/* Hero Section */}\n <div\n className={cn(\n \"flex flex-col items-center text-center mb-8\",\n classNames.hero,\n )}\n >\n {/* Logo */}\n {logo ? (\n <img\n src={logo}\n alt=\"Logo\"\n className=\"size-12 rounded-lg object-contain mb-4\"\n />\n ) : (\n <div className=\"mb-4\">\n <CopilotSDKLogo className=\"h-12 w-auto\" />\n </div>\n )}\n {/* Title */}\n <h1 className=\"text-xl font-semibold text-foreground mb-2\">{title}</h1>\n {/* Subtitle */}\n <p className=\"text-sm text-muted-foreground\">{subtitle}</p>\n </div>\n\n {/* Input - Centered */}\n <div className={cn(\"w-full max-w-lg mb-6\", classNames.input)}>\n {/* Pending Attachments Preview */}\n {pendingAttachments.length > 0 && (\n <div className=\"flex flex-wrap gap-2 p-2 mb-2 bg-muted/30 rounded-lg\">\n {pendingAttachments.map((att) => (\n <div key={att.id} className=\"relative group\">\n {att.attachment.type === \"image\" ? (\n <img\n src={att.previewUrl}\n alt={att.file.name}\n className=\"w-16 h-16 object-cover rounded-lg border\"\n />\n ) : (\n <div className=\"w-16 h-16 bg-muted rounded-lg border flex flex-col items-center justify-center p-1\">\n <svg\n className=\"w-6 h-6 text-muted-foreground\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n <span className=\"text-[10px] text-muted-foreground truncate w-full text-center mt-1\">\n {att.file.name.length > 10\n ? att.file.name.slice(0, 8) + \"...\"\n : att.file.name}\n </span>\n </div>\n )}\n {/* Loading overlay */}\n {att.status === \"processing\" && (\n <div className=\"absolute inset-0 bg-background/80 rounded-lg flex items-center justify-center\">\n <Loader variant=\"dots\" size=\"sm\" />\n </div>\n )}\n {/* Error overlay */}\n {att.status === \"error\" && (\n <div className=\"absolute inset-0 bg-destructive/20 rounded-lg flex items-center justify-center\">\n <span className=\"text-destructive text-xs\">Error</span>\n </div>\n )}\n {/* Remove button */}\n <button\n onClick={() => removePendingAttachment(att.id)}\n className=\"absolute -top-1.5 -right-1.5 bg-destructive text-destructive-foreground rounded-full p-0.5 opacity-0 group-hover:opacity-100 transition-opacity\"\n type=\"button\"\n >\n <XIcon className=\"w-3 h-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n <PromptInput\n value={input}\n onValueChange={setInput}\n isLoading={isLoading}\n onSubmit={handleSubmit}\n >\n <PromptInputTextarea placeholder={placeholder} />\n <PromptInputActions className=\"flex justify-between\">\n <div>\n <PromptInputAction\n tooltip={\n attachmentsEnabled\n ? \"Attach files\"\n : attachmentsDisabledTooltip\n }\n >\n <label\n htmlFor={fileInputId}\n className={cn(\n \"flex h-8 w-8 items-center justify-center rounded-2xl\",\n attachmentsEnabled\n ? \"hover:bg-secondary-foreground/10 cursor-pointer\"\n : \"opacity-50 cursor-not-allowed\",\n )}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={acceptString}\n onChange={handleInputChange}\n className=\"hidden\"\n id={fileInputId}\n disabled={!attachmentsEnabled}\n />\n <PlusIcon className=\"text-primary size-5\" />\n </label>\n </PromptInputAction>\n </div>\n <PromptInputAction tooltip={isLoading ? \"Stop\" : \"Send\"}>\n {isLoading ? (\n <Button\n size=\"sm\"\n variant=\"destructive\"\n className=\"rounded-full size-9\"\n onClick={onStop}\n >\n <StopIcon className=\"h-4 w-4\" />\n </Button>\n ) : (\n <Button\n size=\"sm\"\n className=\"rounded-full size-9\"\n onClick={handleSubmit}\n disabled={\n !input.trim() &&\n !pendingAttachments.some((att) => att.status === \"ready\")\n }\n >\n <ArrowUpIcon className=\"h-4 w-4\" />\n </Button>\n )}\n </PromptInputAction>\n </PromptInputActions>\n </PromptInput>\n </div>\n\n {/* Suggestions */}\n {suggestions.length > 0 && (\n <div\n className={cn(\"w-full max-w-lg mb-6 px-3\", classNames.suggestions)}\n >\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">\n {suggestionsLabel}\n </p>\n <div className=\"\">\n {suggestions.map((suggestion, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => handleSuggestionClick(suggestion)}\n className=\"group w-full cursor-pointer font-medium text-left py-2 text-sm hover:text-foreground text-foreground/70 transition-colors flex items-center gap-2\"\n >\n <span>{suggestion}</span>\n <ArrowUpRightIcon className=\"size-4 opacity-0 translate-y-1 group-hover:opacity-[0.6] group-hover:translate-y-0 transition-all duration-200\" />\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useCallback, useRef, useId } from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n ChatContainerRoot,\n ChatContainerContent,\n ChatContainerScrollAnchor,\n} from \"../../ui/chat-container\";\nimport { ScrollButton } from \"../../ui/scroll-button\";\nimport { Message, MessageAvatar } from \"../../ui/message\";\nimport {\n PromptInput,\n PromptInputTextarea,\n PromptInputActions,\n PromptInputAction,\n} from \"../../ui/prompt-input\";\nimport { Loader } from \"../../ui/loader\";\nimport { Button } from \"../../ui/button\";\nimport { StopIcon, PlusIcon, ArrowUpIcon, XIcon } from \"../../icons\";\nimport CopilotSDKLogo from \"../../icons/copilot-sdk-logo\";\nimport { ChatHeader } from \"./chat-header\";\nimport { Suggestions } from \"./suggestions\";\nimport { DefaultMessage } from \"./default-message\";\nimport { ChatWelcome } from \"./chat-welcome\";\nimport type { ChatProps, PendingAttachment } from \"./types\";\nimport type { ToolExecutionData } from \"../tools\";\n\n// Constants\nconst DEFAULT_MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB\nconst DEFAULT_ALLOWED_TYPES = [\"image/*\", \"application/pdf\"];\n\n/**\n * Get attachment type from MIME type\n */\nfunction getAttachmentType(\n mimeType: string,\n): \"image\" | \"file\" | \"audio\" | \"video\" {\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n return \"file\";\n}\n\n/**\n * Convert file to base64 data URL\n */\nfunction fileToBase64(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n if (typeof reader.result === \"string\") {\n resolve(reader.result);\n } else {\n reject(new Error(\"Failed to read file\"));\n }\n };\n reader.onerror = () => reject(new Error(\"Failed to read file\"));\n reader.readAsDataURL(file);\n });\n}\n\n/**\n * Generate unique attachment ID\n */\nfunction generateAttachmentId(): string {\n return `att_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n}\n\nexport function Chat({\n // Core\n messages = [],\n onSendMessage,\n onStop,\n isLoading = false,\n // Labels\n placeholder = \"Type a message...\",\n welcomeMessage,\n title,\n // Header\n showHeader = false,\n header,\n threadPicker,\n // Deprecated header props (backwards compat)\n logo,\n name,\n onClose,\n // Appearance\n showPoweredBy = true,\n showUserAvatar = false,\n userAvatar = { fallback: \"U\" },\n assistantAvatar = { fallback: \"AI\" },\n loaderVariant = \"typing\",\n fontSize = \"sm\",\n // Attachments\n maxFileSize = DEFAULT_MAX_FILE_SIZE,\n allowedFileTypes = DEFAULT_ALLOWED_TYPES,\n attachmentsEnabled = true,\n attachmentsDisabledTooltip = \"Attachments not supported by this model\",\n processAttachment: processAttachmentProp,\n // Suggestions\n suggestions = [],\n onSuggestionClick,\n // Welcome Screen\n welcome,\n recentThreads = [],\n onSelectThread,\n onDeleteThread,\n onViewMoreThreads,\n // Tool Executions\n isProcessing = false,\n registeredTools,\n toolRenderers,\n onApproveToolExecution,\n onRejectToolExecution,\n // Follow-up Questions\n showFollowUps = true,\n followUpClassName,\n followUpButtonClassName,\n // Custom rendering\n renderMessage,\n renderInput,\n renderHeader,\n // Styling\n className,\n classNames = {},\n}: ChatProps) {\n const [input, setInput] = useState(\"\");\n const [pendingAttachments, setPendingAttachments] = useState<\n PendingAttachment[]\n >([]);\n const [isDragging, setIsDragging] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const fileInputId = useId(); // Unique ID for this Chat instance's file input\n\n // Check if file type is allowed\n const isFileTypeAllowed = useCallback(\n (file: File): boolean => {\n for (const type of allowedFileTypes) {\n if (type.endsWith(\"/*\")) {\n const category = type.slice(0, -2);\n if (file.type.startsWith(category + \"/\")) return true;\n } else if (file.type === type) {\n return true;\n }\n }\n return false;\n },\n [allowedFileTypes],\n );\n\n // Handle file selection\n const handleFileSelect = useCallback(\n async (files: FileList | null) => {\n if (!files || !attachmentsEnabled) return;\n\n for (const file of Array.from(files)) {\n // Validate file size\n if (file.size > maxFileSize) {\n const sizeMB = (maxFileSize / (1024 * 1024)).toFixed(0);\n console.warn(`File ${file.name} exceeds ${sizeMB}MB limit`);\n continue;\n }\n\n // Validate file type\n if (!isFileTypeAllowed(file)) {\n console.warn(`File type ${file.type} is not allowed`);\n continue;\n }\n\n const id = generateAttachmentId();\n const previewUrl = URL.createObjectURL(file);\n\n // Add as processing\n setPendingAttachments((prev) => [\n ...prev,\n {\n id,\n file,\n previewUrl,\n attachment: {\n type: getAttachmentType(file.type),\n data: \"\",\n mimeType: file.type,\n filename: file.name,\n },\n status: \"processing\",\n },\n ]);\n\n // Process attachment (cloud upload or base64 conversion)\n try {\n let attachment: {\n type: \"image\" | \"file\" | \"audio\" | \"video\";\n data?: string;\n url?: string;\n mimeType: string;\n filename?: string;\n };\n\n if (processAttachmentProp) {\n // Use provided processor (e.g., cloud storage upload)\n attachment = await processAttachmentProp(file);\n } else {\n // Default: convert to base64\n const data = await fileToBase64(file);\n attachment = {\n type: getAttachmentType(file.type),\n data,\n mimeType: file.type,\n filename: file.name,\n };\n }\n\n setPendingAttachments((prev) =>\n prev.map((att) =>\n att.id === id\n ? { ...att, status: \"ready\" as const, attachment }\n : att,\n ),\n );\n } catch (error) {\n setPendingAttachments((prev) =>\n prev.map((att) =>\n att.id === id\n ? {\n ...att,\n status: \"error\" as const,\n error: \"Failed to process file\",\n }\n : att,\n ),\n );\n }\n }\n },\n [attachmentsEnabled, maxFileSize, isFileTypeAllowed, processAttachmentProp],\n );\n\n // Handle file input change\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n handleFileSelect(e.target.files);\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n },\n [handleFileSelect],\n );\n\n // Remove pending attachment\n const removePendingAttachment = useCallback((id: string) => {\n setPendingAttachments((prev) => {\n const att = prev.find((a) => a.id === id);\n if (att) {\n URL.revokeObjectURL(att.previewUrl);\n }\n return prev.filter((a) => a.id !== id);\n });\n }, []);\n\n // Drag and drop handlers\n const handleDragOver = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (attachmentsEnabled) {\n setIsDragging(true);\n }\n },\n [attachmentsEnabled],\n );\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n }, []);\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n if (attachmentsEnabled) {\n handleFileSelect(e.dataTransfer.files);\n }\n },\n [attachmentsEnabled, handleFileSelect],\n );\n\n const handleSubmit = useCallback(() => {\n const hasContent = input.trim();\n const hasAttachments = pendingAttachments.some(\n (att) => att.status === \"ready\",\n );\n\n if ((!hasContent && !hasAttachments) || isLoading) return;\n\n // Get ready attachments\n const attachments = pendingAttachments\n .filter((att) => att.status === \"ready\")\n .map((att) => att.attachment);\n\n onSendMessage?.(input, attachments.length > 0 ? attachments : undefined);\n\n // Cleanup\n pendingAttachments.forEach((att) => URL.revokeObjectURL(att.previewUrl));\n setPendingAttachments([]);\n setInput(\"\");\n }, [input, isLoading, onSendMessage, pendingAttachments]);\n\n const handleSuggestionClick = useCallback(\n (suggestion: string) => {\n if (onSuggestionClick) {\n onSuggestionClick(suggestion);\n } else {\n onSendMessage?.(suggestion);\n }\n },\n [onSuggestionClick, onSendMessage],\n );\n\n // Compute accept string from allowed types\n const acceptString = allowedFileTypes.join(\",\");\n\n // Determine if we should show the welcome screen\n const showWelcome = messages.length === 0 && welcome !== false;\n\n // Get welcome config (could be object or undefined/true)\n const welcomeConfig = typeof welcome === \"object\" ? welcome : undefined;\n\n return (\n <div\n className={cn(\n \"flex h-full flex-col bg-background relative\",\n className,\n classNames.root,\n )}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n {/* Drag overlay */}\n {isDragging && (\n <div className=\"absolute inset-0 z-50 bg-primary/10 border-2 border-dashed border-primary flex items-center justify-center\">\n <div className=\"text-primary font-medium text-lg\">\n Drop files here\n </div>\n </div>\n )}\n {/* Header */}\n {showHeader &&\n (renderHeader ? (\n renderHeader()\n ) : (\n <ChatHeader\n logo={header?.logo ?? logo}\n name={header?.name ?? name}\n title={title}\n threadPicker={threadPicker}\n onClose={header?.onClose ?? onClose}\n className={classNames.header}\n />\n ))}\n\n {showWelcome ? (\n /* Welcome Screen (centered input) */\n <ChatWelcome\n config={welcomeConfig}\n suggestions={suggestions}\n recentThreads={recentThreads}\n onSendMessage={(msg, attachments) =>\n onSendMessage?.(msg, attachments)\n }\n onSelectThread={onSelectThread}\n onDeleteThread={onDeleteThread}\n onViewMoreThreads={onViewMoreThreads}\n isLoading={isLoading}\n onStop={onStop}\n placeholder={placeholder}\n attachmentsEnabled={attachmentsEnabled}\n attachmentsDisabledTooltip={attachmentsDisabledTooltip}\n maxFileSize={maxFileSize}\n allowedFileTypes={allowedFileTypes}\n processAttachment={processAttachmentProp}\n />\n ) : (\n /* Normal Chat UI (messages + input at bottom) */\n <>\n {/* Messages */}\n <ChatContainerRoot\n className={cn(\"relative flex-1\", classNames.container)}\n >\n <ChatContainerContent\n className={cn(\"gap-4 p-4\", classNames.messageList)}\n >\n {/* Welcome message */}\n {messages.length === 0 && (\n <div className=\"py-8 text-center text-muted-foreground\">\n {welcomeMessage || \"Send a message to start the conversation\"}\n </div>\n )}\n\n {/* Messages */}\n {messages.map((message, index) => {\n const isLastMessage = index === messages.length - 1;\n const isEmptyAssistant =\n message.role === \"assistant\" && !message.content?.trim();\n\n // Check if message has tool_calls or toolExecutions\n const hasToolCalls =\n message.tool_calls && message.tool_calls.length > 0;\n const hasToolExecutions =\n message.toolExecutions && message.toolExecutions.length > 0;\n\n // Check if this message has pending tool approvals\n const hasPendingApprovals = message.toolExecutions?.some(\n (exec) => exec.approvalStatus === \"required\",\n );\n\n if (isEmptyAssistant) {\n if (hasToolCalls || hasToolExecutions) {\n // Has tools - continue to render\n } else if (isLastMessage && hasPendingApprovals) {\n // Has pending approvals - continue to render\n } else if (isLastMessage && isLoading && !isProcessing) {\n // Show streaming loader\n return (\n <Message key={message.id} className=\"flex gap-2\">\n <MessageAvatar\n src={assistantAvatar.src || \"\"}\n alt=\"Assistant\"\n fallback={assistantAvatar.fallback}\n fallbackIcon={\n !assistantAvatar.src ? (\n <CopilotSDKLogo className=\"size-5\" />\n ) : undefined\n }\n className=\"bg-background\"\n />\n <div className=\"rounded-lg bg-muted px-4 py-2\">\n <Loader variant={loaderVariant} size=\"sm\" />\n </div>\n </Message>\n );\n } else {\n // Hide empty assistant messages\n return null;\n }\n }\n\n // Check for saved executions in metadata (historical)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const savedExecutions = (message as any).metadata\n ?.toolExecutions as ToolExecutionData[] | undefined;\n const messageToolExecutions =\n message.toolExecutions || savedExecutions;\n\n const messageWithExecutions = messageToolExecutions\n ? { ...message, toolExecutions: messageToolExecutions }\n : message;\n\n // Handle follow-up click - use onSendMessage if available\n const handleFollowUpClick = (question: string) => {\n if (onSuggestionClick) {\n onSuggestionClick(question);\n } else {\n onSendMessage?.(question);\n }\n };\n\n return renderMessage ? (\n <React.Fragment key={message.id}>\n {renderMessage(messageWithExecutions, index)}\n </React.Fragment>\n ) : (\n <DefaultMessage\n key={message.id}\n message={messageWithExecutions}\n userAvatar={userAvatar}\n assistantAvatar={assistantAvatar}\n showUserAvatar={showUserAvatar}\n userMessageClassName={classNames.userMessage}\n assistantMessageClassName={classNames.assistantMessage}\n size={fontSize}\n isLastMessage={isLastMessage}\n isLoading={isLoading}\n registeredTools={registeredTools}\n toolRenderers={toolRenderers}\n onApproveToolExecution={onApproveToolExecution}\n onRejectToolExecution={onRejectToolExecution}\n showFollowUps={showFollowUps}\n onFollowUpClick={handleFollowUpClick}\n followUpClassName={followUpClassName}\n followUpButtonClassName={followUpButtonClassName}\n />\n );\n })}\n\n {/* \"Continuing...\" loader - shown after tool completion while waiting for server */}\n {isProcessing && (\n <Message className=\"flex gap-2\">\n <MessageAvatar\n src={assistantAvatar?.src || \"\"}\n alt=\"Assistant\"\n fallback={assistantAvatar?.fallback || \"AI\"}\n fallbackIcon={\n !assistantAvatar?.src ? (\n <CopilotSDKLogo className=\"size-5\" />\n ) : undefined\n }\n className=\"bg-background\"\n />\n <div className=\"rounded-lg bg-muted px-4 py-2 flex items-center gap-2\">\n <Loader variant=\"dots\" size=\"sm\" />\n <span className=\"text-sm text-muted-foreground\">\n Continuing...\n </span>\n </div>\n </Message>\n )}\n\n {/* Loading indicator for non-streaming - when last message is user and waiting for response */}\n {isLoading &&\n !isProcessing &&\n (() => {\n const lastMessage = messages[messages.length - 1];\n // Show loader if last message is from user (non-streaming doesn't create empty assistant message)\n if (lastMessage?.role === \"user\") {\n return (\n <Message className=\"flex gap-2\">\n <MessageAvatar\n src={assistantAvatar?.src || \"\"}\n alt=\"Assistant\"\n fallback={assistantAvatar?.fallback || \"AI\"}\n fallbackIcon={\n !assistantAvatar?.src ? (\n <CopilotSDKLogo className=\"size-5\" />\n ) : undefined\n }\n className=\"bg-background\"\n />\n <div className=\"rounded-lg bg-muted px-4 py-2\">\n <Loader variant={loaderVariant} size=\"sm\" />\n </div>\n </Message>\n );\n }\n return null;\n })()}\n\n <ChatContainerScrollAnchor />\n </ChatContainerContent>\n\n {/* Scroll to bottom button */}\n <div className=\"absolute right-4 bottom-4\">\n <ScrollButton className=\"shadow-sm\" />\n </div>\n </ChatContainerRoot>\n\n {/* Suggestions */}\n {suggestions.length > 0 && !isLoading && (\n <Suggestions\n suggestions={suggestions}\n onSuggestionClick={handleSuggestionClick}\n className={classNames.suggestions}\n />\n )}\n\n {/* Input */}\n {renderInput ? (\n renderInput()\n ) : (\n <div className={cn(\"p-2 pt-0\", classNames.input)}>\n {/* Pending Attachments Preview */}\n {pendingAttachments.length > 0 && (\n <div className=\"flex flex-wrap gap-2 p-2 mb-2 bg-muted/30 rounded-lg\">\n {pendingAttachments.map((att) => (\n <div key={att.id} className=\"relative group\">\n {att.attachment.type === \"image\" ? (\n <img\n src={att.previewUrl}\n alt={att.file.name}\n className=\"w-16 h-16 object-cover rounded-lg border\"\n />\n ) : (\n <div className=\"w-16 h-16 bg-muted rounded-lg border flex flex-col items-center justify-center p-1\">\n <svg\n className=\"w-6 h-6 text-muted-foreground\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n <span className=\"text-[10px] text-muted-foreground truncate w-full text-center mt-1\">\n {att.file.name.length > 10\n ? att.file.name.slice(0, 8) + \"...\"\n : att.file.name}\n </span>\n </div>\n )}\n {/* Loading overlay */}\n {att.status === \"processing\" && (\n <div className=\"absolute inset-0 bg-background/80 rounded-lg flex items-center justify-center\">\n <Loader variant=\"dots\" size=\"sm\" />\n </div>\n )}\n {/* Error overlay */}\n {att.status === \"error\" && (\n <div className=\"absolute inset-0 bg-destructive/20 rounded-lg flex items-center justify-center\">\n <span className=\"text-destructive text-xs\">\n Error\n </span>\n </div>\n )}\n {/* Remove button */}\n <button\n onClick={() => removePendingAttachment(att.id)}\n className=\"absolute -top-1.5 -right-1.5 bg-destructive text-destructive-foreground rounded-full p-0.5 opacity-0 group-hover:opacity-100 transition-opacity\"\n type=\"button\"\n >\n <XIcon className=\"w-3 h-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n <PromptInput\n value={input}\n onValueChange={setInput}\n isLoading={isLoading}\n onSubmit={handleSubmit}\n className=\"\"\n >\n <PromptInputTextarea placeholder={placeholder} />\n <PromptInputActions className=\"flex justify-between\">\n <div>\n <PromptInputAction\n tooltip={\n attachmentsEnabled\n ? \"Attach files\"\n : attachmentsDisabledTooltip\n }\n >\n <label\n htmlFor={fileInputId}\n className={cn(\n \"flex h-8 w-8 items-center justify-center rounded-2xl\",\n attachmentsEnabled\n ? \"hover:bg-secondary-foreground/10 cursor-pointer\"\n : \"opacity-50 cursor-not-allowed\",\n )}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={acceptString}\n onChange={handleInputChange}\n className=\"hidden\"\n id={fileInputId}\n disabled={!attachmentsEnabled}\n />\n <PlusIcon className=\"text-primary size-5\" />\n </label>\n </PromptInputAction>\n </div>\n <PromptInputAction tooltip={isLoading ? \"Stop\" : \"Send\"}>\n {isLoading ? (\n <Button\n size=\"sm\"\n variant=\"destructive\"\n className=\"rounded-full size-9\"\n onClick={onStop}\n >\n <StopIcon className=\"h-4 w-4\" />\n </Button>\n ) : (\n <Button\n size=\"sm\"\n className=\"rounded-full size-9\"\n onClick={handleSubmit}\n disabled={\n !input.trim() &&\n !pendingAttachments.some(\n (att) => att.status === \"ready\",\n )\n }\n >\n <ArrowUpIcon className=\"h-4 w-4\" />\n </Button>\n )}\n </PromptInputAction>\n </PromptInputActions>\n </PromptInput>\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Message, MessageAvatar } from \"../../ui/message\";\nimport { ToolSteps, type ToolStepData } from \"../../ui/tool-steps\";\nimport {\n PermissionConfirmation,\n type PermissionLevel,\n} from \"../../ui/permission-confirmation\";\nimport type { ToolExecutionData } from \"../tools/tool-execution-list\";\n\ninterface ToolExecutionMessageProps {\n executions: ToolExecutionData[];\n assistantAvatar?: { src?: string; fallback?: string };\n /** Called when user approves with optional extraData from custom UI */\n onApprove?: (\n executionId: string,\n extraData?: Record<string, unknown>,\n permissionLevel?: PermissionLevel,\n ) => void;\n onReject?: (\n executionId: string,\n reason?: string,\n permissionLevel?: PermissionLevel,\n ) => void;\n /** Custom tool renderers that can handle approval UI */\n toolRenderers?: Record<\n string,\n React.ComponentType<{\n execution: ToolExecutionData;\n approval?: {\n onApprove: (extraData?: Record<string, unknown>) => void;\n onReject: (reason?: string) => void;\n message?: string;\n };\n }>\n >;\n className?: string;\n}\n\n/**\n * Standalone tool execution message shown during agentic loop\n * Displays tool calls with status, progress, and approval UI\n */\nexport function ToolExecutionMessage({\n executions,\n assistantAvatar = { fallback: \"AI\" },\n onApprove,\n onReject,\n toolRenderers,\n className,\n}: ToolExecutionMessageProps) {\n if (!executions || executions.length === 0) return null;\n\n // Separate pending approvals from other executions\n const pendingApprovals = executions.filter(\n (exec) => exec.approvalStatus === \"required\",\n );\n const otherExecutions = executions.filter(\n (exec) => exec.approvalStatus !== \"required\",\n );\n\n // Convert to ToolStepData format\n const toolSteps: ToolStepData[] = otherExecutions.map((exec) => ({\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result,\n error: exec.error,\n }));\n\n // Check if any tool is currently executing\n const hasExecuting = executions.some((exec) => exec.status === \"executing\");\n const hasCompleted = executions.some((exec) => exec.status === \"completed\");\n const allCompleted = executions.every(\n (exec) => exec.status === \"completed\" || exec.status === \"error\",\n );\n\n return (\n <Message className={cn(\"flex gap-2\", className)}>\n <MessageAvatar\n src={assistantAvatar.src || \"\"}\n alt=\"Assistant\"\n fallback={assistantAvatar.fallback}\n className=\"bg-primary text-primary-foreground\"\n />\n <div className=\"flex-1 min-w-0 max-w-[85%]\">\n {/* Header with status */}\n <div className=\"flex items-center gap-2 mb-2\">\n <div className=\"flex items-center gap-1.5\">\n {hasExecuting && (\n <svg\n className=\"size-3.5 animate-spin text-primary\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )}\n {!hasExecuting && allCompleted && (\n <svg\n className=\"size-3.5 text-green-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 13l4 4L19 7\"\n />\n </svg>\n )}\n <span className=\"text-xs font-medium text-muted-foreground\">\n {hasExecuting\n ? \"Running tools...\"\n : allCompleted\n ? `${executions.length} tool${executions.length > 1 ? \"s\" : \"\"} completed`\n : \"Tools\"}\n </span>\n </div>\n </div>\n\n {/* Tool Approval Confirmations */}\n {pendingApprovals.length > 0 && (\n <div className=\"mb-2 space-y-2\">\n {pendingApprovals.map((tool) => {\n // Check if there's a custom renderer for this tool\n const CustomRenderer = toolRenderers?.[tool.name];\n\n if (CustomRenderer) {\n // Use custom renderer with approval callbacks\n return (\n <CustomRenderer\n key={tool.id}\n execution={tool}\n approval={{\n onApprove: (extraData) => onApprove?.(tool.id, extraData),\n onReject: (reason) => onReject?.(tool.id, reason),\n message: tool.approvalMessage,\n }}\n />\n );\n }\n\n // Default: use PermissionConfirmation\n return (\n <PermissionConfirmation\n key={tool.id}\n state=\"pending\"\n toolName={tool.name}\n message={\n tool.approvalMessage ||\n `This tool wants to execute. Do you approve?`\n }\n onApprove={(permissionLevel) =>\n onApprove?.(tool.id, undefined, permissionLevel)\n }\n onReject={(permissionLevel) =>\n onReject?.(tool.id, undefined, permissionLevel)\n }\n />\n );\n })}\n </div>\n )}\n\n {/* Tool Steps */}\n {toolSteps.length > 0 && (\n <div className=\"rounded-lg border bg-card px-3 py-2.5 shadow-sm\">\n <ToolSteps steps={toolSteps} />\n </div>\n )}\n </div>\n </Message>\n );\n}\n","\"use client\";\n\n/**\n * useInternalThreadManager - Internal hook for CopilotChat persistence\n *\n * Encapsulates all thread management logic:\n * - Message format conversion (UIMessage ↔ Message)\n * - Auto-save on streaming complete\n * - Auto-restore last thread on mount\n * - Thread switch/create handlers\n * - Refs to prevent duplicate saves\n *\n * This is an internal hook used by CopilotChat when persistence is enabled.\n */\n\nimport { useCallback, useEffect, useRef } from \"react\";\nimport { useCopilot, type UIMessage } from \"../../react\";\nimport {\n useThreadManager,\n type UseThreadManagerConfig,\n} from \"../../react/hooks/useThreadManager\";\nimport type {\n ThreadStorageAdapter,\n AsyncThreadStorageAdapter,\n} from \"../../thread/adapters\";\n\nexport interface UseInternalThreadManagerConfig {\n /** Storage adapter for persistence */\n adapter?: ThreadStorageAdapter | AsyncThreadStorageAdapter;\n /** Debounce delay for auto-save (ms) */\n saveDebounce?: number;\n /** Whether to auto-restore the last active thread */\n autoRestoreLastThread?: boolean;\n /** Callback when thread changes */\n onThreadChange?: (threadId: string | null) => void;\n}\n\nexport interface UseInternalThreadManagerReturn {\n /** Thread manager state and actions */\n threadManager: ReturnType<typeof useThreadManager>;\n /** Handler for switching threads */\n handleSwitchThread: (threadId: string) => Promise<void>;\n /** Handler for creating new threads */\n handleNewThread: () => Promise<void>;\n /** Whether thread operations should be disabled (during streaming) */\n isBusy: boolean;\n}\n\n/**\n * Internal thread manager hook for CopilotChat\n *\n * This hook manages the synchronization between CopilotProvider's messages\n * and the thread storage system.\n */\nexport function useInternalThreadManager(\n config: UseInternalThreadManagerConfig = {},\n): UseInternalThreadManagerReturn {\n const {\n adapter,\n saveDebounce = 1000,\n autoRestoreLastThread = true,\n onThreadChange,\n } = config;\n\n // Thread management\n const threadManagerConfig: UseThreadManagerConfig = {\n adapter,\n saveDebounce,\n autoRestoreLastThread,\n };\n\n const threadManager = useThreadManager(threadManagerConfig);\n const {\n currentThread,\n currentThreadId,\n createThread,\n switchThread,\n updateCurrentThread,\n clearCurrentThread,\n refreshThreads,\n } = threadManager;\n\n // Get copilot context for setMessages and status\n const { messages, setMessages, status, isLoading } = useCopilot();\n\n // Track if we're in the middle of loading messages from a thread switch\n const isLoadingMessagesRef = useRef(false);\n // Track the thread ID we're saving to (to prevent saving to wrong thread)\n const savingToThreadRef = useRef<string | null>(null);\n // Track last saved message snapshot (IDs + content hash) to prevent duplicate saves\n const lastSavedSnapshotRef = useRef<string>(\"\");\n // Track if initial load has happened (for auto-restore)\n const hasInitializedRef = useRef(false);\n\n // Generate a snapshot key from messages for comparison\n // Uses ID + content hash to detect actual changes\n const getMessageSnapshot = useCallback((msgs: typeof messages) => {\n return msgs\n .map((m) => {\n // Simple hash: first 20 chars + length for uniqueness without full comparison\n const contentPreview = (m.content ?? \"\").slice(0, 20);\n return `${m.id}:${contentPreview}:${m.content?.length ?? 0}`;\n })\n .join(\"|\");\n }, []);\n\n // Convert UIMessage to core Message format\n const convertToCore = useCallback((msgs: typeof messages) => {\n return msgs.map((m) => ({\n id: m.id,\n role: m.role,\n content: m.content,\n created_at: m.createdAt,\n tool_calls: m.toolCalls,\n tool_call_id: m.toolCallId,\n metadata: {\n attachments: m.attachments,\n thinking: m.thinking,\n },\n }));\n }, []);\n\n // Handle thread switch - load saved messages\n const handleSwitchThread = useCallback(\n async (threadId: string) => {\n isLoadingMessagesRef.current = true;\n\n const thread = await switchThread(threadId);\n if (thread?.messages) {\n const uiMessages: UIMessage[] = thread.messages.map((m) => ({\n id: m.id,\n role: m.role,\n content: m.content ?? \"\",\n createdAt: m.created_at ?? new Date(),\n toolCalls: m.tool_calls,\n toolCallId: m.tool_call_id,\n attachments: m.metadata?.attachments,\n }));\n lastSavedSnapshotRef.current = getMessageSnapshot(uiMessages);\n savingToThreadRef.current = threadId;\n setMessages(uiMessages);\n } else {\n lastSavedSnapshotRef.current = \"\";\n savingToThreadRef.current = threadId;\n setMessages([]);\n }\n\n // Notify thread change\n onThreadChange?.(threadId);\n\n // Reset loading flag after React processes the state update\n requestAnimationFrame(() => {\n isLoadingMessagesRef.current = false;\n });\n },\n [switchThread, setMessages, getMessageSnapshot, onThreadChange],\n );\n\n // Handle new thread - just clear messages, thread is created lazily on first message\n const handleNewThread = useCallback(async () => {\n isLoadingMessagesRef.current = true;\n\n // Don't create thread yet - it will be created automatically when first message is sent\n // This prevents empty threads from being created\n clearCurrentThread();\n lastSavedSnapshotRef.current = \"\";\n savingToThreadRef.current = null;\n setMessages([]);\n\n // Notify thread change (null = new unsaved thread)\n onThreadChange?.(null);\n\n requestAnimationFrame(() => {\n isLoadingMessagesRef.current = false;\n });\n }, [clearCurrentThread, setMessages, onThreadChange]);\n\n // Auto-restore: load messages when thread is restored from storage\n useEffect(() => {\n // Skip if already initialized or no thread restored yet\n if (hasInitializedRef.current || !currentThread) {\n return;\n }\n\n // Mark as initialized\n hasInitializedRef.current = true;\n\n // Load messages from the restored thread\n isLoadingMessagesRef.current = true;\n if (currentThread.messages && currentThread.messages.length > 0) {\n const uiMessages: UIMessage[] = currentThread.messages.map((m) => ({\n id: m.id,\n role: m.role,\n content: m.content ?? \"\",\n createdAt: m.created_at ?? new Date(),\n toolCalls: m.tool_calls,\n toolCallId: m.tool_call_id,\n attachments: m.metadata?.attachments,\n }));\n lastSavedSnapshotRef.current = getMessageSnapshot(uiMessages);\n savingToThreadRef.current = currentThread.id;\n setMessages(uiMessages);\n } else {\n lastSavedSnapshotRef.current = \"\";\n savingToThreadRef.current = currentThread.id;\n }\n\n // Notify thread change\n onThreadChange?.(currentThread.id);\n\n requestAnimationFrame(() => {\n isLoadingMessagesRef.current = false;\n });\n }, [currentThread, setMessages, getMessageSnapshot, onThreadChange]);\n\n // Sync messages to storage when streaming completes\n useEffect(() => {\n // Skip if we're loading messages from a thread switch\n if (isLoadingMessagesRef.current) {\n return;\n }\n\n // Skip if still streaming - wait for completion\n if (status === \"streaming\" || status === \"submitted\") {\n return;\n }\n\n // Skip if no messages\n if (messages.length === 0) {\n return;\n }\n\n // Check if messages actually changed\n const currentSnapshot = getMessageSnapshot(messages);\n if (currentSnapshot === lastSavedSnapshotRef.current) {\n return;\n }\n\n const coreMessages = convertToCore(messages);\n\n // If no thread exists, create one with these messages\n if (!currentThreadId && !savingToThreadRef.current) {\n // Set ref immediately to prevent race condition with rapid messages\n savingToThreadRef.current = \"creating\";\n createThread({ messages: coreMessages }).then((thread) => {\n lastSavedSnapshotRef.current = currentSnapshot;\n savingToThreadRef.current = thread.id;\n onThreadChange?.(thread.id);\n });\n return;\n }\n\n // Make sure we're saving to the correct thread\n if (\n savingToThreadRef.current &&\n savingToThreadRef.current !== currentThreadId\n ) {\n return;\n }\n\n // Update existing thread\n updateCurrentThread({ messages: coreMessages });\n lastSavedSnapshotRef.current = currentSnapshot;\n }, [\n messages,\n currentThreadId,\n status,\n updateCurrentThread,\n createThread,\n refreshThreads,\n getMessageSnapshot,\n convertToCore,\n onThreadChange,\n ]);\n\n // Check if chat is busy (disable thread switching during streaming)\n const isBusy = isLoading || status === \"streaming\" || status === \"submitted\";\n\n return {\n threadManager,\n handleSwitchThread,\n handleNewThread,\n isBusy,\n };\n}\n","\"use client\";\n\nimport React from \"react\";\nimport {\n useCopilot,\n type UIMessage,\n type ChatToolExecution,\n} from \"../../../react\";\nimport { Chat, type ChatProps } from \"./chat\";\nimport type { ToolExecutionData } from \"./tools/tool-execution-list\";\nimport { ThreadPicker } from \"../ui/thread-picker\";\nimport {\n useInternalThreadManager,\n type UseInternalThreadManagerConfig,\n} from \"../../hooks/useInternalThreadManager\";\nimport type {\n ThreadStorageAdapter,\n AsyncThreadStorageAdapter,\n} from \"../../../thread/adapters\";\nimport { createServerAdapter } from \"../../../thread/adapters\";\n\n// ============================================\n// Persistence Configuration Types\n// ============================================\n\n/**\n * localStorage persistence (zero config)\n */\nexport interface LocalPersistenceConfig {\n type: \"local\";\n /** Debounce delay for auto-save (ms). Default: 1000 */\n saveDebounce?: number;\n /** Whether to auto-restore the last active thread. Default: true */\n autoRestoreLastThread?: boolean;\n}\n\n/**\n * Server persistence (point to your own API routes)\n */\nexport interface ServerPersistenceConfig {\n type: \"server\";\n /**\n * Endpoint URL for your thread CRUD API\n * @example \"/api/threads\"\n */\n endpoint: string;\n /** Additional headers for requests (e.g., auth tokens) */\n headers?: Record<string, string>;\n /** Debounce delay for auto-save (ms). Default: 1000 */\n saveDebounce?: number;\n /** Whether to auto-restore the last active thread. Default: true */\n autoRestoreLastThread?: boolean;\n}\n\n/**\n * Cloud persistence (future - managed service)\n */\nexport interface CloudPersistenceConfig {\n type: \"cloud\";\n /** Copilot Cloud API key */\n apiKey: string;\n /** Custom endpoint for enterprise (optional) */\n endpoint?: string;\n}\n\n/**\n * Legacy persistence config (backward compatibility)\n */\nexport interface LegacyPersistenceConfig {\n /** Storage adapter (defaults to localStorage) */\n adapter?: ThreadStorageAdapter | AsyncThreadStorageAdapter;\n /** Debounce delay for auto-save (ms). Default: 1000 */\n saveDebounce?: number;\n /** Whether to auto-restore the last active thread on mount. Default: true */\n autoRestoreLastThread?: boolean;\n}\n\n/**\n * Persistence configuration for CopilotChat\n *\n * @example localStorage (zero config)\n * ```tsx\n * <CopilotChat persistence={true} />\n * // or explicitly:\n * <CopilotChat persistence={{ type: \"local\" }} />\n * ```\n *\n * @example Server persistence\n * ```tsx\n * <CopilotChat\n * persistence={{\n * type: \"server\",\n * threadsUrl: \"/api/threads\",\n * headers: { Authorization: `Bearer ${token}` },\n * }}\n * />\n * ```\n */\nexport type CopilotChatPersistenceConfig =\n | LocalPersistenceConfig\n | ServerPersistenceConfig\n | CloudPersistenceConfig\n | LegacyPersistenceConfig;\n\n/**\n * Extended classNames for CopilotChat including thread picker\n */\nexport interface CopilotChatClassNames {\n // Existing Chat classNames\n root?: string;\n header?: string;\n container?: string;\n messageList?: string;\n userMessage?: string;\n assistantMessage?: string;\n input?: string;\n suggestions?: string;\n footer?: string;\n // Thread picker classNames\n threadPicker?: string;\n threadPickerButton?: string;\n threadPickerDropdown?: string;\n threadPickerItem?: string;\n threadPickerNewButton?: string;\n}\n\n/**\n * Header configuration for CopilotChat\n */\nexport interface CopilotChatHeaderConfig {\n /** Logo image URL (default: YourGPT logo) */\n logo?: string;\n /** Copilot name (default: \"AI Copilot\") */\n name?: string;\n /** Called when close button is clicked */\n onClose?: () => void;\n}\n\n/**\n * Props for CopilotChat - auto-connects to CopilotProvider context\n * No need to pass messages, sendMessage, etc. - handled internally\n */\nexport type CopilotChatProps = Omit<\n ChatProps,\n | \"messages\"\n | \"onSendMessage\"\n | \"onStop\"\n | \"isLoading\"\n | \"isProcessing\"\n | \"onApproveToolExecution\"\n | \"onRejectToolExecution\"\n | \"processAttachment\"\n | \"classNames\"\n | \"header\"\n | \"threadPicker\"\n | \"recentThreads\"\n | \"onSelectThread\"\n | \"onViewMoreThreads\"\n> & {\n /**\n * Header configuration.\n * Providing this prop will automatically show the header.\n */\n header?: CopilotChatHeaderConfig;\n /**\n * Enable built-in persistence.\n * - `true`: Use localStorage with default settings\n * - `object`: Custom persistence config\n * - `undefined`: No persistence (default)\n */\n persistence?: boolean | CopilotChatPersistenceConfig;\n\n /**\n * Show thread picker in the header for switching conversations.\n * Requires `persistence` to be enabled.\n * @default false\n */\n showThreadPicker?: boolean;\n\n /**\n * Callback when the current thread changes.\n * Useful for syncing thread ID with URL or external state.\n */\n onThreadChange?: (threadId: string | null) => void;\n\n /**\n * Granular class names for sub-components including thread picker\n */\n classNames?: CopilotChatClassNames;\n};\n\n/**\n * CopilotChat - Auto-connected chat component\n *\n * Automatically connects to CopilotProvider context.\n * No need to use hooks or pass messages - everything is handled internally.\n *\n * @example\n * ```tsx\n * import { CopilotProvider } from '../../react';\n * import { CopilotChat } from '@yourgpt/copilot-sdk-ui';\n *\n * function App() {\n * return (\n * <CopilotProvider runtimeUrl=\"/api/chat\">\n * <CopilotChat\n * title=\"AI Assistant\"\n * placeholder=\"Ask anything...\"\n * />\n * </CopilotProvider>\n * );\n * }\n * ```\n *\n * @example Generative UI with custom tool renderers\n * ```tsx\n * import { CopilotChat, type ToolRendererProps } from '@yourgpt/copilot-sdk-ui';\n *\n * function WeatherCard({ execution }: ToolRendererProps) {\n * if (execution.status !== 'completed') return <div>Loading...</div>;\n * return <div>{execution.result.city}: {execution.result.temperature}°</div>;\n * }\n *\n * <CopilotChat\n * toolRenderers={{\n * get_weather: WeatherCard,\n * }}\n * />\n * ```\n */\n/**\n * Parse persistence config into internal thread manager config\n */\nfunction parsePersistenceConfig(\n persistence: boolean | CopilotChatPersistenceConfig | undefined,\n onThreadChange?: (threadId: string | null) => void,\n): UseInternalThreadManagerConfig | undefined {\n // Not enabled\n if (!persistence) {\n return undefined;\n }\n\n // Boolean true = localStorage with defaults\n if (persistence === true) {\n return {\n onThreadChange,\n autoRestoreLastThread: true,\n };\n }\n\n // Type-based config\n if (\"type\" in persistence) {\n switch (persistence.type) {\n case \"local\":\n return {\n saveDebounce: persistence.saveDebounce,\n autoRestoreLastThread: persistence.autoRestoreLastThread ?? true,\n onThreadChange,\n };\n\n case \"server\":\n return {\n adapter: createServerAdapter({\n endpoint: persistence.endpoint,\n headers: persistence.headers,\n }),\n saveDebounce: persistence.saveDebounce,\n autoRestoreLastThread: persistence.autoRestoreLastThread ?? true,\n onThreadChange,\n };\n\n case \"cloud\":\n // Future: Cloud persistence not yet implemented\n console.warn(\n \"[Copilot SDK] Cloud persistence is not yet implemented. Falling back to localStorage.\",\n );\n return {\n onThreadChange,\n autoRestoreLastThread: true,\n };\n }\n }\n\n // Legacy config (has adapter property or other legacy fields)\n const legacyConfig = persistence as LegacyPersistenceConfig;\n return {\n adapter: legacyConfig.adapter,\n saveDebounce: legacyConfig.saveDebounce,\n autoRestoreLastThread: legacyConfig.autoRestoreLastThread ?? true,\n onThreadChange,\n };\n}\n\nexport function CopilotChat(props: CopilotChatProps) {\n const {\n persistence,\n showThreadPicker = false,\n onThreadChange,\n classNames,\n header,\n ...chatProps\n } = props;\n\n // Parse persistence config\n const persistenceConfig = parsePersistenceConfig(persistence, onThreadChange);\n\n // Use internal thread manager when persistence is enabled\n const threadManagerResult = useInternalThreadManager(\n persistenceConfig ?? { autoRestoreLastThread: false },\n );\n\n const isPersistenceEnabled = !!persistence;\n\n // Auto-connect to context internally\n const {\n messages,\n isLoading,\n sendMessage,\n stop,\n toolExecutions: rawToolExecutions,\n approveToolExecution,\n rejectToolExecution,\n registeredTools,\n } = useCopilot();\n\n // Convert tool executions to the expected format\n const toolExecutions: ToolExecutionData[] = rawToolExecutions.map(\n (exec: ChatToolExecution) => ({\n id: exec.id,\n name: exec.name,\n args: exec.args,\n status: exec.status,\n result: exec.result as ToolExecutionData[\"result\"],\n error: exec.error,\n timestamp: exec.startedAt ? exec.startedAt.getTime() : Date.now(),\n approvalStatus: exec.approvalStatus,\n }),\n );\n\n // Build map of tool results from tool messages (for merging)\n const toolResultsMap = new Map<string, string>();\n messages\n .filter((m: UIMessage) => m.role === \"tool\" && m.toolCallId)\n .forEach((m: UIMessage) => {\n toolResultsMap.set(m.toolCallId!, m.content ?? \"\");\n });\n\n // Filter out tool messages and merge results into parent assistant messages\n const visibleMessages = messages\n .filter((m: UIMessage) => m.role !== \"tool\") // Hide tool messages - results merged into assistant\n .map((m: UIMessage) => {\n // For assistant messages with tool_calls, merge results\n let messageToolExecutions: ToolExecutionData[] | undefined;\n\n if (m.role === \"assistant\" && m.toolCalls && m.toolCalls.length > 0) {\n const toolCallIds = new Set(\n m.toolCalls.map((tc: { id: string }) => tc.id),\n );\n\n // Try live executions first (from agentLoop)\n const liveExecutions = toolExecutions.filter(\n (exec: ToolExecutionData) => toolCallIds.has(exec.id),\n );\n\n if (liveExecutions.length > 0) {\n // Enrich live executions with results from tool messages if not already present\n messageToolExecutions = liveExecutions.map(\n (exec: ToolExecutionData) => {\n if (!exec.result && toolResultsMap.has(exec.id)) {\n const resultContent = toolResultsMap.get(exec.id)!;\n try {\n return { ...exec, result: JSON.parse(resultContent) };\n } catch {\n return {\n ...exec,\n result: { success: true, message: resultContent },\n };\n }\n }\n return exec;\n },\n );\n } else {\n // Build from stored tool_calls + tool messages (historical)\n messageToolExecutions = m.toolCalls.map(\n (tc: {\n id: string;\n function: { name: string; arguments: string };\n }) => {\n const resultContent = toolResultsMap.get(tc.id);\n let result: ToolExecutionData[\"result\"] = undefined;\n if (resultContent) {\n try {\n result = JSON.parse(resultContent);\n } catch {\n result = { success: true, message: resultContent };\n }\n }\n let args: Record<string, unknown> = {};\n try {\n args = JSON.parse(tc.function.arguments || \"{}\");\n } catch {\n // Keep empty args\n }\n return {\n id: tc.id,\n name: tc.function.name,\n args,\n status: (result\n ? \"completed\"\n : \"pending\") as ToolExecutionData[\"status\"],\n result,\n timestamp: Date.now(), // Historical - use current time\n };\n },\n );\n }\n }\n\n // Check for saved executions in metadata (for historical messages without tool_calls)\n const savedExecutions = (\n m.metadata as { toolExecutions?: ToolExecutionData[] }\n )?.toolExecutions;\n if (\n savedExecutions &&\n savedExecutions.length > 0 &&\n !messageToolExecutions\n ) {\n messageToolExecutions = savedExecutions;\n }\n\n return {\n id: m.id,\n role: m.role as \"user\" | \"assistant\" | \"system\",\n content: m.content ?? \"\",\n thinking: m.thinking,\n // Include attachments (images, files)\n attachments: m.attachments,\n // Include tool_calls for assistant messages\n tool_calls: m.toolCalls,\n // Attach matched tool executions to assistant messages\n toolExecutions: messageToolExecutions,\n };\n });\n\n // Show suggestions only when no messages\n const suggestions =\n visibleMessages.length === 0 && chatProps.suggestions?.length\n ? chatProps.suggestions\n : [];\n\n // isProcessing: Show \"Continuing...\" loader ONLY when we're in an active tool flow\n // Condition: Last message must be assistant with tool_calls (not user starting new request)\n const lastMessage = messages[messages.length - 1];\n const isInToolFlow =\n lastMessage?.role === \"assistant\" &&\n (lastMessage as UIMessage).toolCalls?.length;\n\n let isProcessingToolResults = false;\n\n if (isLoading && isInToolFlow) {\n const currentToolCallIds = new Set(\n (lastMessage as UIMessage).toolCalls?.map(\n (tc: { id: string }) => tc.id,\n ) || [],\n );\n const currentExecutions = toolExecutions.filter((exec) =>\n currentToolCallIds.has(exec.id),\n );\n\n const hasCompletedTools = currentExecutions.some(\n (exec) =>\n exec.status === \"completed\" ||\n exec.status === \"error\" ||\n exec.status === \"failed\",\n );\n const hasExecutingTools = currentExecutions.some(\n (exec) => exec.status === \"executing\" || exec.status === \"pending\",\n );\n\n // Show \"Continuing...\" only when tools completed and waiting for AI to continue\n isProcessingToolResults = hasCompletedTools && !hasExecutingTools;\n }\n\n // Extract chat classNames (without thread picker classes)\n const chatClassNames = classNames\n ? {\n root: classNames.root,\n header: classNames.header,\n container: classNames.container,\n messageList: classNames.messageList,\n userMessage: classNames.userMessage,\n assistantMessage: classNames.assistantMessage,\n input: classNames.input,\n suggestions: classNames.suggestions,\n footer: classNames.footer,\n }\n : undefined;\n\n // Build thread picker element (if enabled)\n const { threadManager, handleSwitchThread, handleNewThread, isBusy } =\n threadManagerResult;\n\n // Handle delete thread\n const handleDeleteThread = React.useCallback(\n (threadId: string) => {\n const isCurrentThread = threadManager.currentThreadId === threadId;\n threadManager.deleteThread(threadId);\n\n // If deleting the current thread, clear messages and show welcome screen\n if (isCurrentThread) {\n handleNewThread();\n }\n },\n [threadManager, handleNewThread],\n );\n\n const threadPickerElement =\n isPersistenceEnabled && showThreadPicker ? (\n <ThreadPicker\n value={threadManager.currentThreadId}\n threads={threadManager.threads}\n onSelect={handleSwitchThread}\n onDeleteThread={handleDeleteThread}\n onNewThread={handleNewThread}\n loading={threadManager.isLoading}\n disabled={isBusy}\n size=\"sm\"\n className={classNames?.threadPicker}\n buttonClassName={classNames?.threadPickerButton}\n dropdownClassName={classNames?.threadPickerDropdown}\n itemClassName={classNames?.threadPickerItem}\n newButtonClassName={classNames?.threadPickerNewButton}\n />\n ) : undefined;\n\n // Auto-show header when any header element is configured\n const shouldShowHeader = !!header || showThreadPicker || chatProps.showHeader;\n\n // Only use custom renderHeader if user provided it AND we're not using built-in header features\n const useCustomHeader =\n chatProps.renderHeader && !header && !showThreadPicker;\n\n return (\n <Chat\n {...chatProps}\n messages={visibleMessages}\n onSendMessage={sendMessage}\n onStop={stop}\n isLoading={isLoading}\n showPoweredBy={chatProps.showPoweredBy ?? true}\n suggestions={suggestions}\n isProcessing={isProcessingToolResults}\n onApproveToolExecution={approveToolExecution}\n onRejectToolExecution={rejectToolExecution}\n registeredTools={registeredTools}\n classNames={chatClassNames}\n header={header}\n threadPicker={threadPickerElement}\n showHeader={shouldShowHeader}\n renderHeader={useCustomHeader ? chatProps.renderHeader : undefined}\n // Welcome screen props\n recentThreads={isPersistenceEnabled ? threadManager.threads : undefined}\n onSelectThread={isPersistenceEnabled ? handleSwitchThread : undefined}\n onDeleteThread={isPersistenceEnabled ? handleDeleteThread : undefined}\n />\n );\n}\n\n// Alias for backwards compatibility\nexport const ConnectedChat = CopilotChat;\nexport type ConnectedChatProps = CopilotChatProps;\n","\"use client\";\n\nimport { cn } from \"../../lib/utils\";\n\nexport type PoweredByProps = {\n className?: string;\n showLogo?: boolean;\n};\n\nfunction YourGPTLogo({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M12 2L2 7l10 5 10-5-10-5z\" />\n <path d=\"M2 17l10 5 10-5\" />\n <path d=\"M2 12l10 5 10-5\" />\n </svg>\n );\n}\n\nexport function PoweredBy({ className, showLogo = true }: PoweredByProps) {\n return (\n <div\n className={cn(\n \"flex items-center justify-center gap-1.5 py-2 text-xs text-muted-foreground\",\n className,\n )}\n >\n <span>Powered by</span>\n {showLogo && <YourGPTLogo className=\"h-3 w-3\" />}\n <a\n href=\"https://yourgpt.ai\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"font-medium text-foreground hover:underline\"\n >\n YourGPT\n </a>\n </div>\n );\n}\n"]}
|