@truefoundry/agent-ui-sdk 0.0.1

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.
Files changed (79) hide show
  1. package/README.md +634 -0
  2. package/dist/index.d.ts +718 -0
  3. package/dist/index.js +2736 -0
  4. package/dist/index.js.map +1 -0
  5. package/package.json +83 -0
  6. package/src/atoms/AskUserPrompt.tsx +102 -0
  7. package/src/atoms/AttachmentCard.tsx +92 -0
  8. package/src/atoms/AttachmentPickerButton.tsx +19 -0
  9. package/src/atoms/AttachmentPreviewDialog.tsx +34 -0
  10. package/src/atoms/BranchIndicator.tsx +41 -0
  11. package/src/atoms/CodeBlockHeader.tsx +44 -0
  12. package/src/atoms/ComposerShell.tsx +112 -0
  13. package/src/atoms/Markdown.test.tsx +28 -0
  14. package/src/atoms/Markdown.tsx +288 -0
  15. package/src/atoms/McpAuthPrompt.tsx +60 -0
  16. package/src/atoms/MessageActionBar.tsx +60 -0
  17. package/src/atoms/MessageBubble.tsx +80 -0
  18. package/src/atoms/MessageErrorBanner.tsx +26 -0
  19. package/src/atoms/MessageIndicator.tsx +23 -0
  20. package/src/atoms/OpenUIBlock.test.tsx +37 -0
  21. package/src/atoms/OpenUIBlock.tsx +50 -0
  22. package/src/atoms/ReasoningCard.tsx +52 -0
  23. package/src/atoms/SandboxArtifactList.tsx +63 -0
  24. package/src/atoms/ScrollToBottomButton.tsx +34 -0
  25. package/src/atoms/Skeletons.tsx +32 -0
  26. package/src/atoms/ThreadListMisc.tsx +76 -0
  27. package/src/atoms/ThreadListRow.tsx +81 -0
  28. package/src/atoms/ThreadShell.tsx +93 -0
  29. package/src/atoms/Toast.tsx +60 -0
  30. package/src/atoms/ToolApprovalBar.tsx +92 -0
  31. package/src/atoms/ToolCallCard.tsx +186 -0
  32. package/src/atoms/ToolGroupCard.tsx +52 -0
  33. package/src/atoms/UserMessageActionBar.tsx +62 -0
  34. package/src/atoms/WelcomeScreen.tsx +22 -0
  35. package/src/atoms/lib/cn.ts +6 -0
  36. package/src/atoms/primitives/Avatar.tsx +57 -0
  37. package/src/atoms/primitives/Button.tsx +73 -0
  38. package/src/atoms/primitives/Collapsible.tsx +32 -0
  39. package/src/atoms/primitives/Dialog.tsx +152 -0
  40. package/src/atoms/primitives/IconButton.tsx +43 -0
  41. package/src/atoms/primitives/Skeleton.tsx +17 -0
  42. package/src/atoms/primitives/Tooltip.tsx +58 -0
  43. package/src/containers/AskUserContainer.tsx +49 -0
  44. package/src/containers/AssistantMessageContainer.test.tsx +56 -0
  45. package/src/containers/AssistantMessageContainer.tsx +128 -0
  46. package/src/containers/AssistantTextContainer.test.tsx +111 -0
  47. package/src/containers/AssistantTextContainer.tsx +54 -0
  48. package/src/containers/AttachmentsContainer.tsx +83 -0
  49. package/src/containers/ComposerContainer.tsx +66 -0
  50. package/src/containers/ErrorToasterContainer.tsx +76 -0
  51. package/src/containers/McpAuthContainer.test.tsx +100 -0
  52. package/src/containers/McpAuthContainer.tsx +22 -0
  53. package/src/containers/MessageImageContainer.tsx +37 -0
  54. package/src/containers/ReasoningContainer.tsx +32 -0
  55. package/src/containers/RuntimeHarness.tsx +39 -0
  56. package/src/containers/Thread.tsx +9 -0
  57. package/src/containers/ThreadContainer.test.tsx +52 -0
  58. package/src/containers/ThreadContainer.tsx +87 -0
  59. package/src/containers/ThreadListContainer.tsx +63 -0
  60. package/src/containers/ToolCallContainer.test.tsx +135 -0
  61. package/src/containers/ToolCallContainer.tsx +167 -0
  62. package/src/containers/ToolGroupContainer.test.tsx +56 -0
  63. package/src/containers/ToolGroupContainer.tsx +24 -0
  64. package/src/containers/UserEditComposerContainer.test.tsx +52 -0
  65. package/src/containers/UserEditComposerContainer.tsx +86 -0
  66. package/src/containers/UserMessageContainer.test.tsx +99 -0
  67. package/src/containers/UserMessageContainer.tsx +26 -0
  68. package/src/containers/nestedApprovalBridge.ts +20 -0
  69. package/src/containers/useAttachmentPreviewSrc.ts +42 -0
  70. package/src/hooks/useComposerBusyState.test.ts +78 -0
  71. package/src/hooks/useComposerBusyState.ts +69 -0
  72. package/src/index.ts +193 -0
  73. package/src/openui.css +3 -0
  74. package/src/testSetup.ts +42 -0
  75. package/src/theme/SlotsProvider.test.tsx +64 -0
  76. package/src/theme/SlotsProvider.tsx +41 -0
  77. package/src/theme/defaultSlots.ts +131 -0
  78. package/src/theme/tokens.ts +98 -0
  79. package/src/theme/useClassDarkMode.ts +24 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme/SlotsProvider.tsx","../src/atoms/primitives/Avatar.tsx","../src/atoms/lib/cn.ts","../src/atoms/primitives/Button.tsx","../src/atoms/primitives/Collapsible.tsx","../src/atoms/primitives/Dialog.tsx","../src/atoms/primitives/IconButton.tsx","../src/atoms/primitives/Tooltip.tsx","../src/atoms/primitives/Skeleton.tsx","../src/atoms/BranchIndicator.tsx","../src/atoms/CodeBlockHeader.tsx","../src/atoms/Markdown.tsx","../src/atoms/OpenUIBlock.tsx","../src/theme/useClassDarkMode.ts","../src/atoms/SandboxArtifactList.tsx","../src/atoms/MessageActionBar.tsx","../src/atoms/UserMessageActionBar.tsx","../src/atoms/MessageBubble.tsx","../src/atoms/MessageErrorBanner.tsx","../src/atoms/MessageIndicator.tsx","../src/atoms/ScrollToBottomButton.tsx","../src/atoms/Skeletons.tsx","../src/atoms/ThreadShell.tsx","../src/atoms/AskUserPrompt.tsx","../src/atoms/AttachmentCard.tsx","../src/atoms/AttachmentPickerButton.tsx","../src/atoms/AttachmentPreviewDialog.tsx","../src/atoms/ComposerShell.tsx","../src/atoms/McpAuthPrompt.tsx","../src/atoms/ReasoningCard.tsx","../src/atoms/ToolApprovalBar.tsx","../src/atoms/ThreadListRow.tsx","../src/atoms/ThreadListMisc.tsx","../src/atoms/Toast.tsx","../src/atoms/ToolCallCard.tsx","../src/atoms/ToolGroupCard.tsx","../src/atoms/WelcomeScreen.tsx","../src/theme/defaultSlots.ts","../src/theme/tokens.ts","../src/containers/ThreadContainer.tsx","../src/hooks/useComposerBusyState.ts","../src/containers/AssistantMessageContainer.tsx","../src/containers/AssistantTextContainer.tsx","../src/containers/ErrorToasterContainer.tsx","../src/containers/MessageImageContainer.tsx","../src/containers/ReasoningContainer.tsx","../src/containers/ToolCallContainer.tsx","../src/containers/nestedApprovalBridge.ts","../src/containers/ToolGroupContainer.tsx","../src/containers/UserEditComposerContainer.tsx","../src/containers/AttachmentsContainer.tsx","../src/containers/useAttachmentPreviewSrc.ts","../src/containers/UserMessageContainer.tsx","../src/containers/ComposerContainer.tsx","../src/containers/AskUserContainer.tsx","../src/containers/McpAuthContainer.tsx","../src/containers/ThreadListContainer.tsx","../src/containers/Thread.tsx"],"sourcesContent":["import { createContext, useContext, useMemo, type ReactNode } from \"react\";\n\nimport { defaultSlots } from \"./defaultSlots.js\";\n\n/**\n * Registry of atom-name -> atom-implementation. Empty by default; each atom module\n * augments this interface via `declare module \"../theme/SlotsProvider\"` when it is\n * introduced, so adding an atom never requires editing this file or any container.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface AtomSlots {}\n\nexport type SlotOverrides = Partial<AtomSlots>;\n\nconst SlotsContext = createContext<AtomSlots>(defaultSlots);\n\n/**\n * Wrap a subtree to override one or more atoms with a different design system.\n * Containers never reference concrete atoms directly -- they resolve everything\n * through `useSlot`, so this is the only thing a design-system swap has to touch.\n */\nexport function SlotsProvider({\n overrides,\n children,\n}: {\n overrides?: SlotOverrides;\n children: ReactNode;\n}) {\n const parentSlots = useContext(SlotsContext);\n const resolved = useMemo(\n () => ({ ...parentSlots, ...overrides }),\n [parentSlots, overrides],\n );\n return <SlotsContext.Provider value={resolved}>{children}</SlotsContext.Provider>;\n}\n\n/** Resolves the atom implementation registered for `name` -- default unless overridden. */\nexport function useSlot<K extends keyof AtomSlots>(name: K): AtomSlots[K] {\n const slots = useContext(SlotsContext);\n return slots[name];\n}\n","import type { ComponentProps } from \"react\";\nimport { Avatar as AvatarPrimitive } from \"radix-ui\";\n\nimport { cn } from \"../lib/cn.js\";\n\nexport type AvatarProps = ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: \"default\" | \"sm\" | \"lg\";\n};\n\nexport function Avatar({ className, size = \"default\", ...props }: AvatarProps) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n data-size={size}\n className={cn(\n \"group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport type AvatarImageProps = ComponentProps<typeof AvatarPrimitive.Image>;\n\nexport function AvatarImage({ className, ...props }: AvatarImageProps) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn(\"aspect-square size-full rounded-full object-cover\", className)}\n {...props}\n />\n );\n}\n\nexport type AvatarFallbackProps = ComponentProps<typeof AvatarPrimitive.Fallback>;\n\nexport function AvatarFallback({ className, ...props }: AvatarFallbackProps) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn(\n \"flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs\",\n className,\n )}\n {...props}\n />\n );\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n Avatar: typeof Avatar;\n AvatarImage: typeof AvatarImage;\n AvatarFallback: typeof AvatarFallback;\n }\n}\n","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 type { ComponentProps } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot } from \"radix-ui\";\n\nimport { cn } from \"../lib/cn.js\";\n\nexport const buttonVariants = cva(\n \"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/80\",\n outline:\n \"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n ghost:\n \"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50\",\n destructive:\n \"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default:\n \"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n icon: \"size-8\",\n \"icon-xs\":\n \"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\":\n \"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg\",\n \"icon-lg\": \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nexport type ButtonProps = ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n };\n\nexport function Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: ButtonProps) {\n const Comp = asChild ? Slot.Root : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n Button: typeof Button;\n }\n}\n","import type { ComponentProps } from \"react\";\nimport { Collapsible as CollapsiblePrimitive } from \"radix-ui\";\n\nexport type CollapsibleProps = ComponentProps<typeof CollapsiblePrimitive.Root>;\n\nexport function Collapsible(props: CollapsibleProps) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />;\n}\n\nexport type CollapsibleTriggerProps = ComponentProps<\n typeof CollapsiblePrimitive.CollapsibleTrigger\n>;\n\nexport function CollapsibleTrigger(props: CollapsibleTriggerProps) {\n return <CollapsiblePrimitive.CollapsibleTrigger data-slot=\"collapsible-trigger\" {...props} />;\n}\n\nexport type CollapsibleContentProps = ComponentProps<\n typeof CollapsiblePrimitive.CollapsibleContent\n>;\n\nexport function CollapsibleContent(props: CollapsibleContentProps) {\n return <CollapsiblePrimitive.CollapsibleContent data-slot=\"collapsible-content\" {...props} />;\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n Collapsible: typeof Collapsible;\n CollapsibleTrigger: typeof CollapsibleTrigger;\n CollapsibleContent: typeof CollapsibleContent;\n }\n}\n","import type { ComponentProps } from \"react\";\nimport { Dialog as DialogPrimitive } from \"radix-ui\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"../lib/cn.js\";\nimport { Button } from \"./Button.js\";\n\nexport type DialogProps = ComponentProps<typeof DialogPrimitive.Root>;\n\nexport function Dialog(props: DialogProps) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nexport type DialogTriggerProps = ComponentProps<typeof DialogPrimitive.Trigger>;\n\nexport function DialogTrigger(props: DialogTriggerProps) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nexport type DialogPortalProps = ComponentProps<typeof DialogPrimitive.Portal>;\n\nexport function DialogPortal(props: DialogPortalProps) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nexport type DialogCloseProps = ComponentProps<typeof DialogPrimitive.Close>;\n\nexport function DialogClose(props: DialogCloseProps) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nexport type DialogOverlayProps = ComponentProps<typeof DialogPrimitive.Overlay>;\n\nexport function DialogOverlay({ className, ...props }: DialogOverlayProps) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport type DialogContentProps = ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n};\n\nexport function DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: DialogContentProps) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close data-slot=\"dialog-close\" asChild>\n <Button variant=\"ghost\" className=\"absolute top-2 right-2\" size=\"icon-sm\">\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </Button>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nexport type DialogHeaderProps = ComponentProps<\"div\">;\n\nexport function DialogHeader({ className, ...props }: DialogHeaderProps) {\n return <div data-slot=\"dialog-header\" className={cn(\"flex flex-col gap-2\", className)} {...props} />;\n}\n\nexport type DialogFooterProps = ComponentProps<\"div\"> & {\n showCloseButton?: boolean;\n};\n\nexport function DialogFooter({ className, showCloseButton = false, children, ...props }: DialogFooterProps) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n );\n}\n\nexport type DialogTitleProps = ComponentProps<typeof DialogPrimitive.Title>;\n\nexport function DialogTitle({ className, ...props }: DialogTitleProps) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"font-heading text-base leading-none font-medium\", className)}\n {...props}\n />\n );\n}\n\nexport type DialogDescriptionProps = ComponentProps<typeof DialogPrimitive.Description>;\n\nexport function DialogDescription({ className, ...props }: DialogDescriptionProps) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\n \"text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n Dialog: typeof Dialog;\n DialogTrigger: typeof DialogTrigger;\n DialogPortal: typeof DialogPortal;\n DialogClose: typeof DialogClose;\n DialogOverlay: typeof DialogOverlay;\n DialogContent: typeof DialogContent;\n DialogHeader: typeof DialogHeader;\n DialogFooter: typeof DialogFooter;\n DialogTitle: typeof DialogTitle;\n DialogDescription: typeof DialogDescription;\n }\n}\n","import { forwardRef, type ComponentPropsWithRef } from \"react\";\nimport { Slot } from \"radix-ui\";\n\nimport { cn } from \"../lib/cn.js\";\nimport { Button } from \"./Button.js\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"./Tooltip.js\";\n\nexport type IconButtonProps = ComponentPropsWithRef<typeof Button> & {\n tooltip: string;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n};\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n ({ children, tooltip, side = \"bottom\", className, ...rest }, ref) => {\n return (\n <TooltipProvider delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n {...rest}\n className={cn(\"aui-button-icon size-6 p-1 active:scale-90\", className)}\n ref={ref}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n <span className=\"aui-sr-only sr-only\">{tooltip}</span>\n </Button>\n </TooltipTrigger>\n <TooltipContent side={side}>{tooltip}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n },\n);\n\nIconButton.displayName = \"IconButton\";\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n IconButton: typeof IconButton;\n }\n}\n","import type { ComponentProps } from \"react\";\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\";\n\nimport { cn } from \"../lib/cn.js\";\n\nexport type TooltipProviderProps = ComponentProps<typeof TooltipPrimitive.Provider>;\n\nexport function TooltipProvider({ delayDuration = 0, ...props }: TooltipProviderProps) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n );\n}\n\nexport type TooltipProps = ComponentProps<typeof TooltipPrimitive.Root>;\n\nexport function Tooltip(props: TooltipProps) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nexport type TooltipTriggerProps = ComponentProps<typeof TooltipPrimitive.Trigger>;\n\nexport function TooltipTrigger(props: TooltipTriggerProps) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nexport type TooltipContentProps = ComponentProps<typeof TooltipPrimitive.Content>;\n\nexport function TooltipContent({ className, sideOffset = 0, children, ...props }: TooltipContentProps) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 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 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\",\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n TooltipProvider: typeof TooltipProvider;\n Tooltip: typeof Tooltip;\n TooltipTrigger: typeof TooltipTrigger;\n TooltipContent: typeof TooltipContent;\n }\n}\n","import type { ComponentProps } from \"react\";\n\nimport { cn } from \"../lib/cn.js\";\n\nexport type SkeletonProps = ComponentProps<\"div\">;\n\nexport function Skeleton({ className, ...props }: SkeletonProps) {\n return (\n <div data-slot=\"skeleton\" className={cn(\"animate-pulse rounded-md bg-muted\", className)} {...props} />\n );\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n Skeleton: typeof Skeleton;\n }\n}\n","import { ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\n\nimport { cn } from \"./lib/cn.js\";\nimport { IconButton } from \"./primitives/IconButton.js\";\n\nexport type BranchIndicatorProps = {\n index: number;\n count: number;\n onPrevious: () => void;\n onNext: () => void;\n className?: string;\n};\n\nexport function BranchIndicator({ index, count, onPrevious, onNext, className }: BranchIndicatorProps) {\n if (count <= 1) return null;\n\n return (\n <div\n className={cn(\n \"aui-branch-picker-root text-muted-foreground -ms-2 me-2 inline-flex items-center text-xs\",\n className,\n )}\n >\n <IconButton tooltip=\"Previous\" onClick={onPrevious}>\n <ChevronLeftIcon />\n </IconButton>\n <span className=\"aui-branch-picker-state font-medium\">\n {index} / {count}\n </span>\n <IconButton tooltip=\"Next\" onClick={onNext}>\n <ChevronRightIcon />\n </IconButton>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n BranchIndicator: typeof BranchIndicator;\n }\n}\n","import { useState } from \"react\";\nimport { CheckIcon, CopyIcon } from \"lucide-react\";\n\nimport { IconButton } from \"./primitives/IconButton.js\";\n\nexport type CodeBlockHeaderProps = {\n language: string;\n code: string;\n};\n\nexport function CodeBlockHeader({ language, code }: CodeBlockHeaderProps) {\n const [isCopied, setIsCopied] = useState(false);\n\n const onCopy = () => {\n if (!code || isCopied || typeof navigator === \"undefined\" || !navigator.clipboard) {\n return;\n }\n navigator.clipboard.writeText(code).then(\n () => {\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), 3000);\n },\n () => {},\n );\n };\n\n return (\n <div className=\"aui-code-header-root border-border/50 bg-muted/50 mt-3 flex items-center justify-between rounded-t-xl border border-b-0 px-3.5 py-1.5 text-xs\">\n <span className=\"aui-code-header-language text-muted-foreground font-medium lowercase\">\n {language}\n </span>\n <IconButton tooltip=\"Copy\" onClick={onCopy}>\n {!isCopied && <CopyIcon className=\"animate-in zoom-in-75 fade-in duration-150\" />}\n {isCopied && <CheckIcon className=\"animate-in zoom-in-50 fade-in duration-200 ease-out\" />}\n </IconButton>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n CodeBlockHeader: typeof CodeBlockHeader;\n }\n}\n","import { Children, isValidElement, useMemo, type ReactNode } from \"react\";\nimport ReactMarkdown, { type Components } from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\n\nimport { cn } from \"./lib/cn.js\";\nimport { CodeBlockHeader } from \"./CodeBlockHeader.js\";\nimport { OpenUIBlock } from \"./OpenUIBlock.js\";\nimport { SandboxArtifactList, type SandboxArtifactLink } from \"./SandboxArtifactList.js\";\n\nfunction extractCodeText(node: ReactNode): string {\n if (typeof node === \"string\") return node;\n if (typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(extractCodeText).join(\"\");\n if (isValidElement(node)) {\n return extractCodeText((node.props as { children?: ReactNode }).children);\n }\n return \"\";\n}\n\nconst SANDBOX_ARTIFACT_TOKEN = \"sandbox_artifact\";\n\n/**\n * By the time this runs, `[Label](path)` has already been parsed into a real\n * `<a href=\"path\">Label</a>` element by react-markdown — the raw path text is\n * gone from any flattened string, only present as the anchor's `href` prop.\n * So detection walks `children` as React elements, not a flattened string.\n */\n/**\n * The gateway emits sandbox artifact links as a fenced code block tagged\n * ```sandbox_artifact(s)``` containing raw `[label](path)` markdown-link text\n * (never parsed into real anchors, since it's inside a code fence).\n */\nfunction parseSandboxArtifactCodeBlock(code: string): SandboxArtifactLink[] | null {\n const links: SandboxArtifactLink[] = [];\n for (const match of code.matchAll(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g)) {\n links.push({ label: match[1]!, path: match[2]! });\n }\n return links.length > 0 ? links : null;\n}\n\nfunction parseSandboxArtifactParagraph(children: ReactNode): SandboxArtifactLink[] | null {\n const items = Children.toArray(children);\n if (items.length === 0) return null;\n\n const first = items[0];\n if (typeof first !== \"string\") return null;\n const stripped = first.replace(/^\\s*/, \"\");\n if (!stripped.startsWith(SANDBOX_ARTIFACT_TOKEN)) return null;\n if (!/^\\s*$/.test(stripped.slice(SANDBOX_ARTIFACT_TOKEN.length))) return null;\n\n const links: SandboxArtifactLink[] = [];\n for (let i = 1; i < items.length; i++) {\n const item = items[i];\n if (typeof item === \"string\") {\n const trimmed = item.trim();\n if (trimmed === \"\" || trimmed === SANDBOX_ARTIFACT_TOKEN) continue;\n return null;\n }\n if (isValidElement(item) && typeof (item.props as { href?: unknown }).href === \"string\") {\n links.push({\n label: extractCodeText((item.props as { children?: ReactNode }).children),\n path: (item.props as { href: string }).href,\n });\n continue;\n }\n return null;\n }\n return links.length > 0 ? links : null;\n}\n\nfunction createMarkdownComponents(\n isStreaming?: boolean,\n onDownloadArtifact?: (path: string) => void | Promise<unknown>,\n): Components {\n return {\n h1: ({ className, ...props }) => (\n <h1\n className={cn(\n \"aui-md-h1 mt-5 mb-2 scroll-m-20 text-xl font-semibold first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h2: ({ className, ...props }) => (\n <h2\n className={cn(\n \"aui-md-h2 mt-5 mb-2 scroll-m-20 text-lg font-semibold first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h3: ({ className, ...props }) => (\n <h3\n className={cn(\n \"aui-md-h3 mt-4 mb-1.5 scroll-m-20 text-base font-semibold first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h4: ({ className, ...props }) => (\n <h4\n className={cn(\n \"aui-md-h4 mt-3.5 mb-1 scroll-m-20 text-base font-medium first:mt-0 last:mb-0\",\n className,\n )}\n {...props}\n />\n ),\n h5: ({ className, ...props }) => (\n <h5\n className={cn(\"aui-md-h5 mt-3 mb-1 text-sm font-semibold first:mt-0 last:mb-0\", className)}\n {...props}\n />\n ),\n h6: ({ className, ...props }) => (\n <h6\n className={cn(\"aui-md-h6 mt-3 mb-1 text-sm font-medium first:mt-0 last:mb-0\", className)}\n {...props}\n />\n ),\n p: ({ className, children, ...props }) => {\n const artifacts = parseSandboxArtifactParagraph(children);\n if (artifacts != null) {\n return <SandboxArtifactList artifacts={artifacts} onDownload={onDownloadArtifact} />;\n }\n return (\n <p className={cn(\"aui-md-p my-3 leading-relaxed first:mt-0 last:mb-0\", className)} {...props}>\n {children}\n </p>\n );\n },\n a: ({ className, ...props }) => (\n <a\n className={cn(\n \"aui-md-a text-primary hover:text-primary/80 underline underline-offset-2\",\n className,\n )}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n {...props}\n />\n ),\n blockquote: ({ className, ...props }) => (\n <blockquote\n className={cn(\n \"aui-md-blockquote border-muted-foreground/30 text-muted-foreground my-3 border-s-2 ps-4\",\n className,\n )}\n {...props}\n />\n ),\n ul: ({ className, ...props }) => (\n <ul\n className={cn(\n \"aui-md-ul marker:text-muted-foreground my-3 ms-5 list-disc [&>li]:mt-1\",\n className,\n )}\n {...props}\n />\n ),\n ol: ({ className, ...props }) => (\n <ol\n className={cn(\n \"aui-md-ol marker:text-muted-foreground my-3 ms-5 list-decimal [&>li]:mt-1\",\n className,\n )}\n {...props}\n />\n ),\n hr: ({ className, ...props }) => (\n <hr className={cn(\"aui-md-hr border-muted-foreground/20 my-3\", className)} {...props} />\n ),\n table: ({ className, ...props }) => (\n <table\n className={cn(\n \"aui-md-table my-3 w-full border-separate border-spacing-0 overflow-y-auto\",\n className,\n )}\n {...props}\n />\n ),\n th: ({ className, ...props }) => (\n <th\n className={cn(\n \"aui-md-th bg-muted px-3 py-1.5 text-start font-medium first:rounded-ss-lg last:rounded-se-lg [[align=center]]:text-center [[align=right]]:text-right\",\n className,\n )}\n {...props}\n />\n ),\n td: ({ className, ...props }) => (\n <td\n className={cn(\n \"aui-md-td border-muted-foreground/20 border-s border-b px-3 py-1.5 text-start last:border-e [[align=center]]:text-center [[align=right]]:text-right\",\n className,\n )}\n {...props}\n />\n ),\n tr: ({ className, ...props }) => (\n <tr\n className={cn(\n \"aui-md-tr m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-es-lg [&:last-child>td:last-child]:rounded-ee-lg\",\n className,\n )}\n {...props}\n />\n ),\n li: ({ className, ...props }) => <li className={cn(\"aui-md-li leading-relaxed\", className)} {...props} />,\n strong: ({ className, ...props }) => (\n <strong className={cn(\"aui-md-strong font-semibold\", className)} {...props} />\n ),\n sup: ({ className, ...props }) => (\n <sup className={cn(\"aui-md-sup [&>a]:text-xs [&>a]:no-underline\", className)} {...props} />\n ),\n pre: ({ className, children, ...props }) => {\n const codeElement = isValidElement(children) ? children : undefined;\n const codeClassName = (codeElement?.props as { className?: string } | undefined)?.className ?? \"\";\n const language = /language-(\\S+)/.exec(codeClassName)?.[1] ?? \"text\";\n const code = extractCodeText(children);\n if (language === \"openui\") {\n return <OpenUIBlock source={code} isStreaming={isStreaming} />;\n }\n if (language === \"sandbox_artifact\" || language === \"sandbox_artifacts\") {\n const artifacts = parseSandboxArtifactCodeBlock(code);\n if (artifacts != null) {\n return <SandboxArtifactList artifacts={artifacts} onDownload={onDownloadArtifact} />;\n }\n }\n return (\n <>\n <CodeBlockHeader language={language} code={code} />\n <pre\n className={cn(\n \"aui-md-pre border-border/50 bg-muted/30 overflow-x-auto rounded-t-none rounded-b-xl border border-t-0 p-3.5 text-[13px] leading-relaxed\",\n className,\n )}\n {...props}\n >\n {children}\n </pre>\n </>\n );\n },\n code: ({ className, ...props }) => {\n const isCodeBlock = /language-/.test(className ?? \"\");\n return (\n <code\n className={cn(\n !isCodeBlock && \"aui-md-inline-code bg-muted rounded-md px-1.5 py-0.5 font-mono text-[0.85em]\",\n className,\n )}\n {...props}\n />\n );\n },\n };\n}\n\nexport type MarkdownProps = {\n content: string;\n className?: string;\n isStreaming?: boolean;\n onDownloadArtifact?: (path: string) => void | Promise<unknown>;\n};\n\nexport function Markdown({ content, className, isStreaming, onDownloadArtifact }: MarkdownProps) {\n const components = useMemo(\n () => createMarkdownComponents(isStreaming, onDownloadArtifact),\n [isStreaming, onDownloadArtifact],\n );\n return (\n <div className={cn(\"aui-md\", className)}>\n <ReactMarkdown remarkPlugins={[remarkGfm]} components={components}>\n {content}\n </ReactMarkdown>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n Markdown: typeof Markdown;\n }\n}\n","import { memo, useId } from \"react\";\nimport { Renderer } from \"@openuidev/react-lang\";\nimport { ThemeProvider } from \"@openuidev/react-ui\";\nimport { openuiLibrary } from \"@openuidev/react-ui/genui-lib\";\n\nimport { useClassDarkMode, type ThemeMode } from \"../theme/useClassDarkMode.js\";\nimport { cn } from \"./lib/cn.js\";\n\nexport type OpenUIBlockProps = {\n source: string;\n isStreaming?: boolean;\n className?: string;\n /** Override light/dark mode. Defaults to syncing with a `.dark` class on `<html>`. */\n mode?: ThemeMode;\n};\n\n/** Renders an OpenUI Lang fenced code block (```openui ... ```). */\nexport const OpenUIBlock = memo(\n function OpenUIBlock({ source, isStreaming, className, mode: modeProp }: OpenUIBlockProps) {\n const detectedMode = useClassDarkMode();\n const mode = modeProp ?? detectedMode;\n const scopeClass = `aui-openui-theme-${useId().replace(/:/g, \"\")}`;\n\n return (\n <ThemeProvider mode={mode} cssSelector={`.${scopeClass}`}>\n <div\n data-slot=\"openui-block\"\n className={cn(\"aui-openui-block my-3\", scopeClass, className)}\n style={{ contain: \"layout paint\" }}\n >\n <Renderer\n response={source}\n library={openuiLibrary}\n isStreaming={!!isStreaming}\n />\n </div>\n </ThemeProvider>\n );\n },\n (prev, next) =>\n prev.source === next.source &&\n !!prev.isStreaming === !!next.isStreaming &&\n prev.mode === next.mode,\n);\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n OpenUIBlock: typeof OpenUIBlock;\n }\n}\n","import { useSyncExternalStore } from \"react\";\n\nexport type ThemeMode = \"light\" | \"dark\";\n\nfunction getThemeMode(): ThemeMode {\n if (typeof document === \"undefined\") {\n return \"light\";\n }\n return document.documentElement.classList.contains(\"dark\") ? \"dark\" : \"light\";\n}\n\nfunction subscribe(onStoreChange: () => void) {\n const observer = new MutationObserver(onStoreChange);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"class\"],\n });\n return () => observer.disconnect();\n}\n\n/** Syncs OpenUI theme mode with a `.dark` class on `<html>`. */\nexport function useClassDarkMode(): ThemeMode {\n return useSyncExternalStore(subscribe, getThemeMode, () => \"light\");\n}\n","import { useState } from \"react\";\nimport { DownloadIcon, FileIcon, LoaderIcon } from \"lucide-react\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type SandboxArtifactLink = { label: string; path: string };\n\nexport type SandboxArtifactListProps = {\n artifacts: SandboxArtifactLink[];\n onDownload?: (path: string) => void | Promise<unknown>;\n className?: string;\n};\n\nexport function SandboxArtifactList({ artifacts, onDownload, className }: SandboxArtifactListProps) {\n const [downloadingPath, setDownloadingPath] = useState<string | null>(null);\n\n const handleClick = async (path: string) => {\n if (downloadingPath != null) return;\n setDownloadingPath(path);\n try {\n await onDownload?.(path);\n } finally {\n setDownloadingPath(null);\n }\n };\n\n return (\n <div\n data-slot=\"aui_sandbox-artifact-list\"\n className={cn(\"aui-sandbox-artifact-list my-3 flex w-fit max-w-full flex-wrap items-stretch text-sm\", className)}\n >\n {artifacts.map((artifact, index) => {\n const isDownloading = downloadingPath === artifact.path;\n return (\n <button\n key={artifact.path}\n type=\"button\"\n className={cn(\n \"aui-sandbox-artifact-button text-muted-foreground hover:text-foreground flex min-w-0 items-center gap-1.5 py-1 pr-2 pl-2 transition-colors disabled:pointer-events-none disabled:opacity-70\",\n index > 0 && \"border-border/60 ml-1 border-l pl-3\",\n )}\n disabled={isDownloading}\n onClick={() => handleClick(artifact.path)}\n >\n <FileIcon className=\"size-4 shrink-0\" aria-hidden />\n <span className=\"max-w-40 truncate\">{artifact.label}</span>\n {isDownloading ? (\n <LoaderIcon className=\"size-3.5 shrink-0 animate-spin [animation-duration:0.6s]\" aria-hidden />\n ) : (\n <DownloadIcon className=\"size-3.5 shrink-0\" aria-hidden />\n )}\n </button>\n );\n })}\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n SandboxArtifactList: typeof SandboxArtifactList;\n }\n}\n","import { CheckIcon, CopyIcon, DownloadIcon, MoreHorizontalIcon } from \"lucide-react\";\nimport { DropdownMenu } from \"radix-ui\";\n\nimport { cn } from \"./lib/cn.js\";\nimport { IconButton } from \"./primitives/IconButton.js\";\n\nexport type MessageActionBarProps = {\n isCopied: boolean;\n onCopy: () => void;\n onExportMarkdown: () => void;\n className?: string;\n};\n\nexport function MessageActionBar({ isCopied, onCopy, onExportMarkdown, className }: MessageActionBarProps) {\n return (\n <div\n className={cn(\n \"aui-assistant-action-bar-root text-muted-foreground animate-in fade-in flex gap-1 duration-200\",\n className,\n )}\n >\n <IconButton tooltip=\"Copy\" onClick={onCopy}>\n {isCopied ? (\n <CheckIcon className=\"animate-in zoom-in-50 fade-in duration-200 ease-out\" />\n ) : (\n <CopyIcon className=\"animate-in zoom-in-75 fade-in duration-150\" />\n )}\n </IconButton>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton tooltip=\"More\" className=\"data-[state=open]:bg-accent\">\n <MoreHorizontalIcon />\n </IconButton>\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n side=\"bottom\"\n align=\"start\"\n sideOffset={6}\n className=\"aui-action-bar-more-content bg-popover/95 text-popover-foreground data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:animate-out 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 z-50 min-w-[8rem] overflow-hidden rounded-xl border p-1.5 shadow-lg backdrop-blur-sm\"\n >\n <DropdownMenu.Item\n onSelect={onExportMarkdown}\n className=\"aui-action-bar-more-item hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground flex cursor-pointer items-center gap-2 rounded-lg px-2.5 py-1.5 text-sm outline-none select-none\"\n >\n <DownloadIcon className=\"size-4\" />\n Export as Markdown\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageActionBar: typeof MessageActionBar;\n }\n}\n","\"use client\";\n\nimport { ActionBarPrimitive, useAui, useAuiState } from \"@assistant-ui/react\";\nimport { useActionBarCopy } from \"@assistant-ui/core/react\";\nimport { CheckIcon, CopyIcon, PencilIcon, RotateCcwIcon } from \"lucide-react\";\nimport { trueFoundryExtras } from \"@truefoundry/assistant-ui-runtime\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\n\nfunction parseTurnIdFromMessageId(messageId: string): string {\n return messageId.replace(/-user$/, \"\");\n}\n\nexport type UserMessageActionBarProps = {\n className?: string;\n};\n\nexport function UserMessageActionBar({ className }: UserMessageActionBarProps) {\n const IconButton = useSlot(\"IconButton\");\n const aui = useAui();\n const messageId = useAuiState((s) => s.message.id);\n const turnId = parseTurnIdFromMessageId(messageId);\n const { isCopied } = useActionBarCopy();\n\n return (\n <ActionBarPrimitive.Root\n hideWhenRunning\n className={cn(\n \"aui-user-action-bar-root text-muted-foreground animate-in fade-in flex gap-1 duration-200\",\n className,\n )}\n > \n <ActionBarPrimitive.Edit asChild>\n <IconButton tooltip=\"Edit\">\n <PencilIcon />\n </IconButton>\n </ActionBarPrimitive.Edit>\n <IconButton\n tooltip=\"Reset\"\n onClick={() => void trueFoundryExtras.get(aui).resetFromTurn(turnId)}\n >\n <RotateCcwIcon />\n </IconButton>\n <ActionBarPrimitive.Copy asChild>\n <IconButton tooltip=\"Copy\">\n {isCopied ? (\n <CheckIcon className=\"animate-in zoom-in-50 fade-in duration-200 ease-out\" />\n ) : (\n <CopyIcon className=\"animate-in zoom-in-75 fade-in duration-150\" />\n )}\n </IconButton>\n </ActionBarPrimitive.Copy>\n </ActionBarPrimitive.Root>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n UserMessageActionBar: typeof UserMessageActionBar;\n }\n}\n","import type { ReactNode } from \"react\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type AssistantMessageBubbleProps = {\n variant: \"assistant\";\n children: ReactNode;\n error?: ReactNode;\n branchIndicator?: ReactNode;\n actionBar?: ReactNode;\n className?: string;\n};\n\nexport type UserMessageBubbleProps = {\n variant: \"user\";\n children: ReactNode;\n attachments?: ReactNode;\n branchIndicator?: ReactNode;\n actionBar?: ReactNode;\n className?: string;\n};\n\nexport type MessageBubbleProps = AssistantMessageBubbleProps | UserMessageBubbleProps;\n\nexport function MessageBubble(props: MessageBubbleProps) {\n if (props.variant === \"assistant\") {\n const { children, error, branchIndicator, actionBar, className } = props;\n return (\n <div\n data-slot=\"aui_assistant-message-root\"\n className={cn(\"fade-in slide-in-from-bottom-1 animate-in relative duration-150\", className)}\n >\n <div\n data-slot=\"aui_assistant-message-content\"\n className=\"text-foreground flex flex-col gap-3 px-2 leading-relaxed wrap-break-word [contain-intrinsic-size:auto_24px] [content-visibility:auto]\"\n >\n {children}\n {error}\n </div>\n <div data-slot=\"aui_assistant-message-footer\" className=\"ms-2 -mb-7.5 min-h-7.5 pt-1.5 flex items-center\">\n {branchIndicator}\n {actionBar}\n </div>\n </div>\n );\n }\n\n const { children, attachments, branchIndicator, actionBar, className } = props;\n return (\n <div\n data-slot=\"aui_user-message-root\"\n className={cn(\n \"fade-in slide-in-from-bottom-1 animate-in grid auto-rows-auto grid-cols-[minmax(72px,1fr)_auto] content-start gap-y-2 px-2 duration-150 [contain-intrinsic-size:auto_60px] [content-visibility:auto] [&:where(>*)]:col-start-2\",\n className,\n )}\n >\n {attachments}\n <div className=\"aui-user-message-content-wrapper relative col-start-2 min-w-0\">\n <div className=\"aui-user-message-content bg-muted text-foreground rounded-xl px-4 py-2 wrap-break-word empty:hidden\">\n {children}\n </div>\n </div>\n {(branchIndicator != null || actionBar != null) && (\n <div\n data-slot=\"aui_user-message-footer\"\n className=\"col-span-full col-start-1 row-start-3 -me-1 flex items-center justify-end gap-1\"\n >\n {branchIndicator}\n {actionBar}\n </div>\n )}\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageBubble: typeof MessageBubble;\n }\n}\n","import { cn } from \"./lib/cn.js\";\n\nexport type MessageErrorBannerProps = {\n message: string;\n className?: string;\n};\n\nexport function MessageErrorBanner({ message, className }: MessageErrorBannerProps) {\n return (\n <div\n role=\"alert\"\n className={cn(\n \"aui-message-error-root border-destructive bg-destructive/10 text-destructive dark:bg-destructive/5 mt-2 rounded-md border p-3 text-sm dark:text-red-200\",\n className,\n )}\n >\n <span className=\"aui-message-error-message line-clamp-2\">{message}</span>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageErrorBanner: typeof MessageErrorBanner;\n }\n}\n","import { cn } from \"./lib/cn.js\";\n\nexport type MessageIndicatorProps = {\n className?: string;\n};\n\nexport function MessageIndicator({ className }: MessageIndicatorProps) {\n return (\n <span\n data-slot=\"aui_assistant-message-indicator\"\n className={cn(\"animate-pulse font-sans\", className)}\n aria-label=\"Assistant is working\"\n >\n {\"●\"}\n </span>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageIndicator: typeof MessageIndicator;\n }\n}\n","import { forwardRef } from \"react\";\nimport { ArrowDownIcon } from \"lucide-react\";\n\nimport { cn } from \"./lib/cn.js\";\nimport { IconButton, type IconButtonProps } from \"./primitives/IconButton.js\";\n\nexport type ScrollToBottomButtonProps = Omit<IconButtonProps, \"tooltip\" | \"children\">;\n\nexport const ScrollToBottomButton = forwardRef<HTMLButtonElement, ScrollToBottomButtonProps>(\n ({ className, ...rest }, ref) => {\n return (\n <IconButton\n ref={ref}\n tooltip=\"Scroll to bottom\"\n variant=\"outline\"\n className={cn(\n \"aui-thread-scroll-to-bottom dark:border-border dark:bg-background dark:hover:bg-accent absolute -top-14 z-10 self-center rounded-full p-4 disabled:invisible\",\n className,\n )}\n {...rest}\n >\n <ArrowDownIcon />\n </IconButton>\n );\n },\n);\n\nScrollToBottomButton.displayName = \"ScrollToBottomButton\";\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ScrollToBottomButton: typeof ScrollToBottomButton;\n }\n}\n","import { cn } from \"./lib/cn.js\";\nimport { Skeleton } from \"./primitives/Skeleton.js\";\n\nexport type MessageListSkeletonProps = {\n className?: string;\n};\n\nexport function MessageListSkeleton({ className }: MessageListSkeletonProps) {\n return (\n <div\n role=\"status\"\n aria-label=\"Loading conversation\"\n data-slot=\"aui_thread-history-skeleton\"\n className={cn(\"mb-14 flex flex-col gap-y-6\", className)}\n >\n <div className=\"flex justify-end\">\n <Skeleton className=\"h-10 w-[min(85%,20rem)] rounded-xl\" />\n </div>\n <div className=\"flex flex-col gap-2 px-2\">\n <Skeleton className=\"h-4 w-full max-w-md\" />\n <Skeleton className=\"h-4 w-full max-w-sm\" />\n <Skeleton className=\"h-4 w-2/3 max-w-xs\" />\n </div>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageListSkeleton: typeof MessageListSkeleton;\n }\n}\n","import { forwardRef, type ComponentPropsWithRef, type CSSProperties } from \"react\";\n\nimport { cn } from \"./lib/cn.js\";\n\nconst THREAD_CSS_VARS: CSSProperties = {\n [\"--thread-max-width\" as string]: \"44rem\",\n [\"--composer-bg\" as string]: \"color-mix(in oklab, var(--color-muted) 30%, var(--color-background))\",\n [\"--composer-radius\" as string]: \"1.5rem\",\n [\"--composer-padding\" as string]: \"8px\",\n};\n\nexport type ThreadRootShellProps = ComponentPropsWithRef<\"div\">;\n\nexport const ThreadRootShell = forwardRef<HTMLDivElement, ThreadRootShellProps>(\n ({ className, style, ...rest }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"aui-root aui-thread-root bg-background @container flex h-full min-h-0 flex-col overflow-hidden\",\n className,\n )}\n style={{ ...THREAD_CSS_VARS, ...style }}\n {...rest}\n />\n ),\n);\nThreadRootShell.displayName = \"ThreadRootShell\";\n\nexport type ThreadViewportShellProps = ComponentPropsWithRef<\"div\"> & {\n isEmpty?: boolean;\n};\n\nexport const ThreadViewportShell = forwardRef<HTMLDivElement, ThreadViewportShellProps>(\n ({ className, isEmpty, children, ...rest }, ref) => (\n <div\n ref={ref}\n data-slot=\"aui_thread-viewport\"\n className={cn(\"relative flex min-h-0 flex-1 flex-col overflow-x-auto overflow-y-auto scroll-smooth\", className)}\n {...rest}\n >\n <div\n className={cn(\n \"mx-auto flex w-full max-w-(--thread-max-width) flex-col px-4 pt-4 pb-4\",\n isEmpty && \"min-h-full justify-center\",\n )}\n >\n {children}\n </div>\n </div>\n ),\n);\nThreadViewportShell.displayName = \"ThreadViewportShell\";\n\nexport type ThreadComposerAreaShellProps = ComponentPropsWithRef<\"div\"> & {\n isEmpty?: boolean;\n};\n\nexport const ThreadComposerAreaShell = forwardRef<HTMLDivElement, ThreadComposerAreaShellProps>(\n ({ className, isEmpty, ...rest }, ref) => (\n <div\n ref={ref}\n data-slot=\"aui_thread-composer\"\n className={cn(\n \"aui-thread-composer bg-background relative mx-auto flex w-full max-w-(--thread-max-width) shrink-0 flex-col gap-4 px-4 pb-4 md:pb-6\",\n !isEmpty && \"rounded-t-(--composer-radius)\",\n className,\n )}\n {...rest}\n />\n ),\n);\nThreadComposerAreaShell.displayName = \"ThreadComposerAreaShell\";\n\nexport type MessageGroupProps = ComponentPropsWithRef<\"div\">;\n\nexport const MessageGroup = forwardRef<HTMLDivElement, MessageGroupProps>(({ className, ...rest }, ref) => (\n <div\n ref={ref}\n data-slot=\"aui_message-group\"\n className={cn(\"flex flex-col gap-y-6 empty:hidden\", className)}\n {...rest}\n />\n));\nMessageGroup.displayName = \"MessageGroup\";\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ThreadRootShell: typeof ThreadRootShell;\n ThreadViewportShell: typeof ThreadViewportShell;\n ThreadComposerAreaShell: typeof ThreadComposerAreaShell;\n MessageGroup: typeof MessageGroup;\n }\n}\n","import { cn } from \"./lib/cn.js\";\nimport { Button } from \"./primitives/Button.js\";\n\nexport type AskUserOption = { id: string; label: string };\n\nconst OTHER_OPTION_ID = \"__other\";\n\nexport type AskUserPromptProps = {\n question: string;\n options: AskUserOption[];\n allowOther: boolean;\n selectedOptionId?: string;\n otherValue: string;\n disabled: boolean;\n onSelectOption: (optionId: string) => void;\n onOtherValueChange: (value: string) => void;\n onSubmit: () => void;\n className?: string;\n};\n\nexport function AskUserPrompt({\n question,\n options,\n allowOther,\n selectedOptionId,\n otherValue,\n disabled,\n onSelectOption,\n onOtherValueChange,\n onSubmit,\n className,\n}: AskUserPromptProps) {\n const canSubmit = selectedOptionId != null && selectedOptionId !== OTHER_OPTION_ID\n ? true\n : selectedOptionId === OTHER_OPTION_ID && otherValue.trim().length > 0;\n\n return (\n <div\n data-slot=\"aui_ask-user-prompt\"\n className={cn(\n \"border-border/60 flex w-full flex-col gap-3 rounded-[var(--composer-radius,1.5rem)] border bg-[var(--composer-bg,var(--muted))] p-[var(--composer-padding,8px)]\",\n className,\n )}\n >\n <p className=\"text-foreground px-2.5 text-sm font-medium\">{question}</p>\n <div className=\"flex flex-col gap-1.5 px-2.5\">\n {options.map((option) => (\n <label key={option.id} className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"radio\"\n name=\"ask-user-option\"\n checked={selectedOptionId === option.id}\n disabled={disabled}\n onChange={() => onSelectOption(option.id)}\n />\n {option.label}\n </label>\n ))}\n {allowOther && (\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"radio\"\n name=\"ask-user-option\"\n checked={selectedOptionId === OTHER_OPTION_ID}\n disabled={disabled}\n onChange={() => onSelectOption(OTHER_OPTION_ID)}\n />\n <input\n type=\"text\"\n value={otherValue}\n placeholder=\"Type your answer...\"\n disabled={disabled}\n onFocus={() => onSelectOption(OTHER_OPTION_ID)}\n onChange={(event) => {\n onSelectOption(OTHER_OPTION_ID);\n onOtherValueChange(event.target.value);\n }}\n aria-label=\"Other answer\"\n className=\"border-border/60 flex-1 rounded-md border bg-transparent px-2 py-1 text-sm outline-none\"\n />\n </label>\n )}\n </div>\n <div className=\"flex justify-end px-2.5\">\n <Button\n type=\"button\"\n className=\"rounded-full px-4\"\n disabled={disabled || !canSubmit}\n onClick={onSubmit}\n >\n Submit\n </Button>\n </div>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AskUserPrompt: typeof AskUserPrompt;\n }\n}\n","import { FileTextIcon, XIcon } from \"lucide-react\";\n\nimport { cn } from \"./lib/cn.js\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"./primitives/Avatar.js\";\nimport { IconButton } from \"./primitives/IconButton.js\";\n\nexport type AttachmentCardSize = \"chip\" | \"preview\";\n\n/** Fixed preview bounds for attachments rendered in user message bubbles. */\nexport const USER_MESSAGE_ATTACHMENT_PREVIEW_REM = 12;\n\nexport type AttachmentCardProps = {\n name: string;\n contentType?: string;\n previewSrc?: string;\n isImage?: boolean;\n size?: AttachmentCardSize;\n /** When set, constrains image preview and file chip width to this rem size. */\n previewRem?: number;\n onRemove?: () => void;\n className?: string;\n};\n\nexport function AttachmentCard({\n name,\n previewSrc,\n isImage = false,\n size = \"chip\",\n previewRem,\n onRemove,\n className,\n}: AttachmentCardProps) {\n if (size === \"preview\" && isImage && previewSrc) {\n const previewSize =\n previewRem != null ? { width: `${previewRem}rem`, height: `${previewRem}rem` } : undefined;\n\n return (\n <div\n data-slot=\"aui_attachment-preview\"\n style={previewSize}\n className={cn(\n \"aui-attachment-preview relative shrink-0 cursor-pointer overflow-hidden rounded-lg border\",\n previewRem == null && \"size-24\",\n className,\n )}\n >\n <img src={previewSrc} alt={name} className=\"h-full w-full object-cover\" />\n </div>\n );\n }\n\n return (\n <div\n data-slot=\"aui_attachment-chip\"\n style={previewRem != null ? { maxWidth: `${previewRem}rem` } : undefined}\n className={cn(\n \"aui-attachment-chip bg-muted flex max-w-full shrink-0 items-center gap-2 rounded-lg border px-2 py-1.5\",\n className,\n )}\n >\n <div className=\"bg-background flex size-7 shrink-0 items-center justify-center overflow-hidden rounded-md border\">\n {isImage && previewSrc ? (\n <Avatar className=\"size-7 rounded-none\">\n <AvatarImage src={previewSrc} alt={name} className=\"object-cover\" />\n <AvatarFallback>\n <FileTextIcon className=\"text-muted-foreground size-4\" />\n </AvatarFallback>\n </Avatar>\n ) : (\n <FileTextIcon className=\"text-muted-foreground size-4\" />\n )}\n </div>\n <span className=\"text-foreground min-w-0 truncate text-sm\">{name}</span>\n {onRemove && (\n <IconButton\n tooltip=\"Remove file\"\n side=\"top\"\n className=\"size-6 shrink-0 rounded-full [&_svg]:size-3\"\n onClick={onRemove}\n >\n <XIcon />\n </IconButton>\n )}\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AttachmentCard: typeof AttachmentCard;\n }\n}\n","import { PlusIcon } from \"lucide-react\";\n\nimport { IconButton, type IconButtonProps } from \"./primitives/IconButton.js\";\n\nexport type AttachmentPickerButtonProps = Omit<IconButtonProps, \"tooltip\" | \"children\">;\n\nexport function AttachmentPickerButton(props: AttachmentPickerButtonProps) {\n return (\n <IconButton tooltip=\"Add Attachment\" variant=\"ghost\" className=\"size-7 rounded-full p-1\" {...props}>\n <PlusIcon className=\"size-4.5\" />\n </IconButton>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AttachmentPickerButton: typeof AttachmentPickerButton;\n }\n}\n","import type { ReactNode } from \"react\";\n\nimport { Dialog, DialogContent, DialogTitle, DialogTrigger } from \"./primitives/Dialog.js\";\n\nexport type AttachmentPreviewDialogProps = {\n previewSrc?: string;\n children: ReactNode;\n};\n\nexport function AttachmentPreviewDialog({ previewSrc, children }: AttachmentPreviewDialogProps) {\n if (!previewSrc) return <>{children}</>;\n\n return (\n <Dialog>\n <DialogTrigger asChild>{children}</DialogTrigger>\n <DialogContent className=\"p-2 sm:max-w-3xl\">\n <DialogTitle className=\"sr-only\">Image Attachment Preview</DialogTitle>\n <div className=\"bg-background relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden\">\n <img\n src={previewSrc}\n alt=\"Attachment preview\"\n className=\"block h-auto max-h-[80vh] w-auto max-w-full object-contain\"\n />\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AttachmentPreviewDialog: typeof AttachmentPreviewDialog;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { ArrowUpIcon, LoaderIcon, PlusIcon } from \"lucide-react\";\n\nimport { cn } from \"./lib/cn.js\";\nimport { Button } from \"./primitives/Button.js\";\nimport { IconButton } from \"./primitives/IconButton.js\";\n\nexport type ComposerShellProps = {\n value: string;\n placeholder: string;\n disabled: boolean;\n isRunning?: boolean;\n attachments?: ReactNode;\n modelLabel?: string;\n modelIcon?: ReactNode;\n connectorStatusLabel?: string;\n onValueChange: (value: string) => void;\n onSubmit: () => void;\n onCancel?: () => void;\n onAttach?: () => void;\n className?: string;\n};\n\nexport function ComposerShell({\n value,\n placeholder,\n disabled,\n isRunning = false,\n attachments,\n modelLabel,\n modelIcon,\n connectorStatusLabel,\n onValueChange,\n onSubmit,\n onCancel,\n onAttach,\n className,\n}: ComposerShellProps) {\n return (\n <div\n data-slot=\"aui_composer-shell\"\n className={cn(\n \"border-border/60 focus-within:border-ring focus-within:ring-ring/20 flex w-full flex-col gap-2 rounded-[var(--composer-radius,1.5rem)] border bg-[var(--composer-bg,var(--muted))] p-[var(--composer-padding,8px)] shadow-sm transition-colors focus-within:ring-3\",\n className,\n )}\n >\n {attachments}\n <textarea\n value={value}\n placeholder={placeholder}\n disabled={disabled}\n rows={1}\n aria-label=\"Message input\"\n onChange={(event) => onValueChange(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n onSubmit();\n }\n }}\n className=\"placeholder:text-muted-foreground/80 max-h-32 min-h-10 w-full resize-none rounded-lg bg-transparent px-2.5 py-1 text-base outline-none\"\n />\n <div className=\"flex items-center justify-between px-1\">\n <div className=\"flex items-center gap-2\">\n {onAttach && (\n <IconButton tooltip=\"Attach\" onClick={onAttach}>\n <PlusIcon />\n </IconButton>\n )}\n {connectorStatusLabel && (\n <span className=\"text-muted-foreground text-xs\">{connectorStatusLabel}</span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {modelLabel && (\n <span className=\"bg-muted text-muted-foreground flex items-center gap-1 rounded-full px-2 py-0.5 text-xs\">\n {modelIcon}\n {modelLabel}\n </span>\n )}\n {isRunning ? (\n <Button\n variant=\"default\"\n size=\"sm\"\n className=\"gap-1.5 rounded-full\"\n disabled={!onCancel}\n onClick={onCancel}\n >\n <LoaderIcon className=\"size-3.5 animate-spin [animation-duration:0.6s]\" />\n Cancel\n </Button>\n ) : (\n <IconButton\n tooltip=\"Send message\"\n variant=\"default\"\n disabled={disabled || value.trim().length === 0}\n onClick={onSubmit}\n >\n <ArrowUpIcon />\n </IconButton>\n )}\n </div>\n </div>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ComposerShell: typeof ComposerShell;\n }\n}\n","import { ExternalLinkIcon } from \"lucide-react\";\n\nimport { cn } from \"./lib/cn.js\";\nimport { Button } from \"./primitives/Button.js\";\n\nexport type McpAuthServer = { id: string; name: string; authUrl: string };\n\nexport type McpAuthPromptProps = {\n servers: McpAuthServer[];\n disabled: boolean;\n onContinue: () => void;\n className?: string;\n};\n\nexport function McpAuthPrompt({ servers, disabled, onContinue, className }: McpAuthPromptProps) {\n return (\n <div data-slot=\"aui_mcp-auth-continue-composer\" className={cn(\"flex w-full flex-col gap-3\", className)}>\n <div className=\"border-primary/20 bg-background overflow-hidden rounded-2xl border\">\n <div className=\"bg-primary/10 border-primary/20 border-b px-4 py-2.5\">\n <p className=\"text-primary text-sm font-semibold\">MCP Authentication Required</p>\n </div>\n <ul className=\"divide-border/60 divide-y\">\n {servers.map((server) => (\n <li\n key={server.id}\n className=\"flex items-center justify-between gap-3 px-4 py-2.5\"\n >\n <p className=\"text-sm\">\n <span className=\"text-muted-foreground\">MCP Server Name</span>\n <span className=\"text-muted-foreground mx-1.5\">:</span>\n <span className=\"font-semibold\">{server.name}</span>\n </p>\n <Button\n asChild\n size=\"sm\"\n className=\"bg-foreground text-background hover:bg-foreground/80 rounded-full\"\n >\n <a href={server.authUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n Connect\n <ExternalLinkIcon className=\"size-3.5\" />\n </a>\n </Button>\n </li>\n ))}\n </ul>\n </div>\n <div className=\"flex justify-end px-2.5\">\n <Button type=\"button\" className=\"rounded-full px-4\" disabled={disabled} onClick={onContinue}>\n Continue\n </Button>\n </div>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n McpAuthPrompt: typeof McpAuthPrompt;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { BrainIcon, ChevronDownIcon } from \"lucide-react\";\n\nimport { cn } from \"./lib/cn.js\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"./primitives/Collapsible.js\";\n\nexport type ReasoningCardProps = {\n streaming: boolean;\n expanded: boolean;\n onToggle: () => void;\n children: ReactNode;\n className?: string;\n};\n\nexport function ReasoningCard({ streaming, expanded, onToggle, children, className }: ReasoningCardProps) {\n return (\n <Collapsible\n data-slot=\"reasoning-card\"\n open={expanded}\n onOpenChange={onToggle}\n className={cn(\"aui-reasoning-card w-full rounded-lg border px-3 py-2\", className)}\n >\n <CollapsibleTrigger className=\"text-muted-foreground hover:text-foreground flex max-w-[75%] origin-left items-center gap-2 py-1.5 text-sm transition-[color,scale] active:scale-[0.98]\">\n <BrainIcon className=\"size-4 shrink-0\" />\n <span className=\"leading-none tabular-nums\">\n Reasoning\n {streaming && (\n <span aria-hidden className=\"shimmer pointer-events-none\">\n {\" \"}\n …\n </span>\n )}\n </span>\n <ChevronDownIcon\n className={cn(\n \"mt-0.5 size-4 shrink-0 transition-transform duration-200 ease-[cubic-bezier(0.32,0.72,0,1)]\",\n expanded ? \"rotate-0\" : \"-rotate-90\",\n )}\n />\n </CollapsibleTrigger>\n <CollapsibleContent className=\"text-muted-foreground max-h-64 overflow-y-auto pt-2 pb-1 pl-6 text-sm leading-relaxed\">\n {children}\n </CollapsibleContent>\n </Collapsible>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ReasoningCard: typeof ReasoningCard;\n }\n}\n","import { useState } from \"react\";\n\nimport { cn } from \"./lib/cn.js\";\nimport { Button } from \"./primitives/Button.js\";\n\nexport type ToolApprovalOption = {\n id: string;\n label: string;\n isAllow: boolean;\n grants?: readonly string[];\n confirm?: {\n title?: string;\n description?: string;\n };\n};\n\nexport type ToolApprovalBarProps = {\n options: ToolApprovalOption[];\n onSelectOption: (optionId: string) => void;\n className?: string;\n};\n\nexport function ToolApprovalBar({ options, onSelectOption, className }: ToolApprovalBarProps) {\n const [confirmingId, setConfirmingId] = useState<string | null>(null);\n const confirming = confirmingId != null ? options.find((o) => o.id === confirmingId) : undefined;\n\n if (confirming) {\n return (\n <div className={cn(\"aui-tool-approval-confirm flex flex-col gap-2 pt-1\", className)}>\n <p className=\"font-semibold\">{confirming.confirm?.title ?? `${confirming.label}?`}</p>\n {confirming.confirm?.description && (\n <p className=\"text-muted-foreground\">{confirming.confirm.description}</p>\n )}\n {confirming.grants && confirming.grants.length > 0 && (\n <ul className=\"flex flex-col gap-1\">\n {confirming.grants.map((grant) => (\n <li key={grant}>\n <code className=\"bg-muted rounded px-1.5 py-0.5 text-xs\">{grant}</code>\n </li>\n ))}\n </ul>\n )}\n <div className=\"flex items-center gap-2\">\n <Button\n size=\"sm\"\n className=\"active:scale-[0.98]\"\n onClick={() => {\n onSelectOption(confirming.id);\n setConfirmingId(null);\n }}\n >\n Confirm\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"active:scale-[0.98]\"\n onClick={() => setConfirmingId(null)}\n >\n Back\n </Button>\n </div>\n </div>\n );\n }\n\n const firstAllowId = options.find((o) => o.isAllow)?.id;\n\n return (\n <div className={cn(\"aui-tool-approval-bar flex flex-wrap items-center gap-2 pt-1\", className)}>\n {options.map((option) => (\n <Button\n key={option.id}\n size=\"sm\"\n variant={option.id === firstAllowId ? \"default\" : \"outline\"}\n className=\"active:scale-[0.98]\"\n onClick={() =>\n option.confirm ? setConfirmingId(option.id) : onSelectOption(option.id)\n }\n >\n {option.label}\n </Button>\n ))}\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ToolApprovalBar: typeof ToolApprovalBar;\n }\n}\n","import { ArchiveIcon, MoreHorizontalIcon, TrashIcon } from \"lucide-react\";\nimport { DropdownMenu } from \"radix-ui\";\n\nimport { cn } from \"./lib/cn.js\";\nimport { IconButton } from \"./primitives/IconButton.js\";\n\nexport type ThreadListRowProps = {\n title: string;\n active: boolean;\n onSelect: () => void;\n onArchive?: () => void;\n onDelete?: () => void;\n className?: string;\n};\n\nexport function ThreadListRow({ title, active, onSelect, onArchive, onDelete, className }: ThreadListRowProps) {\n return (\n <div\n data-slot=\"aui_thread-list-item\"\n data-active={active || undefined}\n className={cn(\n \"group hover:bg-muted data-[active]:bg-muted relative flex min-h-9 items-center rounded-lg transition-colors\",\n className,\n )}\n >\n <button\n type=\"button\"\n onClick={onSelect}\n data-slot=\"aui_thread-list-item-trigger\"\n className=\"flex min-h-9 min-w-0 flex-1 items-center rounded-lg px-2.5 py-2 text-start text-sm outline-none group-hover:pe-9\"\n >\n <span className=\"min-w-0 flex-1 truncate\">{title}</span>\n </button>\n {(onArchive || onDelete) && (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton\n tooltip=\"More options\"\n className=\"absolute end-1.5 top-1/2 size-6 -translate-y-1/2 p-0 opacity-0 group-hover:opacity-100 data-[state=open]:opacity-100\"\n >\n <MoreHorizontalIcon className=\"size-3.5\" />\n </IconButton>\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n side=\"right\"\n align=\"start\"\n sideOffset={6}\n className=\"bg-popover/95 text-popover-foreground z-50 min-w-32 overflow-hidden rounded-xl border p-1.5 shadow-lg backdrop-blur-sm\"\n >\n {onArchive && (\n <DropdownMenu.Item\n onSelect={onArchive}\n className=\"hover:bg-accent hover:text-accent-foreground flex cursor-pointer items-center gap-2 rounded-lg px-2.5 py-1.5 text-sm outline-none select-none\"\n >\n <ArchiveIcon className=\"size-4\" />\n Archive\n </DropdownMenu.Item>\n )}\n {onDelete && (\n <DropdownMenu.Item\n onSelect={onDelete}\n className=\"text-destructive hover:bg-destructive/10 flex cursor-pointer items-center gap-2 rounded-lg px-2.5 py-1.5 text-sm outline-none select-none\"\n >\n <TrashIcon className=\"size-4\" />\n Delete\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n )}\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ThreadListRow: typeof ThreadListRow;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { PlusIcon } from \"lucide-react\";\n\nimport { cn } from \"./lib/cn.js\";\nimport { Button, type ButtonProps } from \"./primitives/Button.js\";\nimport { Skeleton } from \"./primitives/Skeleton.js\";\n\nexport type ThreadListNewButtonProps = Omit<ButtonProps, \"children\">;\n\nexport function ThreadListNewButton({ className, ...rest }: ThreadListNewButtonProps) {\n return (\n <Button\n variant=\"ghost\"\n data-slot=\"aui_thread-list-new\"\n className={cn(\"hover:bg-muted h-8 justify-start gap-2 rounded-md px-2.5 text-sm font-normal\", className)}\n {...rest}\n >\n <PlusIcon className=\"size-4 shrink-0\" />\n <span className=\"whitespace-nowrap\">New Thread</span>\n </Button>\n );\n}\n\nexport type ThreadListRowSkeletonProps = {\n count?: number;\n className?: string;\n};\n\nexport function ThreadListRowSkeleton({ count = 5, className }: ThreadListRowSkeletonProps) {\n return (\n <div className={cn(\"flex flex-col gap-1\", className)} role=\"status\" aria-label=\"Loading threads\">\n {Array.from({ length: count }, (_, i) => (\n <div key={i} className=\"flex h-8 items-center px-2.5\">\n <Skeleton className=\"h-3.5 w-full\" />\n </div>\n ))}\n </div>\n );\n}\n\nexport type ThreadListEmptyStateProps = {\n message?: string;\n className?: string;\n};\n\nexport function ThreadListEmptyState({ message = \"No threads yet\", className }: ThreadListEmptyStateProps) {\n return (\n <div className={cn(\"text-muted-foreground flex flex-1 items-center justify-center px-4 text-center text-sm\", className)}>\n {message}\n </div>\n );\n}\n\nexport type ThreadListShellProps = {\n header: ReactNode;\n children: ReactNode;\n className?: string;\n};\n\nexport function ThreadListShell({ header, children, className }: ThreadListShellProps) {\n return (\n <div className={cn(\"flex min-h-0 flex-1 flex-col gap-1 overflow-hidden p-3\", className)}>\n {header}\n <div className=\"flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto pb-1\">{children}</div>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ThreadListNewButton: typeof ThreadListNewButton;\n ThreadListRowSkeleton: typeof ThreadListRowSkeleton;\n ThreadListEmptyState: typeof ThreadListEmptyState;\n ThreadListShell: typeof ThreadListShell;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { XIcon } from \"lucide-react\";\nimport { Toast as ToastPrimitive } from \"radix-ui\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ToastProps = {\n title: string;\n description: string;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n className?: string;\n};\n\nexport function Toast({ title, description, open, onOpenChange, className }: ToastProps) {\n return (\n <ToastPrimitive.Root\n open={open}\n onOpenChange={onOpenChange}\n className={cn(\n \"border-destructive bg-background text-destructive dark:bg-card pointer-events-auto relative flex max-h-[min(70vh,32rem)] w-full items-start gap-3 rounded-xl border p-4 shadow-lg dark:text-red-200\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:slide-in-from-bottom-4\",\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-bottom-4\",\n className,\n )}\n >\n <div className=\"grid min-h-0 min-w-0 flex-1 gap-1 overflow-y-auto pe-6\">\n <ToastPrimitive.Title className=\"text-sm leading-none font-semibold\">{title}</ToastPrimitive.Title>\n <ToastPrimitive.Description className=\"font-mono text-sm break-words whitespace-pre-wrap\">\n {description}\n </ToastPrimitive.Description>\n </div>\n <ToastPrimitive.Close className=\"text-destructive hover:bg-muted focus-visible:ring-ring absolute top-3 right-3 rounded-md p-1 transition-colors focus:outline-none focus-visible:ring-2\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </ToastPrimitive.Close>\n </ToastPrimitive.Root>\n );\n}\n\nexport type ToastStackProps = {\n children: ReactNode;\n duration?: number;\n};\n\nexport function ToastStack({ children, duration = Number.POSITIVE_INFINITY }: ToastStackProps) {\n return (\n <ToastPrimitive.Provider duration={duration}>\n {children}\n <ToastPrimitive.Viewport className=\"fixed inset-x-0 bottom-0 z-50 flex max-h-screen flex-col-reverse gap-2 p-4 sm:bottom-4 sm:left-1/2 sm:w-full sm:max-w-2xl sm:-translate-x-1/2\" />\n </ToastPrimitive.Provider>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n Toast: typeof Toast;\n ToastStack: typeof ToastStack;\n }\n}\n","import type { ComponentType, ReactNode } from \"react\";\nimport { BriefcaseIcon, CheckIcon, ChevronDownIcon, LoaderIcon, PlugIcon, WrenchIcon, XCircleIcon } from \"lucide-react\";\n\nimport { cn } from \"./lib/cn.js\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"./primitives/Collapsible.js\";\n\nexport type ToolCallStatus = \"running\" | \"success\" | \"error\";\n\ntype ToolCallCardBaseProps = {\n variant: \"tool\" | \"sub-agent\" | \"mcp-listing\";\n name: string;\n status: ToolCallStatus;\n expanded: boolean;\n onToggle: () => void;\n /** Not in the Section 6 screenshot contract; ported from the reference's live per-call timer. */\n durationText?: string;\n className?: string;\n};\n\nexport type ToolCallCardToolProps = ToolCallCardBaseProps & {\n variant: \"tool\";\n argsText?: string;\n result?: string;\n isError?: boolean;\n /**\n * Extends the Section 6 contract: renders the pending tool-approval / ask-user\n * UI when this call requires action. The reference screenshots didn't include\n * an in-flight approval state, so this slot was inferred rather than observed.\n */\n approvalSlot?: ReactNode;\n};\n\nexport type ToolCallCardSubAgentProps = ToolCallCardBaseProps & {\n variant: \"sub-agent\";\n agentName: string;\n instruction: string;\n stepCount: number;\n children?: ReactNode;\n};\n\nexport type ToolCallCardMcpProps = ToolCallCardBaseProps & {\n variant: \"mcp-listing\";\n serverName: string;\n description: string;\n argsText: string;\n resultText: string;\n};\n\nexport type ToolCallCardProps = ToolCallCardToolProps | ToolCallCardSubAgentProps | ToolCallCardMcpProps;\n\nconst variantIcon: Record<ToolCallCardProps[\"variant\"], ComponentType<{ className?: string }>> = {\n tool: WrenchIcon,\n \"sub-agent\": BriefcaseIcon,\n \"mcp-listing\": PlugIcon,\n};\n\nfunction StatusIcon({ status }: { status: ToolCallStatus }) {\n if (status === \"running\") {\n return (\n <LoaderIcon\n data-slot=\"tool-call-card-status-icon\"\n className=\"text-muted-foreground size-4 shrink-0 animate-spin [animation-duration:0.6s]\"\n />\n );\n }\n if (status === \"success\") {\n return (\n <CheckIcon\n data-slot=\"tool-call-card-status-icon\"\n className=\"size-4 shrink-0 text-emerald-600 dark:text-emerald-400\"\n />\n );\n }\n return <XCircleIcon data-slot=\"tool-call-card-status-icon\" className=\"text-destructive size-4 shrink-0\" />;\n}\n\nfunction IconChip({ Icon }: { Icon: ComponentType<{ className?: string }> }) {\n return (\n <span className=\"bg-muted text-muted-foreground flex size-6 shrink-0 items-center justify-center rounded-md\">\n <Icon className=\"size-3.5\" />\n </span>\n );\n}\n\nexport function ToolCallCard(props: ToolCallCardProps) {\n const { variant, name, status, expanded, onToggle, durationText, className } = props;\n const VariantIcon = variantIcon[variant];\n\n return (\n <Collapsible\n data-slot=\"tool-call-card\"\n data-variant={variant}\n open={expanded}\n onOpenChange={onToggle}\n className={cn(\"aui-tool-call-card w-full rounded-lg border py-2\", className)}\n >\n <CollapsibleTrigger className=\"flex w-full items-center gap-2 px-3 text-left\">\n <IconChip Icon={VariantIcon} />\n {variant === \"tool\" && <span className=\"text-sm\">{name}</span>}\n {variant === \"sub-agent\" && (\n <span className=\"flex min-w-0 flex-col items-start\">\n <span className=\"text-muted-foreground text-[10px] font-semibold tracking-wide uppercase\">\n Sub-agent\n </span>\n <span className=\"truncate text-sm font-medium\">{props.agentName}</span>\n </span>\n )}\n {variant === \"mcp-listing\" && (\n <span className=\"truncate text-sm\">Listing tools · {props.serverName}</span>\n )}\n <span className=\"ml-auto flex shrink-0 items-center gap-2\">\n {durationText && (\n <span className=\"text-muted-foreground text-xs tabular-nums\">{durationText}</span>\n )}\n <StatusIcon status={status} />\n <ChevronDownIcon\n className={cn(\n \"size-4 shrink-0 transition-transform duration-200 ease-[cubic-bezier(0.32,0.72,0,1)]\",\n expanded ? \"rotate-0\" : \"-rotate-90\",\n )}\n />\n </span>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"px-3 pt-2\">\n {variant === \"tool\" && (\n <div className=\"flex flex-col gap-2\">\n {props.approvalSlot}\n {props.argsText && (\n <div>\n <p className=\"text-muted-foreground text-xs font-medium\">Request:</p>\n <pre className=\"bg-muted/50 text-foreground/90 mt-1 rounded-md p-2.5 text-xs break-words whitespace-pre-wrap\">\n {props.argsText}\n </pre>\n </div>\n )}\n {props.result !== undefined && (\n <div>\n <p className=\"text-muted-foreground text-xs font-medium\">Result:</p>\n <pre\n className={cn(\n \"bg-muted/50 mt-1 rounded-md p-2.5 text-xs break-words whitespace-pre-wrap\",\n props.isError ? \"text-destructive\" : \"text-foreground/90\",\n )}\n >\n {props.result}\n </pre>\n </div>\n )}\n </div>\n )}\n {variant === \"sub-agent\" && (\n <div className=\"flex flex-col gap-2\">\n <p className=\"text-muted-foreground line-clamp-2 text-sm\">{props.instruction}</p>\n <p className=\"text-muted-foreground text-[10px] font-medium tracking-wide uppercase\">\n Steps · {props.stepCount} steps\n </p>\n <div className=\"border-border/60 flex flex-col gap-2 border-l pl-3\">{props.children}</div>\n </div>\n )}\n {variant === \"mcp-listing\" && (\n <div className=\"flex flex-col gap-2\">\n <p className=\"text-muted-foreground text-sm\">{props.description}</p>\n <div>\n <p className=\"text-muted-foreground text-xs font-medium\">Request:</p>\n <pre className=\"bg-muted/50 text-foreground/90 mt-1 rounded-md p-2.5 text-xs break-words whitespace-pre-wrap\">\n {props.argsText}\n </pre>\n </div>\n <div>\n <p className=\"text-muted-foreground text-xs font-medium\">Result:</p>\n <pre className=\"bg-muted/50 text-foreground/90 mt-1 rounded-md p-2.5 text-xs break-words whitespace-pre-wrap\">\n {props.resultText}\n </pre>\n </div>\n </div>\n )}\n </CollapsibleContent>\n </Collapsible>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ToolCallCard: typeof ToolCallCard;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { ChevronDownIcon, LoaderIcon } from \"lucide-react\";\n\nimport { cn } from \"./lib/cn.js\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"./primitives/Collapsible.js\";\n\nexport type ToolGroupCardProps = {\n toolCallCount: number;\n expanded: boolean;\n active?: boolean;\n onToggle: () => void;\n children: ReactNode;\n className?: string;\n};\n\nexport function ToolGroupCard({\n toolCallCount,\n expanded,\n active = false,\n onToggle,\n children,\n className,\n}: ToolGroupCardProps) {\n const label = `${toolCallCount} tool ${toolCallCount === 1 ? \"call\" : \"calls\"}`;\n\n return (\n <Collapsible\n data-slot=\"tool-group-card\"\n open={expanded}\n onOpenChange={onToggle}\n className={cn(\"aui-tool-group-card group/tool-group w-full\", className)}\n >\n <CollapsibleTrigger className=\"text-muted-foreground hover:text-foreground flex origin-left items-center gap-2 py-1.5 text-sm transition-[color,scale] active:scale-[0.98]\">\n {active && <LoaderIcon className=\"size-3 shrink-0 animate-spin [animation-duration:0.6s]\" />}\n <span className=\"text-xs font-medium\">{label}</span>\n <ChevronDownIcon\n className={cn(\n \"size-3 shrink-0 transition-transform duration-200 ease-[cubic-bezier(0.32,0.72,0,1)]\",\n expanded ? \"rotate-0\" : \"-rotate-90\",\n )}\n />\n </CollapsibleTrigger>\n <CollapsibleContent className=\"mt-1 flex flex-col gap-1\">{children}</CollapsibleContent>\n </Collapsible>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ToolGroupCard: typeof ToolGroupCard;\n }\n}\n","import { cn } from \"./lib/cn.js\";\n\nexport type WelcomeScreenProps = {\n heading?: string;\n className?: string;\n};\n\nexport function WelcomeScreen({ heading = \"How can I help you today?\", className }: WelcomeScreenProps) {\n return (\n <div className={cn(\"aui-thread-welcome-root mb-6 flex flex-col items-center px-4 text-center\", className)}>\n <h1 className=\"aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both text-2xl font-semibold duration-200\">\n {heading}\n </h1>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n WelcomeScreen: typeof WelcomeScreen;\n }\n}\n","import { Avatar, AvatarFallback, AvatarImage } from \"../atoms/primitives/Avatar.js\";\nimport { Button } from \"../atoms/primitives/Button.js\";\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from \"../atoms/primitives/Collapsible.js\";\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n} from \"../atoms/primitives/Dialog.js\";\nimport { IconButton } from \"../atoms/primitives/IconButton.js\";\nimport { Skeleton } from \"../atoms/primitives/Skeleton.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"../atoms/primitives/Tooltip.js\";\nimport { BranchIndicator } from \"../atoms/BranchIndicator.js\";\nimport { CodeBlockHeader } from \"../atoms/CodeBlockHeader.js\";\nimport { Markdown } from \"../atoms/Markdown.js\";\nimport { OpenUIBlock } from \"../atoms/OpenUIBlock.js\";\nimport { SandboxArtifactList } from \"../atoms/SandboxArtifactList.js\";\nimport { MessageActionBar } from \"../atoms/MessageActionBar.js\";\nimport { UserMessageActionBar } from \"../atoms/UserMessageActionBar.js\";\nimport { MessageBubble } from \"../atoms/MessageBubble.js\";\nimport { MessageErrorBanner } from \"../atoms/MessageErrorBanner.js\";\nimport { MessageIndicator } from \"../atoms/MessageIndicator.js\";\nimport { ScrollToBottomButton } from \"../atoms/ScrollToBottomButton.js\";\nimport { MessageListSkeleton } from \"../atoms/Skeletons.js\";\nimport {\n MessageGroup,\n ThreadComposerAreaShell,\n ThreadRootShell,\n ThreadViewportShell,\n} from \"../atoms/ThreadShell.js\";\nimport { AskUserPrompt } from \"../atoms/AskUserPrompt.js\";\nimport { AttachmentCard } from \"../atoms/AttachmentCard.js\";\nimport { AttachmentPickerButton } from \"../atoms/AttachmentPickerButton.js\";\nimport { AttachmentPreviewDialog } from \"../atoms/AttachmentPreviewDialog.js\";\nimport { ComposerShell } from \"../atoms/ComposerShell.js\";\nimport { McpAuthPrompt } from \"../atoms/McpAuthPrompt.js\";\nimport { ReasoningCard } from \"../atoms/ReasoningCard.js\";\nimport { ToolApprovalBar } from \"../atoms/ToolApprovalBar.js\";\nimport { ThreadListRow } from \"../atoms/ThreadListRow.js\";\nimport {\n ThreadListEmptyState,\n ThreadListNewButton,\n ThreadListRowSkeleton,\n ThreadListShell,\n} from \"../atoms/ThreadListMisc.js\";\nimport { Toast, ToastStack } from \"../atoms/Toast.js\";\nimport { ToolCallCard } from \"../atoms/ToolCallCard.js\";\nimport { ToolGroupCard } from \"../atoms/ToolGroupCard.js\";\nimport { WelcomeScreen } from \"../atoms/WelcomeScreen.js\";\nimport type { AtomSlots } from \"./SlotsProvider.js\";\n\n/**\n * This SDK's default atom implementations, keyed by slot name. Populated\n * incrementally as atoms are added under `src/atoms/**`; each atom module\n * augments `AtomSlots` and this object gains the matching entry in the same\n * milestone.\n */\nexport const defaultSlots: AtomSlots = {\n Button,\n IconButton,\n Avatar,\n AvatarImage,\n AvatarFallback,\n Tooltip,\n TooltipProvider,\n TooltipTrigger,\n TooltipContent,\n Dialog,\n DialogTrigger,\n DialogPortal,\n DialogClose,\n DialogOverlay,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n Collapsible,\n CollapsibleTrigger,\n CollapsibleContent,\n Skeleton,\n Markdown,\n OpenUIBlock,\n SandboxArtifactList,\n CodeBlockHeader,\n MessageBubble,\n MessageErrorBanner,\n MessageActionBar,\n UserMessageActionBar,\n BranchIndicator,\n MessageIndicator,\n WelcomeScreen,\n MessageListSkeleton,\n ScrollToBottomButton,\n ThreadRootShell,\n ThreadViewportShell,\n ThreadComposerAreaShell,\n MessageGroup,\n ToolCallCard,\n ToolApprovalBar,\n ToolGroupCard,\n ReasoningCard,\n ComposerShell,\n AskUserPrompt,\n McpAuthPrompt,\n AttachmentCard,\n AttachmentPreviewDialog,\n AttachmentPickerButton,\n ThreadListRow,\n ThreadListNewButton,\n ThreadListRowSkeleton,\n ThreadListEmptyState,\n ThreadListShell,\n Toast,\n ToastStack,\n};\n","import { createContext, createElement, useContext, type ReactNode } from \"react\";\n\n/**\n * Semantic color roles. Atoms reference these instead of raw hex/HSL values so a\n * future design-system swap only has to repoint the token values, not the atoms.\n */\nexport type ColorToken =\n | \"background\"\n | \"foreground\"\n | \"muted\"\n | \"mutedForeground\"\n | \"border\"\n | \"primary\"\n | \"primaryForeground\"\n | \"destructive\"\n | \"destructiveForeground\"\n | \"accent\"\n | \"accentForeground\";\n\nexport type RadiusToken = \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\n\nexport type SpacingToken = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport type TypeRoleToken = \"body\" | \"bodySmall\" | \"label\" | \"heading\" | \"code\" | \"caption\";\n\nexport interface TypeRoleValue {\n fontSize: string;\n lineHeight: string;\n fontWeight: string | number;\n}\n\nexport interface DesignTokens {\n colors: Record<ColorToken, string>;\n radii: Record<RadiusToken, string>;\n spacing: Record<SpacingToken, string>;\n typography: Record<TypeRoleToken, TypeRoleValue>;\n}\n\n/**\n * Values reference the CSS custom properties already emitted by the shadcn/Tailwind\n * theme in the ported reference app, so default atoms render identically to today\n * without requiring every atom to be rewritten to consume tokens in this pass.\n */\nexport const defaultTokens: DesignTokens = {\n colors: {\n background: \"var(--background)\",\n foreground: \"var(--foreground)\",\n muted: \"var(--muted)\",\n mutedForeground: \"var(--muted-foreground)\",\n border: \"var(--border)\",\n primary: \"var(--primary)\",\n primaryForeground: \"var(--primary-foreground)\",\n destructive: \"var(--destructive)\",\n destructiveForeground: \"var(--destructive-foreground)\",\n accent: \"var(--accent)\",\n accentForeground: \"var(--accent-foreground)\",\n },\n radii: {\n none: \"0px\",\n sm: \"calc(var(--radius) - 4px)\",\n md: \"calc(var(--radius) - 2px)\",\n lg: \"var(--radius)\",\n full: \"9999px\",\n },\n spacing: {\n none: \"0px\",\n xs: \"0.25rem\",\n sm: \"0.5rem\",\n md: \"0.75rem\",\n lg: \"1rem\",\n xl: \"1.5rem\",\n },\n typography: {\n body: { fontSize: \"0.875rem\", lineHeight: \"1.5rem\", fontWeight: 400 },\n bodySmall: { fontSize: \"0.75rem\", lineHeight: \"1.25rem\", fontWeight: 400 },\n label: { fontSize: \"0.75rem\", lineHeight: \"1rem\", fontWeight: 500 },\n heading: { fontSize: \"1.25rem\", lineHeight: \"1.75rem\", fontWeight: 600 },\n code: { fontSize: \"0.8125rem\", lineHeight: \"1.25rem\", fontWeight: 400 },\n caption: { fontSize: \"0.6875rem\", lineHeight: \"1rem\", fontWeight: 400 },\n },\n};\n\nconst TokensContext = createContext<DesignTokens>(defaultTokens);\n\nexport function TokensProvider({\n tokens,\n children,\n}: {\n tokens: DesignTokens;\n children: ReactNode;\n}) {\n return createElement(TokensContext.Provider, { value: tokens }, children);\n}\n\n/** Atoms may call this for theme-driven values; it is not an assistant-ui/runtime hook. */\nexport function useTokens(): DesignTokens {\n return useContext(TokensContext);\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { ThreadPrimitive, useAuiState, type AssistantState } from \"@assistant-ui/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { ComposerBusyProvider } from \"../hooks/useComposerBusyState.js\";\nimport { AssistantMessageContainer } from \"./AssistantMessageContainer.js\";\nimport { UserEditComposerContainer } from \"./UserEditComposerContainer.js\";\nimport { UserMessageContainer } from \"./UserMessageContainer.js\";\n\n// Startup exposes a loading placeholder thread; treat it as a new chat so the\n// composer mounts centered. Loads after startup keep the docked layout.\nconst isNewChatView = (s: AssistantState) =>\n s.thread.messages.length === 0 && (!s.thread.isLoading || s.threads.isLoading);\n\nfunction ThreadMessage({ isEditing }: { isEditing: boolean }) {\n const role = useAuiState((s) => s.message.role);\n if (role === \"user\") {\n if (isEditing) {\n return <UserEditComposerContainer />;\n }\n return <UserMessageContainer />;\n }\n return <AssistantMessageContainer />;\n}\n\nexport type ThreadContainerProps = {\n /**\n * Rendered in the bottom composer area. Left undefined until\n * `ComposerContainer` exists (milestone 6); the public `<Thread/>` export\n * wires the two together once it does.\n */\n composer?: ReactNode;\n};\n\nexport function ThreadContainer({ composer }: ThreadContainerProps) {\n const ThreadRootShell = useSlot(\"ThreadRootShell\");\n const ThreadViewportShell = useSlot(\"ThreadViewportShell\");\n const ThreadComposerAreaShell = useSlot(\"ThreadComposerAreaShell\");\n const MessageGroup = useSlot(\"MessageGroup\");\n const WelcomeScreen = useSlot(\"WelcomeScreen\");\n const MessageListSkeleton = useSlot(\"MessageListSkeleton\");\n const ScrollToBottomButton = useSlot(\"ScrollToBottomButton\");\n\n const isEmpty = useAuiState(isNewChatView);\n const isLoading = useAuiState((s) => s.thread.isLoading);\n\n return (\n <ComposerBusyProvider>\n <ThreadPrimitive.Root asChild>\n <ThreadRootShell>\n <ThreadPrimitive.Viewport asChild turnAnchor=\"top\" autoScroll>\n <ThreadViewportShell isEmpty={isEmpty}>\n {isEmpty && <WelcomeScreen />}\n {isLoading ? (\n <MessageListSkeleton />\n ) : (\n <MessageGroup>\n <ThreadPrimitive.Messages>\n {({ message }) => (\n <ThreadMessage\n isEditing={\n message.role === \"user\" &&\n message.composer.isEditing\n }\n />\n )}\n </ThreadPrimitive.Messages>\n </MessageGroup>\n )}\n </ThreadViewportShell>\n </ThreadPrimitive.Viewport>\n\n {!isLoading && (\n <ThreadComposerAreaShell isEmpty={isEmpty}>\n <ThreadPrimitive.ScrollToBottom asChild>\n <ScrollToBottomButton />\n </ThreadPrimitive.ScrollToBottom>\n {composer}\n </ThreadComposerAreaShell>\n )}\n </ThreadRootShell>\n </ThreadPrimitive.Root>\n </ComposerBusyProvider>\n );\n}\n","\"use client\";\n\nimport { useThreadIsRunning } from \"@assistant-ui/core/react\";\nimport { createContext, createElement, useCallback, useContext, useEffect, useState, type ReactNode } from \"react\";\n\nexport type ComposerBusyState = {\n /** True while submitting or while the turn stream is active. */\n isBusy: boolean;\n isRunning: boolean;\n isSubmitting: boolean;\n send: (sendFn: () => void | Promise<void>) => void;\n resetBusy: () => void;\n};\n\nconst ComposerBusyContext = createContext<ComposerBusyState | null>(null);\n\nfunction useComposerBusyStateValue(): ComposerBusyState {\n const isRunning = useThreadIsRunning();\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n useEffect(() => {\n if (!isRunning) {\n setIsSubmitting(false);\n }\n }, [isRunning]);\n\n const isBusy = isRunning || isSubmitting;\n\n const resetBusy = useCallback(() => {\n setIsSubmitting(false);\n }, []);\n\n const send = useCallback((sendFn: () => void | Promise<void>) => {\n setIsSubmitting(true);\n try {\n const result = sendFn();\n if (result != null && typeof result.then === \"function\") {\n void result.catch(() => {\n setIsSubmitting(false);\n });\n }\n } catch {\n setIsSubmitting(false);\n }\n }, []);\n\n return { isBusy, isRunning, isSubmitting, send, resetBusy };\n}\n\nexport function ComposerBusyProvider({ children }: { children: ReactNode }) {\n const value = useComposerBusyStateValue();\n return createElement(ComposerBusyContext.Provider, { value }, children);\n}\n\n/**\n * Optimistic composer busy state shared across the thread. `useThreadIsRunning()`\n * only becomes true once the turn stream starts; this hook flips to busy\n * immediately on submit so the send button shows loading before session setup /\n * turn API work finishes.\n *\n * Must be used within `<ComposerBusyProvider>` (wired by default in `<Thread />`).\n */\nexport function useComposerBusyState(): ComposerBusyState {\n const value = useContext(ComposerBusyContext);\n if (value == null) {\n throw new Error(\"useComposerBusyState must be used within ComposerBusyProvider\");\n }\n return value;\n}\n","\"use client\";\n\nimport { groupPartByType, MessagePrimitive, useAui, type EnrichedPartState } from \"@assistant-ui/react\";\nimport {\n useActionBarCopy,\n useMessageBranching,\n useMessageError,\n useThreadIsRunning,\n} from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { AssistantTextContainer } from \"./AssistantTextContainer.js\";\nimport { MessageImageContainer } from \"./MessageImageContainer.js\";\nimport { ReasoningContainer } from \"./ReasoningContainer.js\";\nimport { ToolCallContainer } from \"./ToolCallContainer.js\";\nimport { ToolGroupContainer, type ThreadGroupPart } from \"./ToolGroupContainer.js\";\n\n/**\n * Dispatches a leaf message part to its renderer. \"data\" parts (generative\n * UI) are out of scope for this SDK entirely.\n */\nfunction AssistantLeafPartContainer({ part }: { part: EnrichedPartState }) {\n switch (part.type) {\n case \"text\":\n case \"reasoning\":\n return <AssistantTextContainer />;\n case \"image\":\n return <MessageImageContainer />;\n case \"tool-call\":\n return <ToolCallContainer {...part} />;\n default:\n return null;\n }\n}\n\nfunction downloadMarkdown(text: string) {\n if (typeof document === \"undefined\") return;\n const blob = new Blob([text], { type: \"text/markdown\" });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = \"message.md\";\n anchor.click();\n URL.revokeObjectURL(url);\n}\n\nexport function AssistantMessageContainer() {\n const MessageBubble = useSlot(\"MessageBubble\");\n const MessageIndicator = useSlot(\"MessageIndicator\");\n const MessageErrorBanner = useSlot(\"MessageErrorBanner\");\n const MessageActionBar = useSlot(\"MessageActionBar\");\n const BranchIndicator = useSlot(\"BranchIndicator\");\n\n const aui = useAui();\n const isRunning = useThreadIsRunning();\n const error = useMessageError();\n const { copy, isCopied } = useActionBarCopy({\n copyToClipboard: (text) => navigator.clipboard.writeText(text),\n });\n const { branchNumber, branchCount, goToPrev, goToNext } = useMessageBranching();\n\n return (\n <MessagePrimitive.Root data-role=\"assistant\">\n <MessageBubble\n variant=\"assistant\"\n error={error !== undefined ? <MessageErrorBanner message={String(error)} /> : undefined}\n branchIndicator={\n <BranchIndicator\n index={branchNumber}\n count={branchCount}\n onPrevious={goToPrev}\n onNext={goToNext}\n />\n }\n actionBar={\n !isRunning ? (\n <MessageActionBar\n isCopied={isCopied}\n onCopy={copy}\n onExportMarkdown={() => downloadMarkdown(aui.message().getCopyText())}\n />\n ) : undefined\n }\n >\n <MessagePrimitive.GroupedParts\n groupBy={groupPartByType({\n reasoning: [\"group-chainOfThought\", \"group-reasoning\"],\n \"tool-call\": [\"group-chainOfThought\", \"group-tool\"],\n \"standalone-tool-call\": [],\n })}\n >\n {({ part, children }) => {\n switch (part.type) {\n case \"group-chainOfThought\":\n return (\n <div data-slot=\"aui_chain-of-thought\" className=\"flex flex-col gap-3\">\n {children}\n </div>\n );\n case \"group-tool\":\n return (\n <ToolGroupContainer group={part as ThreadGroupPart}>\n {children}\n </ToolGroupContainer>\n );\n case \"group-reasoning\":\n return (\n <ReasoningContainer group={part as ThreadGroupPart}>\n {children}\n </ReasoningContainer>\n );\n case \"text\":\n case \"reasoning\":\n case \"tool-call\":\n case \"image\":\n case \"data\":\n return <AssistantLeafPartContainer part={part} />;\n case \"indicator\":\n return <MessageIndicator />;\n default:\n return null;\n }\n }}\n </MessagePrimitive.GroupedParts>\n </MessageBubble>\n </MessagePrimitive.Root>\n );\n}\n","\"use client\";\n\nimport { useCallback } from \"react\";\nimport { useAuiState } from \"@assistant-ui/react\";\nimport { useTrueFoundryDownloadSandboxFile } from \"@truefoundry/assistant-ui-runtime\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { useErrorToasterOptional } from \"./ErrorToasterContainer.js\";\n\nfunction filenameFromPath(path: string): string {\n return path.split(\"/\").pop() || \"download\";\n}\n\nfunction triggerBrowserDownload(blob: Blob, filename: string) {\n if (typeof document === \"undefined\") return;\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = filename;\n anchor.click();\n URL.revokeObjectURL(url);\n}\n\nexport function AssistantTextContainer() {\n const Markdown = useSlot(\"Markdown\");\n const downloadSandboxFile = useTrueFoundryDownloadSandboxFile();\n const errorToaster = useErrorToasterOptional();\n const text = useAuiState((s) =>\n s.part.type === \"text\" || s.part.type === \"reasoning\" ? s.part.text : \"\",\n );\n const isStreaming = useAuiState((s) => {\n if (s.message.status?.type !== \"running\") return false;\n const lastIndex = s.message.parts.length - 1;\n if (lastIndex < 0) return false;\n if (s.part.type !== \"text\" && s.part.type !== \"reasoning\") return false;\n return s.message.parts[lastIndex] === s.part;\n });\n\n const handleDownloadArtifact = useCallback(\n (path: string) =>\n downloadSandboxFile(path)\n .then((blob) => triggerBrowserDownload(blob, filenameFromPath(path)))\n .catch((error) => {\n if (errorToaster != null) {\n errorToaster.showError(error);\n } else {\n console.error(\"Failed to download sandbox artifact\", error);\n }\n }),\n [downloadSandboxFile, errorToaster],\n );\n\n return <Markdown content={text} isStreaming={isStreaming} onDownloadArtifact={handleDownloadArtifact} />;\n}\n","\"use client\";\n\nimport { createContext, useCallback, useContext, useMemo, useState, type ReactNode } from \"react\";\nimport { TrueFoundryGatewayError } from \"truefoundry-gateway-sdk\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\ntype ErrorToastContent = { title: string; description: string };\n\ntype ErrorToasterContextValue = { showError: (error: unknown) => void };\n\nconst ErrorToasterContext = createContext<ErrorToasterContextValue | null>(null);\n\nfunction formatErrorBody(body: unknown): string | undefined {\n if (body == null) return undefined;\n if (typeof body === \"string\") return body;\n try {\n return JSON.stringify(body, null, 2);\n } catch {\n return String(body);\n }\n}\n\nfunction normalizeError(error: unknown): ErrorToastContent {\n if (error instanceof TrueFoundryGatewayError) {\n const statusCode = error.statusCode;\n const title = statusCode != null ? `Request failed (${statusCode})` : \"Request failed\";\n const description = formatErrorBody(error.body) ?? (error.message || \"The gateway returned an error.\");\n return { title, description };\n }\n\n if (error instanceof Error) {\n return { title: \"Something went wrong\", description: error.message || \"An unexpected error occurred.\" };\n }\n\n return { title: \"Something went wrong\", description: String(error) };\n}\n\nexport function ErrorToasterProvider({ children }: { children: ReactNode }) {\n const ToastStack = useSlot(\"ToastStack\");\n const Toast = useSlot(\"Toast\");\n\n const [toast, setToast] = useState<ErrorToastContent | null>(null);\n const [open, setOpen] = useState(false);\n\n const showError = useCallback((error: unknown) => {\n setToast(normalizeError(error));\n setOpen(true);\n }, []);\n\n const value = useMemo(() => ({ showError }), [showError]);\n\n return (\n <ErrorToasterContext.Provider value={value}>\n <ToastStack>\n {children}\n {toast != null && (\n <Toast title={toast.title} description={toast.description} open={open} onOpenChange={setOpen} />\n )}\n </ToastStack>\n </ErrorToasterContext.Provider>\n );\n}\n\nexport function useErrorToaster(): ErrorToasterContextValue {\n const context = useContext(ErrorToasterContext);\n if (context == null) {\n throw new Error(\"useErrorToaster must be used within ErrorToasterProvider\");\n }\n return context;\n}\n\n/** Same as `useErrorToaster`, but returns `null` instead of throwing outside `ErrorToasterProvider`. */\nexport function useErrorToasterOptional(): ErrorToasterContextValue | null {\n return useContext(ErrorToasterContext);\n}\n","\"use client\";\n\nimport { useAuiState } from \"@assistant-ui/react\";\n\nimport {\n AttachmentCard,\n USER_MESSAGE_ATTACHMENT_PREVIEW_REM,\n} from \"../atoms/AttachmentCard.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport function MessageImageContainer() {\n const AttachmentPreviewDialog = useSlot(\"AttachmentPreviewDialog\");\n const image = useAuiState((s) => (s.part.type === \"image\" ? s.part.image : \"\"));\n const filename = useAuiState((s) =>\n s.part.type === \"image\" ? s.part.filename : undefined,\n );\n\n if (!image) {\n return null;\n }\n\n const card = (\n <AttachmentCard\n name={filename ?? \"image\"}\n previewSrc={image}\n isImage\n size=\"preview\"\n previewRem={USER_MESSAGE_ATTACHMENT_PREVIEW_REM}\n />\n );\n\n return (\n <AttachmentPreviewDialog previewSrc={image}>\n <div className=\"aui-message-image\">{card}</div>\n </AttachmentPreviewDialog>\n );\n}\n","\"use client\";\n\nimport { useState, type PropsWithChildren } from \"react\";\nimport { useAuiState } from \"@assistant-ui/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport type { ThreadGroupPart } from \"./ToolGroupContainer.js\";\n\nexport function ReasoningContainer({ group, children }: PropsWithChildren<{ group: ThreadGroupPart }>) {\n const ReasoningCard = useSlot(\"ReasoningCard\");\n\n const streaming = useAuiState((s) => {\n if (s.message.status?.type !== \"running\") return false;\n const lastIndex = s.message.parts.length - 1;\n if (lastIndex < 0) return false;\n if (s.message.parts[lastIndex]?.type !== \"reasoning\") return false;\n return lastIndex >= group.indices[0]! && lastIndex <= group.indices[group.indices.length - 1]!;\n });\n\n const [expanded, setExpanded] = useState(streaming);\n const [prevStreaming, setPrevStreaming] = useState(streaming);\n if (streaming !== prevStreaming) {\n setPrevStreaming(streaming);\n if (streaming) setExpanded(true);\n }\n\n return (\n <ReasoningCard streaming={streaming} expanded={expanded} onToggle={() => setExpanded((prev) => !prev)}>\n {children}\n </ReasoningCard>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport {\n MessagePrimitive,\n useToolCallElapsed,\n type ToolApprovalOption as AuiToolApprovalOption,\n type ToolApprovalResponse,\n type ToolCallMessagePartComponent,\n type ToolCallMessagePartProps,\n} from \"@assistant-ui/react\";\nimport { useTrueFoundryRespondToToolApproval } from \"@truefoundry/assistant-ui-runtime\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport type { ToolApprovalOption } from \"../atoms/ToolApprovalBar.js\";\nimport type { ToolCallStatus } from \"../atoms/ToolCallCard.js\";\nimport { NestedApprovalBridgeContext, useNestedApprovalBridge } from \"./nestedApprovalBridge.js\";\n\nconst SUB_AGENT_TOOL_NAME = \"create_sub_agent\";\n\nconst APPROVAL_OPTION_DEFAULT_LABELS: Record<string, string> = {\n \"allow-once\": \"Allow\",\n \"allow-always\": \"Always allow\",\n \"reject-once\": \"Deny\",\n \"reject-always\": \"Always deny\",\n};\n\nconst isAllowKind = (kind: string) => kind === \"allow-once\" || kind === \"allow-always\";\n\nfunction hasPendingToolApproval(approval: { approved?: boolean; resolution?: \"cancelled\" | \"expired\" } | undefined) {\n return approval != null && approval.approved === undefined && approval.resolution === undefined;\n}\n\nfunction buildApprovalOptions(options: readonly AuiToolApprovalOption[] | undefined): ToolApprovalOption[] {\n const declared = options?.filter((o) => Object.hasOwn(APPROVAL_OPTION_DEFAULT_LABELS, o.kind));\n if (declared && declared.length > 0) {\n const allow = declared.filter((o) => isAllowKind(o.kind));\n const reject = declared.filter((o) => !isAllowKind(o.kind));\n const mapped: ToolApprovalOption[] = [...allow, ...reject].map((o) => ({\n id: o.id,\n label: o.label ?? APPROVAL_OPTION_DEFAULT_LABELS[o.kind] ?? o.id,\n isAllow: isAllowKind(o.kind),\n grants: o.grants,\n confirm:\n o.confirm != null ? (typeof o.confirm === \"object\" ? o.confirm : {}) : undefined,\n }));\n if (reject.length === 0) {\n mapped.push({ id: \"__deny\", label: \"Deny\", isAllow: false });\n }\n return mapped;\n }\n return [\n { id: \"__allow\", label: \"Allow\", isAllow: true },\n { id: \"__deny\", label: \"Deny\", isAllow: false },\n ];\n}\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) return \"<1s\";\n const seconds = ms / 1000;\n if (seconds < 10) return `${(Math.floor(seconds * 10) / 10).toFixed(1)}s`;\n if (seconds < 60) return `${Math.floor(seconds)}s`;\n return `${Math.floor(seconds / 60)}m ${Math.floor(seconds % 60)}s`;\n}\n\nfunction toStatus(statusType: string | undefined): ToolCallStatus {\n if (statusType === \"complete\") return \"success\";\n if (statusType === \"incomplete\") return \"error\";\n return \"running\";\n}\n\nfunction ToolApprovalSlot({ part }: { part: ToolCallMessagePartProps }) {\n const ToolApprovalBar = useSlot(\"ToolApprovalBar\");\n const nestedBridge = useNestedApprovalBridge();\n\n const respond = (response: ToolApprovalResponse) => {\n if (nestedBridge) {\n nestedBridge(response);\n return;\n }\n part.respondToApproval(response);\n };\n\n const onSelectOption = (optionId: string) => {\n if (optionId === \"__allow\") return respond({ approved: true });\n if (optionId === \"__deny\") return respond({ approved: false });\n return respond({ optionId });\n };\n\n return <ToolApprovalBar options={buildApprovalOptions(part.approval?.options)} onSelectOption={onSelectOption} />;\n}\n\nexport const ToolCallContainer: ToolCallMessagePartComponent = (part) => {\n const ToolCallCard = useSlot(\"ToolCallCard\");\n const respondToNestedApproval = useTrueFoundryRespondToToolApproval();\n const elapsedMs = useToolCallElapsed();\n const isRequiresAction = part.status?.type === \"requires-action\";\n const [expanded, setExpanded] = useState(isRequiresAction);\n const [prevRequiresAction, setPrevRequiresAction] = useState(isRequiresAction);\n if (isRequiresAction !== prevRequiresAction) {\n setPrevRequiresAction(isRequiresAction);\n if (isRequiresAction) setExpanded(true);\n }\n\n const showApproval = isRequiresAction && hasPendingToolApproval(part.approval);\n const isSubAgent = part.toolName === SUB_AGENT_TOOL_NAME;\n\n const durationText = elapsedMs === undefined ? undefined : formatDuration(elapsedMs);\n const status = toStatus(part.status?.type);\n\n if (isSubAgent) {\n const firstNested = part.messages?.[0];\n const subAgent = (firstNested?.metadata?.custom as { subAgent?: { title?: string; name?: string; input?: string } } | undefined)\n ?.subAgent;\n const agentName = subAgent?.title ?? subAgent?.name ?? part.toolName;\n const instruction = subAgent?.input ?? \"\";\n const stepCount = part.messages?.length ?? 0;\n\n const bridge = (response: ToolApprovalResponse) => {\n if (part.approval == null) return;\n const approved = \"approved\" in response ? response.approved : undefined;\n if (approved === undefined) return;\n respondToNestedApproval({ approvalId: part.approval.id, approved });\n };\n\n return (\n <ToolCallCard\n variant=\"sub-agent\"\n name={part.toolName}\n status={status}\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n durationText={durationText}\n agentName={agentName}\n instruction={instruction}\n stepCount={stepCount}\n >\n <NestedApprovalBridgeContext.Provider value={bridge}>\n <MessagePrimitive.Root data-role=\"assistant\">\n <MessagePrimitive.Parts components={{ tools: { Fallback: ToolCallContainer } }} />\n </MessagePrimitive.Root>\n </NestedApprovalBridgeContext.Provider>\n </ToolCallCard>\n );\n }\n\n return (\n <ToolCallCard\n variant=\"tool\"\n name={part.toolName}\n status={status}\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n durationText={durationText}\n argsText={part.argsText}\n result={\n part.result === undefined\n ? undefined\n : typeof part.result === \"string\"\n ? part.result\n : JSON.stringify(part.result, null, 2)\n }\n isError={part.isError}\n approvalSlot={showApproval ? <ToolApprovalSlot part={part} /> : undefined}\n />\n );\n};\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { ToolApprovalResponse } from \"@assistant-ui/react\";\n\n/**\n * Sub-agent tool calls render inside a read-only nested thread context\n * (`MessagePartPrimitive.Messages`), so the standard `respondToApproval` prop\n * on their parts doesn't route back to the gateway. `ToolCallContainer` uses\n * this bridge instead when rendering nested calls, translating the response\n * through `useTrueFoundryRespondToToolApproval()` -- mirrors the reference's\n * `nestedToolCallMessageComponents` override.\n */\nexport const NestedApprovalBridgeContext = createContext<((response: ToolApprovalResponse) => void) | null>(\n null,\n);\n\nexport function useNestedApprovalBridge(): ((response: ToolApprovalResponse) => void) | null {\n return useContext(NestedApprovalBridgeContext);\n}\n","\"use client\";\n\nimport { useState, type PropsWithChildren } from \"react\";\nimport type { MessagePrimitive } from \"@assistant-ui/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport type ThreadGroupPart = MessagePrimitive.GroupedParts.GroupPart;\n\nexport function ToolGroupContainer({ group, children }: PropsWithChildren<{ group: ThreadGroupPart }>) {\n const ToolGroupCard = useSlot(\"ToolGroupCard\");\n const [expanded, setExpanded] = useState(true);\n\n return (\n <ToolGroupCard\n toolCallCount={group.indices.length}\n active={group.status.type === \"running\"}\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n >\n {children}\n </ToolGroupCard>\n );\n}\n","\"use client\";\n\nimport {\n ComposerPrimitive,\n MessagePrimitive,\n useAuiState,\n} from \"@assistant-ui/react\";\nimport { useThreadIsRunning } from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { MessageAttachmentsContainer } from \"./AttachmentsContainer.js\";\nimport { cn } from \"../atoms/lib/cn.js\";\n\nfunction ReadOnlyMessageAttachments() {\n const hasAttachments = useAuiState(\n (s) => (s.message.attachments?.length ?? 0) > 0,\n );\n if (!hasAttachments) {\n return null;\n }\n return (\n <div className=\"pointer-events-none opacity-90\">\n <MessageAttachmentsContainer />\n </div>\n );\n}\n\nexport function UserEditComposerContainer() {\n const Button = useSlot(\"Button\");\n const isRunning = useThreadIsRunning();\n\n return (\n <MessagePrimitive.Root data-role=\"user\">\n <div\n data-slot=\"aui_user-edit-composer-root\"\n className=\"fade-in slide-in-from-bottom-1 animate-in grid auto-rows-auto grid-cols-[minmax(72px,1fr)_auto] content-start gap-y-2 px-2 duration-150 [&:where(>*)]:col-start-2\"\n >\n <ReadOnlyMessageAttachments />\n <ComposerPrimitive.Root asChild>\n <div className=\"aui-user-edit-composer col-start-2 min-w-0\">\n <div className=\"ring-primary/60 bg-muted rounded-xl px-4 py-3 ring-2\">\n <ComposerPrimitive.Input\n disabled={isRunning}\n className=\"placeholder:text-muted-foreground/80 max-h-32 min-h-10 w-full resize-none bg-transparent text-base outline-none\"\n />\n <div className=\"mt-3 flex items-end justify-between gap-3\">\n <p className=\"text-muted-foreground text-xs\">\n <kbd className=\"bg-background/60 rounded border px-1 py-0.5 font-sans text-[10px]\">\n Enter\n </kbd>{\" \"}\n to save{\" \"}\n <kbd className=\"bg-background/60 rounded border px-1 py-0.5 font-sans text-[10px]\">\n Esc\n </kbd>{\" \"}\n to cancel\n </p>\n <div className=\"flex items-center gap-2\">\n <ComposerPrimitive.Cancel asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"text-muted-foreground h-8 px-2\"\n >\n Cancel\n </Button>\n </ComposerPrimitive.Cancel>\n <ComposerPrimitive.Send asChild>\n <Button\n type=\"button\"\n size=\"sm\"\n className={cn(\"h-8 rounded-lg px-3\")}\n disabled={isRunning}\n >\n Send\n </Button>\n </ComposerPrimitive.Send>\n </div>\n </div>\n </div>\n </div>\n </ComposerPrimitive.Root>\n </div>\n </MessagePrimitive.Root>\n );\n}\n","\"use client\";\n\nimport { ComposerPrimitive, MessagePrimitive, useAui, useAuiState } from \"@assistant-ui/react\";\n\nimport { USER_MESSAGE_ATTACHMENT_PREVIEW_REM } from \"../atoms/AttachmentCard.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { isImageAttachment, useAttachmentPreviewSrc } from \"./useAttachmentPreviewSrc.js\";\n\nfunction ComposerAttachmentItem() {\n const AttachmentCard = useSlot(\"AttachmentCard\");\n const AttachmentPreviewDialog = useSlot(\"AttachmentPreviewDialog\");\n const aui = useAui();\n const name = useAuiState((s) => s.attachment.name);\n const contentType = useAuiState((s) => s.attachment.contentType);\n const type = useAuiState((s) => s.attachment.type);\n const isImage = isImageAttachment(type, contentType);\n const previewSrc = useAttachmentPreviewSrc();\n\n return (\n <AttachmentPreviewDialog previewSrc={previewSrc}>\n <AttachmentCard\n name={name}\n contentType={contentType}\n previewSrc={previewSrc}\n isImage={isImage}\n size=\"chip\"\n onRemove={() => void aui.attachment().remove()}\n />\n </AttachmentPreviewDialog>\n );\n}\n\nfunction MessageAttachmentItem() {\n const AttachmentCard = useSlot(\"AttachmentCard\");\n const AttachmentPreviewDialog = useSlot(\"AttachmentPreviewDialog\");\n const name = useAuiState((s) => s.attachment.name);\n const contentType = useAuiState((s) => s.attachment.contentType);\n const type = useAuiState((s) => s.attachment.type);\n const isImage = isImageAttachment(type, contentType);\n const previewSrc = useAttachmentPreviewSrc();\n\n const card = (\n <AttachmentCard\n name={name}\n contentType={contentType}\n previewSrc={previewSrc}\n isImage={isImage}\n size={isImage ? \"preview\" : \"chip\"}\n previewRem={USER_MESSAGE_ATTACHMENT_PREVIEW_REM}\n />\n );\n\n if (isImage && previewSrc) {\n return <AttachmentPreviewDialog previewSrc={previewSrc}>{card}</AttachmentPreviewDialog>;\n }\n\n return card;\n}\n\nexport function ComposerAttachmentsContainer() {\n return (\n <div className=\"aui-composer-attachments flex w-full flex-row flex-wrap items-center gap-2 empty:hidden\">\n <ComposerPrimitive.Attachments>{() => <ComposerAttachmentItem />}</ComposerPrimitive.Attachments>\n </div>\n );\n}\n\nexport function MessageAttachmentsContainer() {\n return (\n <div className=\"aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2\">\n <MessagePrimitive.Attachments>{() => <MessageAttachmentItem />}</MessagePrimitive.Attachments>\n </div>\n );\n}\n\nexport function ComposerAttachmentPickerContainer() {\n const AttachmentPickerButton = useSlot(\"AttachmentPickerButton\");\n return (\n <ComposerPrimitive.AddAttachment asChild>\n <AttachmentPickerButton />\n </ComposerPrimitive.AddAttachment>\n );\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useAuiState } from \"@assistant-ui/react\";\n\nexport function isImageAttachment(type: string, contentType?: string): boolean {\n return type === \"image\" || (contentType?.startsWith(\"image/\") ?? false);\n}\n\nfunction useFileObjectUrl(file: File | undefined): string | undefined {\n const [src, setSrc] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!file) {\n setSrc(undefined);\n return;\n }\n const objectUrl = URL.createObjectURL(file);\n setSrc(objectUrl);\n return () => URL.revokeObjectURL(objectUrl);\n }, [file]);\n\n return src;\n}\n\n/** Preview URL for staged composer files (object URL) or sent message attachments (data URI). */\nexport function useAttachmentPreviewSrc(): string | undefined {\n const type = useAuiState((s) => s.attachment.type);\n const contentType = useAuiState((s) => s.attachment.contentType);\n const file = useAuiState((s) => (\"file\" in s.attachment ? s.attachment.file : undefined));\n const contentSrc = useAuiState((s) => {\n if (!isImageAttachment(s.attachment.type, s.attachment.contentType)) return undefined;\n const imagePart = s.attachment.content?.find((part) => part.type === \"image\");\n if (imagePart?.type === \"image\" && imagePart.image) return imagePart.image;\n return undefined;\n });\n\n const image = isImageAttachment(type, contentType);\n const fileSrc = useFileObjectUrl(image ? file : undefined);\n if (!image) return undefined;\n return fileSrc ?? contentSrc;\n}\n","\"use client\";\n\nimport { MessagePrimitive } from \"@assistant-ui/react\";\nimport { useThreadIsRunning } from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { MessageAttachmentsContainer } from \"./AttachmentsContainer.js\";\nimport { AssistantTextContainer } from \"./AssistantTextContainer.js\";\n\nexport function UserMessageContainer() {\n const MessageBubble = useSlot(\"MessageBubble\");\n const UserMessageActionBar = useSlot(\"UserMessageActionBar\");\n const isRunning = useThreadIsRunning();\n\n return (\n <MessagePrimitive.Root data-role=\"user\">\n <MessageBubble\n variant=\"user\"\n attachments={<MessageAttachmentsContainer />}\n actionBar={!isRunning ? <UserMessageActionBar /> : undefined}\n >\n <MessagePrimitive.Parts components={{ Text: AssistantTextContainer }} />\n </MessageBubble>\n </MessagePrimitive.Root>\n );\n}\n","\"use client\";\n\nimport { useRef } from \"react\";\nimport { useAui, useAuiState } from \"@assistant-ui/react\";\nimport { useTrueFoundryCancel, useTrueFoundryToolResponses } from \"@truefoundry/assistant-ui-runtime\";\n\nimport { useComposerBusyState } from \"../hooks/useComposerBusyState.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { ComposerAttachmentsContainer } from \"./AttachmentsContainer.js\";\nimport { AskUserContainer } from \"./AskUserContainer.js\";\nimport { McpAuthContainer } from \"./McpAuthContainer.js\";\n\nconst threadHasPendingMcpAuth = (s: { thread: { messages: readonly { role: string; status?: { type: string }; metadata?: { custom?: unknown } }[] } }) => {\n const messages = s.thread.messages;\n const last = messages[messages.length - 1];\n if (last?.role !== \"assistant\") return false;\n if (last.status?.type !== \"requires-action\") return false;\n return (last.metadata?.custom as { pendingMcpAuth?: boolean } | undefined)?.pendingMcpAuth === true;\n};\n\nexport function ComposerContainer() {\n const ComposerShell = useSlot(\"ComposerShell\");\n const aui = useAui();\n const text = useAuiState((s) => s.composer.text);\n const { isBusy, send, resetBusy } = useComposerBusyState();\n const mcpPending = useAuiState(threadHasPendingMcpAuth);\n const { pending: toolResponsesPending } = useTrueFoundryToolResponses();\n const cancel = useTrueFoundryCancel();\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n if (mcpPending) {\n return <McpAuthContainer />;\n }\n if (toolResponsesPending.length > 0) {\n return <AskUserContainer />;\n }\n\n return (\n <>\n <input\n ref={fileInputRef}\n type=\"file\"\n hidden\n onChange={(event) => {\n const file = event.target.files?.[0];\n if (file) void aui.composer().addAttachment(file);\n event.target.value = \"\";\n }}\n />\n <ComposerShell\n attachments={<ComposerAttachmentsContainer />}\n value={text}\n placeholder=\"Ask anything... (Shift+Enter for new line)\"\n disabled={isBusy}\n isRunning={isBusy}\n onValueChange={(value) => aui.composer().setText(value)}\n onSubmit={() => send(() => aui.composer().send())}\n onCancel={() => {\n resetBusy();\n void cancel();\n }}\n onAttach={() => fileInputRef.current?.click()}\n />\n </>\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport { useTrueFoundryToolResponses } from \"@truefoundry/assistant-ui-runtime\";\nimport { useThreadIsRunning } from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport type { AskUserOption } from \"../atoms/AskUserPrompt.js\";\n\nconst OTHER_OPTION_ID = \"__other\";\n\nexport function AskUserContainer() {\n const AskUserPrompt = useSlot(\"AskUserPrompt\");\n const { pending, respond } = useTrueFoundryToolResponses();\n const isRunning = useThreadIsRunning();\n const [selectedOptionId, setSelectedOptionId] = useState<string | undefined>(undefined);\n const [otherValue, setOtherValue] = useState(\"\");\n\n const item = pending[0];\n if (item == null) return null;\n\n const options: AskUserOption[] = (item.options ?? []).map((option) => ({ id: option, label: option }));\n const allowOther = options.length === 0;\n\n const onSubmit = () => {\n const content =\n selectedOptionId != null && selectedOptionId !== OTHER_OPTION_ID\n ? (options.find((o) => o.id === selectedOptionId)?.label ?? \"\")\n : otherValue.trim();\n if (!content) return;\n respond({ toolCallId: item.toolCallId, content });\n setSelectedOptionId(undefined);\n setOtherValue(\"\");\n };\n\n return (\n <AskUserPrompt\n question={item.question ?? \"Answer required\"}\n options={options}\n allowOther={allowOther}\n selectedOptionId={selectedOptionId}\n otherValue={otherValue}\n disabled={isRunning}\n onSelectOption={setSelectedOptionId}\n onOtherValueChange={setOtherValue}\n onSubmit={onSubmit}\n />\n );\n}\n","\"use client\";\n\nimport { useTrueFoundryMcpAuth } from \"@truefoundry/assistant-ui-runtime\";\nimport { useThreadIsRunning } from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport function McpAuthContainer() {\n const McpAuthPrompt = useSlot(\"McpAuthPrompt\");\n const { pending, resume } = useTrueFoundryMcpAuth();\n const isRunning = useThreadIsRunning();\n\n if (!pending) return null;\n\n return (\n <McpAuthPrompt\n servers={pending.mcpServers}\n disabled={isRunning}\n onContinue={() => void resume()}\n />\n );\n}\n","\"use client\";\n\nimport { useAui, useAuiState } from \"@assistant-ui/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\n/**\n * Simplified relative to the reference: renders threads in a single flat list\n * rather than grouping them by Today/Yesterday/Earlier. Archive/Delete are\n * wired but no-op against the current thread-list adapter (documented in the\n * runtime README's unsupported-features table).\n */\nexport function ThreadListContainer() {\n const ThreadListShell = useSlot(\"ThreadListShell\");\n const ThreadListNewButton = useSlot(\"ThreadListNewButton\");\n const ThreadListRow = useSlot(\"ThreadListRow\");\n const ThreadListRowSkeleton = useSlot(\"ThreadListRowSkeleton\");\n const ThreadListEmptyState = useSlot(\"ThreadListEmptyState\");\n const Button = useSlot(\"Button\");\n\n const aui = useAui();\n const isLoading = useAuiState((s) => s.threads.isLoading);\n const isLoadingMore = useAuiState((s) => s.threads.isLoadingMore);\n const hasMore = useAuiState((s) => s.threads.hasMore);\n const threadIds = useAuiState((s) => s.threads.threadIds);\n const threadItems = useAuiState((s) => s.threads.threadItems);\n const mainThreadId = useAuiState((s) => s.threads.mainThreadId);\n\n const itemsById = new Map(threadItems.map((item) => [item.id, item]));\n\n return (\n <ThreadListShell header={<ThreadListNewButton onClick={() => aui.threads().switchToNewThread()} />}>\n {isLoading ? (\n <ThreadListRowSkeleton />\n ) : threadIds.length === 0 ? (\n <ThreadListEmptyState />\n ) : (\n threadIds.map((id) => {\n const item = itemsById.get(id);\n return (\n <ThreadListRow\n key={id}\n title={item?.title ?? \"New Chat\"}\n active={id === mainThreadId}\n onSelect={() => aui.threads().switchToThread(id)}\n onArchive={() => aui.threads().item({ id }).archive()}\n onDelete={() => aui.threads().item({ id }).delete()}\n />\n );\n })\n )}\n {!isLoading &&\n hasMore &&\n (isLoadingMore ? (\n <ThreadListRowSkeleton count={1} />\n ) : (\n <Button variant=\"ghost\" onClick={() => void aui.threads().loadMore()}>\n Load more\n </Button>\n ))}\n </ThreadListShell>\n );\n}\n","\"use client\";\n\nimport { ThreadContainer } from \"./ThreadContainer.js\";\nimport { ComposerContainer } from \"./ComposerContainer.js\";\n\n/** The full assembled thread view: message list + composer. */\nexport function Thread() {\n return <ThreadContainer composer={<ComposerContainer />} />;\n}\n"],"mappings":"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","names":["useMemo","jsx","jsx","jsx","Slot","jsx","jsxs","jsx","jsxs","Slot","jsx","jsx","jsxs","jsx","jsxs","jsx","OpenUIBlock","useState","jsx","jsxs","useState","jsx","jsxs","CheckIcon","CopyIcon","DownloadIcon","jsx","jsxs","CheckIcon","CopyIcon","DownloadIcon","CheckIcon","CopyIcon","jsx","jsxs","IconButton","CheckIcon","CopyIcon","jsx","jsxs","children","branchIndicator","actionBar","className","jsx","jsx","forwardRef","jsx","forwardRef","jsx","jsxs","forwardRef","jsx","forwardRef","jsx","jsxs","XIcon","jsx","jsxs","XIcon","jsx","Fragment","jsx","jsxs","LoaderIcon","PlusIcon","jsx","jsxs","PlusIcon","LoaderIcon","jsx","jsxs","jsx","jsxs","useState","jsx","jsxs","useState","MoreHorizontalIcon","DropdownMenu","jsx","jsxs","DropdownMenu","MoreHorizontalIcon","PlusIcon","jsx","jsxs","PlusIcon","XIcon","jsx","jsxs","XIcon","CheckIcon","ChevronDownIcon","LoaderIcon","jsx","jsxs","LoaderIcon","CheckIcon","ChevronDownIcon","ChevronDownIcon","LoaderIcon","jsx","jsxs","LoaderIcon","ChevronDownIcon","jsx","jsx","useMemo","createContext","useContext","useAuiState","createContext","createElement","useContext","useState","MessagePrimitive","useAui","useActionBarCopy","useThreadIsRunning","useCallback","useAuiState","createContext","useCallback","useContext","useMemo","useState","jsx","jsxs","createContext","ToastStack","Toast","useState","useCallback","useMemo","useContext","jsx","Markdown","useAuiState","useCallback","useAuiState","jsx","AttachmentPreviewDialog","useAuiState","useState","useAuiState","jsx","ReasoningCard","useAuiState","useState","useState","createContext","useContext","jsx","ToolApprovalBar","ToolCallCard","useState","useState","jsx","ToolGroupCard","useState","jsx","MessageBubble","MessageIndicator","MessageErrorBanner","MessageActionBar","BranchIndicator","useAui","useThreadIsRunning","useActionBarCopy","MessagePrimitive","ComposerPrimitive","MessagePrimitive","useAuiState","useThreadIsRunning","MessagePrimitive","useAui","useAuiState","useEffect","useState","useAuiState","jsx","AttachmentCard","AttachmentPreviewDialog","useAui","useAuiState","MessagePrimitive","AttachmentPickerButton","jsx","jsxs","useAuiState","Button","useThreadIsRunning","MessagePrimitive","ComposerPrimitive","MessagePrimitive","useThreadIsRunning","jsx","MessageBubble","UserMessageActionBar","useThreadIsRunning","MessagePrimitive","jsx","jsxs","useAuiState","ThreadRootShell","ThreadViewportShell","ThreadComposerAreaShell","MessageGroup","WelcomeScreen","MessageListSkeleton","ScrollToBottomButton","useAui","useAuiState","useTrueFoundryToolResponses","useState","useThreadIsRunning","jsx","OTHER_OPTION_ID","AskUserPrompt","useThreadIsRunning","useState","useThreadIsRunning","jsx","McpAuthPrompt","useThreadIsRunning","Fragment","jsx","jsxs","ComposerShell","useAui","useAuiState","useTrueFoundryToolResponses","useAui","useAuiState","jsx","jsxs","ThreadListShell","ThreadListNewButton","ThreadListRow","ThreadListRowSkeleton","ThreadListEmptyState","Button","useAui","useAuiState","jsx"]}