@truefoundry/agent-ui-sdk 0.0.1 → 0.0.2

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 +192 -80
  2. package/dist/index.d.ts +228 -281
  3. package/dist/index.js +1823 -1791
  4. package/dist/index.js.map +1 -1
  5. package/dist/styles.css +2 -0
  6. package/package.json +36 -19
  7. package/src/atoms/AskUserPrompt.tsx +0 -102
  8. package/src/atoms/AttachmentCard.tsx +0 -92
  9. package/src/atoms/AttachmentPickerButton.tsx +0 -19
  10. package/src/atoms/AttachmentPreviewDialog.tsx +0 -34
  11. package/src/atoms/BranchIndicator.tsx +0 -41
  12. package/src/atoms/CodeBlockHeader.tsx +0 -44
  13. package/src/atoms/ComposerShell.tsx +0 -112
  14. package/src/atoms/Markdown.test.tsx +0 -28
  15. package/src/atoms/Markdown.tsx +0 -288
  16. package/src/atoms/McpAuthPrompt.tsx +0 -60
  17. package/src/atoms/MessageActionBar.tsx +0 -60
  18. package/src/atoms/MessageBubble.tsx +0 -80
  19. package/src/atoms/MessageErrorBanner.tsx +0 -26
  20. package/src/atoms/MessageIndicator.tsx +0 -23
  21. package/src/atoms/OpenUIBlock.test.tsx +0 -37
  22. package/src/atoms/OpenUIBlock.tsx +0 -50
  23. package/src/atoms/ReasoningCard.tsx +0 -52
  24. package/src/atoms/SandboxArtifactList.tsx +0 -63
  25. package/src/atoms/ScrollToBottomButton.tsx +0 -34
  26. package/src/atoms/Skeletons.tsx +0 -32
  27. package/src/atoms/ThreadListMisc.tsx +0 -76
  28. package/src/atoms/ThreadListRow.tsx +0 -81
  29. package/src/atoms/ThreadShell.tsx +0 -93
  30. package/src/atoms/Toast.tsx +0 -60
  31. package/src/atoms/ToolApprovalBar.tsx +0 -92
  32. package/src/atoms/ToolCallCard.tsx +0 -186
  33. package/src/atoms/ToolGroupCard.tsx +0 -52
  34. package/src/atoms/UserMessageActionBar.tsx +0 -62
  35. package/src/atoms/WelcomeScreen.tsx +0 -22
  36. package/src/atoms/lib/cn.ts +0 -6
  37. package/src/atoms/primitives/Avatar.tsx +0 -57
  38. package/src/atoms/primitives/Button.tsx +0 -73
  39. package/src/atoms/primitives/Collapsible.tsx +0 -32
  40. package/src/atoms/primitives/Dialog.tsx +0 -152
  41. package/src/atoms/primitives/IconButton.tsx +0 -43
  42. package/src/atoms/primitives/Skeleton.tsx +0 -17
  43. package/src/atoms/primitives/Tooltip.tsx +0 -58
  44. package/src/containers/AskUserContainer.tsx +0 -49
  45. package/src/containers/AssistantMessageContainer.test.tsx +0 -56
  46. package/src/containers/AssistantMessageContainer.tsx +0 -128
  47. package/src/containers/AssistantTextContainer.test.tsx +0 -111
  48. package/src/containers/AssistantTextContainer.tsx +0 -54
  49. package/src/containers/AttachmentsContainer.tsx +0 -83
  50. package/src/containers/ComposerContainer.tsx +0 -66
  51. package/src/containers/ErrorToasterContainer.tsx +0 -76
  52. package/src/containers/McpAuthContainer.test.tsx +0 -100
  53. package/src/containers/McpAuthContainer.tsx +0 -22
  54. package/src/containers/MessageImageContainer.tsx +0 -37
  55. package/src/containers/ReasoningContainer.tsx +0 -32
  56. package/src/containers/RuntimeHarness.tsx +0 -39
  57. package/src/containers/Thread.tsx +0 -9
  58. package/src/containers/ThreadContainer.test.tsx +0 -52
  59. package/src/containers/ThreadContainer.tsx +0 -87
  60. package/src/containers/ThreadListContainer.tsx +0 -63
  61. package/src/containers/ToolCallContainer.test.tsx +0 -135
  62. package/src/containers/ToolCallContainer.tsx +0 -167
  63. package/src/containers/ToolGroupContainer.test.tsx +0 -56
  64. package/src/containers/ToolGroupContainer.tsx +0 -24
  65. package/src/containers/UserEditComposerContainer.test.tsx +0 -52
  66. package/src/containers/UserEditComposerContainer.tsx +0 -86
  67. package/src/containers/UserMessageContainer.test.tsx +0 -99
  68. package/src/containers/UserMessageContainer.tsx +0 -26
  69. package/src/containers/nestedApprovalBridge.ts +0 -20
  70. package/src/containers/useAttachmentPreviewSrc.ts +0 -42
  71. package/src/hooks/useComposerBusyState.test.ts +0 -78
  72. package/src/hooks/useComposerBusyState.ts +0 -69
  73. package/src/index.ts +0 -193
  74. package/src/testSetup.ts +0 -42
  75. package/src/theme/SlotsProvider.test.tsx +0 -64
  76. package/src/theme/SlotsProvider.tsx +0 -41
  77. package/src/theme/defaultSlots.ts +0 -131
  78. package/src/theme/tokens.ts +0 -98
  79. package/src/theme/useClassDarkMode.ts +0 -24
package/dist/index.js.map CHANGED
@@ -1 +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"]}
1
+ {"version":3,"sources":["../src/icons/fontawesome.ts","../src/icons/registerAgentIcons.ts","../src/icons/agent-2.svg","../src/icons/ai.svg","../src/icons/brain-regular.svg","../src/icons/compare.svg","../src/icons/mcp-server.svg","../src/icons/search-globe.svg","../src/theme/SlotsProvider.tsx","../src/theme/defaultSlots.ts","../src/atoms/adapters/AskUserPromptAdapter.tsx","../src/atoms/adapters/McpAuthPromptAdapter.tsx","../src/atoms/adapters/ReasoningCardAdapter.tsx","../src/atoms/primitives/Avatar.tsx","../src/atoms/lib/cn.ts","../src/atoms/UserMessageBubble.tsx","../src/atoms/UserMessageEdit.tsx","../src/atoms/ToolCallCard.tsx","../src/atoms/ToolCallContentBlock.tsx","../src/atoms/SubAgentCard.tsx","../src/atoms/SandboxToolCallCard.tsx","../src/atoms/ToolApprovalBar.tsx","../src/atoms/ToolGroupCard.tsx","../src/atoms/Skeletons.tsx","../src/atoms/ComposerShell.tsx","../src/atoms/ComposerSections.tsx","../src/atoms/AttachmentCard.tsx","../src/constants/attachments.ts","../src/atoms/AttachmentPickerButton.tsx","../src/atoms/AttachmentPreviewDialog.tsx","../src/atoms/ScrollToBottomButton.tsx","../src/atoms/ThreadListRow.tsx","../src/atoms/ThreadListMisc.tsx","../src/atoms/MessageActionBar.tsx","../src/atoms/Markdown.tsx","../src/atoms/AssistantMessageBubble.tsx","../src/atoms/MessageErrorBanner.tsx","../src/atoms/MessageIndicator.tsx","../src/atoms/MessageTimestamp.tsx","../src/atoms/UserMessageActionBar.tsx","../src/atoms/ThreadShell.tsx","../src/atoms/WelcomeScreen.tsx","../src/atoms/Toast.tsx","../src/theme/tokens.ts","../src/index.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/SandboxToolCallContainer.tsx","../src/containers/ToolApprovalContainer.tsx","../src/containers/ToolCallContentBlockContainer.tsx","../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/hooks/useComposerPauseView.ts","../src/containers/AskUserContainer.tsx","../src/containers/McpAuthContainer.tsx","../src/containers/ThreadListContainer.tsx","../src/containers/Thread.tsx"],"sourcesContent":["import { library } from \"@fortawesome/fontawesome-svg-core\";\nimport {\n faArrowDown,\n faArrowUp,\n faBoxArchive,\n faEllipsis,\n faPencil,\n faPlus,\n faTrash,\n faXmark,\n} from \"@fortawesome/free-solid-svg-icons\";\n\nlibrary.add(faArrowDown, faArrowUp, faBoxArchive, faEllipsis, faPencil, faPlus, faTrash, faXmark);\n","import { registerIcons } from \"tfy-web-components/components/atoms/IconProvider\";\n\nimport Agent2Icon from \"./agent-2.svg\";\nimport AiIcon from \"./ai.svg\";\nimport BrainRegularIcon from \"./brain-regular.svg\";\nimport CompareIcon from \"./compare.svg\";\nimport McpServerIcon from \"./mcp-server.svg\";\nimport SearchGlobeIcon from \"./search-globe.svg\";\n\nregisterIcons({\n \"mcp-server\": McpServerIcon,\n \"agent-2\": Agent2Icon,\n compare: CompareIcon,\n ai: AiIcon,\n searchGlobe: SearchGlobeIcon,\n \"brain-regular\": BrainRegularIcon,\n});\n","import * as React from \"react\";\nconst SvgAgent2 = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path d=\"M8 0C8.40158 8.28071e-05 8.72754 0.325937 8.72754 0.727539V2.90918H12.3623C13.5671 2.90921 14.5437 3.88607 14.5439 5.09082V7.27246H15.2725C15.6741 7.27253 16 7.59839 16 8C15.9999 8.40155 15.674 8.72747 15.2725 8.72754H14.5439V10.9092C14.5437 12.1139 13.5671 13.0908 12.3623 13.0908H3.63477C2.43015 13.0906 1.45334 12.1138 1.45312 10.9092V8.72754H0.727539C0.325964 8.7275 7.21982e-05 8.40157 0 8C0 7.59837 0.32592 7.2725 0.727539 7.27246H1.45312V5.09082C1.45335 3.8862 2.43015 2.90942 3.63477 2.90918H7.27246V1.45508H5.09082C4.68943 1.4549 4.36346 1.12893 4.36328 0.727539C4.36328 0.325997 4.68932 0.00017902 5.09082 0H8ZM3.63477 4.36426C3.23346 4.3645 2.90843 4.68951 2.9082 5.09082V7.99023C2.90824 7.99344 2.90918 7.99678 2.90918 8C2.90918 8.00326 2.90825 8.00651 2.9082 8.00977V10.9092C2.90841 11.3105 3.23345 11.6365 3.63477 11.6367H12.3623C12.7638 11.6367 13.0896 11.3106 13.0898 10.9092V5.09082C13.0896 4.68937 12.7638 4.36428 12.3623 4.36426H3.63477ZM5.81738 6.54492C6.21902 6.54492 6.54489 6.87084 6.54492 7.27246V8.72656C6.54492 9.12822 6.21904 9.4541 5.81738 9.4541C5.41587 9.45393 5.08984 9.12811 5.08984 8.72656V7.27246C5.08988 6.87094 5.41589 6.54509 5.81738 6.54492ZM10.1816 6.54492C10.5831 6.54514 10.9091 6.87097 10.9092 7.27246V8.72656C10.9092 9.12808 10.5831 9.45388 10.1816 9.4541C9.77999 9.4541 9.4541 9.12822 9.4541 8.72656V7.27246C9.45413 6.87084 9.78001 6.54492 10.1816 6.54492Z\" fill=\"currentColor\" /></svg>;\nexport default SvgAgent2;","import * as React from \"react\";\nconst SvgAi = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><g opacity={0.9}><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M15.4419 9.43023C15.7501 9.43023 16 9.68012 16 9.98837V10.0304C16 11.398 16 12.4813 15.886 13.329C15.7687 14.2015 15.5216 14.9077 14.9647 15.4647C14.4077 16.0216 13.7015 16.2687 12.829 16.386C11.9813 16.5 10.898 16.5 9.53035 16.5H9.48837C9.18012 16.5 8.93023 16.2501 8.93023 15.9419C8.93023 15.6336 9.18012 15.3837 9.48837 15.3837C10.9074 15.3837 11.9155 15.3825 12.6803 15.2797C13.429 15.1791 13.8604 14.9903 14.1753 14.6753C14.4903 14.3604 14.6791 13.929 14.7797 13.1803C14.8825 12.4155 14.8837 11.4074 14.8837 9.98837C14.8837 9.68012 15.1336 9.43023 15.4419 9.43023Z\" fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M0.55814 9.43023C0.866392 9.43023 1.11628 9.68012 1.11628 9.98837C1.11628 11.4074 1.11747 12.4155 1.22029 13.1803C1.32095 13.929 1.50973 14.3604 1.82467 14.6753C2.13962 14.9903 2.57098 15.1791 3.3197 15.2797C4.08448 15.3825 5.0926 15.3837 6.51163 15.3837C6.81988 15.3837 7.06977 15.6336 7.06977 15.9419C7.06977 16.2501 6.81988 16.5 6.51163 16.5H6.46965C5.10201 16.5 4.01875 16.5 3.17096 16.386C2.29846 16.2687 1.59227 16.0216 1.03534 15.4647C0.478423 14.9077 0.231266 14.2015 0.113961 13.329C-2.0957e-05 12.4813 -1.15596e-05 11.398 2.3934e-07 10.0304C3.72411e-07 10.0164 5.05482e-07 10.0024 5.05482e-07 9.98837C5.05482e-07 9.68012 0.249888 9.43023 0.55814 9.43023Z\" fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M6.46964 0.5L6.51163 0.500001C6.81988 0.500001 7.06977 0.749888 7.06977 1.05814C7.06977 1.36639 6.81988 1.61628 6.51163 1.61628C5.0926 1.61628 4.08448 1.61747 3.3197 1.72029C2.57098 1.82095 2.13962 2.00973 1.82467 2.32467C1.50973 2.63962 1.32095 3.07098 1.22029 3.8197C1.11747 4.58448 1.11628 5.5926 1.11628 7.01163C1.11628 7.31988 0.866392 7.56977 0.55814 7.56977C0.249888 7.56977 5.05482e-07 7.31988 5.05482e-07 7.01163L2.3934e-07 6.96964C-1.15596e-05 5.60201 -2.0957e-05 4.51875 0.113961 3.67096C0.231266 2.79846 0.478423 2.09227 1.03534 1.53534C1.59227 0.978423 2.29846 0.731266 3.17096 0.613961C4.01875 0.499979 5.10201 0.499988 6.46964 0.5Z\" fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M12.6803 1.72029C11.9155 1.61747 10.9074 1.61628 9.48837 1.61628C9.18012 1.61628 8.93023 1.36639 8.93023 1.05814C8.93023 0.749888 9.18012 0.500001 9.48837 0.500001C9.5024 0.500001 9.51639 0.5 9.53036 0.5C10.898 0.499988 11.9813 0.499979 12.829 0.613961C13.7015 0.731266 14.4077 0.978423 14.9647 1.53534C15.5216 2.09227 15.7687 2.79846 15.886 3.67096C16 4.51875 16 5.60201 16 6.96965V7.01163C16 7.31988 15.7501 7.56977 15.4419 7.56977C15.1336 7.56977 14.8837 7.31988 14.8837 7.01163C14.8837 5.5926 14.8825 4.58448 14.7797 3.8197C14.6791 3.07098 14.4903 2.63962 14.1753 2.32467C13.8604 2.00973 13.429 1.82095 12.6803 1.72029Z\" fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M2.70041 3.20041C2.04651 3.85431 2.04651 4.90675 2.04651 7.01163V9.98837C2.04651 12.0933 2.04651 13.1457 2.70041 13.7996C3.35431 14.4535 4.40675 14.4535 6.51163 14.4535H9.48837C11.5933 14.4535 12.6457 14.4535 13.2996 13.7996C13.9535 13.1457 13.9535 12.0933 13.9535 9.98837V7.01163C13.9535 4.90675 13.9535 3.85431 13.2996 3.20041C12.6457 2.54651 11.5933 2.54651 9.48837 2.54651H6.51163C4.40675 2.54651 3.35431 2.54651 2.70041 3.20041ZM5.65417 10.5348C5.81478 10.3181 6.12065 10.2726 6.33733 10.4332C6.8116 10.7848 7.38407 10.9884 8 10.9884C8.61593 10.9884 9.1884 10.7848 9.66267 10.4332C9.87936 10.2726 10.1852 10.3181 10.3458 10.5348C10.5064 10.7514 10.461 11.0573 10.2443 11.2179C9.61111 11.6873 8.83673 11.9651 8 11.9651C7.16327 11.9651 6.38889 11.6873 5.75569 11.2179C5.53901 11.0573 5.49356 10.7514 5.65417 10.5348ZM10.6047 7.24419C10.6047 7.78363 10.3131 8.22093 9.95349 8.22093C9.59386 8.22093 9.30233 7.78363 9.30233 7.24419C9.30233 6.70475 9.59386 6.26744 9.95349 6.26744C10.3131 6.26744 10.6047 6.70475 10.6047 7.24419ZM6.04651 8.22093C6.40614 8.22093 6.69767 7.78363 6.69767 7.24419C6.69767 6.70475 6.40614 6.26744 6.04651 6.26744C5.68688 6.26744 5.39535 6.70475 5.39535 7.24419C5.39535 7.78363 5.68688 8.22093 6.04651 8.22093Z\" fill=\"currentColor\" /></g></svg>;\nexport default SvgAi;","import * as React from \"react\";\nconst SvgBrainRegular = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path d=\"M0 6.9375C0 6.30469 0.234375 5.69531 0.609375 5.25C0.5625 5.0625 0.5625 4.875 0.5625 4.6875C0.5625 3.9375 0.9375 3.25781 1.52344 2.85938C1.61719 2.17969 2.01562 1.59375 2.60156 1.26562C2.90625 0.515625 3.63281 0 4.5 0C5.08594 0 5.60156 0.257812 6 0.65625C6.375 0.257812 6.89062 0 7.5 0C8.34375 0 9.07031 0.515625 9.375 1.26562C9.96094 1.59375 10.3594 2.17969 10.4531 2.85938C11.0391 3.25781 11.4375 3.9375 11.4375 4.6875C11.4375 4.875 11.4141 5.0625 11.3672 5.25C11.7422 5.69531 12 6.30469 12 6.9375C12 7.66406 11.6953 8.32031 11.2266 8.78906L11.25 8.8125C11.25 9.9375 10.4297 10.8516 9.375 11.0391C9 11.625 8.34375 12 7.59375 12C6.96094 12 6.375 11.7422 6 11.2969C5.60156 11.7422 5.01562 12 4.40625 12C3.63281 12 2.97656 11.625 2.60156 11.0391C1.54688 10.8516 0.75 9.9375 0.75 8.8125V8.78906C0.28125 8.32031 0 7.66406 0 6.9375ZM5.41406 9.9375H5.4375V2.0625C5.4375 1.54688 5.01562 1.125 4.5 1.125C3.96094 1.125 3.5625 1.54688 3.5625 2.0625V2.08594C3.07031 2.17969 2.69531 2.55469 2.625 3.04688C2.625 3.09375 2.625 3.14062 2.625 3.1875C2.625 3.32812 2.625 3.46875 2.67188 3.58594C2.50781 3.60938 2.32031 3.65625 2.17969 3.75C1.89844 3.9375 1.71094 4.24219 1.6875 4.57031C1.6875 4.61719 1.6875 4.66406 1.6875 4.6875C1.6875 5.03906 1.82812 5.34375 2.0625 5.55469C1.71094 5.69531 1.40625 5.97656 1.24219 6.32812C1.17188 6.51562 1.10156 6.72656 1.10156 6.9375C1.10156 7.5 1.42969 7.99219 1.875 8.25C1.92188 8.27344 1.94531 8.29688 1.99219 8.32031C1.96875 8.34375 1.96875 8.36719 1.94531 8.39062C1.89844 8.53125 1.875 8.67188 1.875 8.8125C1.875 9.32812 2.20312 9.77344 2.67188 9.91406C2.76562 9.9375 2.88281 9.9375 3 9.9375C3.11719 9.9375 3.25781 9.91406 3.375 9.89062C3.375 10.1016 3.44531 10.3125 3.58594 10.4766C3.77344 10.7344 4.05469 10.875 4.40625 10.875C4.92188 10.875 5.36719 10.4766 5.41406 9.9375ZM8.41406 2.08594L8.4375 2.0625C8.4375 1.54688 8.01562 1.125 7.5 1.125C6.96094 1.125 6.5625 1.54688 6.5625 2.0625V9.9375C6.60938 10.4766 7.05469 10.875 7.59375 10.875C7.92188 10.875 8.20312 10.7344 8.39062 10.4766C8.53125 10.3125 8.60156 10.1016 8.60156 9.89062C8.71875 9.91406 8.85938 9.9375 9 9.9375C9.09375 9.9375 9.21094 9.9375 9.30469 9.91406C9.77344 9.77344 10.125 9.32812 10.125 8.8125C10.125 8.67188 10.0781 8.53125 10.0312 8.39062C10.0078 8.36719 10.0078 8.34375 9.98438 8.32031C10.0312 8.29688 10.0547 8.27344 10.1016 8.25C10.5469 7.99219 10.875 7.5 10.875 6.9375C10.875 6.72656 10.8047 6.51562 10.7344 6.32812C10.5703 5.97656 10.2656 5.69531 9.91406 5.55469C10.1484 5.34375 10.3125 5.03906 10.3125 4.6875C10.3125 4.66406 10.2891 4.61719 10.2891 4.57031C10.2656 4.24219 10.0781 3.9375 9.79688 3.75C9.65625 3.65625 9.46875 3.60938 9.30469 3.58594C9.35156 3.46875 9.375 3.32812 9.375 3.1875C9.375 3.14062 9.35156 3.09375 9.35156 3.04688C9.28125 2.55469 8.90625 2.17969 8.41406 2.08594Z\" fill=\"currentColor\" /></svg>;\nexport default SvgBrainRegular;","import * as React from \"react\";\nconst SvgCompare = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 14 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path d=\"M5.09091 16.5V15.0455H1.45455C1.05455 15.0455 0.712121 14.903 0.427273 14.6182C0.142424 14.3333 0 13.9909 0 13.5909V3.40909C0 3.00909 0.142424 2.66667 0.427273 2.38182C0.712121 2.09697 1.05455 1.95455 1.45455 1.95455H5.09091V0.5H6.54545V16.5H5.09091ZM8 15.0455V13.5909L11.6364 13.5909V3.40909H8V1.95455H11.6364C12.0364 1.95455 12.3788 2.09697 12.6636 2.38182C12.9485 2.66667 13.0909 3.00909 13.0909 3.40909V13.5909C13.0909 13.9909 12.9485 14.3333 12.6636 14.6182C12.3788 14.903 12.0364 15.0455 11.6364 15.0455H8Z\" fill=\"currentColor\" /></svg>;\nexport default SvgCompare;","import * as React from \"react\";\nconst SvgMcpServer = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 14 14\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><g clipPath=\"url(#clip0_5446_3655)\"><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M9.15174 1.36702C8.86989 1.09272 8.49212 0.939234 8.09883 0.939234C7.70553 0.939234 7.32776 1.09272 7.04591 1.36702L1.43074 6.87369C1.33678 6.96502 1.21091 7.01611 1.07987 7.01611C0.948831 7.01611 0.822958 6.96502 0.728994 6.87369C0.68299 6.82895 0.646423 6.77544 0.621453 6.71633C0.596483 6.65721 0.583618 6.59369 0.583618 6.52952C0.583618 6.46535 0.596483 6.40183 0.621453 6.34272C0.646423 6.2836 0.68299 6.23009 0.728994 6.18536L6.34416 0.678689C6.81387 0.221585 7.44341 -0.0341797 8.09883 -0.0341797C8.75424 -0.0341797 9.38379 0.221585 9.85349 0.678689C10.1253 0.943 10.3306 1.26791 10.4527 1.62683C10.5748 1.98575 10.6101 2.36848 10.5558 2.74369C10.936 2.68962 11.3235 2.72356 11.6885 2.8429C12.0535 2.96224 12.3863 3.16379 12.6611 3.43202L12.6902 3.46119C12.9203 3.68489 13.1031 3.95243 13.2279 4.248C13.3528 4.54357 13.4171 4.86117 13.4171 5.18202C13.4171 5.50288 13.3528 5.82048 13.2279 6.11605C13.1031 6.41162 12.9203 6.67916 12.6902 6.90286L7.61174 11.8828C7.59642 11.8977 7.58423 11.9155 7.57591 11.9352C7.56759 11.9549 7.5633 11.976 7.5633 11.9974C7.5633 12.0188 7.56759 12.0399 7.57591 12.0596C7.58423 12.0793 7.59642 12.0971 7.61174 12.112L8.65474 13.1352C8.70075 13.1799 8.73731 13.2334 8.76228 13.2926C8.78725 13.3517 8.80012 13.4152 8.80012 13.4794C8.80012 13.5435 8.78725 13.607 8.76228 13.6662C8.73731 13.7253 8.70075 13.7788 8.65474 13.8235C8.56078 13.9149 8.43491 13.9659 8.30387 13.9659C8.17283 13.9659 8.04696 13.9149 7.95299 13.8235L6.90999 12.8009C6.80257 12.6966 6.71717 12.5717 6.65886 12.4337C6.60054 12.2957 6.5705 12.1475 6.5705 11.9977C6.5705 11.8479 6.60054 11.6996 6.65886 11.5617C6.71717 11.4237 6.80257 11.2988 6.90999 11.1944L11.9885 6.21394C12.1264 6.07968 12.2361 5.91914 12.3109 5.74181C12.3858 5.56447 12.4244 5.37393 12.4244 5.18144C12.4244 4.98895 12.3858 4.79841 12.3109 4.62107C12.2361 4.44374 12.1264 4.2832 11.9885 4.14894L11.9593 4.12036C11.6778 3.84634 11.3005 3.69287 10.9076 3.69254C10.5148 3.69222 10.1372 3.84506 9.85524 4.11861L5.67158 8.22177L5.67041 8.22294L5.61324 8.27952C5.51925 8.37103 5.39326 8.42223 5.26208 8.42223C5.1309 8.42223 5.0049 8.37103 4.91091 8.27952C4.86491 8.23478 4.82834 8.18128 4.80337 8.12216C4.7784 8.06305 4.76553 7.99953 4.76553 7.93536C4.76553 7.87118 4.7784 7.80766 4.80337 7.74855C4.82834 7.68944 4.86491 7.63593 4.91091 7.59119L9.15349 3.43027C9.29105 3.29592 9.40033 3.1354 9.47488 2.95816C9.54943 2.78093 9.58776 2.59056 9.58759 2.39828C9.58743 2.206 9.54878 2.0157 9.47393 1.83859C9.39907 1.66147 9.28953 1.50114 9.15174 1.36702Z\" fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M8.44964 2.74425C8.49564 2.69951 8.53221 2.646 8.55718 2.58689C8.58215 2.52777 8.59501 2.46425 8.59501 2.40008C8.59501 2.33591 8.58215 2.27239 8.55718 2.21328C8.53221 2.15416 8.49564 2.10066 8.44964 2.05592C8.35564 1.96441 8.22965 1.91321 8.09847 1.91321C7.96729 1.91321 7.84129 1.96441 7.7473 2.05592L3.59455 6.12875C3.36454 6.35245 3.1817 6.61999 3.05685 6.91556C2.932 7.21113 2.86768 7.52873 2.86768 7.84958C2.86768 8.17044 2.932 8.48804 3.05685 8.78361C3.1817 9.07918 3.36454 9.34672 3.59455 9.57042C4.06433 10.0274 4.69385 10.2831 5.34922 10.2831C6.00459 10.2831 6.63411 10.0274 7.10389 9.57042L11.2572 5.49758C11.3032 5.45284 11.3398 5.39934 11.3648 5.34022C11.3897 5.28111 11.4026 5.21759 11.4026 5.15342C11.4026 5.08925 11.3897 5.02573 11.3648 4.96661C11.3398 4.9075 11.3032 4.85399 11.2572 4.80925C11.1632 4.71774 11.0372 4.66654 10.9061 4.66654C10.7749 4.66654 10.6489 4.71774 10.5549 4.80925L6.40214 8.88208C6.12029 9.15639 5.74252 9.30987 5.34922 9.30987C4.95592 9.30987 4.57815 9.15639 4.2963 8.88208C4.15836 8.74782 4.04873 8.58729 3.97386 8.40995C3.899 8.23261 3.86043 8.04207 3.86043 7.84958C3.86043 7.65709 3.899 7.46655 3.97386 7.28922C4.04873 7.11188 4.15836 6.95134 4.2963 6.81708L8.44964 2.74425Z\" fill=\"currentColor\" /></g><defs><clipPath id=\"clip0_5446_3655\"><rect width={14} height={14} fill=\"white\" /></clipPath></defs></svg>;\nexport default SvgMcpServer;","import * as React from \"react\";\nconst SvgSearchGlobe = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path d=\"M7 0C10.8555 0 14 3.14453 14 7C14 10.8828 10.8555 14 7 14C3.11719 14 0 10.8828 0 7C0 3.14453 3.11719 0 7 0ZM7 12.6875C7.19141 12.6875 7.71094 12.4961 8.28516 11.375C8.53125 10.8828 8.72266 10.3086 8.88672 9.625H5.08594C5.25 10.3086 5.44141 10.8828 5.6875 11.375C6.26172 12.4961 6.78125 12.6875 7 12.6875ZM4.86719 8.3125H9.10547C9.16016 7.90234 9.1875 7.46484 9.1875 7C9.1875 6.5625 9.16016 6.125 9.10547 5.6875H4.86719C4.8125 6.125 4.8125 6.5625 4.8125 7C4.8125 7.46484 4.8125 7.90234 4.86719 8.3125ZM8.88672 4.375C8.72266 3.71875 8.53125 3.14453 8.28516 2.65234C7.71094 1.53125 7.19141 1.3125 7 1.3125C6.78125 1.3125 6.26172 1.53125 5.6875 2.65234C5.44141 3.14453 5.25 3.71875 5.08594 4.375H8.88672ZM10.418 5.6875C10.4727 6.125 10.5 6.5625 10.5 7C10.5 7.46484 10.4727 7.90234 10.418 8.3125H12.5234C12.6328 7.90234 12.6875 7.46484 12.6875 7C12.6875 6.5625 12.6328 6.125 12.5234 5.6875H10.418ZM9.35156 1.83203C9.73438 2.54297 10.0352 3.41797 10.2266 4.375H12.0312C11.457 3.25391 10.5 2.35156 9.35156 1.83203ZM4.62109 1.83203C3.47266 2.35156 2.51562 3.25391 1.94141 4.375H3.74609C3.9375 3.41797 4.23828 2.54297 4.62109 1.83203ZM1.3125 7C1.3125 7.46484 1.33984 7.90234 1.44922 8.3125H3.55469C3.5 7.90234 3.5 7.46484 3.5 7C3.5 6.5625 3.5 6.125 3.55469 5.6875H1.44922C1.33984 6.125 1.3125 6.5625 1.3125 7ZM12.0312 9.625H10.2266C10.0352 10.6094 9.73438 11.4844 9.35156 12.1953C10.5 11.6758 11.457 10.7734 12.0312 9.625ZM3.74609 9.625H1.94141C2.51562 10.7734 3.47266 11.6758 4.62109 12.1953C4.23828 11.4844 3.9375 10.6094 3.74609 9.625Z\" fill=\"currentColor\" /></svg>;\nexport default SvgSearchGlobe;","import { createContext, useContext, useMemo, type ReactNode } from \"react\";\nimport {\n ThemeProvider as TfyThemeProvider,\n useTheme as useTfyTheme,\n} from \"tfy-web-components/components/theme/useTheme\";\n\nimport type {\n ComposerLeftSectionProps,\n ComposerRightSectionProps,\n ComposerSendButtonProps,\n} from \"../atoms/ComposerSections.js\";\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 */\nexport interface AtomSlots {\n ComposerLeftSection: ComposerLeftSectionSlot;\n ComposerRightSection: ComposerRightSectionSlot;\n ComposerSendButton: ComposerSendButtonSlot;\n}\n\nexport type ComposerLeftSectionSlot = (props: ComposerLeftSectionProps) => ReactNode;\nexport type ComposerRightSectionSlot = (props: ComposerRightSectionProps) => ReactNode;\nexport type ComposerSendButtonSlot = (props: ComposerSendButtonProps) => ReactNode;\n\nexport type SlotOverrides = Partial<AtomSlots> & Record<string, unknown>;\nexport type ThemeMode = \"light\" | \"dark\";\n\nconst SlotsContext = createContext<AtomSlots>(defaultSlots);\nconst ThemeModeContext = createContext<ThemeMode | undefined>(undefined);\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 theme,\n children,\n}: {\n overrides?: SlotOverrides;\n theme?: ThemeMode;\n children: ReactNode;\n}) {\n const parentSlots = useContext(SlotsContext);\n const inheritedTheme = useContext(ThemeModeContext);\n const resolved = useMemo(\n () => ({ ...parentSlots, ...overrides }) as AtomSlots,\n [parentSlots, overrides],\n );\n\n return (\n <TfyThemeProvider theme={theme ?? inheritedTheme}>\n <SlotsProviderContents slots={resolved}>{children}</SlotsProviderContents>\n </TfyThemeProvider>\n );\n}\n\nfunction SlotsProviderContents({\n slots,\n children,\n}: {\n slots: AtomSlots;\n children: ReactNode;\n}) {\n const { mode } = useTfyTheme();\n\n return (\n <ThemeModeContext.Provider value={mode}>\n <SlotsContext.Provider value={slots}>{children}</SlotsContext.Provider>\n </ThemeModeContext.Provider>\n );\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\n/** Resolves the light or dark theme mode supplied by the SDK consumer. */\nexport function useThemeMode(): ThemeMode {\n return useContext(ThemeModeContext) ?? \"light\";\n}\n","// tfy-web-components — direct slot defaults\n// Primitives and shared agent-chat molecules registered as-is.\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n} from \"tfy-web-components/components/atoms/Accordion\";\nimport Button from \"tfy-web-components/components/atoms/Button\";\nimport IconButton from \"tfy-web-components/components/atoms/IconButton\";\nimport Modal from \"tfy-web-components/components/atoms/Modal\";\nimport Skeleton from \"tfy-web-components/components/atoms/Skeleton\";\nimport { LightTooltip } from \"tfy-web-components/components/atoms/Tooltip\";\nimport Dialog from \"tfy-web-components/components/molecules/Dialog\";\n\nimport { AskUserPrompt } from \"../atoms/adapters/AskUserPromptAdapter.js\";\nimport { McpAuthPrompt } from \"../atoms/adapters/McpAuthPromptAdapter.js\";\nimport { ReasoningCard } from \"../atoms/adapters/ReasoningCardAdapter.js\";\n\n// SDK atoms — wrap or compose tfy-web-components internally\n// Thin adapters: tfy component + SDK slot prop contract.\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"../atoms/primitives/Avatar.js\";\nimport { UserMessageBubble } from \"../atoms/UserMessageBubble.js\";\nimport { UserMessageEdit } from \"../atoms/UserMessageEdit.js\";\nimport { ToolCallCard } from \"../atoms/ToolCallCard.js\";\nimport { ToolCallContentBlock } from \"../atoms/ToolCallContentBlock.js\";\nimport { SubAgentCard } from \"../atoms/SubAgentCard.js\";\nimport { SandboxToolCallCard } from \"../atoms/SandboxToolCallCard.js\";\nimport { ToolApprovalBar } from \"../atoms/ToolApprovalBar.js\";\nimport { ToolGroupCard } from \"../atoms/ToolGroupCard.js\";\nimport { MessageListSkeleton } from \"../atoms/Skeletons.js\";\nimport { ComposerShell } from \"../atoms/ComposerShell.js\";\nimport {\n ComposerLeftSection,\n ComposerRightSection,\n ComposerSendButton,\n} from \"../atoms/ComposerSections.js\";\nimport { AttachmentCard } from \"../atoms/AttachmentCard.js\";\nimport { AttachmentPickerButton } from \"../atoms/AttachmentPickerButton.js\";\nimport { AttachmentPreviewDialog } from \"../atoms/AttachmentPreviewDialog.js\";\nimport { ScrollToBottomButton } from \"../atoms/ScrollToBottomButton.js\";\nimport { ThreadListRow } from \"../atoms/ThreadListRow.js\";\nimport {\n ThreadListEmptyState,\n ThreadListNewButton,\n ThreadListRowSkeleton,\n ThreadListShell,\n} from \"../atoms/ThreadListMisc.js\";\nimport { MessageActionBar } from \"../atoms/MessageActionBar.js\";\nimport { Markdown } from \"../atoms/Markdown.js\";\nimport { AssistantMessageBubble } from \"../atoms/AssistantMessageBubble.js\";\n\n// SDK atoms — SDK-owned (no tfy slot component)\n// Local Tailwind implementations; pending tfy migration where a shared design exists.\nimport { MessageErrorBanner } from \"../atoms/MessageErrorBanner.js\";\nimport { MessageIndicator } from \"../atoms/MessageIndicator.js\";\nimport { MessageTimestamp } from \"../atoms/MessageTimestamp.js\";\nimport { UserMessageActionBar } from \"../atoms/UserMessageActionBar.js\";\nimport {\n MessageGroup,\n ThreadComposerAreaShell,\n ThreadRootShell,\n ThreadViewportShell,\n} from \"../atoms/ThreadShell.js\";\nimport { WelcomeScreen } from \"../atoms/WelcomeScreen.js\";\nimport { Toast, ToastStack } from \"../atoms/Toast.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 // tfy-web-components — direct slot defaults\n Button,\n IconButton,\n LightTooltip,\n Modal,\n Dialog,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Skeleton,\n ReasoningCard,\n AskUserPrompt,\n McpAuthPrompt,\n\n // SDK atoms — wrap or compose tfy-web-components internally\n Avatar,\n AvatarImage,\n AvatarFallback,\n UserMessageBubble,\n UserMessageEdit,\n ToolCallCard,\n ToolCallContentBlock,\n SubAgentCard,\n SandboxToolCallCard,\n ToolApprovalBar,\n ToolGroupCard,\n MessageListSkeleton,\n ComposerShell,\n ComposerLeftSection,\n ComposerRightSection,\n ComposerSendButton,\n AttachmentCard,\n AttachmentPreviewDialog,\n AttachmentPickerButton,\n ScrollToBottomButton,\n ThreadListRow,\n ThreadListNewButton,\n ThreadListRowSkeleton,\n ThreadListEmptyState,\n ThreadListShell,\n MessageActionBar,\n Markdown,\n\n // SDK atoms — SDK-owned (no tfy slot component)\n AssistantMessageBubble,\n MessageErrorBanner,\n MessageTimestamp,\n UserMessageActionBar,\n MessageIndicator,\n WelcomeScreen,\n ThreadRootShell,\n ThreadViewportShell,\n ThreadComposerAreaShell,\n MessageGroup,\n Toast,\n ToastStack,\n};\n\ndeclare module \"./SlotsProvider.js\" {\n interface AtomSlots {\n Button: typeof Button;\n IconButton: typeof IconButton;\n Skeleton: typeof Skeleton;\n LightTooltip: typeof LightTooltip;\n Modal: typeof Modal;\n Dialog: typeof Dialog;\n Accordion: typeof Accordion;\n AccordionSummary: typeof AccordionSummary;\n AccordionDetails: typeof AccordionDetails;\n }\n}\n","import {\n AskUserQuestionCard as TfyAskUserQuestionCard,\n type AskUserQuestionCardProps,\n type AskUserAnswerDraft,\n type AnsweredQuestion,\n type Question,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nexport type AskUserPromptProps = AskUserQuestionCardProps;\nexport type { AskUserAnswerDraft, AnsweredQuestion, Question };\n\n/** Typed SDK slot adapter over tfy-web-components AskUserQuestionCard. */\nexport function AskUserPrompt(props: AskUserPromptProps) {\n return <TfyAskUserQuestionCard {...props} />;\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AskUserPrompt: typeof AskUserPrompt;\n }\n}\n","import {\n McpAuthCard as TfyMcpAuthCard,\n type McpAuthCardProps,\n type McpServer,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nexport type McpAuthPromptProps = McpAuthCardProps;\nexport type { McpServer };\n\n/** Typed SDK slot adapter over tfy-web-components McpAuthCard. */\nexport function McpAuthPrompt(props: McpAuthPromptProps) {\n return <TfyMcpAuthCard {...props} />;\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n McpAuthPrompt: typeof McpAuthPrompt;\n }\n}\n","import {\n ReasoningCard as TfyReasoningCard,\n type ReasoningCardProps,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nexport type { ReasoningCardProps };\n\n/** Typed SDK slot adapter over tfy-web-components ReasoningCard. */\nexport function ReasoningCard(props: ReasoningCardProps) {\n return <TfyReasoningCard {...props} />;\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ReasoningCard: typeof ReasoningCard;\n }\n}\n","import React from \"react\";\n// Import as values; cast to any to bridge React 18 FC types from tfy-web-components\n// with the React 19 JSX types used in this package.\nimport TfyAvatar, {\n AvatarImage as TfyAvatarImage,\n AvatarFallback as TfyAvatarFallback,\n} from \"tfy-web-components/components/atoms/Avatar\";\n\nimport { cn } from \"../lib/cn.js\";\n\nconst AvatarRoot = TfyAvatar as unknown as React.FC<\n React.HTMLAttributes<HTMLDivElement> & { size?: \"default\" | \"sm\" | \"lg\" }\n>;\nconst AvatarImagePrimitive = TfyAvatarImage as unknown as React.FC<React.ImgHTMLAttributes<HTMLImageElement>>;\nconst AvatarFallbackPrimitive = TfyAvatarFallback as unknown as React.FC<React.HTMLAttributes<HTMLDivElement>>;\n\nexport type AvatarProps = React.HTMLAttributes<HTMLDivElement> & {\n size?: \"default\" | \"sm\" | \"lg\";\n};\n\nexport function Avatar({ className, size = \"default\", ...props }: AvatarProps) {\n return (\n <AvatarRoot\n data-slot=\"avatar\"\n data-size={size}\n size={size}\n className={cn(className)}\n {...props}\n />\n );\n}\n\nexport type AvatarImageProps = React.ImgHTMLAttributes<HTMLImageElement>;\n\nexport function AvatarImage({ className, ...props }: AvatarImageProps) {\n return <AvatarImagePrimitive data-slot=\"avatar-image\" className={cn(className)} {...props} />;\n}\n\nexport type AvatarFallbackProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function AvatarFallback({ className, ...props }: AvatarFallbackProps) {\n return <AvatarFallbackPrimitive data-slot=\"avatar-fallback\" className={cn(className)} {...props} />;\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","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { UserMessage } from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type UserMessageBubbleProps = {\n text: string;\n attachments?: ReactNode;\n editAction?: ReactNode;\n className?: string;\n};\n\nexport function UserMessageBubble({ text, attachments, editAction, className }: UserMessageBubbleProps) {\n return (\n <div\n data-slot=\"aui_user-message-root\"\n className={cn(\"fade-in slide-in-from-bottom-1 animate-in duration-150\", className)}\n >\n {attachments}\n <UserMessage text={text} editAction={editAction} actionsAlwaysVisible />\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n UserMessageBubble: typeof UserMessageBubble;\n }\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { forwardRef } from \"react\";\nimport TfyUserMessageEdit, {\n type UserMessageEditProps as TfyUserMessageEditProps,\n} from \"tfy-web-components/components/molecules/agent-chat/UserMessageEdit\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type UserMessageEditProps = Pick<\n TfyUserMessageEditProps,\n \"timestamp\" | \"attachments\" | \"input\" | \"footer\" | \"className\"\n>;\n\nexport const UserMessageEdit = forwardRef<\n HTMLDivElement,\n UserMessageEditProps & HTMLAttributes<HTMLDivElement>\n>(function UserMessageEdit({ timestamp, attachments, input, footer, className, ...rest }, ref) {\n return (\n <TfyUserMessageEdit\n ref={ref}\n data-slot=\"aui_user-message-edit\"\n timestamp={timestamp}\n attachments={attachments}\n input={input}\n footer={footer}\n className={cn(className)}\n {...rest}\n />\n );\n});\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n UserMessageEdit: typeof UserMessageEdit;\n }\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport {\n ToolCallCard as TfyToolCallCard,\n type ToolCallCardProps as TfyToolCallCardProps,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ToolCallStatus = \"running\" | \"success\" | \"error\";\n\nexport type ToolCallCardProps = Omit<TfyToolCallCardProps, \"className\"> & {\n approvalSlot?: ReactNode;\n requestSlot?: ReactNode;\n responseSlot?: ReactNode;\n className?: string;\n};\n\nexport function ToolCallCard(props: ToolCallCardProps) {\n return (\n <TfyToolCallCard\n {...props}\n className={cn(\"aui-tool-call-card\", props.className)}\n />\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ToolCallCard: typeof ToolCallCard;\n }\n}\n","\"use client\";\n\nimport {\n ToolCallContentBlock as TfyToolCallContentBlock,\n type ToolCallContentBlockProps as TfyToolCallContentBlockProps,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nexport type ToolCallContentBlockProps = TfyToolCallContentBlockProps;\n\nexport function ToolCallContentBlock(props: ToolCallContentBlockProps) {\n return <TfyToolCallContentBlock {...props} />;\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ToolCallContentBlock: typeof ToolCallContentBlock;\n }\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { SubAgentCard as TfySubAgentCard } from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\nimport type { ToolCallStatus } from \"./ToolCallCard.js\";\n\nexport type SubAgentCardProps = {\n agentName: string;\n instruction: string;\n stepCount: number;\n status: ToolCallStatus;\n expanded: boolean;\n onToggle: () => void;\n durationText?: string;\n children?: ReactNode;\n className?: string;\n};\n\nexport function SubAgentCard({\n agentName,\n instruction,\n stepCount,\n status,\n expanded,\n onToggle,\n durationText,\n children,\n className,\n}: SubAgentCardProps) {\n const Markdown = useSlot(\"Markdown\");\n\n return (\n <TfySubAgentCard\n agentName={agentName}\n instruction={instruction}\n stepCount={stepCount}\n status={status}\n expanded={expanded}\n onToggle={onToggle}\n durationText={durationText}\n renderInstruction={(content: string) => <Markdown content={content} />}\n className={cn(\"aui-sub-agent-card\", className)}\n >\n {children}\n </TfySubAgentCard>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n SubAgentCard: typeof SubAgentCard;\n }\n}\n","\"use client\";\n\nimport {\n SandboxToolCall,\n ToolCallCard as TfyToolCallCard,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { cn } from \"./lib/cn.js\";\nimport type { ToolCallStatus } from \"./ToolCallCard.js\";\n\nexport type SandboxToolCallCardProps = {\n name: string;\n intent?: string;\n status: ToolCallStatus;\n expanded: boolean;\n onToggle: () => void;\n command?: string;\n exitCode?: number | null;\n argsJson?: string;\n resultText?: string;\n resultJson?: string;\n viewMode?: \"terminal\" | \"code\";\n hasContent?: boolean;\n onViewModeChange?: (viewMode: \"terminal\" | \"code\") => void;\n durationText?: string;\n className?: string;\n};\n\nexport function SandboxToolCallCard({\n name,\n intent,\n status,\n expanded,\n onToggle,\n command,\n exitCode,\n argsJson,\n resultText,\n resultJson,\n viewMode,\n hasContent,\n onViewModeChange,\n durationText,\n className,\n}: SandboxToolCallCardProps) {\n const awaiting = status === \"running\";\n\n const sandboxContent = (\n <SandboxToolCall\n command={command}\n exitCode={exitCode}\n argsJson={argsJson}\n resultText={resultText}\n resultJson={resultJson}\n viewMode={viewMode}\n hasContent={hasContent}\n onViewModeChange={onViewModeChange}\n />\n );\n\n return (\n <TfyToolCallCard\n toolName={intent || name}\n icon=\"cube\"\n iconClassName=\"text-indigo-600 dark:text-gray-750 shrink-0\"\n expanded={expanded}\n onToggle={onToggle}\n awaiting={awaiting}\n awaitingText={durationText ?? \"Running…\"}\n showResponseLine={false}\n requestSlot={sandboxContent}\n className={cn(\"aui-sandbox-tool-call-card\", className)}\n />\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n SandboxToolCallCard: typeof SandboxToolCallCard;\n }\n}\n","\"use client\";\n\nimport {\n ToolApprovalBlock,\n type ToolApprovalBlockProps as TfyToolApprovalBlockProps,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ToolApprovalBarProps = TfyToolApprovalBlockProps;\n\nexport function ToolApprovalBar({ className, ...props }: ToolApprovalBarProps) {\n return (\n <ToolApprovalBlock\n {...props}\n className={cn(\"aui-tool-approval-bar\", className)}\n />\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ToolApprovalBar: typeof ToolApprovalBar;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { ChevronDownIcon, LoaderIcon } from \"lucide-react\";\nimport { Accordion, AccordionDetails, AccordionSummary } from \"tfy-web-components/components/atoms/Accordion\";\n\nimport { cn } from \"./lib/cn.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 <Accordion\n data-slot=\"tool-group-card\"\n expanded={expanded}\n onChange={() => onToggle()}\n background=\"transparent\"\n className={cn(\"aui-tool-group-card group/tool-group w-full\", className)}\n sx={{ margin: 0, border: \"none\", boxShadow: \"none\" }}\n >\n <AccordionSummary\n hideIcon\n disableRipple\n sx={{\n padding: 0,\n minHeight: 0,\n \"&.Mui-expanded\": { minHeight: 0 },\n \"&:hover\": { backgroundColor: \"transparent\" },\n \"& .MuiAccordionSummary-content\": { margin: 0, width: \"100%\" },\n }}\n >\n <div 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 </div>\n </AccordionSummary>\n <AccordionDetails sx={{ padding: 0 }}>\n <div className=\"mt-1 flex flex-col gap-2 text-foreground\">{children}</div>\n </AccordionDetails>\n </Accordion>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ToolGroupCard: typeof ToolGroupCard;\n }\n}\n","import Skeleton from \"tfy-web-components/components/atoms/Skeleton\";\n\nimport { cn } from \"./lib/cn.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","\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.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 const ComposerLeftSection = useSlot(\"ComposerLeftSection\");\n const ComposerRightSection = useSlot(\"ComposerRightSection\");\n const ComposerSendButton = useSlot(\"ComposerSendButton\");\n\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 <ComposerLeftSection\n disabled={disabled}\n isRunning={isRunning}\n onAttach={onAttach}\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 <ComposerRightSection disabled={disabled} isRunning={isRunning} />\n <ComposerSendButton\n disabled={disabled}\n canSubmit={!disabled && value.trim().length > 0}\n isRunning={isRunning}\n onSubmit={onSubmit}\n onCancel={onCancel}\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","\"use client\";\n\nimport Spinner from \"tfy-web-components/components/atoms/Spinner\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport type ComposerLeftSectionProps = {\n disabled: boolean;\n isRunning: boolean;\n onAttach?: () => void;\n};\n\nexport type ComposerRightSectionProps = {\n disabled: boolean;\n isRunning: boolean;\n};\n\nexport type ComposerSendButtonProps = {\n disabled: boolean;\n canSubmit: boolean;\n isRunning: boolean;\n onSubmit: () => void;\n onCancel?: () => void;\n};\n\nexport function ComposerLeftSection({ onAttach }: ComposerLeftSectionProps) {\n const IconButton = useSlot(\"IconButton\");\n\n if (!onAttach) return null;\n\n return <IconButton icon=\"plus\" tooltip=\"Attach\" onClick={onAttach} />;\n}\n\nexport function ComposerRightSection(_: ComposerRightSectionProps) {\n return null;\n}\n\nexport function ComposerSendButton({\n canSubmit,\n isRunning,\n onSubmit,\n onCancel,\n}: ComposerSendButtonProps) {\n const Button = useSlot(\"Button\");\n\n if (isRunning) {\n return (\n <Button.Primary\n disabled={!onCancel}\n onClick={onCancel}\n text={\n <>\n <Spinner small />\n Cancel\n </>\n }\n />\n );\n }\n\n return (\n <Button.Primary\n disabled={!canSubmit}\n onClick={onSubmit}\n icon=\"arrow-up\"\n tooltipProps={{\n title: \"Send message\",\n size: \"fit\",\n }}\n />\n );\n}\n","\"use client\";\n\nimport { FileTextIcon } from \"lucide-react\";\n\nimport { USER_MESSAGE_ATTACHMENT_PREVIEW_REM } from \"../constants/attachments.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\n\nexport { USER_MESSAGE_ATTACHMENT_PREVIEW_REM };\n\nexport type AttachmentCardSize = \"chip\" | \"preview\";\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 const IconButton = useSlot(\"IconButton\");\n const Avatar = useSlot(\"Avatar\");\n const AvatarImage = useSlot(\"AvatarImage\");\n const AvatarFallback = useSlot(\"AvatarFallback\");\n\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 icon=\"xmark\"\n tooltip=\"Remove file\"\n className=\"size-6 shrink-0 rounded-full\"\n onClick={onRemove}\n />\n )}\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AttachmentCard: typeof AttachmentCard;\n }\n}\n","/** Fixed preview bounds for attachments rendered in user message bubbles. */\nexport const USER_MESSAGE_ATTACHMENT_PREVIEW_REM = 12;\n","import IconButton from \"tfy-web-components/components/atoms/IconButton\";\nimport type { IconButtonProps } from \"tfy-web-components/components/atoms/IconButton\";\n\nexport type AttachmentPickerButtonProps = Omit<IconButtonProps, \"tooltip\" | \"icon\">;\n\nexport function AttachmentPickerButton(props: AttachmentPickerButtonProps) {\n return (\n <IconButton\n icon=\"plus\"\n tooltip=\"Add Attachment\"\n className=\"size-7 rounded-full p-1\"\n {...props}\n />\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AttachmentPickerButton: typeof AttachmentPickerButton;\n }\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport Modal from \"tfy-web-components/components/atoms/Modal\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport type AttachmentPreviewDialogProps = {\n previewSrc?: string;\n children: ReactNode;\n};\n\nexport function AttachmentPreviewDialog({ previewSrc, children }: AttachmentPreviewDialogProps) {\n const IconButton = useSlot(\"IconButton\");\n const [open, setOpen] = useState(false);\n\n if (!previewSrc) return <>{children}</>;\n\n return (\n <>\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => setOpen(true)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n setOpen(true);\n }\n }}\n className=\"contents cursor-pointer\"\n >\n {children}\n </div>\n {/* tfy ModalProps omits MUI `open` in published types; runtime accepts it. */}\n {/* @ts-expect-error MUI Modal `open` is accepted at runtime */}\n <Modal open={open} onClose={() => setOpen(false)}>\n <div className=\"bg-popover fixed top-1/2 left-1/2 z-50 w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 rounded-xl p-2 outline-none sm:max-w-3xl\">\n <span className=\"absolute top-2 right-2 z-10 inline-flex\">\n <IconButton icon=\"xmark\" tooltip=\"Close\" onClick={() => setOpen(false)} />\n </span>\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 </div>\n </Modal>\n </>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AttachmentPreviewDialog: typeof AttachmentPreviewDialog;\n }\n}\n","import { forwardRef } from \"react\";\nimport IconButton from \"tfy-web-components/components/atoms/IconButton\";\nimport type { IconButtonProps } from \"tfy-web-components/components/atoms/IconButton\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ScrollToBottomButtonProps = Omit<IconButtonProps, \"tooltip\" | \"icon\">;\n\nexport const ScrollToBottomButton = forwardRef<HTMLSpanElement, ScrollToBottomButtonProps>(\n ({ className, disabled, ...rest }, ref) => {\n if (disabled) return null;\n return (\n <span\n ref={ref}\n className={cn(\"absolute -top-14 z-10 inline-flex self-center\")}\n >\n <IconButton\n icon=\"arrow-down\"\n tooltip=\"Scroll to bottom\"\n disabled={disabled}\n className={cn(\n \"aui-thread-scroll-to-bottom dark:border-border dark:bg-background dark:hover:bg-accent rounded-full p-4\",\n className,\n )}\n {...rest}\n />\n </span>\n );\n },\n);\n\nScrollToBottomButton.displayName = \"ScrollToBottomButton\";\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ScrollToBottomButton: typeof ScrollToBottomButton;\n }\n}\n","import IconProvider from \"tfy-web-components/components/atoms/IconProvider\";\nimport IconButton from \"tfy-web-components/components/atoms/IconButton\";\nimport DropdownMenu from \"tfy-web-components/components/molecules/DropdownMenu\";\n\nimport { cn } from \"./lib/cn.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 <div className=\"absolute end-1.5 top-1/2 inline-flex -translate-y-1/2 opacity-0 group-hover:opacity-100\">\n <DropdownMenu\n trigger={\n <IconButton\n icon=\"ellipsis\"\n tooltip=\"More options\"\n className=\"size-6 p-0\"\n />\n }\n side=\"right\"\n align=\"start\"\n >\n {onArchive && (\n <DropdownMenu.Item onClick={onArchive}>\n <IconProvider icon=\"box-archive\" size={0.75} />\n Archive\n </DropdownMenu.Item>\n )}\n {onDelete && (\n <DropdownMenu.Item onClick={onDelete} className=\"text-destructive hover:bg-destructive/10\">\n <IconProvider icon=\"trash\" size={0.75} />\n Delete\n </DropdownMenu.Item>\n )}\n </DropdownMenu>\n </div>\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 Button, { type ButtonProps } from \"tfy-web-components/components/atoms/Button\";\nimport Skeleton from \"tfy-web-components/components/atoms/Skeleton\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ThreadListNewButtonProps = Omit<ButtonProps, \"text\" | \"icon\">;\n\nexport function ThreadListNewButton({ className, ...rest }: ThreadListNewButtonProps) {\n return (\n <Button.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 icon=\"plus\"\n text=\"New Thread\"\n {...rest}\n />\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(\"font-sans-flex 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","\"use client\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\n\nexport type MessageActionBarProps = {\n isCopied: boolean;\n onCopy: () => void;\n className?: string;\n};\n\nexport function MessageActionBar({ isCopied, onCopy, className }: MessageActionBarProps) {\n const MessageTimestamp = useSlot(\"MessageTimestamp\");\n const IconButton = useSlot(\"IconButton\");\n\n return (\n <div\n className={cn(\n \"aui-assistant-action-bar-root text-muted-foreground animate-in fade-in flex items-center gap-3 duration-200\",\n className,\n )}\n >\n <MessageTimestamp />\n <IconButton\n icon={isCopied ? \"check\" : [\"far\", \"clone\"]}\n tooltip=\"Copy\"\n onClick={onCopy}\n />\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageActionBar: typeof MessageActionBar;\n }\n}\n","\"use client\";\n\nimport { MarkdownWithOpenUI } from \"tfy-web-components/components/molecules/Markdown\";\n\nimport { useThemeMode } from \"../theme/SlotsProvider.js\";\n\nexport type MarkdownProps = {\n content: string;\n isStreaming?: boolean;\n /** Base URL for resolving sandbox artifact download paths (e.g. gateway file endpoint). */\n fileDownloadBaseUrl?: string;\n /** Custom download handler that receives the original sandbox artifact path. */\n onDownloadArtifact?: (path: string, filename: string) => Promise<void>;\n /** When true, download actions in sandbox artifact blocks are hidden/disabled. */\n readOnly?: boolean;\n className?: string;\n};\n\nexport function Markdown({\n content,\n isStreaming,\n fileDownloadBaseUrl,\n onDownloadArtifact,\n readOnly,\n className,\n}: MarkdownProps) {\n const mode = useThemeMode();\n\n return (\n <MarkdownWithOpenUI\n isStreaming={isStreaming}\n darkTheme={mode === \"dark\"}\n fileDownloadBaseUrl={fileDownloadBaseUrl}\n onDownloadArtifact={onDownloadArtifact}\n readOnly={readOnly}\n className={className}\n >\n {content}\n </MarkdownWithOpenUI>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n Markdown: typeof Markdown;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { AssistantMessage } from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type AssistantMessageBubbleProps = {\n children: ReactNode;\n error?: ReactNode;\n actionBar?: ReactNode;\n className?: string;\n};\n\nexport function AssistantMessageBubble({\n children,\n error,\n actionBar,\n className,\n}: AssistantMessageBubbleProps) {\n return (\n <div\n data-slot=\"aui_assistant-message-root\"\n className={cn(\n \"group/assistant fade-in slide-in-from-bottom-1 animate-in relative duration-150\",\n className,\n )}\n >\n <AssistantMessage error={error} actionBar={actionBar}>\n {children}\n </AssistantMessage>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AssistantMessageBubble: typeof AssistantMessageBubble;\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","\"use client\";\n\nimport { useAuiState } from \"@assistant-ui/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\n\nfunction toDate(createdAt: Date | string | undefined): Date | null {\n if (createdAt == null) {\n return null;\n }\n const date = createdAt instanceof Date ? createdAt : new Date(createdAt);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\nfunction formatTime(date: Date): string {\n return new Intl.DateTimeFormat(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true,\n }).format(date);\n}\n\nfunction formatFullDate(date: Date): string {\n return new Intl.DateTimeFormat(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: true,\n }).format(date);\n}\n\nexport type MessageTimestampProps = {\n className?: string;\n};\n\nexport function MessageTimestamp({ className }: MessageTimestampProps) {\n const LightTooltip = useSlot(\"LightTooltip\");\n const createdAt = useAuiState((s) => s.message.createdAt);\n const date = toDate(createdAt);\n\n if (date == null) {\n return null;\n }\n\n return (\n <LightTooltip title={formatFullDate(date)} size=\"fit\">\n <span\n className={cn(\n \"text-xs font-medium cursor-pointer leading-normal shrink-0 text-muted-foreground\",\n className,\n )}\n >\n {formatTime(date)}\n </span>\n </LightTooltip>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageTimestamp: typeof MessageTimestamp;\n }\n}\n","\"use client\";\n\nimport { ActionBarPrimitive, useAuiState } from \"@assistant-ui/react\";\nimport { useActionBarCopy, useActionBarEdit } from \"@assistant-ui/core/react\";\nimport { useTrueFoundryResetFromTurn } 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 MessageTimestamp = useSlot(\"MessageTimestamp\");\n const messageId = useAuiState((s) => s.message.id);\n const turnId = parseTurnIdFromMessageId(messageId);\n const resetFromTurn = useTrueFoundryResetFromTurn();\n const { edit, disabled: editDisabled } = useActionBarEdit();\n const { copy, isCopied } = useActionBarCopy({\n copyToClipboard: (text) => navigator.clipboard.writeText(text),\n });\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 items-center gap-2 duration-200\",\n className,\n )}\n >\n <IconButton\n icon=\"rotate-right\"\n tooltip=\"Try again\"\n onClick={() => void resetFromTurn(turnId)}\n />\n <IconButton\n icon=\"pencil\"\n tooltip=\"Edit\"\n disabled={editDisabled}\n onClick={edit}\n />\n <IconButton\n icon={isCopied ? \"check\" : [\"far\", \"clone\"]}\n tooltip=\"Copy\"\n onClick={copy}\n />\n <MessageTimestamp />\n </ActionBarPrimitive.Root>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n UserMessageActionBar: typeof UserMessageActionBar;\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 \"font-sans-flex 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\";\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 type { ReactNode } from \"react\";\nimport { XIcon } from \"lucide-react\";\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 if (!open) return null;\n\n return (\n <div\n className={cn(\n \"font-sans-flex 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 \"animate-in fade-in-0 slide-in-from-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 <div className=\"text-sm leading-none font-semibold\">{title}</div>\n <div className=\"font-mono text-sm break-words whitespace-pre-wrap\">\n {description}\n </div>\n </div>\n <button\n onClick={() => onOpenChange(false)}\n 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 >\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </button>\n </div>\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 <>\n {children}\n <div 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 </>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n Toast: typeof Toast;\n ToastStack: typeof ToastStack;\n }\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 \"./icons/fontawesome.js\";\nimport \"./icons/registerAgentIcons.js\";\n\nexport { SlotsProvider, useSlot, useThemeMode } from \"./theme/SlotsProvider.js\";\nexport type { AtomSlots, SlotOverrides, ThemeMode } from \"./theme/SlotsProvider.js\";\nexport { defaultSlots } from \"./theme/defaultSlots.js\";\nexport { TokensProvider, useTokens, defaultTokens } from \"./theme/tokens.js\";\nexport type {\n ColorToken,\n RadiusToken,\n SpacingToken,\n TypeRoleToken,\n TypeRoleValue,\n DesignTokens,\n} from \"./theme/tokens.js\";\n\nexport {\n Button,\n DestructiveButton,\n GhostButton,\n PrimaryButton,\n SecondaryButton,\n TertiaryButton,\n} from \"tfy-web-components/components/atoms/Button\";\nexport type {\n ButtonProps,\n ButtonSize,\n} from \"tfy-web-components/components/atoms/Button\";\nexport { default as IconButton } from \"tfy-web-components/components/atoms/IconButton\";\nexport type { IconButtonProps } from \"tfy-web-components/components/atoms/IconButton\";\nexport {\n default as IconProvider,\n registerIcons,\n registerImgIcons,\n} from \"tfy-web-components/components/atoms/IconProvider\";\nexport type { IconProp } from \"tfy-web-components/components/atoms/IconProvider\";\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n} from \"./atoms/primitives/Avatar.js\";\nexport type {\n AvatarProps,\n AvatarImageProps,\n AvatarFallbackProps,\n} from \"./atoms/primitives/Avatar.js\";\nexport { LightTooltip } from \"tfy-web-components/components/atoms/Tooltip\";\nexport type { TooltipProps } from \"tfy-web-components/components/atoms/Tooltip\";\nexport { default as Modal } from \"tfy-web-components/components/atoms/Modal\";\nexport type { ModalProps } from \"tfy-web-components/components/atoms/Modal\";\nexport { default as Dialog } from \"tfy-web-components/components/molecules/Dialog\";\nexport {\n Accordion,\n AccordionSummary,\n AccordionDetails,\n} from \"tfy-web-components/components/atoms/Accordion\";\nexport type { AccordionSummaryProps } from \"tfy-web-components/components/atoms/Accordion\";\nexport { default as Skeleton } from \"tfy-web-components/components/atoms/Skeleton\";\n\nexport { Markdown } from \"./atoms/Markdown.js\";\nexport type { MarkdownProps } from \"./atoms/Markdown.js\";\nexport { UserMessageBubble } from \"./atoms/UserMessageBubble.js\";\nexport type { UserMessageBubbleProps } from \"./atoms/UserMessageBubble.js\";\nexport { UserMessageEdit } from \"./atoms/UserMessageEdit.js\";\nexport type { UserMessageEditProps } from \"./atoms/UserMessageEdit.js\";\nexport { AssistantMessageBubble } from \"./atoms/AssistantMessageBubble.js\";\nexport type { AssistantMessageBubbleProps } from \"./atoms/AssistantMessageBubble.js\";\nexport { MessageErrorBanner } from \"./atoms/MessageErrorBanner.js\";\nexport type { MessageErrorBannerProps } from \"./atoms/MessageErrorBanner.js\";\nexport { MessageActionBar } from \"./atoms/MessageActionBar.js\";\nexport type { MessageActionBarProps } from \"./atoms/MessageActionBar.js\";\nexport { MessageTimestamp } from \"./atoms/MessageTimestamp.js\";\nexport type { MessageTimestampProps } from \"./atoms/MessageTimestamp.js\";\nexport { UserMessageActionBar } from \"./atoms/UserMessageActionBar.js\";\nexport type { UserMessageActionBarProps } from \"./atoms/UserMessageActionBar.js\";\nexport { MessageIndicator } from \"./atoms/MessageIndicator.js\";\nexport type { MessageIndicatorProps } from \"./atoms/MessageIndicator.js\";\nexport { WelcomeScreen } from \"./atoms/WelcomeScreen.js\";\nexport type { WelcomeScreenProps } from \"./atoms/WelcomeScreen.js\";\nexport { MessageListSkeleton } from \"./atoms/Skeletons.js\";\nexport type { MessageListSkeletonProps } from \"./atoms/Skeletons.js\";\nexport { ScrollToBottomButton } from \"./atoms/ScrollToBottomButton.js\";\nexport type { ScrollToBottomButtonProps } from \"./atoms/ScrollToBottomButton.js\";\nexport {\n ThreadRootShell,\n ThreadViewportShell,\n ThreadComposerAreaShell,\n MessageGroup,\n} from \"./atoms/ThreadShell.js\";\nexport type {\n ThreadRootShellProps,\n ThreadViewportShellProps,\n ThreadComposerAreaShellProps,\n MessageGroupProps,\n} from \"./atoms/ThreadShell.js\";\n\nexport { ToolCallCard } from \"./atoms/ToolCallCard.js\";\nexport type {\n ToolCallStatus,\n ToolCallCardProps,\n} from \"./atoms/ToolCallCard.js\";\nexport { ToolCallContentBlock } from \"./atoms/ToolCallContentBlock.js\";\nexport type { ToolCallContentBlockProps } from \"./atoms/ToolCallContentBlock.js\";\nexport { SubAgentCard } from \"./atoms/SubAgentCard.js\";\nexport type { SubAgentCardProps } from \"./atoms/SubAgentCard.js\";\nexport { SandboxToolCallCard } from \"./atoms/SandboxToolCallCard.js\";\nexport type { SandboxToolCallCardProps } from \"./atoms/SandboxToolCallCard.js\";\nexport { ToolApprovalBar } from \"./atoms/ToolApprovalBar.js\";\nexport type { ToolApprovalBarProps } from \"./atoms/ToolApprovalBar.js\";\nexport { ToolGroupCard } from \"./atoms/ToolGroupCard.js\";\nexport type { ToolGroupCardProps } from \"./atoms/ToolGroupCard.js\";\nexport type { ReasoningCardProps } from \"./atoms/adapters/ReasoningCardAdapter.js\";\nexport { ComposerShell } from \"./atoms/ComposerShell.js\";\nexport type { ComposerShellProps } from \"./atoms/ComposerShell.js\";\nexport {\n ComposerLeftSection,\n ComposerRightSection,\n ComposerSendButton,\n} from \"./atoms/ComposerSections.js\";\nexport type {\n ComposerLeftSectionProps,\n ComposerRightSectionProps,\n ComposerSendButtonProps,\n} from \"./atoms/ComposerSections.js\";\nexport type {\n AskUserPromptProps,\n AskUserPromptProps as AskUserQuestionCardProps,\n AskUserAnswerDraft,\n AnsweredQuestion as AskUserAnsweredQuestion,\n Question as AskUserQuestion,\n} from \"./atoms/adapters/AskUserPromptAdapter.js\";\nexport type {\n McpAuthPromptProps,\n McpAuthPromptProps as McpAuthCardProps,\n McpServer as McpAuthServer,\n} from \"./atoms/adapters/McpAuthPromptAdapter.js\";\nexport {\n AttachmentCard,\n USER_MESSAGE_ATTACHMENT_PREVIEW_REM,\n} from \"./atoms/AttachmentCard.js\";\nexport type {\n AttachmentCardProps,\n AttachmentCardSize,\n} from \"./atoms/AttachmentCard.js\";\nexport { AttachmentPreviewDialog } from \"./atoms/AttachmentPreviewDialog.js\";\nexport type { AttachmentPreviewDialogProps } from \"./atoms/AttachmentPreviewDialog.js\";\nexport { AttachmentPickerButton } from \"./atoms/AttachmentPickerButton.js\";\nexport type { AttachmentPickerButtonProps } from \"./atoms/AttachmentPickerButton.js\";\nexport { ThreadListRow } from \"./atoms/ThreadListRow.js\";\nexport type { ThreadListRowProps } from \"./atoms/ThreadListRow.js\";\nexport {\n ThreadListNewButton,\n ThreadListRowSkeleton,\n ThreadListEmptyState,\n ThreadListShell,\n} from \"./atoms/ThreadListMisc.js\";\nexport type {\n ThreadListNewButtonProps,\n ThreadListRowSkeletonProps,\n ThreadListEmptyStateProps,\n ThreadListShellProps,\n} from \"./atoms/ThreadListMisc.js\";\nexport { Toast, ToastStack } from \"./atoms/Toast.js\";\nexport type { ToastProps, ToastStackProps } from \"./atoms/Toast.js\";\nexport { ThreadContainer } from \"./containers/ThreadContainer.js\";\nexport type { ThreadContainerProps } from \"./containers/ThreadContainer.js\";\nexport { AssistantMessageContainer } from \"./containers/AssistantMessageContainer.js\";\nexport { UserMessageContainer } from \"./containers/UserMessageContainer.js\";\nexport { UserEditComposerContainer } from \"./containers/UserEditComposerContainer.js\";\nexport { AssistantTextContainer } from \"./containers/AssistantTextContainer.js\";\nexport { ToolCallContainer } from \"./containers/ToolCallContainer.js\";\nexport { ToolCallContentBlockContainer } from \"./containers/ToolCallContentBlockContainer.js\";\nexport { ToolApprovalContainer } from \"./containers/ToolApprovalContainer.js\";\nexport type { ToolApprovalOption } from \"./containers/ToolApprovalContainer.js\";\nexport { ToolGroupContainer } from \"./containers/ToolGroupContainer.js\";\nexport type { ThreadGroupPart } from \"./containers/ToolGroupContainer.js\";\nexport { ReasoningContainer } from \"./containers/ReasoningContainer.js\";\nexport { ComposerContainer } from \"./containers/ComposerContainer.js\";\nexport type { ComposerContainerProps } from \"./containers/ComposerContainer.js\";\nexport {\n ComposerBusyProvider,\n useComposerBusyState,\n} from \"./hooks/useComposerBusyState.js\";\nexport type { ComposerBusyState } from \"./hooks/useComposerBusyState.js\";\nexport {\n threadHasPendingMcpAuth,\n useComposerPauseView,\n} from \"./hooks/useComposerPauseView.js\";\nexport type {\n ComposerPauseView,\n ThreadPauseState,\n} from \"./hooks/useComposerPauseView.js\";\nexport { AskUserContainer } from \"./containers/AskUserContainer.js\";\nexport { McpAuthContainer } from \"./containers/McpAuthContainer.js\";\nexport {\n ComposerAttachmentsContainer,\n ComposerAttachmentPickerContainer,\n MessageAttachmentsContainer,\n} from \"./containers/AttachmentsContainer.js\";\nexport { ThreadListContainer } from \"./containers/ThreadListContainer.js\";\nexport {\n ErrorToasterProvider,\n useErrorToaster,\n useErrorToasterOptional,\n} from \"./containers/ErrorToasterContainer.js\";\nexport { Thread } from \"./containers/Thread.js\";\n","\"use client\";\n\nimport { useEffect, type ReactNode } from \"react\";\nimport { preloadMarkdownOpenUI } from \"tfy-web-components/components/molecules/Markdown\";\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 useEffect(() => {\n void preloadMarkdownOpenUI();\n }, []);\n\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 {!isEmpty && (\n <ThreadPrimitive.ScrollToBottom asChild>\n <ScrollToBottomButton />\n </ThreadPrimitive.ScrollToBottom>\n )}\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, type EnrichedPartState } from \"@assistant-ui/react\";\nimport { useActionBarCopy, useMessageError, useThreadIsRunning } 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\nexport function AssistantMessageContainer() {\n const AssistantMessageBubble = useSlot(\"AssistantMessageBubble\");\n const MessageIndicator = useSlot(\"MessageIndicator\");\n const MessageErrorBanner = useSlot(\"MessageErrorBanner\");\n const MessageActionBar = useSlot(\"MessageActionBar\");\n\n const isRunning = useThreadIsRunning();\n const error = useMessageError();\n const { copy, isCopied } = useActionBarCopy({\n copyToClipboard: (text) => navigator.clipboard.writeText(text),\n });\n\n return (\n <MessagePrimitive.Root data-role=\"assistant\">\n <AssistantMessageBubble\n error={error !== undefined ? <MessageErrorBanner message={String(error)} /> : undefined}\n actionBar={\n !isRunning ? (\n <MessageActionBar isCopied={isCopied} onCopy={copy} />\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 );\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 </AssistantMessageBubble>\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 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 { USER_MESSAGE_ATTACHMENT_PREVIEW_REM } from \"../constants/attachments.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport function MessageImageContainer() {\n const AttachmentCard = useSlot(\"AttachmentCard\");\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 { useCallback, useRef, useState } 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 }: { group: ThreadGroupPart }) {\n const ReasoningCard = useSlot(\"ReasoningCard\");\n\n const content = useAuiState((s) =>\n group.indices\n .map((i) => s.message.parts[i])\n .filter((p): p is NonNullable<typeof p> => p != null && p.type === \"reasoning\")\n .map((p) => ((p as { text?: string }).text ?? \"\"))\n .join(\"\"),\n );\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 const lastGroupIndex = group.indices[group.indices.length - 1];\n return lastGroupIndex !== undefined && lastIndex >= group.indices[0]! && lastIndex <= lastGroupIndex;\n });\n\n const [expanded, setExpanded] = useState(streaming);\n const [prevStreaming, setPrevStreaming] = useState(streaming);\n const [isMultiLine, setIsMultiLine] = useState(false);\n const observerRef = useRef<ResizeObserver | null>(null);\n if (streaming !== prevStreaming) {\n setPrevStreaming(streaming);\n if (streaming) setExpanded(true);\n }\n\n const contentRef = useCallback(\n (node: HTMLDivElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n if (node == null || streaming) return;\n\n const check = () => {\n const lineHeight = Number.parseFloat(getComputedStyle(node).lineHeight) || 24;\n setIsMultiLine(node.scrollHeight > lineHeight * 1.5);\n };\n\n check();\n observerRef.current = new ResizeObserver(check);\n observerRef.current.observe(node);\n },\n [streaming],\n );\n const reasoningTimeText = null;\n const previewText = content.replace(/\\s+/g, \" \").trim();\n const isShortText = !streaming && content.length > 0 && !isMultiLine;\n const headingText =\n streaming && !content\n ? expanded\n ? \"Reasoning\"\n : \"Show Reasoning\"\n : reasoningTimeText ?? (expanded ? \"Hide Reasoning\" : \"Show Reasoning\");\n\n return (\n <ReasoningCard\n content={content}\n isStreaming={streaming}\n expanded={expanded}\n isMultiLine={isMultiLine}\n reasoningTimeText={reasoningTimeText}\n previewText={previewText}\n headingText={headingText}\n contentRef={isShortText ? contentRef : undefined}\n onToggle={() => setExpanded((prev) => !prev)}\n />\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport {\n MessagePartPrimitive,\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 { ToolCallStatus } from \"../atoms/ToolCallCard.js\";\nimport { AssistantTextContainer } from \"./AssistantTextContainer.js\";\nimport {\n NestedApprovalBridgeContext,\n useNestedApprovalBridge,\n} from \"./nestedApprovalBridge.js\";\nimport { SandboxToolCallContainer } from \"./SandboxToolCallContainer.js\";\nimport {\n ToolApprovalContainer,\n type ToolApprovalOption,\n} from \"./ToolApprovalContainer.js\";\nimport { ToolCallContentBlockContainer } from \"./ToolCallContentBlockContainer.js\";\n\nconst SUB_AGENT_TOOL_NAME = \"create_sub_agent\";\nconst ASK_USER_TOOL_NAME = \"ask_user_question\";\n\nfunction NestedSubAgentAssistantMessage() {\n const AssistantMessageBubble = useSlot(\"AssistantMessageBubble\");\n\n return (\n <div className=\"mb-3 min-w-0\">\n <MessagePrimitive.Root data-role=\"assistant\">\n <AssistantMessageBubble>\n <MessagePrimitive.Parts\n components={{\n Text: AssistantTextContainer,\n Reasoning: AssistantTextContainer,\n tools: { Fallback: ToolCallContainer },\n }}\n />\n </AssistantMessageBubble>\n </MessagePrimitive.Root>\n </div>\n );\n}\n\nfunction parseAskUserQuestionArgs(argsText: string | undefined): {\n question?: string;\n options?: string[];\n} {\n if (!argsText) return {};\n try {\n const parsed: unknown = JSON.parse(argsText);\n if (parsed == null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return {};\n }\n const record = parsed as Record<string, unknown>;\n const question =\n typeof record.question === \"string\" ? record.question : undefined;\n const options = Array.isArray(record.options)\n ? record.options.filter(\n (item): item is string => typeof item === \"string\",\n )\n : undefined;\n return { question, options };\n } catch {\n return {};\n }\n}\n\nfunction getAskUserAnswerResult(result: unknown): string | undefined {\n if (result === undefined || result === null) return undefined;\n if (typeof result === \"string\") {\n const trimmed = result.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n if (typeof result === \"object\" && \"content\" in result) {\n const content = (result as { content?: unknown }).content;\n if (typeof content === \"string\" && content.trim()) {\n return content.trim();\n }\n }\n return undefined;\n}\n\nfunction hasPendingAskUserResponse(\n part: Pick<ToolCallMessagePartProps, \"interrupt\" | \"result\">,\n): boolean {\n return part.interrupt != null && part.result === undefined;\n}\n\n/** Tool names that should be rendered as a sandbox execution card. */\nconst SANDBOX_TOOL_NAMES = new Set([\"exec\", \"sandbox_exec\"]);\n\n/** MCP meta-tools that wrap actual tool calls. */\nconst MCP_META_TOOLS = new Set([\"call_tool\", \"list_tools\", \"get_tool_info\"]);\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) =>\n kind === \"allow-once\" || kind === \"allow-always\";\n\nfunction hasPendingToolApproval(\n approval:\n { approved?: boolean; resolution?: \"cancelled\" | \"expired\" } | undefined,\n) {\n return (\n approval != null &&\n approval.approved === undefined &&\n approval.resolution === undefined\n );\n}\n\nfunction buildApprovalOptions(\n options: readonly AuiToolApprovalOption[] | undefined,\n): ToolApprovalOption[] {\n const declared = options?.filter((o) =>\n Object.hasOwn(APPROVAL_OPTION_DEFAULT_LABELS, o.kind),\n );\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\n ? typeof o.confirm === \"object\"\n ? o.confirm\n : {}\n : undefined,\n }));\n if (reject.length === 0) {\n mapped.push({ id: \"__deny\", label: \"Deny\", isAllow: false, confirm: {} });\n }\n return mapped;\n }\n return [\n { id: \"__allow\", label: \"Allow\", isAllow: true },\n { id: \"__deny\", label: \"Deny\", isAllow: false, confirm: {} },\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 parseSandboxArgs(argsText: string | undefined): {\n command?: string;\n intent?: string;\n argsJson?: string;\n} {\n if (!argsText) return {};\n try {\n const parsed = JSON.parse(argsText) as {\n command?: string;\n intent?: string;\n };\n return {\n command: parsed.command,\n intent: parsed.intent,\n argsJson: JSON.stringify(parsed, null, 2),\n };\n } catch {\n return { argsJson: argsText };\n }\n}\n\nfunction parseSandboxResult(result: string | undefined): {\n exitCode?: number | null;\n resultText?: string;\n resultJson?: string;\n} {\n if (result === undefined) return {};\n try {\n const parsed = JSON.parse(result) as {\n response?: { exitCode?: number; result?: string };\n };\n const exitCode = parsed.response?.exitCode ?? null;\n const resultText = parsed.response?.result;\n return {\n exitCode,\n resultText,\n resultJson: JSON.stringify(parsed, null, 2),\n };\n } catch {\n return { resultText: result };\n }\n}\n\nfunction parseMcpToolArgs(argsText: string | undefined): {\n mcpServer?: string;\n innerToolName?: string;\n input?: unknown;\n} {\n if (!argsText) return {};\n try {\n const parsed = JSON.parse(argsText) as {\n mcp_server?: string;\n tool_name?: string;\n input?: unknown;\n };\n return {\n mcpServer: parsed.mcp_server,\n innerToolName: parsed.tool_name,\n input: parsed.input,\n };\n } catch {\n return {};\n }\n}\n\nfunction getJsonDisplayValue(content: string | undefined): {\n value: string;\n isJson: boolean;\n} {\n if (!content?.trim()) return { value: \"\", isJson: false };\n const trimmed = content.trim();\n if (trimmed[0] !== \"{\" && trimmed[0] !== \"[\") {\n return { value: content, isJson: false };\n }\n try {\n const parsed = JSON.parse(content);\n return { value: JSON.stringify(parsed, null, 2), isJson: true };\n } catch {\n return { value: content, isJson: false };\n }\n}\n\nfunction getToolResultContent(content: unknown): {\n data: string;\n isJson: boolean;\n} {\n try {\n if (!content) return { isJson: false, data: \"\" };\n\n const parsedResult =\n typeof content === \"string\" && content.trim().startsWith(\"{\")\n ? JSON.parse(content)\n : content;\n\n if (Array.isArray(parsedResult.content)) {\n const text = parsedResult.content[0]?.text || \"\";\n const display = getJsonDisplayValue(\n typeof text === \"string\" ? text : JSON.stringify(text),\n );\n return { data: display.value, isJson: display.isJson };\n }\n const display = getJsonDisplayValue(\n typeof parsedResult === \"string\"\n ? parsedResult\n : JSON.stringify(parsedResult),\n );\n return { data: display.value, isJson: display.isJson };\n } catch (error) {\n return { data: String(content), isJson: false };\n }\n}\n\nfunction ToolApprovalSlot({ part }: { part: ToolCallMessagePartProps }) {\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, reason?: string) => {\n if (optionId === \"__allow\") return respond({ approved: true });\n if (optionId === \"__deny\") return respond({ approved: false, reason });\n return respond({ optionId, reason });\n };\n\n return (\n <ToolApprovalContainer\n toolName={part.toolName}\n options={buildApprovalOptions(part.approval?.options)}\n onSelectOption={onSelectOption}\n />\n );\n}\n\nexport const ToolCallContainer: ToolCallMessagePartComponent = (part) => {\n const ToolCallCard = useSlot(\"ToolCallCard\");\n const SubAgentCard = useSlot(\"SubAgentCard\");\n const AskUserPrompt = useSlot(\"AskUserPrompt\");\n const respondToNestedApproval = useTrueFoundryRespondToToolApproval();\n const elapsedMs = useToolCallElapsed();\n const isRequiresAction = part.status?.type === \"requires-action\";\n const isSubAgent = part.toolName === SUB_AGENT_TOOL_NAME;\n const isSandbox = SANDBOX_TOOL_NAMES.has(part.toolName);\n const [expanded, setExpanded] = useState(isRequiresAction || isSubAgent);\n const [prevRequiresAction, setPrevRequiresAction] =\n useState(isRequiresAction);\n if (isRequiresAction !== prevRequiresAction) {\n setPrevRequiresAction(isRequiresAction);\n if (isRequiresAction) setExpanded(true);\n }\n\n const showApproval =\n isRequiresAction && hasPendingToolApproval(part.approval);\n\n const durationText =\n elapsedMs === undefined ? undefined : formatDuration(elapsedMs);\n const status = toStatus(part.status?.type);\n\n if (part.toolName === ASK_USER_TOOL_NAME) {\n if (hasPendingAskUserResponse(part)) {\n return null;\n }\n const answer = getAskUserAnswerResult(part.result);\n if (answer == null) {\n return null;\n }\n const { question, options = [] } = parseAskUserQuestionArgs(part.argsText);\n const isCustom = options.length > 0 && !options.includes(answer);\n return (\n <AskUserPrompt\n questions={[]}\n answeredQuestions={[\n {\n id: part.toolCallId,\n question: question ?? \"Question\",\n options,\n answer,\n isCustom,\n },\n ]}\n onSubmit={() => {}}\n readOnly\n />\n );\n }\n\n if (isSubAgent) {\n const artifactSubAgent = (\n part as {\n artifact?: {\n subAgents?: Array<{\n title?: string;\n agentInfo?: { name?: string; input?: string };\n }>;\n };\n }\n ).artifact?.subAgents?.[0];\n const firstNested = part.messages?.[0];\n const subAgent = (\n firstNested?.metadata?.custom as\n | { subAgent?: { title?: string; name?: string; input?: string } }\n | undefined\n )?.subAgent;\n const agentName =\n subAgent?.title ??\n subAgent?.name ??\n artifactSubAgent?.title ??\n artifactSubAgent?.agentInfo?.name ??\n part.toolName;\n const instruction =\n subAgent?.input ?? artifactSubAgent?.agentInfo?.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 <div\n data-slot=\"tool-call-card\"\n data-variant=\"sub-agent\"\n className=\"w-full py-2\"\n >\n <SubAgentCard\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 <MessagePartPrimitive.Messages\n components={{\n AssistantMessage: NestedSubAgentAssistantMessage,\n UserMessage: () => null,\n }}\n />\n </NestedApprovalBridgeContext.Provider>\n </SubAgentCard>\n </div>\n );\n }\n\n const resultString =\n part.result === undefined\n ? undefined\n : typeof part.result === \"string\"\n ? part.result\n : JSON.stringify(part.result, null, 2);\n\n if (isSandbox) {\n const { command, intent, argsJson } = parseSandboxArgs(part.argsText);\n const { exitCode, resultText, resultJson } =\n parseSandboxResult(resultString);\n return (\n <SandboxToolCallContainer\n name={part.toolName}\n intent={intent}\n status={status}\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n durationText={durationText}\n command={command}\n exitCode={exitCode}\n argsJson={argsJson}\n resultText={resultText}\n resultJson={resultJson}\n />\n );\n }\n\n const isMcpMetaTool = MCP_META_TOOLS.has(part.toolName);\n if (isMcpMetaTool) {\n const { mcpServer, innerToolName, input } = parseMcpToolArgs(part.argsText);\n const argsDisplay = getJsonDisplayValue(part.argsText);\n const resultDisplay = getToolResultContent(part.result);\n\n if (part.toolName === \"list_tools\" && mcpServer) {\n return (\n <ToolCallCard\n toolName={`Listing tools · ${mcpServer}`}\n icon=\"mcp-server\"\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n awaiting={status === \"running\"}\n awaitingText={durationText ?? \"Awaiting Response…\"}\n showResponseLine={status !== \"running\" && !!resultDisplay.data}\n requestSlot={\n argsDisplay.value ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content={argsDisplay.value}\n isJson={argsDisplay.isJson}\n maxHeight=\"10.5rem\"\n />\n ) : resultDisplay.data ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content=\"{}\"\n isJson\n maxHeight=\"10.5rem\"\n />\n ) : undefined\n }\n responseSlot={\n resultDisplay.data ? (\n <ToolCallContentBlockContainer\n title=\"Response\"\n content={resultDisplay.data}\n isJson={resultDisplay.isJson}\n resizable\n />\n ) : undefined\n }\n />\n );\n }\n\n let displayName = part.toolName;\n if (part.toolName === \"call_tool\" && innerToolName) {\n displayName = mcpServer\n ? `call_tool: ${innerToolName} (${mcpServer})`\n : `call_tool: ${innerToolName}`;\n } else if (\n part.toolName === \"get_tool_info\" &&\n innerToolName &&\n mcpServer\n ) {\n displayName = `get_tool_info: ${innerToolName} (${mcpServer})`;\n }\n\n const inputDisplay =\n input !== undefined\n ? getJsonDisplayValue(JSON.stringify(input, null, 2))\n : argsDisplay;\n\n return (\n <ToolCallCard\n toolName={displayName}\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n awaiting={status === \"running\"}\n awaitingText={durationText ?? \"Awaiting Response…\"}\n showResponseLine={\n status !== \"running\" && resultDisplay.data !== undefined\n }\n requestSlot={\n inputDisplay.value ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content={inputDisplay.value}\n isJson={inputDisplay.isJson}\n maxHeight=\"10.5rem\"\n />\n ) : resultDisplay.data !== undefined ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content=\"{}\"\n isJson\n maxHeight=\"10.5rem\"\n />\n ) : undefined\n }\n responseSlot={\n resultDisplay.data !== undefined ? (\n <ToolCallContentBlockContainer\n title=\"Response\"\n content={resultDisplay.data}\n isJson={resultDisplay.isJson}\n resizable\n />\n ) : undefined\n }\n approvalSlot={\n showApproval ? <ToolApprovalSlot part={part} /> : undefined\n }\n />\n );\n }\n\n const argsDisplay = getJsonDisplayValue(part.argsText);\n const resultDisplay = getToolResultContent(part.result);\n\n return (\n <ToolCallCard\n toolName={part.toolName}\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n awaiting={status === \"running\"}\n awaitingText={durationText ?? \"Awaiting Response…\"}\n showResponseLine={\n status !== \"running\" && resultDisplay.data !== undefined\n }\n requestSlot={\n argsDisplay.value ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content={argsDisplay.value}\n isJson={argsDisplay.isJson}\n maxHeight=\"10.5rem\"\n />\n ) : resultDisplay.data !== undefined ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content=\"{}\"\n isJson\n maxHeight=\"10.5rem\"\n />\n ) : undefined\n }\n responseSlot={\n resultDisplay.data !== undefined ? (\n <ToolCallContentBlockContainer\n title=\"Response\"\n content={resultDisplay.data}\n isJson={resultDisplay.isJson}\n resizable\n />\n ) : undefined\n }\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 { useMemo, useState } from \"react\";\n\nimport type { SandboxToolCallCardProps } from \"../atoms/SandboxToolCallCard.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport function SandboxToolCallContainer(\n props: Omit<\n SandboxToolCallCardProps,\n \"viewMode\" | \"hasContent\" | \"onViewModeChange\"\n >,\n) {\n const SandboxToolCallCard = useSlot(\"SandboxToolCallCard\");\n const [viewMode, setViewMode] = useState<\"terminal\" | \"code\">(\"terminal\");\n const hasContent = useMemo(() => {\n if (viewMode === \"code\") return Boolean(props.argsJson || props.resultJson);\n return Boolean(props.command || props.resultText || props.resultJson);\n }, [\n props.argsJson,\n props.command,\n props.resultJson,\n props.resultText,\n viewMode,\n ]);\n\n return (\n <SandboxToolCallCard\n {...props}\n viewMode={viewMode}\n hasContent={hasContent}\n onViewModeChange={setViewMode}\n />\n );\n}\n","\"use client\";\n\nimport { useCallback, useMemo, useState } from \"react\";\n\nimport type { ApprovalOption } from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { useSlot } from \"../theme/SlotsProvider.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\ntype ToolApprovalContainerProps = {\n toolName?: string;\n options: ToolApprovalOption[];\n onSelectOption: (optionId: string, reason?: string) => void;\n};\n\nexport function ToolApprovalContainer({\n toolName = \"\",\n options,\n onSelectOption,\n}: ToolApprovalContainerProps) {\n const ToolApprovalBar = useSlot(\"ToolApprovalBar\");\n const [selectedDenyOptionId, setSelectedDenyOptionId] = useState<\n string | null\n >(null);\n const [denialReason, setDenialReason] = useState(\"\");\n const [showReasonError, setShowReasonError] = useState(false);\n const approveOptions = useMemo<ApprovalOption[]>(\n () =>\n options\n .filter((option) => option.isAllow)\n .map((option, index) => ({\n ...option,\n variant: index === 0 ? \"primary\" : \"secondary\",\n requiresReason: false,\n })),\n [options],\n );\n const denyOptions = useMemo<ApprovalOption[]>(\n () =>\n options\n .filter((option) => !option.isAllow)\n .map((option) => ({\n ...option,\n variant: \"secondary\",\n requiresReason: option.confirm != null,\n })),\n [options],\n );\n const selectedDenyOption = denyOptions.find(\n (option) => option.id === selectedDenyOptionId,\n );\n\n const onDenyOptionChange = useCallback((optionId: string | null) => {\n setSelectedDenyOptionId(optionId);\n setDenialReason(\"\");\n setShowReasonError(false);\n }, []);\n const onDenialReasonChange = useCallback((reason: string) => {\n setDenialReason(reason);\n setShowReasonError(false);\n }, []);\n const onReasonSubmit = useCallback(() => {\n const reason = denialReason.trim();\n if (!reason) {\n setShowReasonError(true);\n return;\n }\n if (selectedDenyOptionId) {\n onSelectOption(selectedDenyOptionId, reason);\n onDenyOptionChange(null);\n }\n }, [denialReason, onDenyOptionChange, onSelectOption, selectedDenyOptionId]);\n\n return (\n <ToolApprovalBar\n toolName={toolName}\n approveOptions={approveOptions.length > 0 ? approveOptions : undefined}\n denyOptions={denyOptions.length > 0 ? denyOptions : undefined}\n selectedDenyOption={selectedDenyOption}\n denialReason={denialReason}\n showReasonError={showReasonError}\n onSelect={onSelectOption}\n onDenyOptionChange={onDenyOptionChange}\n onDenialReasonChange={onDenialReasonChange}\n onReasonSubmit={onReasonSubmit}\n />\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport type { ToolCallContentBlockProps } from \"../atoms/ToolCallContentBlock.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport function ToolCallContentBlockContainer(\n props: ToolCallContentBlockProps,\n) {\n const ToolCallContentBlock = useSlot(\"ToolCallContentBlock\");\n const [fullscreen, setFullscreen] = useState(false);\n const [contentHeightRem, setContentHeightRem] = useState(1.5);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const contentRef = useCallback(\n (node: HTMLDivElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n if (!props.resizable || node == null) return;\n\n const updateHeight = () => setContentHeightRem(node.scrollHeight / 16);\n updateHeight();\n observerRef.current = new ResizeObserver(updateHeight);\n observerRef.current.observe(node);\n },\n [props.resizable],\n );\n\n useEffect(\n () => () => {\n observerRef.current?.disconnect();\n },\n [],\n );\n\n return (\n <ToolCallContentBlock\n {...props}\n fullscreen={fullscreen}\n onFullscreenChange={setFullscreen}\n contentHeightRem={contentHeightRem}\n contentRef={contentRef}\n />\n );\n}\n","\"use client\";\n\nimport { useState, type PropsWithChildren, type ReactNode } from \"react\";\nimport { useAuiState, type MessagePrimitive } from \"@assistant-ui/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport type ThreadGroupPart = MessagePrimitive.GroupedParts.GroupPart;\n\nexport function ToolGroupContainer({\n children,\n group,\n}: PropsWithChildren<{ group: ThreadGroupPart }>) {\n const ToolGroupCard = useSlot(\"ToolGroupCard\");\n\n const toolCallCount = group.indices.length;\n\n const active = 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 !== \"tool-call\") return false;\n const lastGroupIndex = group.indices[group.indices.length - 1];\n return lastGroupIndex !== undefined && lastIndex >= group.indices[0]! && lastIndex <= lastGroupIndex;\n });\n\n const [expanded, setExpanded] = useState(true);\n const [prevActive, setPrevActive] = useState(active);\n if (active !== prevActive) {\n setPrevActive(active);\n if (active) setExpanded(true);\n }\n\n return (\n <ToolGroupCard\n toolCallCount={toolCallCount}\n expanded={expanded}\n active={active}\n onToggle={() => setExpanded((prev) => !prev)}\n >\n {children as ReactNode}\n </ToolGroupCard>\n );\n}\n","\"use client\";\n\nimport {\n ComposerPrimitive,\n MessagePrimitive,\n useAuiState,\n} from \"@assistant-ui/react\";\nimport { useComposerCancel, useComposerSend, useThreadIsRunning } from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { MessageAttachmentsContainer } from \"./AttachmentsContainer.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 mb-2 opacity-90\">\n <MessageAttachmentsContainer />\n </div>\n );\n}\n\nexport function UserEditComposerContainer() {\n const Button = useSlot(\"Button\");\n const MessageTimestamp = useSlot(\"MessageTimestamp\");\n const UserMessageEdit = useSlot(\"UserMessageEdit\");\n const isRunning = useThreadIsRunning();\n const { cancel, disabled: cancelDisabled } = useComposerCancel();\n const { send, disabled: sendDisabled } = useComposerSend();\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 flex w-full justify-end px-2 duration-150\"\n >\n <ComposerPrimitive.Root asChild>\n <UserMessageEdit\n timestamp={\n <MessageTimestamp className=\"text-gray-500\" />\n }\n attachments={<ReadOnlyMessageAttachments />}\n input={\n <div className=\"mt-1 rounded border border-gray-250 bg-gray-100 p-2 text-gray-750 dark:border-gray-275 dark:bg-gray-275\">\n <ComposerPrimitive.Input\n disabled={isRunning}\n className=\"max-h-32 min-h-10 w-full resize-none border-none bg-transparent p-0 text-base leading-[1.34] outline-none focus:shadow-none\"\n />\n </div>\n }\n footer={\n <div className=\"flex items-center justify-end gap-2\">\n <Button.Secondary\n type=\"button\"\n disabled={cancelDisabled}\n onClick={cancel}\n text=\"Cancel\"\n />\n <Button.Primary\n type=\"button\"\n disabled={sendDisabled || isRunning}\n onClick={() => send()}\n text=\"Save & Rerun\"\n />\n </div>\n }\n />\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 \"../constants/attachments.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, useAuiState } from \"@assistant-ui/react\";\nimport { useThreadIsRunning } from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { MessageAttachmentsContainer } from \"./AttachmentsContainer.js\";\n\nexport function UserMessageContainer() {\n const UserMessageBubble = useSlot(\"UserMessageBubble\");\n const UserMessageActionBar = useSlot(\"UserMessageActionBar\");\n const isRunning = useThreadIsRunning();\n const text = useAuiState((s) =>\n s.message.content\n .filter((part): part is { type: \"text\"; text: string } => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\"),\n );\n\n return (\n <MessagePrimitive.Root data-role=\"user\">\n <UserMessageBubble\n text={text}\n attachments={<MessageAttachmentsContainer />}\n editAction={!isRunning ? <UserMessageActionBar /> : undefined}\n />\n </MessagePrimitive.Root>\n );\n}\n","\"use client\";\n\nimport { useRef } from \"react\";\nimport { useAui, useAuiState } from \"@assistant-ui/react\";\nimport { useTrueFoundryCancel } from \"@truefoundry/assistant-ui-runtime\";\n\nimport { useComposerBusyState } from \"../hooks/useComposerBusyState.js\";\nimport { useComposerPauseView } from \"../hooks/useComposerPauseView.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { ComposerAttachmentsContainer } from \"./AttachmentsContainer.js\";\nimport { AskUserContainer } from \"./AskUserContainer.js\";\nimport { McpAuthContainer } from \"./McpAuthContainer.js\";\n\nexport type ComposerContainerProps = {\n placeholder?: string;\n};\n\nexport function ComposerContainer({\n placeholder = \"Ask anything... (Shift+Enter for new line)\",\n}: ComposerContainerProps) {\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 pauseView = useComposerPauseView();\n const cancel = useTrueFoundryCancel();\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n if (pauseView.kind === \"mcp\") {\n return <McpAuthContainer />;\n }\n if (pauseView.kind === \"ask-user\") {\n return <AskUserContainer />;\n }\n\n return (\n <>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n hidden\n onChange={(event) => {\n const files = event.target.files;\n if (files) {\n for (const file of files) {\n void aui.composer().addAttachment(file);\n }\n }\n event.target.value = \"\";\n }}\n />\n <ComposerShell\n attachments={<ComposerAttachmentsContainer />}\n value={text}\n placeholder={placeholder}\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 { useAuiState } from \"@assistant-ui/react\";\nimport { useTrueFoundryToolResponses } from \"@truefoundry/assistant-ui-runtime\";\n\nexport type ThreadPauseState = {\n thread: {\n messages: readonly {\n role: string;\n status?: { type: string };\n metadata?: { custom?: unknown };\n }[];\n };\n};\n\n/** Returns true when the latest assistant message is paused for MCP authorization. */\nexport function threadHasPendingMcpAuth(s: ThreadPauseState): boolean {\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 type ComposerPauseView =\n | { kind: \"mcp\" }\n | { kind: \"ask-user\" }\n | { kind: \"compose\" };\n\n/** Shared composer pause detection for default and custom composer containers. */\nexport function useComposerPauseView(): ComposerPauseView {\n const mcpPending = useAuiState(threadHasPendingMcpAuth);\n const { pending: toolResponsesPending } = useTrueFoundryToolResponses();\n\n if (mcpPending) {\n return { kind: \"mcp\" };\n }\n if (toolResponsesPending.length > 0) {\n return { kind: \"ask-user\" };\n }\n return { kind: \"compose\" };\n}\n","\"use client\";\n\nimport { useTrueFoundryToolResponses } from \"@truefoundry/assistant-ui-runtime\";\nimport { useThreadIsRunning } from \"@assistant-ui/core/react\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n ASK_USER_CUSTOM_OPTION,\n type AskUserAnswerDraft,\n type Question,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nconst EMPTY_ANSWER: AskUserAnswerDraft = { radioValue: \"\", custom: \"\" };\n\nexport function AskUserContainer() {\n const AskUserPrompt = useSlot(\"AskUserPrompt\");\n const { pending, respond } = useTrueFoundryToolResponses();\n const isRunning = useThreadIsRunning();\n const item = pending[0];\n\n const questions = useMemo<Question[]>(\n () =>\n item == null\n ? []\n : [\n {\n id: item.toolCallId,\n question: item.question ?? \"Answer required\",\n options: item.options ?? [],\n },\n ],\n [item],\n );\n const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0);\n const [answers, setAnswers] = useState<Record<string, AskUserAnswerDraft>>(\n {},\n );\n\n useEffect(() => {\n setCurrentQuestionIndex(0);\n setAnswers({});\n }, [item?.toolCallId]);\n\n const safeIndex = Math.min(\n currentQuestionIndex,\n Math.max(questions.length - 1, 0),\n );\n const currentQuestion = questions[safeIndex];\n const currentAnswer =\n currentQuestion == null\n ? EMPTY_ANSWER\n : answers[currentQuestion.id] ?? EMPTY_ANSWER;\n const getResponseForQuestion = useCallback(\n (questionId: string) => {\n const answer = answers[questionId] ?? EMPTY_ANSWER;\n return answer.radioValue === ASK_USER_CUSTOM_OPTION\n ? answer.custom.trim()\n : answer.radioValue.trim();\n },\n [answers],\n );\n const allQuestionsAnswered = useMemo(\n () => questions.every((question) => getResponseForQuestion(question.id)),\n [getResponseForQuestion, questions],\n );\n const selectedResponse =\n currentAnswer.radioValue === ASK_USER_CUSTOM_OPTION\n ? currentAnswer.custom.trim()\n : currentAnswer.radioValue.trim();\n const isSubmitDisabled =\n isRunning || currentQuestion == null || selectedResponse.length === 0;\n const isSubmitAllDisabled = isSubmitDisabled || !allQuestionsAnswered;\n\n const onCurrentAnswerChange = useCallback(\n (questionId: string, update: Partial<AskUserAnswerDraft>) => {\n setAnswers((previous) => ({\n ...previous,\n [questionId]: {\n ...(previous[questionId] ?? EMPTY_ANSWER),\n ...update,\n },\n }));\n },\n [],\n );\n\n const onSubmit = useCallback(() => {\n if (item == null || !allQuestionsAnswered) return;\n const content = getResponseForQuestion(item.toolCallId);\n if (!content) return;\n respond({ toolCallId: item.toolCallId, content });\n }, [allQuestionsAnswered, getResponseForQuestion, item, respond]);\n\n if (item == null || currentQuestion == null) return null;\n\n return (\n <AskUserPrompt\n questions={questions}\n readOnly={isRunning}\n currentQuestion={currentQuestion}\n currentQuestionIndex={safeIndex}\n currentAnswer={currentAnswer}\n totalQuestions={questions.length}\n isMultiQuestion={questions.length > 1}\n isLastQuestion={safeIndex === questions.length - 1}\n allQuestionsAnswered={allQuestionsAnswered}\n isSubmitDisabled={isSubmitDisabled}\n isSubmitAllDisabled={isSubmitAllDisabled}\n onCurrentQuestionIndexChange={setCurrentQuestionIndex}\n onCurrentAnswerChange={onCurrentAnswerChange}\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 const handleConnect = (serverId: string) => {\n const server = pending.mcpServers.find((s) => s.id === serverId);\n if (server?.authUrl) {\n window.open(server.authUrl, \"_blank\", \"noopener,noreferrer\");\n }\n };\n\n return (\n <McpAuthPrompt\n servers={pending.mcpServers}\n onConnect={handleConnect}\n onContinue={() => void resume()}\n readOnly={isRunning}\n />\n );\n}\n","\"use client\";\n\nimport { useAui, useAuiState } from \"@assistant-ui/react\";\nimport { useEffect, useRef } from \"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\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 sentinelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const node = sentinelRef.current;\n if (!node || !hasMore) return;\n\n const observer = new IntersectionObserver((entries) => {\n if (entries.some((e) => e.isIntersecting) && hasMore && !isLoadingMore) {\n void aui.threads().loadMore();\n }\n });\n observer.observe(node);\n return () => observer.disconnect();\n }, [aui, hasMore, isLoadingMore]);\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 && hasMore && (\n <>\n {isLoadingMore && <ThreadListRowSkeleton count={1} />}\n <div ref={sentinelRef} aria-hidden />\n </>\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":["React","jsx","React","jsx","React","jsx","React","jsx","jsxs","React","jsx","Accordion","AccordionDetails","AccordionSummary","Button","IconButton","Modal","Skeleton","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","UserMessageEdit","jsx","jsx","jsx","Markdown","TfyToolCallCard","jsx","TfyToolCallCard","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","ComposerLeftSection","ComposerRightSection","ComposerSendButton","jsx","jsxs","IconButton","Button","jsx","jsxs","IconButton","Avatar","AvatarImage","AvatarFallback","jsx","jsxs","jsx","Fragment","jsx","jsxs","IconButton","forwardRef","IconButton","jsx","forwardRef","IconButton","IconButton","jsx","jsxs","IconButton","Skeleton","jsx","jsxs","Skeleton","jsx","jsxs","MessageTimestamp","IconButton","jsx","jsx","jsx","jsx","jsx","LightTooltip","useAuiState","jsx","jsxs","IconButton","MessageTimestamp","useAuiState","forwardRef","jsx","forwardRef","jsx","Fragment","jsx","jsxs","Button","IconButton","Modal","Accordion","AccordionSummary","AccordionDetails","Skeleton","jsx","createContext","useContext","Button","default","registerIcons","LightTooltip","Accordion","AccordionSummary","AccordionDetails","useEffect","useAuiState","createContext","createElement","useContext","useState","MessagePrimitive","useActionBarCopy","useThreadIsRunning","useCallback","useAuiState","createContext","useCallback","useContext","useMemo","useState","jsx","jsxs","createContext","ToastStack","Toast","useState","useCallback","useMemo","useContext","jsx","Markdown","useAuiState","useCallback","useAuiState","jsx","AttachmentCard","AttachmentPreviewDialog","useAuiState","useCallback","useState","useAuiState","jsx","ReasoningCard","useAuiState","useState","useCallback","useState","createContext","useContext","useMemo","useState","jsx","SandboxToolCallCard","useState","useMemo","useCallback","useMemo","useState","jsx","ToolApprovalBar","useState","useMemo","useCallback","useCallback","useEffect","useRef","useState","jsx","ToolCallContentBlock","useState","useRef","useCallback","useEffect","jsx","AssistantMessageBubble","display","ToolCallCard","SubAgentCard","AskUserPrompt","useState","argsDisplay","resultDisplay","useState","useAuiState","jsx","ToolGroupCard","useAuiState","useState","jsx","AssistantMessageBubble","MessageIndicator","MessageErrorBanner","MessageActionBar","useThreadIsRunning","useActionBarCopy","MessagePrimitive","ComposerPrimitive","MessagePrimitive","useAuiState","useThreadIsRunning","MessagePrimitive","useAuiState","useEffect","useState","useAuiState","jsx","AttachmentCard","AttachmentPreviewDialog","useAuiState","MessagePrimitive","AttachmentPickerButton","jsx","jsxs","useAuiState","Button","MessageTimestamp","UserMessageEdit","useThreadIsRunning","MessagePrimitive","ComposerPrimitive","MessagePrimitive","useAuiState","useThreadIsRunning","jsx","UserMessageBubble","UserMessageActionBar","useThreadIsRunning","useAuiState","MessagePrimitive","jsx","jsxs","useAuiState","useEffect","ThreadRootShell","ThreadViewportShell","ThreadComposerAreaShell","MessageGroup","WelcomeScreen","MessageListSkeleton","ScrollToBottomButton","useRef","useAui","useAuiState","useAuiState","useTrueFoundryToolResponses","useThreadIsRunning","useCallback","useEffect","useMemo","useState","jsx","AskUserPrompt","useTrueFoundryToolResponses","useThreadIsRunning","useMemo","useState","useEffect","useCallback","useThreadIsRunning","jsx","McpAuthPrompt","useThreadIsRunning","Fragment","jsx","jsxs","ComposerShell","useAui","useAuiState","useRef","useAui","useAuiState","useEffect","useRef","Fragment","jsx","jsxs","ThreadListShell","ThreadListNewButton","ThreadListRow","ThreadListRowSkeleton","ThreadListEmptyState","useAui","useAuiState","useRef","useEffect","jsx"]}