@truefoundry/trueforge-ui 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CHANGELOG.md +34 -15
  2. package/README.md +38 -38
  3. package/dist/{ConnectorSettings-H37ZFC6Z.js → ConnectorSettings-XEO5ZQO5.js} +8 -6
  4. package/dist/{ConnectorSettings-H37ZFC6Z.js.map → ConnectorSettings-XEO5ZQO5.js.map} +1 -1
  5. package/dist/{DockLayout-KEMFRWIR.js → DockLayout-F2KYSY4U.js} +10 -8
  6. package/dist/{DockLayout-KEMFRWIR.js.map → DockLayout-F2KYSY4U.js.map} +1 -1
  7. package/dist/{DrawerLayout-ZVWCKEIS.js → DrawerLayout-FJ7XC2FU.js} +12 -9
  8. package/dist/{DrawerLayout-ZVWCKEIS.js.map → DrawerLayout-FJ7XC2FU.js.map} +1 -1
  9. package/dist/{ModelSettings-QJMYHCMD.js → ModelSettings-2QB7LE22.js} +8 -6
  10. package/dist/{ModelSettings-QJMYHCMD.js.map → ModelSettings-2QB7LE22.js.map} +1 -1
  11. package/dist/OpenUiFenceBlock-3EFPY4JW.js +9 -0
  12. package/dist/{SandboxSettings-BUBMLW7Q.js → SandboxSettings-QDDIPRBP.js} +8 -6
  13. package/dist/{SandboxSettings-BUBMLW7Q.js.map → SandboxSettings-QDDIPRBP.js.map} +1 -1
  14. package/dist/{SettingsBuilder-26XSGIHK.js → SettingsBuilder-4NF3Y7UZ.js} +10 -8
  15. package/dist/{SettingsBuilder-26XSGIHK.js.map → SettingsBuilder-4NF3Y7UZ.js.map} +1 -1
  16. package/dist/ShellRouteSync-T4WLY57Q.js +172 -0
  17. package/dist/ShellRouteSync-T4WLY57Q.js.map +1 -0
  18. package/dist/{SidebarLayout-F3XFXW7B.js → SidebarLayout-KX6RSJTP.js} +12 -9
  19. package/dist/{SidebarLayout-F3XFXW7B.js.map → SidebarLayout-KX6RSJTP.js.map} +1 -1
  20. package/dist/{SkillSettings-IRMGDFRG.js → SkillSettings-5EETEEDI.js} +8 -6
  21. package/dist/{SkillSettings-IRMGDFRG.js.map → SkillSettings-5EETEEDI.js.map} +1 -1
  22. package/dist/TrueForgeUIWithRouter-IAQQTD5V.js +30 -0
  23. package/dist/TrueForgeUIWithRouter-IAQQTD5V.js.map +1 -0
  24. package/dist/{WidgetLayout-SZMABKIR.js → WidgetLayout-S6EK62TZ.js} +10 -8
  25. package/dist/{WidgetLayout-SZMABKIR.js.map → WidgetLayout-S6EK62TZ.js.map} +1 -1
  26. package/dist/chunk-72LC2M3R.js +567 -0
  27. package/dist/chunk-72LC2M3R.js.map +1 -0
  28. package/dist/chunk-EKVN6QSO.js +493 -0
  29. package/dist/chunk-EKVN6QSO.js.map +1 -0
  30. package/dist/chunk-FXCYLEFB.js +64 -0
  31. package/dist/chunk-FXCYLEFB.js.map +1 -0
  32. package/dist/chunk-IFLE7OMM.js +527 -0
  33. package/dist/chunk-IFLE7OMM.js.map +1 -0
  34. package/dist/{chunk-HT5HKQXE.js → chunk-JRRCAKEP.js} +2 -2
  35. package/dist/{chunk-7EEOWDLE.js → chunk-PTYEOSHT.js} +10 -8
  36. package/dist/{chunk-7EEOWDLE.js.map → chunk-PTYEOSHT.js.map} +1 -1
  37. package/dist/{chunk-H7DR64W3.js → chunk-UACLSDNL.js} +39 -94
  38. package/dist/chunk-UACLSDNL.js.map +1 -0
  39. package/dist/{chunk-QGNLP2EE.js → chunk-UU7C5DQ3.js} +18 -8
  40. package/dist/chunk-UU7C5DQ3.js.map +1 -0
  41. package/dist/chunk-WQULF5AT.js +460 -0
  42. package/dist/chunk-WQULF5AT.js.map +1 -0
  43. package/dist/{chunk-LRQHHZDX.js → chunk-X6U2Q7X5.js} +7 -5
  44. package/dist/{chunk-LRQHHZDX.js.map → chunk-X6U2Q7X5.js.map} +1 -1
  45. package/dist/chunk-YIWUG6MC.js +101 -0
  46. package/dist/chunk-YIWUG6MC.js.map +1 -0
  47. package/dist/index.d.ts +57 -9
  48. package/dist/index.js +41 -428
  49. package/dist/index.js.map +1 -1
  50. package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
  51. package/dist/styles.css +1 -1
  52. package/package.json +9 -6
  53. package/dist/OpenUiFenceBlock-XFBUGPKQ.js +0 -9
  54. package/dist/chunk-DTF7ZMUJ.js +0 -567
  55. package/dist/chunk-DTF7ZMUJ.js.map +0 -1
  56. package/dist/chunk-H7DR64W3.js.map +0 -1
  57. package/dist/chunk-QGNLP2EE.js.map +0 -1
  58. package/dist/chunk-XAZ5HJXV.js +0 -862
  59. package/dist/chunk-XAZ5HJXV.js.map +0 -1
  60. /package/dist/{OpenUiFenceBlock-XFBUGPKQ.js.map → OpenUiFenceBlock-3EFPY4JW.js.map} +0 -0
  61. /package/dist/{chunk-HT5HKQXE.js.map → chunk-JRRCAKEP.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/theme/brand.tsx","../src/atoms/primitives/Accordion.tsx","../src/atoms/adapters/AgentStepsCardAdapter.tsx","../src/atoms/primitives/Button.tsx","../src/theme/SlotsProvider.tsx","../src/atoms/primitives/IconButton.tsx","../src/atoms/adapters/AskUserPromptAdapter.tsx","../src/atoms/adapters/McpAuthPromptAdapter.tsx","../src/atoms/agent-chat/StatusDot.tsx","../src/atoms/agent-chat/StepIconBox.tsx","../src/atoms/agent-chat/AgentStepRow.tsx","../src/atoms/adapters/ReasoningCardAdapter.tsx","../src/atoms/ResumeUnavailable.tsx","../src/atoms/AgentsLibrary.tsx","../src/atoms/lib/useSearchAgentsList.ts","../src/atoms/lib/useDebouncedValue.ts","../src/atoms/primitives/CenteredModal.tsx","../src/atoms/lib/useCompactOverlayStyle.ts","../src/atoms/primitives/SearchInput.tsx","../src/atoms/primitives/Skeleton.tsx","../src/atoms/AgentsLibraryButton.tsx","../src/atoms/AssistantMessageBubble.tsx","../src/constants/attachments.ts","../src/atoms/primitives/Avatar.tsx","../src/atoms/AttachmentCard.tsx","../src/atoms/AttachmentPickerButton.tsx","../src/atoms/AttachmentPreviewDialog.tsx","../src/atoms/primitives/Dialog.tsx","../src/atoms/ChatFileDownload.tsx","../src/hooks/useChatChromeActionsVisible.ts","../src/atoms/ClearChatButton.tsx","../src/atoms/CodeEditor.tsx","../src/atoms/ComposerSections.tsx","../src/atoms/ComposerShell.tsx","../src/atoms/draft/DraftReasoningEffortSelector.tsx","../src/atoms/lib/useIsMobile.ts","../src/atoms/primitives/BottomSheet.tsx","../src/atoms/draft/reasoningEffort.ts","../src/atoms/draft/DraftComposerSections.tsx","../src/atoms/draft/DraftCompositeSelector.tsx","../src/hooks/useMcpAuth.ts","../src/containers/ToasterContainer.tsx","../src/atoms/lib/inputClasses.ts","../src/atoms/primitives/Tooltip.tsx","../src/atoms/draft/agentCapabilities.ts","../src/atoms/primitives/Switch.tsx","../src/atoms/draft/DraftCapabilitiesPanel.tsx","../src/atoms/draft/DraftCatalogEmptyState.tsx","../src/atoms/draft/DraftModelSelector.tsx","../src/atoms/primitives/CatalogLogo.tsx","../src/utils/catalogLogo.ts","../src/atoms/draft/DraftModelCatalogPanel.tsx","../src/atoms/HistoryLoader.tsx","../src/atoms/Markdown.tsx","../src/atoms/MessageActionBar.tsx","../src/atoms/MessageErrorBanner.tsx","../src/atoms/MessageIndicator.tsx","../src/atoms/MessageTimestamp.tsx","../src/atoms/MonacoEditorCore.tsx","../src/atoms/SandboxArtifactDownload.tsx","../src/atoms/SandboxToolCallCard.tsx","../src/atoms/SaveAgentButton.tsx","../src/atoms/ScrollToBottomButton.tsx","../src/atoms/SelectAgentEmptyState.tsx","../src/atoms/ShellActionsActionSlot.tsx","../src/atoms/Skeletons.tsx","../src/atoms/SubAgentCard.tsx","../src/atoms/SyntaxHighlighter.tsx","../../../node_modules/.pnpm/react-syntax-highlighter@16.1.1_react@19.2.8/node_modules/react-syntax-highlighter/dist/esm/styles/prism/one-dark.js","../../../node_modules/.pnpm/react-syntax-highlighter@16.1.1_react@19.2.8/node_modules/react-syntax-highlighter/dist/esm/styles/prism/one-light.js","../src/atoms/ThreadListMisc.tsx","../src/atoms/lib/threadListMeta.ts","../src/atoms/ThreadListRow.tsx","../src/atoms/ThreadShell.tsx","../src/atoms/Toast.tsx","../src/atoms/ToolApprovalBar.tsx","../src/atoms/ToolCallCard.tsx","../src/atoms/ToolCallContentBlock.tsx","../src/atoms/ToolGroupCard.tsx","../src/atoms/UserMessageActionBar.tsx","../src/atoms/UserMessageBubble.tsx","../src/atoms/UserMessageEdit.tsx","../src/atoms/WelcomeScreen.tsx","../src/theme/defaultSlots.ts"],"sourcesContent":["'use client';\n\nimport { useContext } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { ThemeContext } from './ThemeProvider.js';\nimport type { BrandLogoConfig } from './types.js';\n\nconst DEFAULT_BRAND_NAME = 'TrueForge';\n\n/** Mode-matched source, falling back to the other mode then the mode-agnostic `src`. */\nfunction resolveLogoSrc({\n logo,\n mode,\n}: {\n logo: string | BrandLogoConfig;\n mode: 'light' | 'dark';\n}): string | undefined {\n if (typeof logo === 'string') return logo;\n const preferred = mode === 'dark' ? logo.dark : logo.light;\n return preferred ?? logo.light ?? logo.dark ?? logo.src;\n}\n\n/** Configured brand name, or the SDK default. Safe outside a `ThemeProvider`. */\nexport function useBrandName(): string {\n return useContext(ThemeContext)?.brand.name ?? DEFAULT_BRAND_NAME;\n}\n\n/**\n * The product mark: `theme.brand.logo` resolved against the active theme mode,\n * labelled with the brand name, and linked when the config carries an `href`.\n * Falls back to the default mark when no logo is configured.\n *\n * Callers that also want the name as text render it themselves — the SDK layouts\n * pair this with `useBrandName()` so each one controls its own arrangement.\n */\nexport function BrandLogo({ className }: { className?: string }) {\n const theme = useContext(ThemeContext);\n const logo = theme?.brand.logo;\n const name = theme?.brand.name ?? DEFAULT_BRAND_NAME;\n\n const mode = theme?.mode ?? 'light';\n const src = logo == null ? undefined : resolveLogoSrc({ logo, mode });\n if (src == null) {\n return (\n <Icon name={mode === 'dark' ? 'trueforge-logomark-dark' : 'trueforge-logomark-light'} className={className} />\n );\n }\n\n // `name` is the accessible label: the image itself carries no text alternative.\n const image = <img src={src} alt={name} className={className} />;\n const href = typeof logo === 'string' ? undefined : logo?.href;\n if (href == null) return image;\n\n return (\n <a href={href} aria-label={name} className=\"inline-flex items-center\">\n {image}\n </a>\n );\n}\n\ndeclare module './SlotsProvider.js' {\n interface AtomSlots {\n BrandLogo: typeof BrandLogo;\n }\n}\n","import React, { createContext, useContext, useId, useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn.js';\n\n/**\n * Controlled accordion compatible with prior tfy `expanded` / `onChange` slot usage.\n */\nexport type AccordionProps = {\n expanded?: boolean;\n onChange?: (event: unknown, expanded: boolean) => void;\n children?: ReactNode;\n className?: string;\n background?: string;\n sx?: unknown;\n} & Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>;\n\nexport function Accordion({\n expanded,\n onChange,\n children,\n className,\n background: _background,\n sx: _sx,\n ...rest\n}: AccordionProps) {\n const panelId = useId();\n\n return (\n <div className={cn('w-full', className)} data-expanded={expanded || undefined} {...rest}>\n {React.Children.map(children, child => {\n if (!React.isValidElement(child)) return child;\n return React.cloneElement(child as React.ReactElement<Record<string, unknown>>, {\n expanded,\n onChange,\n panelId,\n });\n })}\n </div>\n );\n}\n\nexport type AccordionSummaryProps = {\n children?: ReactNode;\n className?: string;\n expanded?: boolean;\n onChange?: (event: unknown, expanded: boolean) => void;\n panelId?: string;\n hideIcon?: boolean;\n disableRipple?: boolean;\n sx?: unknown;\n};\n\nexport function AccordionSummary({ children, className, expanded, onChange, panelId }: AccordionSummaryProps) {\n return (\n <button\n type=\"button\"\n aria-expanded={expanded}\n aria-controls={panelId}\n className={cn('flex w-full cursor-pointer items-center text-left', className)}\n onClick={event => onChange?.(event, !expanded)}\n >\n {children}\n </button>\n );\n}\n\nexport type AccordionDetailsProps = {\n children?: ReactNode;\n className?: string;\n expanded?: boolean;\n panelId?: string;\n sx?: unknown;\n};\n\nexport function AccordionDetails({ children, className, expanded, panelId }: AccordionDetailsProps) {\n if (!expanded) return null;\n return (\n <div id={panelId} role=\"region\" className={cn(className)}>\n {children}\n </div>\n );\n}\n\ntype AccordionCtx = {\n openItems: Set<string>;\n toggle: (id: string) => void;\n};\n\nconst Ctx = createContext<AccordionCtx>({ openItems: new Set(), toggle: () => {} });\n\nexport function AccordionRoot({\n type = 'single',\n defaultValue,\n className,\n children,\n}: {\n type?: 'single' | 'multiple';\n defaultValue?: string;\n className?: string;\n children?: ReactNode;\n}) {\n const [openItems, setOpenItems] = useState<Set<string>>(() => new Set(defaultValue ? [defaultValue] : []));\n const toggle = (id: string) => {\n setOpenItems(prev => {\n const next = new Set(type === 'single' ? [] : prev);\n if (prev.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n return (\n <Ctx.Provider value={{ openItems, toggle }}>\n <div className={cn('divide-y divide-border', className)}>{children}</div>\n </Ctx.Provider>\n );\n}\n\nexport function AccordionItem({\n value,\n className,\n children,\n}: {\n value: string;\n className?: string;\n children?: ReactNode;\n}) {\n const { openItems } = useContext(Ctx);\n return (\n <div className={className} data-open={openItems.has(value) || undefined}>\n {React.Children.map(children, child =>\n React.isValidElement(child)\n ? React.cloneElement(child as React.ReactElement<{ itemId?: string; isOpen?: boolean }>, {\n itemId: value,\n isOpen: openItems.has(value),\n })\n : child,\n )}\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n Accordion: typeof Accordion;\n AccordionSummary: typeof AccordionSummary;\n AccordionDetails: typeof AccordionDetails;\n }\n}\n\nexport function AccordionTrigger({\n className,\n children,\n itemId,\n isOpen,\n ...rest\n}: React.ButtonHTMLAttributes<HTMLButtonElement> & { itemId?: string; isOpen?: boolean }) {\n const { toggle } = useContext(Ctx);\n const panelId = itemId ? `aui-accordion-panel-${itemId}` : undefined;\n return (\n <button\n type=\"button\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n className={cn('flex w-full cursor-pointer items-center justify-between py-3 text-sm font-medium', className)}\n onClick={() => itemId && toggle(itemId)}\n {...rest}\n >\n {children}\n </button>\n );\n}\n\nexport function AccordionContent({\n className,\n children,\n isOpen,\n itemId,\n}: {\n className?: string;\n children?: ReactNode;\n isOpen?: boolean;\n itemId?: string;\n}) {\n if (!isOpen) return null;\n return (\n <div\n id={itemId ? `aui-accordion-panel-${itemId}` : undefined}\n role=\"region\"\n className={cn('pb-4 text-sm', className)}\n >\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { cn } from '../lib/cn.js';\nimport { Accordion, AccordionDetails, AccordionSummary } from '../primitives/Accordion.js';\nimport { Spinner } from '../primitives/Spinner.js';\n\nexport type AgentStepsCardProps = {\n toolCount: number;\n thinkingCount: number;\n expanded: boolean;\n active?: boolean;\n onToggle: () => void;\n children: ReactNode;\n borderColor?: string;\n background?: string;\n dataTestPrefix?: string;\n className?: string;\n};\n\nexport function AgentStepsCard({\n toolCount,\n thinkingCount,\n expanded,\n active = false,\n onToggle,\n children,\n borderColor,\n background,\n dataTestPrefix,\n className,\n}: AgentStepsCardProps) {\n const toolLabel = `${toolCount} tool ${toolCount === 1 ? 'call' : 'calls'}`;\n const thinkingLabel = thinkingCount > 0 ? ` · ${thinkingCount} thought${thinkingCount === 1 ? '' : 's'}` : '';\n\n return (\n <Accordion\n expanded={expanded}\n onChange={() => onToggle()}\n className={cn(\n 'aui-agent-steps-card mb-3 rounded-lg border border-border bg-card-bg text-text-primary',\n className,\n )}\n style={{\n ...(background !== undefined ? { background } : {}),\n ...(borderColor !== undefined ? { borderColor } : {}),\n }}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-agent-steps-card` : undefined}\n >\n <AccordionSummary className=\"p-0\">\n <div className=\"flex w-full items-center gap-2 px-2 py-2 text-left text-xs\">\n <Icon\n name={expanded ? 'chevron-down' : 'chevron-right'}\n size=\"0.75em\"\n className=\"shrink-0 text-text-secondary\"\n />\n <span className=\"font-semibold text-text-primary\">Agent steps</span>\n <span className=\"text-text-secondary\">\n · {toolLabel}\n {thinkingLabel}\n </span>\n {active && (\n <div className=\"ml-auto\">\n <Spinner size={12} className=\"text-primary-button-bg\" />\n </div>\n )}\n </div>\n </AccordionSummary>\n <AccordionDetails>\n <div\n className=\"space-y-3 border-t border-border p-3\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-content` : undefined}\n >\n {children}\n </div>\n </AccordionDetails>\n </Accordion>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentStepsCard: typeof AgentStepsCard;\n }\n}\n","import React from 'react';\n\nimport { auiButtonClass, type AuiButtonSize, type AuiButtonVariant } from '../lib/buttonClasses.js';\n\nexport type ButtonVariant = AuiButtonVariant;\nexport type ButtonSize = AuiButtonSize;\n\nexport type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n variant?: ButtonVariant;\n size?: ButtonSize;\n asChild?: never;\n};\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'default', size = 'default', ...props }, ref) => {\n return <button ref={ref} className={auiButtonClass({ variant, size, className })} {...props} />;\n },\n);\n\nButton.displayName = 'Button';\n","import { createContext, useContext, useMemo, type ReactNode } from 'react';\n\nimport { defaultSlots } from './defaultSlots.js';\nimport type { PublicAtomSlots, SlotOverrides } from './publicSlots.js';\nimport { ThemeProvider, useOptionalThemeMode } from './ThemeProvider.js';\nimport type { ThemeConfig } from './types.js';\n\nexport type { ThemeConfig, ThemeMode } from './types.js';\n\n/**\n * Internal completeness contract augmented by each slotted atom.\n * `defaultSlots` satisfies this interface and owns the public slot keys.\n */\nexport interface AtomSlots {}\n\nexport type { SlotOverrides } from './publicSlots.js';\n\nconst SlotsContext = createContext<PublicAtomSlots>(defaultSlots);\nconst ThemeModeContext = createContext<'light' | 'dark' | undefined>(undefined);\n\n/** Merges `overrides` over parent/default slots. Containers resolve atoms via `useSlot`. */\nexport function SlotsProvider({\n overrides,\n theme,\n children,\n}: {\n overrides?: SlotOverrides;\n /** Theme config. Pass `mode` for controlled light/dark/system; omit `mode` for uncontrolled. */\n theme?: ThemeConfig;\n children: ReactNode;\n}) {\n const parentSlots = useContext(SlotsContext);\n const inheritedTheme = useContext(ThemeModeContext);\n const resolved = useMemo(() => ({ ...parentSlots, ...overrides }), [parentSlots, overrides]);\n\n const slotsTree = (\n <SlotsProviderContents slots={resolved} inheritedTheme={inheritedTheme} theme={theme}>\n {children}\n </SlotsProviderContents>\n );\n\n // Nest ThemeProvider only when this SlotsProvider owns a theme config, or when\n // there is no parent theme yet (outermost provider).\n const hasParentTheme = inheritedTheme !== undefined;\n if (theme !== undefined || !hasParentTheme) {\n return <ThemeProvider theme={theme}>{slotsTree}</ThemeProvider>;\n }\n\n return slotsTree;\n}\n\nfunction SlotsProviderContents({\n slots,\n children,\n inheritedTheme,\n theme,\n}: {\n slots: PublicAtomSlots;\n children: ReactNode;\n inheritedTheme: 'light' | 'dark' | undefined;\n theme?: ThemeConfig;\n}) {\n const modeFromProvider = useOptionalThemeMode();\n const controlledMode = theme?.mode === 'light' || theme?.mode === 'dark' ? theme.mode : undefined;\n const resolvedTheme = controlledMode ?? inheritedTheme ?? modeFromProvider;\n\n return (\n <ThemeModeContext.Provider value={resolvedTheme}>\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 PublicAtomSlots>(name: K): PublicAtomSlots[K] {\n const slots = useContext(SlotsContext);\n return slots[name];\n}\n\n/** Whether the currently resolved slot is the SDK's stock implementation. */\nexport function useSlotIsDefault<K extends keyof PublicAtomSlots>(name: K): boolean {\n const slots = useContext(SlotsContext);\n return slots[name] === defaultSlots[name];\n}\n\n/** Resolves the light or dark theme mode supplied by the SDK consumer. */\nexport function useThemeMode(): 'light' | 'dark' {\n return useContext(ThemeModeContext) ?? 'light';\n}\n","import React from 'react';\n\nimport { Button, type ButtonProps } from './Button.js';\n\nexport type IconButtonProps = Omit<ButtonProps, 'size' | 'children'> & {\n 'aria-label': string;\n tooltip?: string;\n children: React.ReactNode;\n};\n\nexport const IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(\n ({ tooltip, children, ...props }, ref) => {\n return (\n <Button ref={ref} size=\"icon\" title={tooltip} {...props}>\n {children}\n </Button>\n );\n },\n);\n\nIconButton.displayName = 'IconButton';\n","import type { KeyboardEvent } from 'react';\nimport { Icon } from '../../icons/Icon.js';\nimport { cn } from '../lib/cn.js';\nimport { Button } from '../primitives/Button.js';\nimport { IconButton } from '../primitives/IconButton.js';\n\nexport type Question = {\n id: string;\n question: string;\n options: string[];\n};\n\nexport type AnsweredQuestion = Question & {\n answer: string;\n isCustom: boolean;\n};\n\nexport type AskUserAnswerDraft = {\n radioValue: string;\n custom: string;\n};\n\nexport const ASK_USER_CUSTOM_OPTION = '__tfy_ask_user_question_custom__';\n\nexport type AskUserPromptProps = {\n questions: Question[];\n answeredQuestions?: AnsweredQuestion[];\n onSubmit: () => void;\n currentQuestion?: Question;\n currentQuestionIndex?: number;\n currentAnswer?: AskUserAnswerDraft;\n totalQuestions?: number;\n isMultiQuestion?: boolean;\n isLastQuestion?: boolean;\n allQuestionsAnswered?: boolean;\n isSubmitDisabled?: boolean;\n isSubmitAllDisabled?: boolean;\n onCurrentQuestionIndexChange?: (index: number) => void;\n onCurrentAnswerChange?: (questionId: string, update: Partial<AskUserAnswerDraft>) => void;\n readOnly?: boolean;\n dataTestPrefix?: string;\n className?: string;\n};\n\nexport function AskUserPrompt({\n questions,\n answeredQuestions = [],\n onSubmit,\n currentQuestion,\n currentQuestionIndex = 0,\n currentAnswer = { radioValue: '', custom: '' },\n totalQuestions = questions.length,\n isMultiQuestion: isMultiQuestionProp,\n isLastQuestion: isLastQuestionProp,\n allQuestionsAnswered = false,\n isSubmitDisabled = true,\n isSubmitAllDisabled = true,\n onCurrentQuestionIndexChange,\n onCurrentAnswerChange,\n readOnly = false,\n dataTestPrefix,\n className,\n}: AskUserPromptProps) {\n const isMultiQuestion = isMultiQuestionProp ?? totalQuestions > 1;\n const isLastQuestion = isLastQuestionProp ?? currentQuestionIndex === totalQuestions - 1;\n\n if (questions.length === 0) {\n if (answeredQuestions.length === 0) return null;\n return (\n <div className={cn('aui-ask-user-prompt mt-2 flex flex-col gap-3', className)}>\n {answeredQuestions.map(q => (\n <div key={q.id} data-testid={dataTestPrefix ? `${dataTestPrefix}-answered-${q.id}` : undefined}>\n <div className=\"flex items-center justify-between rounded-t-lg border border-primary-button-bg/30 bg-primary-button-bg/10 px-4 py-2\">\n <div className=\"font-sans text-xs font-medium text-primary-button-bg\">{q.question}</div>\n <div className=\"flex h-fit shrink-0 items-center gap-1 rounded border border-primary-button-bg/40 bg-primary-bg px-2 py-0.5 text-[0.6875rem] font-medium text-text-secondary\">\n <span className=\"leading-tight\">Answered</span>\n </div>\n </div>\n <div className=\"flex items-center gap-2 rounded-b-lg border border-t-0 border-border px-4 py-3\">\n <Icon name=\"circle-check\" size=\"0.875em\" className=\"shrink-0 text-primary-button-bg\" />\n <span className=\"font-sans text-[0.8125rem] font-medium text-text-primary\">\n {q.isCustom ? `Other: ${q.answer}` : q.answer}\n </span>\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (!currentQuestion) return null;\n\n const isCustomSelected = currentAnswer.radioValue === ASK_USER_CUSTOM_OPTION;\n const hasOptions = currentQuestion.options.length > 0;\n\n const handleOptionSelect = (value: string) => {\n if (readOnly) return;\n onCurrentAnswerChange?.(currentQuestion.id, { radioValue: value });\n };\n\n const goToNextQuestion = () => onCurrentQuestionIndexChange?.(currentQuestionIndex + 1);\n const isNextStep = isMultiQuestion && !isLastQuestion;\n\n const handleAnswerKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Enter' || event.shiftKey || readOnly) return;\n event.preventDefault();\n if (isNextStep) {\n if (!isSubmitDisabled) goToNextQuestion();\n return;\n }\n if (!isSubmitAllDisabled) onSubmit();\n };\n\n const answerInput = (\n <textarea\n rows={1}\n value={currentAnswer.custom}\n disabled={readOnly || !currentQuestion.id}\n onFocus={() =>\n onCurrentAnswerChange?.(currentQuestion.id, {\n radioValue: ASK_USER_CUSTOM_OPTION,\n })\n }\n onChange={e => {\n onCurrentAnswerChange?.(currentQuestion.id, {\n custom: e.target.value,\n radioValue: ASK_USER_CUSTOM_OPTION,\n });\n }}\n placeholder={hasOptions ? 'Other' : 'Type your answer'}\n aria-label={hasOptions ? 'Other (custom answer)' : 'Your answer'}\n className={cn(\n 'field-sizing-content min-h-6 max-h-[3lh] w-full resize-none overflow-y-auto rounded border border-input-border bg-primary-bg px-2 py-0.5 text-[0.8125rem] leading-snug text-text-primary',\n 'placeholder:text-[0.8125rem] focus:outline-none focus:ring-1 focus:ring-focus-ring',\n )}\n />\n );\n\n return (\n <div\n className={cn('aui-ask-user-prompt', className)}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-question-card` : undefined}\n >\n <div className=\"flex items-center justify-between rounded-t-lg border border-primary-button-bg/30 bg-primary-button-bg/10 px-4 py-2\">\n <div className=\"font-sans text-sm font-medium text-primary-button-bg\">\n {totalQuestions > 1 ? 'Questions' : currentQuestion.question}\n </div>\n {readOnly ? (\n <div className=\"flex h-fit shrink-0 items-center gap-1 rounded border border-primary-button-bg/40 bg-primary-bg px-2 py-0.5 text-[0.6875rem] font-medium text-text-secondary\">\n <span className=\"leading-tight\">Unanswered</span>\n </div>\n ) : null}\n {!readOnly && isMultiQuestion && (\n <div className=\"flex items-center gap-1\">\n <IconButton\n aria-label=\"Previous question\"\n variant=\"ghost\"\n onClick={() => onCurrentQuestionIndexChange?.(Math.max(0, currentQuestionIndex - 1))}\n disabled={currentQuestionIndex === 0}\n className=\"text-text-primary\"\n >\n <Icon name=\"chevron-left\" size=\"0.75em\" />\n </IconButton>\n <IconButton\n aria-label=\"Next question\"\n variant=\"ghost\"\n onClick={() => onCurrentQuestionIndexChange?.(Math.min(totalQuestions - 1, currentQuestionIndex + 1))}\n disabled={currentQuestionIndex === totalQuestions - 1}\n className=\"text-text-primary\"\n >\n <Icon name=\"chevron-right\" size=\"0.75em\" />\n </IconButton>\n <div className=\"ml-1 rounded bg-primary-button-bg/20 px-2 py-1 font-sans text-xs font-medium text-text-primary\">\n <span> {currentQuestionIndex + 1} </span> <span> of </span> <span> {totalQuestions} </span>\n </div>\n </div>\n )}\n </div>\n\n <div className=\"flex flex-col gap-4 rounded-b-lg border border-t-0 border-border px-4 py-3\">\n <div className=\"flex flex-col gap-3\">\n {isMultiQuestion && (\n <div className=\"font-sans text-xs font-medium text-text-primary\">\n {currentQuestion.question || 'What would you like to do?'}\n </div>\n )}\n <div\n className=\"flex flex-col gap-3 overflow-visible\"\n role={hasOptions ? 'radiogroup' : undefined}\n aria-label={hasOptions ? currentQuestion.question || 'Answer options' : undefined}\n onKeyDown={handleAnswerKeyDown}\n >\n {currentQuestion.options.map((opt, index) => {\n const isSelected = currentAnswer.radioValue === opt;\n return (\n <label\n key={`${index}:${opt}`}\n className={cn(\n 'flex w-fit items-start gap-x-2 overflow-visible',\n readOnly ? 'cursor-default' : 'cursor-pointer',\n )}\n >\n <input\n type=\"radio\"\n value={opt}\n disabled={readOnly || !currentQuestion.id}\n name={`ask-user-question-option-${currentQuestion.id}`}\n checked={isSelected}\n onChange={() => handleOptionSelect(opt)}\n className=\"mt-0.5 accent-primary-button-bg\"\n />\n <span className=\"min-w-0 font-sans text-[0.8125rem] font-medium leading-snug text-text-primary\">\n {opt}\n </span>\n </label>\n );\n })}\n\n {hasOptions ? (\n <label\n className={cn(\n 'flex items-start gap-x-2 overflow-visible',\n readOnly ? 'cursor-default' : 'cursor-pointer',\n )}\n >\n <input\n type=\"radio\"\n disabled={readOnly || !currentQuestion.id}\n value={ASK_USER_CUSTOM_OPTION}\n name={`ask-user-question-option-${currentQuestion.id}`}\n checked={isCustomSelected}\n onChange={() => handleOptionSelect(ASK_USER_CUSTOM_OPTION)}\n className=\"mt-1 accent-primary-button-bg\"\n />\n <div className=\"min-w-0 flex-1\">{answerInput}</div>\n </label>\n ) : (\n answerInput\n )}\n </div>\n </div>\n\n {!readOnly && (\n <div\n className={cn('flex items-center', {\n 'justify-between': isMultiQuestion,\n 'justify-start': !isMultiQuestion,\n })}\n >\n {isMultiQuestion && isLastQuestion && !allQuestionsAnswered ? (\n <span className=\"text-xs font-medium text-failure-bg\">Answer all questions to submit</span>\n ) : (\n <span />\n )}\n {isNextStep ? (\n <Button type=\"button\" size=\"sm\" onClick={goToNextQuestion} disabled={isSubmitDisabled}>\n Next\n </Button>\n ) : (\n <Button type=\"button\" size=\"sm\" onClick={onSubmit} disabled={isSubmitAllDisabled}>\n Submit\n </Button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AskUserPrompt: typeof AskUserPrompt;\n }\n}\n","import { Icon } from '../../icons/Icon.js';\nimport { cn } from '../lib/cn.js';\nimport { Button } from '../primitives/Button.js';\n\nexport type McpServer = {\n id: string;\n name: string;\n};\n\nexport type McpAuthPromptProps = {\n servers: McpServer[];\n onConnect: (serverId: string) => void;\n onContinue?: () => void;\n readOnly?: boolean;\n title?: string;\n dataTestPrefix?: string;\n className?: string;\n};\n\nconst DEFAULT_TITLE = 'MCP Authentication Required';\n\nexport function McpAuthPrompt({\n servers,\n onConnect,\n onContinue,\n readOnly = false,\n title = DEFAULT_TITLE,\n dataTestPrefix,\n className,\n}: McpAuthPromptProps) {\n if (servers.length === 0) return null;\n\n return (\n <div\n className={cn('aui-mcp-auth-prompt mt-2 overflow-hidden rounded-lg border border-border', className)}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-mcp-auth-card` : undefined}\n >\n <div className=\"border-b border-primary-button-bg/30 bg-primary-button-bg/10 px-4 py-2\">\n <div className=\"font-sans text-sm font-medium text-primary-button-bg\">{title}</div>\n </div>\n <div className=\"flex flex-col gap-3 bg-primary-bg px-4 py-3\">\n {servers.map(server => (\n <div key={server.id} className=\"flex items-center justify-between gap-4\">\n <div className=\"flex min-w-0 items-center gap-1.5 text-sm\">\n <span className=\"shrink-0 font-medium text-text-secondary\">MCP Server Name</span>\n <span className=\"shrink-0 text-xs font-semibold text-text-secondary\">:</span>\n <span className=\"truncate font-sans font-medium text-text-primary\">{server.name}</span>\n </div>\n <Button size=\"sm\" disabled={readOnly} onClick={() => onConnect(server.id)} className=\"shrink-0\">\n Connect\n <Icon name=\"external-link\" size=\"0.75em\" className=\"ml-1\" />\n </Button>\n </div>\n ))}\n {onContinue && (\n <div className=\"flex justify-end border-t border-border pt-2\">\n <Button size=\"sm\" disabled={readOnly} onClick={onContinue}>\n Continue\n </Button>\n </div>\n )}\n </div>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n McpAuthPrompt: typeof McpAuthPrompt;\n }\n}\n","import { cn } from '../lib/cn.js';\n\nexport type StatusDotProps = {\n className?: string;\n colorClassName?: string;\n};\n\nexport function StatusDot({ className, colorClassName = 'bg-warning-bg' }: StatusDotProps) {\n return (\n <span aria-hidden className={cn('relative inline-flex h-2 w-2 shrink-0', className)}>\n <span\n className={cn(\n 'pointer-events-none absolute inline-flex h-full w-full rounded-full opacity-75 motion-safe:animate-ping motion-reduce:animate-none',\n colorClassName,\n )}\n />\n <span className={cn('relative inline-flex h-2 w-2 rounded-full', colorClassName)} />\n </span>\n );\n}\n","import { Icon } from '../../icons/Icon.js';\nimport { cn } from '../lib/cn.js';\n\nexport type StepIconBoxProps = {\n icon: string;\n iconSize?: string | number;\n variant?: 'primary' | 'muted';\n className?: string;\n iconClassName?: string;\n};\n\nexport function StepIconBox({\n icon,\n iconSize = '0.75em',\n variant = 'primary',\n className,\n iconClassName,\n}: StepIconBoxProps) {\n return (\n <div className={cn('flex size-5 shrink-0 items-center justify-center', className)}>\n <Icon\n name={icon}\n size={iconSize}\n className={cn(variant === 'primary' ? 'text-primary-button-bg' : 'text-text-secondary', iconClassName)}\n />\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { cn } from '../lib/cn.js';\nimport { Spinner } from '../primitives/Spinner.js';\nimport { StatusDot } from './StatusDot.js';\nimport { StepIconBox } from './StepIconBox.js';\n\nexport type AgentStepStatus = 'idle' | 'running' | 'success' | 'error';\n\nexport type AgentStepRowProps = {\n icon: string;\n iconVariant?: 'primary' | 'muted';\n iconClassName?: string;\n iconSize?: string | number;\n title?: ReactNode;\n label?: string;\n body?: ReactNode;\n expandable?: boolean;\n expanded?: boolean;\n onToggle?: () => void;\n status?: AgentStepStatus;\n statusText?: string;\n showSpinner?: boolean;\n showConnector?: boolean;\n showContentConnector?: boolean;\n showPersistentContentConnector?: boolean;\n showChevronColumn?: boolean;\n children?: ReactNode;\n persistentChildren?: ReactNode;\n dataTestPrefix?: string;\n className?: string;\n titleClassName?: string;\n align?: 'center' | 'start';\n};\n\nexport function AgentStepRow({\n icon,\n iconVariant = 'primary',\n iconClassName,\n iconSize,\n title,\n label,\n body,\n expandable = false,\n expanded = false,\n onToggle,\n status = 'idle',\n statusText,\n showSpinner = false,\n showConnector = false,\n showContentConnector = true,\n showPersistentContentConnector = true,\n showChevronColumn = true,\n children,\n persistentChildren,\n dataTestPrefix,\n className,\n titleClassName,\n align = 'center',\n}: AgentStepRowProps) {\n const hasChildren = !!children;\n const hasPersistentChildren = !!persistentChildren;\n const showExpandChevron = expandable && onToggle != null;\n const isRunning = status === 'running';\n const isSuccess = status === 'success';\n const isError = status === 'error';\n const alignStart = align === 'start';\n\n return (\n <div\n className={cn('flex min-w-0 flex-col', className)}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-step-row` : undefined}\n >\n <div className={cn('flex gap-2', alignStart ? 'items-start' : 'items-center')}>\n {showChevronColumn &&\n (showExpandChevron ? (\n <button\n type=\"button\"\n className=\"flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center\"\n onClick={onToggle}\n aria-expanded={expanded}\n aria-label={expanded ? 'Collapse step' : 'Expand step'}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-chevron` : undefined}\n >\n <Icon\n name=\"chevron-right\"\n size=\"0.625rem\"\n className={cn(\n 'shrink-0 text-text-secondary transition-transform duration-300',\n expanded && 'rotate-90',\n )}\n />\n </button>\n ) : (\n <div className=\"w-5 shrink-0\" />\n ))}\n\n <div className={cn('relative flex shrink-0 flex-col items-center', alignStart ? 'self-start' : 'self-center')}>\n <StepIconBox icon={icon} variant={iconVariant} iconClassName={iconClassName} iconSize={iconSize} />\n </div>\n\n <div\n className={cn('flex min-w-0 flex-1 flex-col justify-center', {\n 'cursor-pointer': showExpandChevron,\n })}\n onClick={showExpandChevron ? onToggle : undefined}\n >\n {label && <span className=\"text-xs font-medium leading-none text-text-secondary\">{label}</span>}\n {title && (\n <div className=\"flex min-w-0 items-center gap-2\">\n <span\n className={cn(\n 'min-w-0 truncate font-sans text-[0.75rem] font-medium leading-5 text-text-primary',\n titleClassName,\n )}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-title` : undefined}\n >\n {title}\n </span>\n {isSuccess && (\n <Icon\n name=\"circle-check\"\n size=\"0.875rem\"\n className=\"shrink-0 text-success-bg\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-success-icon` : undefined}\n />\n )}\n </div>\n )}\n {body && (\n <div\n className=\"mt-1 font-sans text-sm text-text-secondary\"\n onClick={e => {\n if (expanded && showExpandChevron) e.stopPropagation();\n }}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-body` : undefined}\n >\n {body}\n </div>\n )}\n </div>\n\n <div className={cn('flex shrink-0 items-center gap-2', alignStart ? 'self-start' : 'self-center')}>\n {statusText && (\n <span className=\"flex items-center gap-1\">\n {isRunning && <StatusDot />}\n <span className=\"font-sans text-xs font-medium leading-4 text-text-secondary\">{statusText}</span>\n </span>\n )}\n {!statusText && isRunning && (\n <>\n {showSpinner ? (\n <div className=\"ml-1\">\n <Spinner size={12} />\n </div>\n ) : (\n <StatusDot />\n )}\n </>\n )}\n {isError && (\n <Icon\n name=\"circle-xmark\"\n size=\"0.875rem\"\n className=\"text-failure-bg\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-error-icon` : undefined}\n />\n )}\n </div>\n </div>\n\n {expanded && hasChildren && (\n <div\n className=\"mt-2 flex min-w-0 gap-3\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-expanded-content` : undefined}\n >\n {showChevronColumn && <div className=\"w-5 shrink-0\" />}\n {showContentConnector && showConnector && (\n <div className=\"flex w-3 shrink-0 justify-center\">\n <div className=\"w-px bg-border\" />\n </div>\n )}\n <div className=\"min-w-0 flex-1\">{children}</div>\n </div>\n )}\n\n {hasPersistentChildren && (\n <div\n className={cn('flex min-w-0', showPersistentContentConnector ? 'gap-3' : 'gap-2')}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-persistent-content` : undefined}\n >\n {showChevronColumn && <div className=\"w-5 shrink-0\" />}\n {showPersistentContentConnector && showConnector && (\n <div className=\"flex w-3 shrink-0 justify-center\">\n <div className=\"w-px bg-border\" />\n </div>\n )}\n <div className=\"min-w-0 flex-1\">{persistentChildren}</div>\n </div>\n )}\n </div>\n );\n}\n","import { useSlot } from '../../theme/SlotsProvider.js';\nimport { AgentStepRow } from '../agent-chat/AgentStepRow.js';\nimport { cn } from '../lib/cn.js';\n\nexport type ReasoningCardProps = {\n content: string;\n isStreaming?: boolean;\n expanded?: boolean;\n onToggle?: () => void;\n isMultiLine?: boolean;\n reasoningTimeText?: string | null;\n previewText?: string;\n headingText?: string;\n contentRef?: (node: HTMLDivElement | null) => void;\n dataTestPrefix?: string;\n className?: string;\n};\n\nexport function ReasoningCard({\n content,\n isStreaming = false,\n expanded = false,\n onToggle,\n isMultiLine = false,\n reasoningTimeText,\n headingText = 'Reasoning',\n contentRef,\n dataTestPrefix,\n className,\n}: ReasoningCardProps) {\n const Markdown = useSlot('Markdown');\n const isShortText = !isStreaming && content.length > 0 && !isMultiLine;\n const isExpandable = isShortText || isMultiLine || isStreaming;\n const status = isStreaming ? 'running' : content.length > 0 ? 'success' : 'idle';\n const title = isStreaming ? headingText : (reasoningTimeText ?? headingText);\n const showContent = expanded && content.length > 0;\n\n return (\n <div\n className={cn('aui-reasoning-card mt-2 flex min-w-0 flex-col', className)}\n data-testid={\n dataTestPrefix ? `${dataTestPrefix}-${isShortText ? 'reasoning-inline' : 'reasoning-accordion'}` : undefined\n }\n >\n <AgentStepRow\n icon={isStreaming ? 'brain' : 'brain-regular'}\n iconVariant=\"primary\"\n title={title}\n expandable={isExpandable}\n expanded={expanded}\n onToggle={onToggle}\n status={status}\n dataTestPrefix={dataTestPrefix}\n >\n {showContent && (\n <div\n ref={contentRef}\n className=\"py-2 pt-0 font-sans text-sm font-normal text-text-secondary\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-content` : undefined}\n >\n <Markdown content={content} className=\"font-sans text-sm text-text-secondary\" />\n </div>\n )}\n </AgentStepRow>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n ReasoningCard: typeof ReasoningCard;\n }\n}\n","'use client';\n\nimport { cn } from './lib/cn.js';\n\nexport type ResumeUnavailableProps = {\n className?: string;\n};\n\n/**\n * Inline waiting notice when a response is still generating but this backend\n * cannot stream it live.\n */\nexport function ResumeUnavailable({ className }: ResumeUnavailableProps) {\n return (\n <p\n role=\"status\"\n aria-live=\"polite\"\n className={cn('text-text-secondary flex items-center gap-2 py-2 text-sm leading-snug', className)}\n >\n <span className=\"animate-pulse font-sans\" aria-hidden>\n {'●'}\n </span>\n Still generating a response. It&apos;ll appear here when ready.\n </p>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ResumeUnavailable: typeof ResumeUnavailable;\n }\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { libraryAgentId, useOptionalShellMode } from '../server/ShellModeContext.js';\nimport type { AgentLibraryEntry, AgentSpec } from '../server/types.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\nimport { useSearchAgentsList } from './lib/useSearchAgentsList.js';\nimport { CenteredModal } from './primitives/CenteredModal.js';\nimport SearchInput from './primitives/SearchInput.js';\nimport { Skeleton } from './primitives/Skeleton.js';\n\nexport type AgentsLibraryProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSelectAgent?: (agentName: string) => void;\n};\n\ntype AgentLibraryRowProps = {\n agent: AgentLibraryEntry;\n showEdit: boolean;\n onTry: () => void;\n onEdit: () => void;\n};\n\n/** Short label for model fqns like `provider/gpt-4.1` → `gpt-4.1`. */\nfunction displayModelLabel(modelName: string): string {\n const slash = modelName.lastIndexOf('/');\n return slash >= 0 ? modelName.slice(slash + 1) : modelName;\n}\n\nfunction AgentLibraryRow({ agent, showEdit, onTry, onEdit }: AgentLibraryRowProps) {\n const spec = agent.agentSpec;\n const modelName = spec?.model.name;\n const skillsCount = spec?.skills?.length ?? 0;\n const mcpCount = spec?.mcpServers?.length ?? 0;\n\n return (\n <div\n role=\"menuitem\"\n className={cn(\n 'flex w-full items-center gap-2.5 rounded-md border border-transparent px-2.5 py-2 transition-colors',\n 'hover:border-border hover:bg-ghost-button-hover',\n 'focus-within:border-border focus-within:bg-ghost-button-hover',\n )}\n >\n <span className=\"bg-primary-bg text-text-secondary inline-flex size-8 shrink-0 items-center justify-center rounded-md border border-border\">\n <Icon name=\"robot\" className=\"size-4\" />\n </span>\n <span className=\"text-text-primary min-w-0 flex-1 truncate text-left text-sm font-medium leading-tight\">\n {agent.name}\n </span>\n {spec != null ? (\n <span className=\"text-text-secondary flex shrink-0 items-center gap-2\">\n {modelName ? (\n <span className=\"bg-primary-button-bg/10 text-primary-button-bg inline-flex max-w-[8rem] items-center gap-1 truncate rounded-full px-2 py-0.5 text-xs font-medium\">\n <Icon name=\"cpu\" className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">{displayModelLabel(modelName)}</span>\n </span>\n ) : null}\n <span className=\"inline-flex items-center gap-1 text-xs\" aria-label={`${skillsCount} skills`}>\n <Icon name=\"wrench\" className=\"size-3.5\" />\n {skillsCount}\n </span>\n <span className=\"inline-flex items-center gap-1 text-xs\" aria-label={`${mcpCount} MCP servers`}>\n <Icon name=\"plug\" className=\"size-3.5\" />\n {mcpCount}\n </span>\n </span>\n ) : null}\n <span className=\"flex shrink-0 items-center gap-1.5\">\n {showEdit ? (\n <button\n type=\"button\"\n aria-label={`Edit agent ${agent.name}`}\n className={auiButtonClass({\n variant: 'ghost',\n size: 'sm',\n })}\n onClick={onEdit}\n >\n <Icon name=\"pencil\" className=\"size-3.5\" />\n Edit\n </button>\n ) : null}\n <button\n type=\"button\"\n aria-label={`Try agent ${agent.name}`}\n className={auiButtonClass({\n variant: 'outline',\n size: 'sm',\n })}\n onClick={onTry}\n >\n <Icon name=\"play\" className=\"size-3.5\" />\n Try\n </button>\n </span>\n </div>\n );\n}\n\nexport function AgentsLibrary({ open, onOpenChange, onSelectAgent }: AgentsLibraryProps) {\n const shell = useOptionalShellMode();\n const [query, setQuery] = useState('');\n\n const canEdit = shell?.isComposerEnabled === true;\n const agentsListEpoch = shell?.agentsListEpoch ?? 0;\n\n useEffect(() => {\n if (!open) setQuery('');\n }, [open]);\n\n const { agents, isInitialLoading, isSearching, loadingMore, error, hasMore, listRef, sentinelRef } =\n useSearchAgentsList({\n enabled: open,\n query,\n refreshKey: agentsListEpoch,\n });\n\n const closeLibrary = () => {\n onOpenChange(false);\n setQuery('');\n };\n\n const handleTry = (agent: AgentLibraryEntry) => {\n closeLibrary();\n onSelectAgent?.(agent.name);\n shell?.selectLibraryAgent({\n isMutable: false,\n agentId: libraryAgentId(agent),\n agentName: agent.name,\n });\n };\n\n const handleEdit = (agent: AgentLibraryEntry, agentSpec: AgentSpec) => {\n closeLibrary();\n onSelectAgent?.(agent.name);\n shell?.selectLibraryAgent({\n isMutable: true,\n agentId: libraryAgentId(agent),\n agentName: agent.name,\n agentSpec,\n });\n };\n\n return (\n <CenteredModal open={open} onOpenChange={onOpenChange} title=\"Agents Library\">\n <div className=\"bg-secondary-bg/40 flex min-h-0 flex-1 flex-col\">\n <div className=\"shrink-0 border-b border-border px-4 py-3\">\n <SearchInput query={query} setQuery={setQuery} placeholder=\"Search agents\" />\n {isSearching ? (\n <p className=\"text-text-secondary mt-1.5 text-xs\" role=\"status\">\n Searching…\n </p>\n ) : null}\n </div>\n <div\n ref={listRef}\n className=\"flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto p-2\"\n role=\"menu\"\n aria-label=\"Agents\"\n >\n {isInitialLoading ? (\n <div className=\"flex flex-col gap-2 p-1\" role=\"status\" aria-label=\"Loading agents\">\n {Array.from({ length: 6 }, (_, i) => (\n <Skeleton key={i} className=\"h-11 w-full rounded-md\" />\n ))}\n </div>\n ) : error ? (\n <p className=\"text-failure-bg px-3 py-8 text-center text-sm\">{error}</p>\n ) : agents.length === 0 ? (\n <p className=\"text-text-secondary px-3 py-8 text-center text-sm\">\n {query.trim()\n ? `No agents match \"${query.trim()}\".`\n : 'No agents yet. Build one in a chat, then save it as an agent.'}\n </p>\n ) : (\n <>\n {agents.map(agent => {\n const agentSpec = agent.agentSpec;\n const showEdit = canEdit && agentSpec != null;\n return (\n <AgentLibraryRow\n key={libraryAgentId(agent)}\n agent={agent}\n showEdit={showEdit}\n onTry={() => handleTry(agent)}\n onEdit={() => {\n if (agentSpec != null) handleEdit(agent, agentSpec);\n }}\n />\n );\n })}\n {hasMore ? (\n <div ref={sentinelRef} className=\"flex h-8 shrink-0 items-center justify-center\" aria-hidden>\n {loadingMore ? (\n <span className=\"text-text-secondary text-xs\" role=\"status\">\n Loading more…\n </span>\n ) : null}\n </div>\n ) : null}\n </>\n )}\n </div>\n </div>\n </CenteredModal>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentsLibrary: typeof AgentsLibrary;\n }\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useOptionalServer } from '../../server/ServerContext.js';\nimport type { AgentLibraryEntry } from '../../server/types.js';\nimport { getErrorMessage } from '../../utils/getErrorMessage.js';\nimport { useDebouncedValue } from './useDebouncedValue.js';\n\nexport const SEARCH_AGENTS_PAGE_SIZE = 50;\nconst DEFAULT_DEBOUNCE_MS = 300;\nconst LOAD_MORE_ROOT_MARGIN = '48px';\n\nexport type UseSearchAgentsListOptions = {\n /** When false, no fetches run. */\n enabled: boolean;\n query: string;\n /** Bump to force a replace fetch (e.g. agentsListEpoch). */\n refreshKey?: number;\n limit?: number;\n debounceMs?: number;\n};\n\nexport type UseSearchAgentsListResult = {\n agents: AgentLibraryEntry[];\n /** True while the replace fetch is in flight and the list is still empty. */\n isInitialLoading: boolean;\n /** True while replacing results that are already on screen (softer than a skeleton wipe). */\n isSearching: boolean;\n loadingMore: boolean;\n error: string | null;\n hasMore: boolean;\n listRef: (node: HTMLElement | null) => void;\n sentinelRef: (node: HTMLElement | null) => void;\n};\n\n/**\n * Debounced `searchAgents` with offset pagination and an IntersectionObserver sentinel.\n * Attach `listRef` to the scroll container and `sentinelRef` to a footer element.\n */\nexport function useSearchAgentsList({\n enabled,\n query,\n refreshKey = 0,\n limit = SEARCH_AGENTS_PAGE_SIZE,\n debounceMs = DEFAULT_DEBOUNCE_MS,\n}: UseSearchAgentsListOptions): UseSearchAgentsListResult {\n const server = useOptionalServer();\n // While closed, sync immediately so reopen never fetches a stale query.\n const debouncedQuery = useDebouncedValue(query, enabled ? debounceMs : 0);\n\n const [agents, setAgents] = useState<AgentLibraryEntry[]>([]);\n const [loading, setLoading] = useState(false);\n const [loadingMore, setLoadingMore] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [hasMore, setHasMore] = useState(false);\n\n const genRef = useRef(0);\n const loadMoreInflightRef = useRef(false);\n const hasMoreRef = useRef(false);\n const agentsLenRef = useRef(0);\n const listElRef = useRef<HTMLElement | null>(null);\n const sentinelElRef = useRef<HTMLElement | null>(null);\n const [listEl, setListEl] = useState<HTMLElement | null>(null);\n const [sentinelEl, setSentinelEl] = useState<HTMLElement | null>(null);\n\n hasMoreRef.current = hasMore;\n agentsLenRef.current = agents.length;\n\n const listRef = useCallback((node: HTMLElement | null) => {\n listElRef.current = node;\n setListEl(node);\n }, []);\n\n const sentinelRef = useCallback((node: HTMLElement | null) => {\n sentinelElRef.current = node;\n setSentinelEl(node);\n }, []);\n\n const searchQuery = debouncedQuery.trim() || undefined;\n\n useEffect(() => {\n if (!enabled || server == null) return;\n\n const gen = ++genRef.current;\n loadMoreInflightRef.current = false;\n setLoading(true);\n setError(null);\n\n void server\n .searchAgents({ query: searchQuery, limit, offset: 0 })\n .then(rows => {\n if (gen !== genRef.current) return;\n setAgents(rows);\n setHasMore(rows.length >= limit);\n })\n .catch((err: unknown) => {\n if (gen !== genRef.current) return;\n setAgents([]);\n setHasMore(false);\n setError(getErrorMessage(err, 'Failed to load agents.'));\n })\n .finally(() => {\n if (gen === genRef.current) setLoading(false);\n });\n\n return () => {\n genRef.current += 1;\n };\n }, [enabled, server, searchQuery, limit, refreshKey]);\n\n const loadMore = useCallback(() => {\n if (!enabled || server == null || !hasMoreRef.current || loadMoreInflightRef.current || loading) {\n return;\n }\n\n const gen = genRef.current;\n const offset = agentsLenRef.current;\n loadMoreInflightRef.current = true;\n setLoadingMore(true);\n\n void server\n .searchAgents({ query: searchQuery, limit, offset })\n .then(rows => {\n if (gen !== genRef.current) return;\n setAgents(prev => [...prev, ...rows]);\n setHasMore(rows.length >= limit);\n })\n .catch(() => {\n if (gen !== genRef.current) return;\n setHasMore(false);\n })\n .finally(() => {\n loadMoreInflightRef.current = false;\n if (gen === genRef.current) setLoadingMore(false);\n });\n }, [enabled, server, searchQuery, limit, loading]);\n\n useEffect(() => {\n if (!enabled || !hasMore || listEl == null || sentinelEl == null) return;\n\n const observer = new IntersectionObserver(\n entries => {\n if (entries.some(entry => entry.isIntersecting)) {\n loadMore();\n }\n },\n { root: listEl, rootMargin: LOAD_MORE_ROOT_MARGIN },\n );\n observer.observe(sentinelEl);\n return () => observer.disconnect();\n }, [enabled, hasMore, listEl, sentinelEl, loadMore, agents.length]);\n\n return {\n agents,\n isInitialLoading: loading && agents.length === 0,\n isSearching: loading && agents.length > 0,\n loadingMore,\n error,\n hasMore,\n listRef,\n sentinelRef,\n };\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\n\n/** Returns `value` immediately on first render; subsequent changes apply after `delayMs`. */\nexport function useDebouncedValue<T>(value: T, delayMs: number): T {\n const [debounced, setDebounced] = useState(value);\n\n useEffect(() => {\n const id = window.setTimeout(() => setDebounced(value), delayMs);\n return () => window.clearTimeout(id);\n }, [value, delayMs]);\n\n return debounced;\n}\n","'use client';\n\nimport { useEffect, useId, useRef, type ReactNode } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { cn } from '../lib/cn.js';\nimport { useCompactLayout } from '../lib/CompactLayoutContext.js';\nimport { useCompactOverlayStyle } from '../lib/useCompactOverlayStyle.js';\n\nexport type CenteredModalProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description?: string;\n headerIcon?: ReactNode;\n children: ReactNode;\n className?: string;\n contentSized?: boolean;\n 'aria-label'?: string;\n};\n\n/**\n * Responsive modal chrome: centered dialog on `md+`, bottom sheet below `md`.\n * One content tree for both breakpoints (native `<dialog>`).\n */\nexport function CenteredModal({\n open,\n onOpenChange,\n title,\n description,\n headerIcon,\n children,\n className,\n contentSized = false,\n 'aria-label': ariaLabel,\n}: CenteredModalProps) {\n const ref = useRef<HTMLDialogElement>(null);\n const titleId = useId();\n const descriptionId = useId();\n const compact = useCompactLayout();\n const compactStyle = useCompactOverlayStyle(ref, compact, contentSized);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n if (open && !el.open) {\n el.showModal();\n } else if (!open && el.open) {\n el.close();\n }\n }, [open]);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const handler = () => onOpenChange(false);\n el.addEventListener('close', handler);\n return () => el.removeEventListener('close', handler);\n }, [onOpenChange]);\n\n return (\n <dialog\n ref={ref}\n aria-label={ariaLabel ?? title}\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n onCancel={event => {\n event.preventDefault();\n event.stopPropagation();\n onOpenChange(false);\n }}\n style={compactStyle ?? (contentSized ? { height: 'fit-content', maxHeight: '85dvh' } : undefined)}\n className={cn(\n 'bg-card-bg text-text-primary border-border open:flex open:flex-col overflow-hidden p-0 shadow-xl',\n 'backdrop:bg-black/50 backdrop:backdrop-blur-[2px] dark:backdrop:bg-black/70',\n compact\n ? 'm-0 mt-auto max-w-none rounded-t-xl rounded-b-none border-t pb-[env(safe-area-inset-bottom)]'\n : contentSized\n ? 'm-0 mt-auto h-auto max-h-[85dvh] w-full max-w-none rounded-t-xl rounded-b-none border-t pb-[env(safe-area-inset-bottom)] md:m-auto md:h-auto md:w-[min(28rem,calc(100%-3rem))] md:max-w-md md:rounded-xl md:border md:pb-0'\n : cn(\n // Mobile: bottom sheet\n 'm-0 mt-auto h-[min(85dvh,40rem)] w-full max-w-none rounded-t-xl rounded-b-none border-t pb-[env(safe-area-inset-bottom)]',\n // Desktop: large centered modal (MCP-tools inspired)\n 'md:m-auto md:h-[min(80dvh,40rem)] md:w-[min(72rem,calc(100%-3rem))] md:max-w-5xl md:rounded-xl md:border md:pb-0',\n ),\n className,\n )}\n >\n <header className=\"bg-topbar-bg flex shrink-0 items-center gap-3 border-b border-border px-5 py-4\">\n {headerIcon}\n <div className=\"min-w-0 flex-1\">\n <h2 id={titleId} className=\"text-text-primary text-lg font-semibold tracking-tight\">\n {title}\n </h2>\n {description ? (\n <p id={descriptionId} className=\"text-text-secondary mt-1 text-sm\">\n {description}\n </p>\n ) : null}\n </div>\n <button\n type=\"button\"\n aria-label=\"Close\"\n title=\"Close\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={() => onOpenChange(false)}\n >\n <Icon name=\"xmark\" />\n </button>\n </header>\n <div className=\"flex min-h-0 flex-1 flex-col overflow-x-hidden overflow-y-auto\">{children}</div>\n </dialog>\n );\n}\n","'use client';\n\nimport { useLayoutEffect, useState, type CSSProperties, type RefObject } from 'react';\n\nexport function useCompactOverlayStyle(\n ref: RefObject<HTMLElement | null>,\n compact: boolean,\n contentSized = false,\n): CSSProperties | undefined {\n const [style, setStyle] = useState<CSSProperties>();\n\n useLayoutEffect(() => {\n if (!compact) {\n setStyle(undefined);\n return;\n }\n\n const container = ref.current?.closest<HTMLElement>('[data-aui-compact-layout]');\n if (!container) return;\n\n const update = () => {\n const bounds = container.getBoundingClientRect();\n const height = Math.min(bounds.height * 0.85, 480);\n setStyle({\n left: bounds.left,\n bottom: window.innerHeight - bounds.bottom,\n width: bounds.width,\n height: contentSized ? 'fit-content' : height,\n maxHeight: height,\n });\n };\n\n update();\n const observer = typeof ResizeObserver === 'function' ? new ResizeObserver(update) : null;\n observer?.observe(container);\n window.addEventListener('resize', update);\n return () => {\n observer?.disconnect();\n window.removeEventListener('resize', update);\n };\n }, [compact, contentSized, ref]);\n\n return style;\n}\n","import { Icon } from '../../icons/Icon.js';\n\ntype SearchInputProps = {\n query: string;\n setQuery: (query: string) => void;\n placeholder?: string;\n};\n\nconst SearchInput = ({ query, setQuery, placeholder = 'Search' }: SearchInputProps) => {\n return (\n <label className=\"relative block\">\n <Icon\n name=\"search\"\n className=\"text-text-secondary pointer-events-none absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2\"\n />\n <input\n type=\"search\"\n value={query}\n onChange={e => setQuery(e.target.value)}\n placeholder={placeholder}\n className=\"border-input-border bg-input-box-bg text-text-primary placeholder:text-text-secondary/70 h-9 w-full rounded-md border py-1 pr-3 pl-8 text-sm outline-none\"\n autoFocus\n />\n </label>\n );\n};\n\nexport default SearchInput;\n","import React from 'react';\n\nimport { cn } from '../lib/cn.js';\n\nexport type SkeletonProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function Skeleton({ className, ...props }: SkeletonProps) {\n return <div className={cn('animate-pulse rounded-md bg-secondary-bg', className)} {...props} />;\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useOptionalServer } from '../server/ServerContext.js';\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\nimport { SEARCH_AGENTS_PAGE_SIZE } from './lib/useSearchAgentsList.js';\n\nexport type AgentsLibraryButtonProps = {\n className?: string;\n compact?: boolean;\n onSelectAgent?: (agentName: string) => void;\n};\n\nexport function AgentsLibraryButton({ className, compact = false, onSelectAgent }: AgentsLibraryButtonProps) {\n const AgentsLibrary = useSlot('AgentsLibrary');\n const server = useOptionalServer();\n const shell = useOptionalShellMode();\n const [open, setOpen] = useState(false);\n const [countLabel, setCountLabel] = useState<string | null>(null);\n\n const enabled = shell?.isLibraryEnabled === true && server != null;\n const agentsListEpoch = shell?.agentsListEpoch ?? 0;\n\n useEffect(() => {\n // Compact trigger has no count badge; skip so SidebarLayout can keep both\n // collapsed + expanded trees mounted without a duplicate catalog request.\n if (!enabled || !server || compact) return;\n let cancelled = false;\n void server\n .searchAgents({ limit: SEARCH_AGENTS_PAGE_SIZE })\n .then(rows => {\n if (cancelled) return;\n // API has no total; a full page means there may be more.\n setCountLabel(rows.length >= SEARCH_AGENTS_PAGE_SIZE ? `${SEARCH_AGENTS_PAGE_SIZE}+` : String(rows.length));\n })\n .catch(() => undefined);\n return () => {\n cancelled = true;\n };\n }, [enabled, server, agentsListEpoch, compact]);\n\n if (!enabled) return null;\n\n return (\n <>\n <div className={cn('relative min-w-0', compact ? 'w-8' : 'w-full', className)}>\n <button\n type=\"button\"\n aria-label={compact ? 'Agents Library' : undefined}\n title={compact ? 'Agents Library' : undefined}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n className={auiButtonClass({\n variant: 'ghost',\n className: cn(\n 'h-8 rounded-md text-sm font-medium text-text-primary shadow-none hover:bg-ghost-button-hover hover:text-ghost-button-text',\n compact ? 'w-8 !justify-center p-0' : 'w-full !justify-start px-2.5',\n open && 'bg-dropdown-selected-item-bg text-dropdown-selected-item-text',\n ),\n })}\n onClick={() => setOpen(true)}\n >\n <Icon name=\"robot\" />\n {!compact ? (\n <>\n <span className=\"truncate\">\n Agents Library\n {countLabel != null ? <span className=\"text-text-secondary\"> ({countLabel})</span> : null}\n </span>\n <Icon name=\"chevron-right\" className=\"ml-auto size-3.5 shrink-0 opacity-60\" />\n </>\n ) : null}\n </button>\n </div>\n <AgentsLibrary open={open} onOpenChange={setOpen} onSelectAgent={onSelectAgent} />\n </>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentsLibraryButton: typeof AgentsLibraryButton;\n }\n}\n","import type { ReactNode } from 'react';\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({ children, error, actionBar, className }: AssistantMessageBubbleProps) {\n return (\n <div\n data-slot=\"aui_assistant-message-root\"\n className={cn(\n 'group/assistant relative min-w-0 max-w-full bg-assistant-message-bg text-assistant-message-text',\n className,\n )}\n >\n <div className=\"min-w-0 max-w-full\">\n {children}\n {error && <div className=\"mt-2 text-sm text-failure-bg\">{error}</div>}\n </div>\n {actionBar && <div className=\"mt-1\">{actionBar}</div>}\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n AssistantMessageBubble: typeof AssistantMessageBubble;\n }\n}\n","/** Fixed preview bounds for attachments rendered in user message bubbles. */\nexport const USER_MESSAGE_ATTACHMENT_PREVIEW_REM = 12;\n","import React, { useState } from 'react';\n\nimport { cn } from '../lib/cn.js';\n\nconst sizeClasses = {\n sm: 'h-6 w-6 text-xs',\n default: 'h-8 w-8 text-sm',\n lg: 'h-10 w-10 text-base',\n};\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 <div\n data-slot=\"avatar\"\n data-size={size}\n className={cn('relative flex shrink-0 overflow-hidden rounded-full', sizeClasses[size], className)}\n {...props}\n />\n );\n}\n\nexport type AvatarImageProps = React.ImgHTMLAttributes<HTMLImageElement>;\n\nexport function AvatarImage({ className, src, alt = '', onError, ...props }: AvatarImageProps) {\n const [failed, setFailed] = useState(false);\n\n if (failed || !src) return null;\n\n return (\n <img\n data-slot=\"avatar-image\"\n src={src}\n alt={alt}\n className={cn('aspect-square h-full w-full object-cover', className)}\n onError={e => {\n setFailed(true);\n onError?.(e);\n }}\n {...props}\n />\n );\n}\n\nexport type AvatarFallbackProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function AvatarFallback({ className, ...props }: AvatarFallbackProps) {\n return (\n <div\n data-slot=\"avatar-fallback\"\n className={cn(\n 'flex h-full w-full items-center justify-center rounded-full bg-secondary-bg font-medium text-text-secondary',\n className,\n )}\n {...props}\n />\n );\n}\n\n// declare module \"../../theme/SlotsProvider.js\" {\n// interface AtomSlots {\n// Avatar: typeof Avatar;\n// AvatarImage: typeof AvatarImage;\n// AvatarFallback: typeof AvatarFallback;\n// }\n// }\n","'use client';\n\nimport { USER_MESSAGE_ATTACHMENT_PREVIEW_REM } from '../constants/attachments.js';\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\nimport { Avatar, AvatarFallback, AvatarImage } from './primitives/Avatar.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 if (size === 'preview' && isImage && previewSrc) {\n const previewSize = 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-secondary-bg 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-primary-bg 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 <Icon name=\"file\" size=\"1rem\" className=\"text-text-secondary\" />\n </AvatarFallback>\n </Avatar>\n ) : (\n <Icon name=\"file\" size=\"1rem\" className=\"text-text-secondary\" />\n )}\n </div>\n <span className=\"text-text-primary min-w-0 truncate text-sm\">{name}</span>\n {onRemove && (\n <button\n type=\"button\"\n aria-label=\"Remove file\"\n title=\"Remove file\"\n className={auiButtonClass({\n variant: 'ghost',\n size: 'icon',\n className: 'size-6 shrink-0 rounded-full',\n })}\n onClick={onRemove}\n >\n <Icon name=\"xmark\" />\n </button>\n )}\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n AttachmentCard: typeof AttachmentCard;\n }\n}\n","import type { ComponentProps } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\n\nexport type AttachmentPickerButtonProps = Omit<ComponentProps<'button'>, 'children' | 'aria-label'>;\n\nexport function AttachmentPickerButton({ className, ...props }: AttachmentPickerButtonProps) {\n return (\n <button\n type=\"button\"\n aria-label=\"Add Attachment\"\n title=\"Add Attachment\"\n className={auiButtonClass({\n variant: 'ghost',\n size: 'icon',\n className: `size-7 rounded-full p-1 ${className ?? ''}`,\n })}\n {...props}\n >\n <Icon name=\"paperclip\" />\n </button>\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';\n\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { Dialog, DialogContent } from './primitives/Dialog.js';\n\nexport type AttachmentPreviewDialogProps = {\n previewSrc?: string;\n children: ReactNode;\n};\n\nexport function AttachmentPreviewDialog({ previewSrc, children }: AttachmentPreviewDialogProps) {\n const [open, setOpen] = useState(false);\n\n if (!previewSrc) return <>{children}</>;\n\n return (\n <>\n <button\n type=\"button\"\n aria-label=\"Open attachment preview\"\n onClick={() => setOpen(true)}\n className=\"block max-w-full cursor-pointer border-0 bg-transparent p-0 text-left\"\n >\n {children}\n </button>\n <Dialog\n open={open}\n onOpenChange={setOpen}\n aria-label=\"Attachment preview\"\n className=\"max-w-[calc(100%-2rem)] sm:max-w-3xl\"\n >\n <DialogContent className=\"relative p-2\">\n <span className=\"absolute top-2 right-2 z-10 inline-flex\">\n <button\n type=\"button\"\n aria-label=\"Close\"\n title=\"Close\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={() => setOpen(false)}\n >\n <Icon name=\"xmark\" />\n </button>\n </span>\n <div className=\"bg-primary-bg 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}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n AttachmentPreviewDialog: typeof AttachmentPreviewDialog;\n }\n}\n","import React from 'react';\n\nimport { cn } from '../lib/cn.js';\n\nexport type DialogProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: React.ReactNode;\n className?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n};\n\nexport function Dialog({\n open,\n onOpenChange,\n children,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n}: DialogProps) {\n const ref = React.useRef<HTMLDialogElement>(null);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n if (open && !el.open) {\n el.showModal();\n } else if (!open && el.open) {\n el.close();\n }\n }, [open]);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const handler = () => onOpenChange(false);\n el.addEventListener('close', handler);\n return () => el.removeEventListener('close', handler);\n }, [onOpenChange]);\n\n const handleBackdropClick = (e: React.MouseEvent<HTMLDialogElement>) => {\n if (e.target === ref.current) onOpenChange(false);\n };\n\n return (\n <dialog\n ref={ref}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n onClick={handleBackdropClick}\n className={cn(\n 'm-auto max-h-[90dvh] w-full max-w-lg rounded-lg bg-card-bg p-0 text-text-primary shadow-lg',\n 'backdrop:bg-[var(--overlay)]',\n 'open:flex open:flex-col',\n className,\n )}\n >\n {children}\n </dialog>\n );\n}\n\nexport type DialogContentProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function DialogContent({ className, children, ...props }: DialogContentProps) {\n return (\n <div className={cn('flex flex-col gap-4 p-6', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type DialogHeaderProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function DialogHeader({ className, ...props }: DialogHeaderProps) {\n return <div className={cn('flex flex-col gap-1.5', className)} {...props} />;\n}\n\nexport type DialogTitleProps = React.HTMLAttributes<HTMLHeadingElement>;\n\nexport function DialogTitle({ className, ...props }: DialogTitleProps) {\n return <h2 className={cn('text-lg font-semibold leading-none tracking-tight', className)} {...props} />;\n}\n\nexport type DialogFooterProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function DialogFooter({ className, ...props }: DialogFooterProps) {\n return (\n <div className={cn('flex flex-col-reverse gap-2 px-6 pb-6 sm:flex-row sm:justify-end', className)} {...props} />\n );\n}\n\n/**\n * Accessible backdrop modal (Escape, focus restore, labelled dialog).\n * Prefer {@link Dialog} (native `<dialog>`) for new call sites.\n */\nexport function Modal({\n open,\n onClose,\n children,\n 'aria-label': ariaLabel = 'Dialog',\n}: {\n open?: boolean;\n onClose?: () => void;\n children?: React.ReactNode;\n 'aria-label'?: string;\n}) {\n const dialogRef = React.useRef<HTMLDivElement>(null);\n const previousFocusRef = React.useRef<HTMLElement | null>(null);\n\n React.useEffect(() => {\n if (!open) return;\n previousFocusRef.current = document.activeElement as HTMLElement | null;\n const dialog = dialogRef.current;\n const focusable = dialog?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n focusable?.focus();\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n onClose?.();\n return;\n }\n if (e.key !== 'Tab' || !dialog) return;\n const nodes = Array.from(\n dialog.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ),\n ).filter(el => !el.hasAttribute('disabled') && el.tabIndex !== -1);\n if (nodes.length === 0) return;\n const first = nodes[0]!;\n const last = nodes[nodes.length - 1]!;\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n };\n\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n previousFocusRef.current?.focus?.();\n };\n }, [open, onClose]);\n\n if (!open) return null;\n\n return (\n <div\n role=\"presentation\"\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-[var(--overlay)] p-4\"\n onClick={onClose}\n >\n <div ref={dialogRef} role=\"dialog\" aria-modal=\"true\" aria-label={ariaLabel} onClick={e => e.stopPropagation()}>\n {children}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, type MouseEvent } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { cn } from './lib/cn.js';\nimport { Spinner } from './primitives/Spinner.js';\n\nexport type ChatFileDownloadFile = {\n name: string;\n path: string;\n};\n\nexport type ChatFileDownloadProps = {\n files: ChatFileDownloadFile[];\n fileDownloadBaseUrl?: string;\n onDownloadArtifact?: (path: string, filename: string) => Promise<void>;\n readOnly?: boolean;\n};\n\nexport function ChatFileDownload({ files, fileDownloadBaseUrl, onDownloadArtifact, readOnly }: ChatFileDownloadProps) {\n const [downloadingPath, setDownloadingPath] = useState<string | null>(null);\n\n return (\n <details\n open\n className=\"aui-sandbox-artifacts group my-2 overflow-hidden rounded-lg border border-primary-button-bg/20 bg-card-bg\"\n data-testid=\"aui-sandbox-artifacts\"\n >\n <summary className=\"flex min-h-9 cursor-pointer list-none items-center gap-2 bg-primary-button-bg/5 px-3 py-2 text-xs font-medium leading-none text-primary-button-bg [&::-webkit-details-marker]:hidden\">\n <Icon name=\"chevron-down\" size={13} className=\"shrink-0 transition-transform group-open:rotate-180\" />\n <Icon name=\"file\" size={16} className=\"shrink-0\" />\n <span className=\"leading-none\">\n {files.length} {files.length === 1 ? 'file' : 'files'} generated\n </span>\n </summary>\n\n <div className=\"flex flex-wrap items-center gap-y-1 px-3 py-2\">\n {files.map(({ name, path }) => {\n if (readOnly) {\n return (\n <span\n key={path}\n className=\"mr-3 inline-flex min-h-7 items-center gap-1.5 border-r border-border pr-3 text-xs text-text-secondary last:mr-0 last:border-r-0 last:pr-0\"\n >\n <Icon name=\"file\" size={14} className=\"shrink-0\" />\n <span className=\"leading-none\">{name}</span>\n </span>\n );\n }\n\n const href = fileDownloadBaseUrl ? `${fileDownloadBaseUrl}${path}` : undefined;\n const canDownload = Boolean(onDownloadArtifact || href);\n const isDownloading = downloadingPath === path;\n\n const handleClick = (event: MouseEvent) => {\n if (!onDownloadArtifact || isDownloading) {\n event.preventDefault();\n return;\n }\n event.preventDefault();\n setDownloadingPath(path);\n void onDownloadArtifact(path, name).finally(() => {\n setDownloadingPath(current => (current === path ? null : current));\n });\n };\n\n return (\n <a\n key={path}\n href={canDownload ? (href ?? '#') : undefined}\n onClick={onDownloadArtifact ? handleClick : undefined}\n aria-busy={isDownloading || undefined}\n className={cn(\n 'mr-3 inline-flex min-h-7 items-center gap-1.5 border-r border-border pr-3 text-xs text-text-primary last:mr-0 last:border-r-0 last:pr-0',\n canDownload && !isDownloading && 'cursor-pointer hover:text-primary-button-bg',\n (isDownloading || !canDownload) && 'pointer-events-none opacity-60',\n )}\n download={name}\n aria-label={isDownloading ? `Downloading ${name}` : `Download ${name}`}\n >\n <Icon name=\"file\" size={14} className=\"shrink-0 text-text-secondary\" />\n <span className=\"leading-none\">{name}</span>\n {isDownloading ? (\n <Spinner size={14} className=\"shrink-0 text-primary-button-bg\" />\n ) : (\n <Icon name=\"download\" size={14} className=\"shrink-0 text-primary-button-bg\" />\n )}\n </a>\n );\n })}\n </div>\n </details>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ChatFileDownload: typeof ChatFileDownload;\n }\n}\n","'use client';\n\nimport { useTrueFoundryAgentSpec } from '@truefoundry/assistant-ui-runtime';\n\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\n\nexport type NamedAgentHeaderState = {\n name: string;\n isEditing: boolean;\n};\n\n// Canonical named-agent header state, including mutable edit mode.\nexport function useNamedAgentHeaderState(): NamedAgentHeaderState | null {\n const shell = useOptionalShellMode();\n if (shell == null || shell.mode.status !== 'active') return null;\n const name = shell.mode.agentName ?? shell.mode.agentId;\n if (name == null || name.length === 0) return null;\n return { name, isEditing: shell.mode.isMutable };\n}\n\nexport function useNamedAgentHeaderVisible(): boolean {\n const state = useNamedAgentHeaderState();\n return state !== null;\n}\n\n// Mutable draft/edit with a selected model — drives Save Agent + header chrome.\nexport function useSaveAgentVisible(): boolean {\n const shell = useOptionalShellMode();\n const { agentSpec } = useTrueFoundryAgentSpec();\n if (shell == null || shell.mode.status !== 'active' || !shell.mode.isMutable) return false;\n return Boolean(agentSpec?.model?.name?.trim());\n}\n\n// Clear chat: only on immutable (named / saved) sessions — same gate as the agent title.\nexport function useChatChromeActionsVisible(): boolean {\n const shell = useOptionalShellMode();\n return shell != null && shell.mode.status === 'active' && !shell.mode.isMutable;\n}\n\n// True when the thread header has anything to show (title, Save, and/or Clear).\n// Clear alone matters for orphaned immutable history (deleted agent, no name).\nexport function useChatHeaderContentVisible(): boolean {\n const namedVisible = useNamedAgentHeaderVisible();\n const saveVisible = useSaveAgentVisible();\n const clearVisible = useChatChromeActionsVisible();\n return namedVisible || saveVisible || clearVisible;\n}\n","'use client';\n\nimport { useChatChromeActionsVisible } from '../hooks/useChatChromeActionsVisible.js';\nimport { Icon } from '../icons/Icon.js';\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\n\n// Resets an immutable (named) chat. Hidden while idle or on mutable drafts.\nexport function ClearChatButton() {\n const shell = useOptionalShellMode();\n const visible = useChatChromeActionsVisible();\n\n if (!visible || shell == null) return null;\n\n return (\n <button\n type=\"button\"\n title=\"Clear chat\"\n className={auiButtonClass({ variant: 'ghost', size: 'sm' })}\n onClick={() => shell.clearChat()}\n >\n <Icon name=\"broom\" size=\"0.875rem\" />\n Clear chat\n </button>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ClearChatButton: typeof ClearChatButton;\n }\n}\n","'use client';\n\nimport { useCallback, useState } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { cn } from './lib/cn.js';\nimport type { MonacoEditorCoreProps } from './MonacoEditorCore.js';\n\nexport type CodeEditorProps = Omit<MonacoEditorCoreProps, 'onAutoHeightChange' | 'options'> & {\n filename?: string;\n showToolbar?: boolean;\n};\n\nfunction ToolbarButton({\n onClick,\n tooltip,\n icon,\n active,\n}: {\n onClick: () => void;\n tooltip: string;\n icon: string;\n active?: boolean;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n title={tooltip}\n className={cn(\n 'flex cursor-pointer items-center justify-center rounded p-1.5 text-xs transition-colors',\n 'hover:bg-ghost-button-hover text-text-secondary hover:text-text-primary',\n active && 'bg-dropdown-selected-item-bg text-dropdown-selected-item-text',\n )}\n aria-label={tooltip}\n >\n <Icon name={icon} size=\"0.875em\" />\n </button>\n );\n}\n\nexport function CodeEditor({\n value,\n language,\n theme,\n filename,\n onChange,\n onMount,\n beforeMount,\n className,\n height,\n showToolbar = true,\n}: CodeEditorProps) {\n const MonacoEditorCore = useSlot('MonacoEditorCore');\n const [showLineNumbers, setShowLineNumbers] = useState(false);\n const [expanded, setExpanded] = useState(false);\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(() => {\n void navigator.clipboard.writeText(value).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }, [value]);\n\n const handleDownload = useCallback(() => {\n const blob = new Blob([value], { type: 'text/plain' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename ?? `code.${language ?? 'txt'}`;\n a.click();\n URL.revokeObjectURL(url);\n }, [value, filename, language]);\n\n const editorOptions = {\n lineNumbers: showLineNumbers ? 'on' : ('off' as const),\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n wordWrap: 'on' as const,\n };\n\n const editorHeight = expanded ? '100%' : (height ?? 320);\n\n return (\n <div\n className={cn(\n 'aui-code-editor flex flex-col overflow-hidden rounded-md border border-border',\n expanded && 'fixed inset-4 z-50 bg-primary-bg shadow-2xl',\n className,\n )}\n >\n {showToolbar && (\n <div className=\"flex items-center justify-between gap-1 border-b border-border px-2 py-1\">\n {filename && <span className=\"truncate text-xs text-text-secondary\">{filename}</span>}\n <div className=\"ml-auto flex items-center gap-0.5\">\n <ToolbarButton\n onClick={() => setShowLineNumbers(v => !v)}\n tooltip={showLineNumbers ? 'Hide line numbers' : 'Show line numbers'}\n icon=\"list-ol\"\n active={showLineNumbers}\n />\n <ToolbarButton\n onClick={handleCopy}\n tooltip={copied ? 'Copied!' : 'Copy'}\n icon={copied ? 'check' : 'copy'}\n />\n <ToolbarButton onClick={handleDownload} tooltip=\"Download\" icon=\"download\" />\n <ToolbarButton\n onClick={() => setExpanded(v => !v)}\n tooltip={expanded ? 'Collapse' : 'Expand'}\n icon={expanded ? 'compress' : 'expand'}\n />\n </div>\n </div>\n )}\n\n <div className=\"flex-1 overflow-hidden\" style={expanded ? undefined : { height: editorHeight }}>\n <MonacoEditorCore\n value={value}\n language={language}\n theme={theme}\n options={editorOptions}\n onChange={onChange}\n onMount={onMount}\n beforeMount={beforeMount}\n height=\"100%\"\n />\n </div>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n CodeEditor: typeof CodeEditor;\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { Spinner } from '../atoms/primitives/Spinner.js';\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.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 type ComposerLeftSectionSlot = (props: ComposerLeftSectionProps) => ReactNode;\nexport type ComposerRightSectionSlot = (props: ComposerRightSectionProps) => ReactNode;\nexport type ComposerSendButtonSlot = (props: ComposerSendButtonProps) => ReactNode;\n\nexport function ComposerLeftSection({ onAttach }: ComposerLeftSectionProps) {\n if (!onAttach) return null;\n\n return (\n <button\n type=\"button\"\n aria-label=\"Attach\"\n title=\"Attach\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={onAttach}\n >\n <Icon name=\"paperclip\" />\n </button>\n );\n}\n\nexport function ComposerRightSection(_: ComposerRightSectionProps): ReactNode {\n return null;\n}\n\nexport function ComposerSendButton({ canSubmit, isRunning, onSubmit, onCancel }: ComposerSendButtonProps) {\n if (isRunning) {\n return (\n <button\n type=\"button\"\n className={auiButtonClass({ size: 'sm' })}\n disabled={!onCancel}\n onClick={onCancel}\n aria-label=\"Cancel\"\n >\n <Spinner size={14} />\n Cancel\n </button>\n );\n }\n\n return (\n <button\n type=\"button\"\n className={auiButtonClass({ size: 'icon' })}\n disabled={!canSubmit}\n onClick={onSubmit}\n title=\"Send message\"\n aria-label=\"Send message\"\n >\n <Icon name=\"arrow-up\" />\n </button>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ComposerLeftSection: ComposerLeftSectionSlot;\n ComposerRightSection: ComposerRightSectionSlot;\n ComposerSendButton: ComposerSendButtonSlot;\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 /** Message input node, supplied by the container (e.g. `<ComposerPrimitive.Input />`). */\n input: ReactNode;\n disabled: boolean;\n canSubmit: boolean;\n isRunning?: boolean;\n attachments?: ReactNode;\n modelLabel?: string;\n modelIcon?: ReactNode;\n connectorStatusLabel?: string;\n onSubmit: () => void;\n onCancel?: () => void;\n onAttach?: () => void;\n className?: string;\n};\n\nexport function ComposerShell({\n input,\n disabled,\n canSubmit,\n isRunning = false,\n attachments,\n modelLabel,\n modelIcon,\n connectorStatusLabel,\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-focus-ring focus-within:ring-focus-ring/20 flex w-full flex-col gap-2 rounded-[var(--composer-radius,1.5rem)] border bg-input-box-bg p-[var(--composer-padding,8px)] shadow-sm transition-colors focus-within:ring-3',\n className,\n )}\n >\n {attachments}\n {input}\n <div className=\"flex min-w-0 flex-wrap items-center justify-between gap-2 px-1\">\n <div className=\"flex min-w-0 max-w-full flex-wrap items-center gap-2\">\n <ComposerLeftSection disabled={disabled} isRunning={isRunning} onAttach={onAttach} />\n {connectorStatusLabel && (\n <span className=\"text-text-secondary max-w-[12rem] truncate text-xs\">{connectorStatusLabel}</span>\n )}\n </div>\n <div className=\"ml-auto flex min-w-0 shrink-0 flex-wrap items-center justify-end gap-2\">\n {modelLabel && (\n <span className=\"bg-secondary-bg text-text-secondary flex max-w-[10rem] items-center gap-1 truncate rounded-full px-2 py-0.5 text-xs\">\n {modelIcon}\n <span className=\"truncate\">{modelLabel}</span>\n </span>\n )}\n <ComposerRightSection disabled={disabled} isRunning={isRunning} />\n <ComposerSendButton\n disabled={disabled}\n canSubmit={canSubmit}\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 { useTrueFoundryAgentSpec, useTrueFoundryUpdateAgentSpec } from '@truefoundry/assistant-ui-runtime';\nimport { useEffect, useId, useRef, useState } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { cn } from '../lib/cn.js';\nimport { useCompactLayout } from '../lib/CompactLayoutContext.js';\nimport { useIsMobile } from '../lib/useIsMobile.js';\nimport { BottomSheet } from '../primitives/BottomSheet.js';\nimport { useDraftCatalog } from './DraftCatalogProvider.js';\nimport { hasReasoningEfforts, modelPatchWithReasoningEffort, resolveReasoningEffort } from './reasoningEffort.js';\n\nexport type DraftReasoningEffortSelectorProps = {\n disabled?: boolean;\n isRunning?: boolean;\n};\n\nexport function DraftReasoningEffortSelector({ disabled, isRunning }: DraftReasoningEffortSelectorProps) {\n const { models, ensureLoaded } = useDraftCatalog();\n const { agentSpec } = useTrueFoundryAgentSpec();\n const updateAgentSpec = useTrueFoundryUpdateAgentSpec();\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const clearedStickyEffortForModelRef = useRef<string | null>(null);\n const menuId = useId();\n const isMobile = useIsMobile();\n const compactLayout = useCompactLayout();\n\n const selectedName = agentSpec?.model?.name ?? models[0]?.name ?? '';\n const selected = models.find(m => m.name === selectedName);\n const efforts = selected?.properties.reasoningEfforts;\n const currentEffort = agentSpec?.model?.params?.reasoningEffort;\n // Display fallback only — coerce into the spec on model change / explicit pick.\n const resolved = resolveReasoningEffort(efforts, currentEffort);\n\n useEffect(() => {\n // Need catalog to know whether this model exposes reasoning efforts.\n ensureLoaded();\n }, [ensureLoaded]);\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n // Heal sticky effort left by mergeAgentSpec when the selected model has none.\n useEffect(() => {\n if (!updateAgentSpec || selected === undefined) return;\n if (hasReasoningEfforts(efforts)) {\n clearedStickyEffortForModelRef.current = null;\n return;\n }\n if (currentEffort === undefined) return;\n if (clearedStickyEffortForModelRef.current === selected.name) return;\n clearedStickyEffortForModelRef.current = selected.name;\n updateAgentSpec({\n model: modelPatchWithReasoningEffort(selected.name, agentSpec?.model?.params, undefined),\n });\n }, [updateAgentSpec, selected, efforts, currentEffort, agentSpec?.model?.params]);\n\n if (!hasReasoningEfforts(efforts) || !resolved) return null;\n\n const content = (\n <>\n <div className=\"border-b border-border px-3 py-2\">\n <p className=\"text-text-primary text-sm font-semibold\">Reasoning effort</p>\n </div>\n <div\n id={menuId}\n role=\"listbox\"\n aria-label=\"Select reasoning effort\"\n className=\"flex min-h-0 flex-1 flex-col overflow-y-auto p-1\"\n >\n {efforts.map(effort => {\n const active = effort === resolved;\n return (\n <button\n key={effort}\n type=\"button\"\n role=\"option\"\n aria-selected={active}\n className={cn(\n 'flex w-full items-center rounded-md px-2 py-2 text-left text-sm',\n active\n ? 'bg-dropdown-selected-item-bg text-dropdown-selected-item-text'\n : 'hover:bg-ghost-button-hover',\n )}\n onClick={() => {\n if (!selected || !updateAgentSpec) return;\n updateAgentSpec({\n model: modelPatchWithReasoningEffort(\n selected.name,\n { ...agentSpec?.model?.params, reasoningEffort: effort },\n efforts,\n ),\n });\n setOpen(false);\n }}\n >\n <span className=\"truncate font-medium\">{effort}</span>\n </button>\n );\n })}\n </div>\n </>\n );\n\n return (\n <div ref={containerRef} className=\"relative\">\n <button\n type=\"button\"\n disabled={disabled || isRunning}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n title=\"Select reasoning effort\"\n className={auiButtonClass({\n variant: 'ghost',\n size: 'sm',\n className: cn(\n 'h-8 max-w-[10rem] gap-1.5 rounded-full px-2 text-xs font-medium',\n 'hover:bg-ghost-button-hover',\n ),\n })}\n onClick={() => setOpen(v => !v)}\n >\n <span className=\"truncate\">{resolved}</span>\n <Icon name=\"chevron-down\" className=\"size-3.5 shrink-0 opacity-60\" />\n </button>\n\n {open ? (\n isMobile || compactLayout ? (\n <BottomSheet open onOpenChange={setOpen} aria-label=\"Select reasoning effort\">\n {content}\n </BottomSheet>\n ) : (\n <div className=\"bg-card-bg text-text-primary absolute right-0 bottom-full z-50 mb-2 flex max-h-[22rem] w-[12rem] flex-col overflow-hidden rounded-lg border border-border shadow-lg\">\n {content}\n </div>\n )\n ) : null}\n </div>\n );\n}\n","'use client';\n\nimport { useSyncExternalStore } from 'react';\n\nconst MOBILE_QUERY = '(max-width: 767px)';\n\nfunction subscribe(callback: () => void) {\n if (typeof window.matchMedia !== 'function') return () => undefined;\n const media = window.matchMedia(MOBILE_QUERY);\n media.addEventListener('change', callback);\n return () => media.removeEventListener('change', callback);\n}\n\nfunction getSnapshot() {\n return typeof window.matchMedia === 'function' && window.matchMedia(MOBILE_QUERY).matches;\n}\n\nexport function useIsMobile() {\n return useSyncExternalStore(subscribe, getSnapshot, () => false);\n}\n","'use client';\n\nimport { useEffect, useRef, type MouseEvent, type ReactNode } from 'react';\n\nimport { useCompactLayout } from '../lib/CompactLayoutContext.js';\nimport { cn } from '../lib/cn.js';\nimport { useCompactOverlayStyle } from '../lib/useCompactOverlayStyle.js';\n\nexport type BottomSheetProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n className?: string;\n id?: string;\n 'aria-label': string;\n};\n\nexport function BottomSheet({\n open,\n onOpenChange,\n children,\n className,\n id,\n 'aria-label': ariaLabel,\n}: BottomSheetProps) {\n const ref = useRef<HTMLDialogElement>(null);\n const compact = useCompactLayout();\n const compactStyle = useCompactOverlayStyle(ref, compact);\n\n useEffect(() => {\n const dialog = ref.current;\n if (!dialog) return;\n if (open && !dialog.open) dialog.showModal();\n else if (!open && dialog.open) dialog.close();\n }, [open]);\n\n useEffect(() => {\n const dialog = ref.current;\n if (!dialog) return;\n const handleClose = () => onOpenChange(false);\n dialog.addEventListener('close', handleClose);\n return () => dialog.removeEventListener('close', handleClose);\n }, [onOpenChange]);\n\n const handleBackdropClick = (event: MouseEvent<HTMLDialogElement>) => {\n if (event.target === ref.current) onOpenChange(false);\n };\n\n return (\n <dialog\n ref={ref}\n id={id}\n aria-label={ariaLabel}\n onClick={handleBackdropClick}\n onCancel={event => {\n event.preventDefault();\n event.stopPropagation();\n onOpenChange(false);\n }}\n style={compactStyle ?? { height: 'min(70dvh, 30rem)', maxHeight: '85dvh' }}\n className={cn(\n 'aui-bottom-sheet bg-card-bg text-text-primary m-0 mt-auto w-full max-w-none overflow-hidden rounded-t-xl border border-b-0 border-border p-0 pb-[env(safe-area-inset-bottom)] shadow-xl',\n 'backdrop:bg-[var(--overlay)] backdrop:backdrop-blur-[2px]',\n 'open:flex open:flex-col',\n className,\n )}\n >\n <div className=\"flex h-5 shrink-0 items-center justify-center\" aria-hidden>\n <span className=\"h-1 w-10 rounded-full bg-text-secondary/30\" />\n </div>\n {children}\n </dialog>\n );\n}\n","import type { Model, ModelParams, ModelSelection } from '../../server/types.js';\n\ntype ReasoningEfforts = ModelSelection['properties']['reasoningEfforts'];\n\nexport function hasReasoningEfforts(efforts: ReasoningEfforts): efforts is string[] {\n return Array.isArray(efforts) && efforts.length > 0;\n}\n\n/** Keep current if still listed; otherwise the lowest non-\"none\" effort; none if model has no efforts. */\nexport function resolveReasoningEffort(efforts: ReasoningEfforts, current: string | undefined): string | undefined {\n if (!hasReasoningEfforts(efforts)) return undefined;\n if (current && efforts.includes(current)) return current;\n // Default to the lowest real effort, not \"none\" — catalog lists are ordered ascending.\n return efforts.find(effort => effort !== 'none') ?? efforts[0];\n}\n\n/**\n * Draft model patch: preserve other params, set or clear `reasoningEffort`.\n *\n * When clearing, set `reasoningEffort: undefined` (do not omit the key).\n * `mergeAgentSpec` in `@truefoundry/assistant-ui-runtime` shallow-merges\n * `model.params`, so omitting the key leaves a sticky prior effort and the\n * server then 422s on models that do not advertise `reasoning_efforts`.\n */\nexport function modelPatchWithReasoningEffort(\n name: string,\n existingParams: ModelParams | undefined,\n efforts: ReasoningEfforts,\n): Model {\n const nextEffort = resolveReasoningEffort(efforts, existingParams?.reasoningEffort);\n if (nextEffort === undefined) {\n if (!existingParams) return { name };\n const { reasoningEffort: _cleared, ...rest } = existingParams;\n return { name, params: { ...rest, reasoningEffort: undefined } };\n }\n return {\n name,\n params: { ...existingParams, reasoningEffort: nextEffort },\n };\n}\n","'use client';\n\nimport { useSlot } from '../../theme/SlotsProvider.js';\nimport type { ComposerLeftSectionProps, ComposerRightSectionProps } from '../ComposerSections.js';\nimport { DraftReasoningEffortSelector } from './DraftReasoningEffortSelector.js';\n\nexport function DraftComposerLeftSection({ disabled, isRunning, onAttach }: ComposerLeftSectionProps) {\n const DraftCompositeSelector = useSlot('DraftCompositeSelector');\n\n return (\n <div className=\"flex min-w-0 flex-wrap items-center gap-1.5\">\n <DraftCompositeSelector disabled={disabled} isRunning={isRunning} onAttach={onAttach} />\n </div>\n );\n}\n\nexport function DraftComposerRightSection({ disabled, isRunning }: ComposerRightSectionProps) {\n const DraftModelSelector = useSlot('DraftModelSelector');\n\n return (\n <div className=\"flex min-w-0 items-center gap-1\">\n <DraftModelSelector disabled={disabled} isRunning={isRunning} />\n <DraftReasoningEffortSelector disabled={disabled} isRunning={isRunning} />\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n DraftComposerLeftSection: typeof DraftComposerLeftSection;\n DraftComposerRightSection: typeof DraftComposerRightSection;\n }\n}\n","'use client';\n\nimport { useTrueFoundryAgentSpec, useTrueFoundryUpdateAgentSpec } from '@truefoundry/assistant-ui-runtime';\nimport { useCallback, useEffect, useId, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { useMCPAuth } from '../../hooks/useMcpAuth.js';\nimport { Icon } from '../../icons/Icon.js';\nimport { useOptionalCatalogServer, useServerCapabilities } from '../../server/ServerContext.js';\nimport { useOptionalShellMode, type SettingsSection } from '../../server/ShellModeContext.js';\nimport type { AgentSkill, ConnectorState } from '../../server/types.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { cn } from '../lib/cn.js';\nimport { useCompactLayout } from '../lib/CompactLayoutContext.js';\nimport { auiInputClass } from '../lib/inputClasses.js';\nimport { useIsMobile } from '../lib/useIsMobile.js';\nimport { BottomSheet } from '../primitives/BottomSheet.js';\nimport { Tooltip } from '../primitives/Tooltip.js';\nimport { readAgentCapabilities, withAgentCapabilities } from './agentCapabilities.js';\nimport { DraftCapabilitiesPanel } from './DraftCapabilitiesPanel.js';\nimport { DraftCatalogEmptyState } from './DraftCatalogEmptyState.js';\nimport { useDraftCatalog } from './DraftCatalogProvider.js';\n\n/** Catalog-backed mount shape used by the draft picker (runtime mounts stay opaque). */\nexport type DraftMount = { id: string; name: string };\n\n/**\n * Harness wire mounts are name-keyed (`{ name }` only). Catalog rows use\n * `id === name`, so missing ids hydrate from name — otherwise save/load drops\n * mounts from the picker and the next flush can wipe them from the spec.\n */\nexport function draftMountsFromSpec(value: unknown): DraftMount[] {\n if (!Array.isArray(value)) return [];\n const mounts: DraftMount[] = [];\n for (const item of value) {\n if (typeof item !== 'object' || item === null) continue;\n const name = Reflect.get(item, 'name');\n if (typeof name !== 'string') continue;\n const id = Reflect.get(item, 'id');\n mounts.push({ id: typeof id === 'string' ? id : name, name });\n }\n return mounts;\n}\ntype AttachTab = 'connectors' | 'skills' | 'capabilities';\n\nconst TABS: { id: AttachTab; label: string; icon: string }[] = [\n { id: 'connectors', label: 'Connectors', icon: 'plug' },\n { id: 'skills', label: 'Skills', icon: 'lightbulb' },\n { id: 'capabilities', label: 'Capabilities', icon: 'wrench' },\n];\n\nconst SPEC_FLUSH_MS = 300;\n\nfunction Checkbox({ checked }: { checked: boolean }) {\n return (\n <span\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center rounded border',\n checked\n ? 'border-primary-button-bg bg-primary-button-bg text-primary-button-text'\n : 'border-input-border bg-input-box-bg',\n )}\n aria-hidden\n >\n {checked ? <Icon name=\"check\" className=\"size-3\" /> : null}\n </span>\n );\n}\n\nexport function CatalogRow({\n title,\n description,\n checked,\n disabled = false,\n onToggle,\n action,\n}: {\n title: string;\n description?: string;\n checked: boolean;\n disabled?: boolean;\n onToggle: () => void;\n action?: ReactNode;\n}) {\n const content = (\n <>\n <span className=\"bg-secondary-bg text-text-secondary mt-0.5 flex size-7 shrink-0 items-center justify-center rounded text-xs font-semibold\">\n {title.charAt(0).toUpperCase()}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"text-text-primary block truncate text-sm font-medium\">{title}</span>\n {description ? <span className=\"text-text-secondary line-clamp-1 text-xs\">{description}</span> : null}\n </span>\n </>\n );\n\n if (action) {\n return (\n <div\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n tabIndex={0}\n className=\"hover:bg-ghost-button-hover flex w-full cursor-pointer items-center gap-2 rounded-md px-2 py-2 text-left\"\n onClick={onToggle}\n onKeyDown={event => {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n onToggle();\n }}\n >\n {content}\n <span className=\"shrink-0\">{action}</span>\n <Checkbox checked={checked} />\n </div>\n );\n }\n\n return (\n <button\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n disabled={disabled}\n className=\"hover:bg-ghost-button-hover flex w-full cursor-pointer items-center gap-2 rounded-md px-2 py-2 text-left disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent\"\n onClick={onToggle}\n >\n {content}\n {disabled ? <Icon name=\"lock\" className=\"text-text-secondary size-3\" /> : <Checkbox checked={checked} />}\n </button>\n );\n}\n\nexport function isUnauthenticatedDcrConnector(connector: ConnectorState): boolean {\n const auth = Reflect.get(connector, 'auth');\n return (\n connector.authenticated === false &&\n typeof auth === 'object' &&\n auth !== null &&\n Reflect.get(auth, 'type') === 'dcr'\n );\n}\n\nexport function ConnectorConnectButton({\n connector,\n onConnected,\n}: {\n connector: ConnectorState;\n onConnected: () => Promise<void>;\n}) {\n const { handleAuthorize, isOAuthLoading } = useMCPAuth();\n\n return (\n <button\n type=\"button\"\n aria-label={`Connect ${connector.name}`}\n disabled={isOAuthLoading}\n className={auiButtonClass({ variant: 'secondary', size: 'sm' })}\n onKeyDown={event => {\n event.stopPropagation();\n }}\n onClick={event => {\n event.stopPropagation();\n void handleAuthorize(connector.id, isSuccess => {\n if (isSuccess) void onConnected();\n });\n }}\n >\n {isOAuthLoading ? 'Connecting...' : 'Connect'}\n </button>\n );\n}\n\nfunction SearchField({\n value,\n onChange,\n placeholder,\n}: {\n value: string;\n onChange: (v: string) => void;\n placeholder: string;\n}) {\n return (\n <label className=\"relative mx-3 my-2 block\">\n <Icon\n name=\"search\"\n className=\"text-text-secondary pointer-events-none absolute top-1/2 left-2 size-3.5 -translate-y-1/2\"\n />\n <input\n type=\"search\"\n value={value}\n onChange={e => onChange(e.target.value)}\n placeholder={placeholder}\n className={auiInputClass('h-8 bg-secondary-bg py-1 pr-2 pl-7 dark:bg-primary-bg')}\n />\n </label>\n );\n}\n\nexport type DraftCompositeSelectorProps = {\n disabled?: boolean;\n isRunning?: boolean;\n onAttach?: () => void;\n};\n\nfunction SectionHeading({ label, count }: { label: string; count: number }) {\n return (\n <div className=\"text-text-secondary px-3 pt-2 pb-1 text-[11px] font-medium tracking-wide uppercase\">\n {label} ({count})\n </div>\n );\n}\n\nexport function DraftCompositeSelector({ disabled, isRunning, onAttach }: DraftCompositeSelectorProps) {\n const { skills, connectors, loading, ensureLoaded, refreshConnectors } = useDraftCatalog();\n const capabilities = useServerCapabilities();\n const settingsCatalog = useOptionalCatalogServer();\n const shell = useOptionalShellMode();\n const { agentSpec } = useTrueFoundryAgentSpec();\n const updateAgentSpec = useTrueFoundryUpdateAgentSpec();\n const [open, setOpen] = useState(false);\n const [tab, setTab] = useState<AttachTab>('connectors');\n const [query, setQuery] = useState('');\n // Section membership is snapped when the picker opens, so toggles don't jump rows mid-session.\n const [pinnedMcpIds, setPinnedMcpIds] = useState<Set<string>>(() => new Set());\n const [pinnedSkillIds, setPinnedSkillIds] = useState<Set<string>>(() => new Set());\n // Local working copy while open — flush to AgentSpec on debounce / close.\n const [localMcp, setLocalMcp] = useState<DraftMount[]>([]);\n const [localSkills, setLocalSkills] = useState<DraftMount[]>([]);\n const dirtyRef = useRef(false);\n const flushTimerRef = useRef<number | null>(null);\n const localMcpRef = useRef(localMcp);\n const localSkillsRef = useRef(localSkills);\n localMcpRef.current = localMcp;\n localSkillsRef.current = localSkills;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const menuId = useId();\n const isMobile = useIsMobile();\n const compactLayout = useCompactLayout();\n const skillsDisabled = capabilities?.skill.enabled !== true;\n const skillsDisabledReason = capabilities?.skill.reason;\n const needsSandbox = capabilities?.sandbox.enabled === false;\n const settingsEnabled = capabilities?.settings?.enabled !== false;\n const canConfigureConnectors = settingsEnabled && settingsCatalog?.connectorCatalog != null;\n const canConfigureSkills = settingsEnabled && settingsCatalog?.skillCatalog != null;\n const canConfigureSandbox = settingsEnabled && settingsCatalog?.sandboxCatalog != null;\n\n const specMcp = useMemo(() => draftMountsFromSpec(agentSpec?.mcpServers), [agentSpec?.mcpServers]);\n const specSkills = useMemo(() => draftMountsFromSpec(agentSpec?.skills), [agentSpec?.skills]);\n\n const selectedMcp = open ? localMcp : specMcp;\n const selectedSkills = open ? localSkills : specSkills;\n const selectedMcpIds = useMemo(() => new Set(selectedMcp.map(m => m.id)), [selectedMcp]);\n const selectedSkillIds = useMemo(() => new Set(selectedSkills.map(s => s.id)), [selectedSkills]);\n const hasValidModel = Boolean(agentSpec?.model?.name.trim());\n const toolsCount = selectedMcp.length + selectedSkills.length;\n const toolsTooltip = useMemo(() => {\n const formatNames = (items: Array<{ name: string }>) => {\n const names = items.map(item => item.name);\n if (names.length <= 4) return names.join(', ');\n return `${names.slice(0, 4).join(', ')} +${names.length - 4}`;\n };\n const lines: string[] = [];\n if (selectedMcp.length > 0) {\n lines.push(`Connectors: ${formatNames(selectedMcp)}`);\n }\n if (selectedSkills.length > 0) {\n lines.push(`Skills: ${formatNames(selectedSkills)}`);\n }\n return lines.length > 0 ? lines.join('\\n') : 'No connectors or skills selected';\n }, [selectedMcp, selectedSkills]);\n\n const clearFlushTimer = useCallback(() => {\n if (flushTimerRef.current != null) {\n window.clearTimeout(flushTimerRef.current);\n flushTimerRef.current = null;\n }\n }, []);\n\n const flushSpec = useCallback(() => {\n clearFlushTimer();\n if (!dirtyRef.current) return;\n dirtyRef.current = false;\n updateAgentSpec?.({\n mcpServers: localMcpRef.current,\n skills: localSkillsRef.current,\n });\n }, [clearFlushTimer, updateAgentSpec]);\n\n const scheduleFlush = useCallback(() => {\n clearFlushTimer();\n flushTimerRef.current = window.setTimeout(() => {\n flushTimerRef.current = null;\n flushSpec();\n }, SPEC_FLUSH_MS);\n }, [clearFlushTimer, flushSpec]);\n\n const setOpenAndFlush = useCallback(\n (next: boolean) => {\n if (!next) flushSpec();\n setOpen(next);\n },\n [flushSpec],\n );\n\n useEffect(() => {\n if (open) ensureLoaded();\n }, [open, ensureLoaded]);\n\n useEffect(() => {\n if (open && !hasValidModel) {\n setOpenAndFlush(false);\n }\n }, [hasValidModel, open, setOpenAndFlush]);\n\n useEffect(() => {\n if (!open) return;\n // Flush on pointer or keyboard focus leaving the picker so Save Agent (and\n // other outside actions) see the latest local connector/skill toggles.\n const handler = (e: Event) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpenAndFlush(false);\n }\n };\n document.addEventListener('mousedown', handler);\n document.addEventListener('focusin', handler);\n return () => {\n document.removeEventListener('mousedown', handler);\n document.removeEventListener('focusin', handler);\n };\n }, [open, setOpenAndFlush]);\n\n useEffect(() => () => clearFlushTimer(), [clearFlushTimer]);\n\n const filteredConnectors = useMemo(() => {\n const needle = query.trim().toLowerCase();\n const matches = needle\n ? connectors.filter(\n c => c.name.toLowerCase().includes(needle) || (c.description?.toLowerCase().includes(needle) ?? false),\n )\n : connectors;\n return [...matches].sort(\n (left, right) => Number(isUnauthenticatedDcrConnector(left)) - Number(isUnauthenticatedDcrConnector(right)),\n );\n }, [connectors, query]);\n\n const filteredSkills = useMemo(() => {\n const needle = query.trim().toLowerCase();\n if (!needle) return skills;\n return skills.filter(\n s => s.name.toLowerCase().includes(needle) || (s.description?.toLowerCase().includes(needle) ?? false),\n );\n }, [skills, query]);\n\n const pinnedSelectedConnectors = useMemo(\n () => filteredConnectors.filter(c => pinnedMcpIds.has(c.id)),\n [filteredConnectors, pinnedMcpIds],\n );\n const pinnedAvailableConnectors = useMemo(\n () => filteredConnectors.filter(c => !pinnedMcpIds.has(c.id)),\n [filteredConnectors, pinnedMcpIds],\n );\n const pinnedSelectedSkills = useMemo(\n () => filteredSkills.filter(s => pinnedSkillIds.has(s.id)),\n [filteredSkills, pinnedSkillIds],\n );\n const pinnedAvailableSkills = useMemo(\n () => filteredSkills.filter(s => !pinnedSkillIds.has(s.id)),\n [filteredSkills, pinnedSkillIds],\n );\n\n const toggleConnector = (connector: ConnectorState) => {\n setLocalMcp(prev =>\n prev.some(m => m.id === connector.id)\n ? prev.filter(m => m.id !== connector.id)\n : [...prev, { id: connector.id, name: connector.name }],\n );\n dirtyRef.current = true;\n scheduleFlush();\n };\n\n const toggleSkill = (skill: AgentSkill) => {\n setLocalSkills(prev =>\n prev.some(s => s.id === skill.id)\n ? prev.filter(s => s.id !== skill.id)\n : [...prev, { id: skill.id, name: skill.name }],\n );\n dirtyRef.current = true;\n scheduleFlush();\n };\n\n const openPicker = (nextTab?: AttachTab) => {\n if (nextTab != null) {\n setTab(nextTab);\n setQuery('');\n }\n if (open) return;\n setLocalMcp(specMcp);\n setLocalSkills(specSkills);\n dirtyRef.current = false;\n clearFlushTimer();\n setPinnedMcpIds(new Set(specMcp.map(m => m.id)));\n setPinnedSkillIds(new Set(specSkills.map(s => s.id)));\n setOpen(true);\n };\n\n const openSettings = (section: SettingsSection) => {\n setOpenAndFlush(false);\n setQuery('');\n shell?.setSettingsOpen(true, section);\n };\n\n const content = (\n <>\n <div className=\"flex shrink-0 border-b border-border\">\n {TABS.map(t => {\n const count = t.id === 'connectors' ? selectedMcp.length : t.id === 'skills' ? selectedSkills.length : null;\n const active = tab === t.id;\n return (\n <button\n key={t.id}\n type=\"button\"\n className={cn(\n 'text-text-secondary flex flex-1 items-center justify-center gap-1.5 px-2 py-2.5 text-xs font-medium',\n active && 'text-primary-button-bg border-b-2 border-primary-button-bg',\n )}\n onClick={() => {\n setTab(t.id);\n setQuery('');\n }}\n >\n <Icon name={t.icon} className=\"size-3.5\" />\n {t.label}\n {count != null && count > 0 ? (\n <span className=\"bg-secondary-bg rounded px-1 text-[10px]\">{count}</span>\n ) : null}\n </button>\n );\n })}\n </div>\n\n {tab === 'capabilities' ? (\n <div className=\"min-h-0 flex-1 overflow-y-auto p-2\">\n <DraftCapabilitiesPanel\n value={readAgentCapabilities(agentSpec?.config)}\n disabled={disabled || isRunning}\n onChange={values => {\n // Capability writes bypass the mount debounce. Fold in any dirty\n // local mounts in the same update so a pending connector/skill\n // toggle is not overwritten by a config-only sync.\n clearFlushTimer();\n const includeLocalMounts = dirtyRef.current;\n if (includeLocalMounts) {\n dirtyRef.current = false;\n }\n updateAgentSpec?.({\n ...(includeLocalMounts ? { mcpServers: localMcpRef.current, skills: localSkillsRef.current } : {}),\n config: withAgentCapabilities({ config: agentSpec?.config, values }),\n });\n }}\n />\n </div>\n ) : (\n <>\n <SearchField\n value={query}\n onChange={setQuery}\n placeholder={tab === 'connectors' ? 'Search connectors...' : 'Search skills...'}\n />\n {tab === 'skills' && skillsDisabled && skillsDisabledReason ? (\n <div\n role=\"status\"\n className=\"border-primary-button-bg/30 bg-primary-button-bg/5 text-text-primary mx-3 mb-2 flex items-center gap-2 rounded-lg border p-3\"\n >\n <Icon name=\"lock\" className=\"text-primary-button-bg size-3 shrink-0\" />\n <span className=\"text-xs leading-none\">{skillsDisabledReason}</span>\n </div>\n ) : null}\n <div className=\"min-h-0 flex-1 overflow-y-auto px-1 pb-2\">\n {tab === 'connectors' ? (\n <>\n {pinnedSelectedConnectors.length > 0 ? (\n <>\n <SectionHeading label=\"Selected\" count={pinnedSelectedConnectors.length} />\n {pinnedSelectedConnectors.map(c => (\n <CatalogRow\n key={c.id}\n title={c.name}\n description={c.description}\n checked={selectedMcpIds.has(c.id)}\n action={\n isUnauthenticatedDcrConnector(c) ? (\n <ConnectorConnectButton connector={c} onConnected={refreshConnectors} />\n ) : undefined\n }\n onToggle={() => toggleConnector(c)}\n />\n ))}\n </>\n ) : null}\n {pinnedAvailableConnectors.length > 0 ? (\n <>\n <SectionHeading label=\"Available\" count={pinnedAvailableConnectors.length} />\n {pinnedAvailableConnectors.map(c => (\n <CatalogRow\n key={c.id}\n title={c.name}\n description={c.description}\n checked={selectedMcpIds.has(c.id)}\n action={\n isUnauthenticatedDcrConnector(c) ? (\n <ConnectorConnectButton connector={c} onConnected={refreshConnectors} />\n ) : undefined\n }\n onToggle={() => toggleConnector(c)}\n />\n ))}\n </>\n ) : null}\n {filteredConnectors.length === 0 ? (\n <DraftCatalogEmptyState\n loading={loading}\n emptyLabel=\"No connectors\"\n settingsTarget=\"Connectors\"\n onOpenSettings={\n connectors.length === 0 && shell && canConfigureConnectors\n ? () => openSettings('connectors')\n : undefined\n }\n />\n ) : null}\n </>\n ) : (\n <>\n {pinnedSelectedSkills.length > 0 ? (\n <>\n <SectionHeading label=\"Selected\" count={pinnedSelectedSkills.length} />\n {pinnedSelectedSkills.map(s => (\n <CatalogRow\n key={s.id}\n title={s.name}\n description={s.description}\n checked={selectedSkillIds.has(s.id)}\n disabled={skillsDisabled && !selectedSkillIds.has(s.id)}\n onToggle={() => toggleSkill(s)}\n />\n ))}\n </>\n ) : null}\n {pinnedAvailableSkills.length > 0 ? (\n <>\n <SectionHeading label=\"Available\" count={pinnedAvailableSkills.length} />\n {pinnedAvailableSkills.map(s => (\n <CatalogRow\n key={s.id}\n title={s.name}\n description={s.description}\n checked={selectedSkillIds.has(s.id)}\n disabled={skillsDisabled && !selectedSkillIds.has(s.id)}\n onToggle={() => toggleSkill(s)}\n />\n ))}\n </>\n ) : null}\n {filteredSkills.length === 0 ? (\n <DraftCatalogEmptyState\n loading={loading}\n emptyLabel=\"No skills\"\n settingsTarget={needsSandbox ? 'a Sandbox' : 'Skills'}\n onOpenSettings={\n skills.length === 0 && shell && (needsSandbox ? canConfigureSandbox : canConfigureSkills)\n ? () => openSettings(needsSandbox ? 'sandbox' : 'skills')\n : undefined\n }\n />\n ) : null}\n </>\n )}\n </div>\n </>\n )}\n </>\n );\n\n return (\n <div ref={containerRef} className=\"relative flex flex-wrap items-center gap-1.5\">\n {hasValidModel ? (\n <Tooltip content={toolsTooltip} className=\"max-w-xs whitespace-pre-line text-left\" side=\"top\">\n <button\n type=\"button\"\n disabled={disabled || isRunning}\n aria-label={`Tools (${toolsCount})`}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n className={auiButtonClass({\n variant: 'ghost',\n size: 'sm',\n className: 'h-8 gap-1.5 rounded-md px-2 text-xs',\n })}\n onClick={() => {\n if (open) {\n setOpenAndFlush(false);\n return;\n }\n openPicker();\n }}\n >\n <Icon name=\"wrench\" className=\"size-3.5\" />\n <span>Tools</span>\n <span className=\"bg-primary-button-bg/10 text-primary-button-bg rounded px-1.5 py-0.5 text-[10px] font-semibold\">\n {toolsCount}\n </span>\n </button>\n </Tooltip>\n ) : null}\n\n {onAttach ? (\n <Tooltip content=\"Attach a file\">\n <button\n type=\"button\"\n disabled={disabled || isRunning}\n aria-label=\"Attach a file\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={onAttach}\n >\n <Icon name=\"paperclip\" />\n </button>\n </Tooltip>\n ) : null}\n\n {open && hasValidModel ? (\n isMobile || compactLayout ? (\n <BottomSheet id={menuId} open onOpenChange={setOpenAndFlush} aria-label=\"Add to composer\">\n {content}\n </BottomSheet>\n ) : (\n <div\n id={menuId}\n role=\"dialog\"\n aria-label=\"Add to composer\"\n className=\"bg-card-bg text-text-primary absolute bottom-full left-0 z-50 mb-2 flex h-[22rem] w-[28rem] max-w-[min(28rem,calc(100vw-2rem))] flex-col overflow-hidden rounded-lg border border-border shadow-lg\"\n >\n {content}\n </div>\n )\n ) : null}\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n DraftCompositeSelector: typeof DraftCompositeSelector;\n }\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useToasterOptional } from '../containers/ToasterContainer.js';\nimport { useCatalogServer } from '../server/ServerContext.js';\n\nexport const MCP_AUTH_POPUP_CHANNEL = 'truefoundry-mcp-auth-popup';\n\nexport type McpAuthPopupMessage = {\n popupUid: string;\n isSuccess: boolean;\n};\n\nexport type McpAuthCallback = (isSuccess: boolean) => void;\n\nexport type UseMCPAuthOptions = {\n callbackPath?: string;\n};\n\nconst generatePopupUid = () => `mcp-oauth-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n\nconst isPopupMessage = (value: unknown): value is McpAuthPopupMessage => {\n if (typeof value !== 'object' || value === null) return false;\n const message = value as Partial<McpAuthPopupMessage>;\n return typeof message.popupUid === 'string' && typeof message.isSuccess === 'boolean';\n};\n\nexport const useMCPAuth = ({ callbackPath }: UseMCPAuthOptions = {}) => {\n const { connectorCatalog } = useCatalogServer();\n const toaster = useToasterOptional();\n const [isOAuthLoading, setIsOAuthLoading] = useState(false);\n const popupUid = useMemo(() => generatePopupUid(), []);\n const listenerCleanupRef = useRef<(() => void) | null>(null);\n\n const clearPopupListener = useCallback(() => {\n listenerCleanupRef.current?.();\n listenerCleanupRef.current = null;\n }, []);\n\n useEffect(() => clearPopupListener, [clearPopupListener]);\n\n const openAuthPopup = useCallback(\n (authorizationEndpoint: string, callback: McpAuthCallback) => {\n clearPopupListener();\n\n const channel = new BroadcastChannel(MCP_AUTH_POPUP_CHANNEL);\n let popup: Window | null = null;\n const cleanup = () => {\n channel.close();\n popup?.close();\n };\n\n channel.onmessage = (event: MessageEvent<unknown>) => {\n if (!isPopupMessage(event.data) || event.data.popupUid !== popupUid) return;\n try {\n callback(event.data.isSuccess);\n } finally {\n clearPopupListener();\n }\n };\n listenerCleanupRef.current = cleanup;\n\n popup = window.open(authorizationEndpoint, '_blank', 'popup=true');\n if (!popup) {\n clearPopupListener();\n throw new Error('Popup blocked. Please allow pop-ups to authorize the MCP server.');\n }\n\n popup.focus();\n },\n [clearPopupListener, popupUid],\n );\n\n const handleAuthorize = useCallback(\n async (integrationId: string, callback: McpAuthCallback) => {\n if (!integrationId) return;\n\n try {\n setIsOAuthLoading(true);\n const callbackUrl = callbackPath\n ? new URL(callbackPath, window.location.origin)\n : new URL(window.location.href);\n callbackUrl.searchParams.set('screenType', 'mcp-auth');\n callbackUrl.searchParams.set('integrationId', integrationId);\n callbackUrl.searchParams.set('pUid', popupUid);\n\n const result = await connectorCatalog.authenticateConnector({\n id: integrationId,\n redirectURL: callbackUrl.toString(),\n });\n\n if (\n ('status' in result && result.status?.toUpperCase() === 'AUTHENTICATED') ||\n ('authenticated' in result && result.authenticated)\n ) {\n callback(true);\n return;\n }\n\n const authorizationEndpoint = 'authorization_endpoint' in result ? result.authorization_endpoint : undefined;\n if (!authorizationEndpoint) {\n throw new Error('The MCP server did not return an authorization URL.');\n }\n\n openAuthPopup(authorizationEndpoint, callback);\n } catch (error: unknown) {\n toaster?.showError(error);\n callback(false);\n } finally {\n setIsOAuthLoading(false);\n }\n },\n [callbackPath, connectorCatalog, openAuthPopup, popupUid, toaster],\n );\n\n return {\n handleAuthorize,\n isOAuthLoading,\n };\n};\n","'use client';\n\nimport { createContext, useCallback, useContext, useMemo, useState, type ReactNode } from 'react';\n\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { getErrorMessage } from '../utils/getErrorMessage.js';\n\nconst MAX_TOAST_DESCRIPTION_CHARS = 480;\nconst MAX_VISIBLE_TOASTS = 5;\nconst SUCCESS_TOAST_TTL_MS = 3000;\n\ntype ToastContent = { title: string; description?: string };\n\ntype ToastItem = ToastContent & { id: string; variant: 'error' | 'success' };\n\ntype ToasterContextValue = {\n showError: (error: unknown) => void;\n showSuccess: (content: ToastContent) => void;\n};\n\nconst ToasterContext = createContext<ToasterContextValue | null>(null);\n\nlet toastId = 0;\nfunction nextToastId(): string {\n toastId += 1;\n return `toast-${toastId}`;\n}\n\nfunction truncateDescription(text: string): string {\n if (text.length <= MAX_TOAST_DESCRIPTION_CHARS) return text;\n return `${text.slice(0, MAX_TOAST_DESCRIPTION_CHARS - 1)}…`;\n}\n\nfunction isHttpLikeError(error: unknown): error is Error & { statusCode?: number; body?: unknown } {\n return error instanceof Error && ('statusCode' in error || 'body' in error);\n}\n\nfunction normalizeError(error: unknown): ToastContent {\n if (isHttpLikeError(error)) {\n const statusCode = error.statusCode;\n if (statusCode != null || error.body != null) {\n const title = statusCode != null ? `Request failed (${statusCode})` : 'Request failed';\n const raw = getErrorMessage(error, 'The server returned an error.');\n return { title, description: truncateDescription(raw) };\n }\n }\n\n return {\n title: 'Something went wrong',\n description: truncateDescription(getErrorMessage(error, 'An unexpected error occurred.')),\n };\n}\n\nexport function ToasterProvider({ children }: { children: ReactNode }) {\n const Toast = useSlot('Toast');\n const ToastStack = useSlot('ToastStack');\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n\n const dismiss = useCallback((id: string) => {\n setToasts(prev => prev.filter(t => t.id !== id));\n }, []);\n\n const showError = useCallback((error: unknown) => {\n console.error('[trueforge-ui]', error);\n const item: ToastItem = { id: nextToastId(), variant: 'error', ...normalizeError(error) };\n setToasts(prev => [...prev, item].slice(-MAX_VISIBLE_TOASTS));\n }, []);\n\n const showSuccess = useCallback(\n (content: ToastContent) => {\n const id = nextToastId();\n const item: ToastItem = { id, variant: 'success', ...content };\n setToasts(prev => [...prev, item].slice(-MAX_VISIBLE_TOASTS));\n // Success is a transient confirmation — auto-dismiss so it doesn't linger. Errors persist\n // (a dev may need to read or copy them).\n if (typeof window !== 'undefined') {\n window.setTimeout(() => dismiss(id), SUCCESS_TOAST_TTL_MS);\n }\n },\n [dismiss],\n );\n\n const value = useMemo(() => ({ showError, showSuccess }), [showError, showSuccess]);\n\n return (\n <ToasterContext.Provider value={value}>\n {children}\n <ToastStack>\n {toasts.map(toast => (\n <Toast\n key={toast.id}\n title={toast.title}\n description={toast.description ?? ''}\n variant={toast.variant}\n open\n onOpenChange={open => {\n if (!open) dismiss(toast.id);\n }}\n />\n ))}\n </ToastStack>\n </ToasterContext.Provider>\n );\n}\n\nexport function useToaster(): ToasterContextValue {\n const context = useContext(ToasterContext);\n if (context == null) {\n throw new Error('useToaster must be used within ToasterProvider');\n }\n return context;\n}\n\n/** Same as `useToaster`, but returns `null` instead of throwing outside `ToasterProvider`. */\nexport function useToasterOptional(): ToasterContextValue | null {\n return useContext(ToasterContext);\n}\n","import { cn } from './cn.js';\n\nconst baseClasses =\n 'w-full cursor-text rounded-md border border-input-border bg-input-box-bg px-3 text-sm text-text-primary outline-none placeholder:text-text-secondary/70 focus-visible:ring-2 focus-visible:ring-focus-ring/40 disabled:cursor-not-allowed';\n\n/**\n * Shared text-input / textarea className helper. Callers add height, shadow, or\n * layout via `className` (e.g. `auiInputClass('h-11 shadow-sm')`) so the token\n * surface, border, and focus ring stay identical across every settings form.\n */\nexport function auiInputClass(className?: string): string {\n return cn(baseClasses, className);\n}\n","'use client';\n\nimport React, { cloneElement, isValidElement, useLayoutEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { cn } from '../lib/cn.js';\n\n// Keep portaled chrome under ThemeProvider so preset/custom CSS vars still apply.\nfunction themePortalRoot(from: HTMLElement | null): HTMLElement {\n // A native <dialog> opened with showModal() renders in the top layer, above any\n // z-index. When the trigger lives inside one, portal into the dialog so the\n // tooltip joins the top layer instead of rendering behind the modal.\n const dialog = from?.closest('dialog');\n if (dialog instanceof HTMLElement) return dialog;\n return from?.closest('.aui-theme-root') ?? document.body;\n}\n\nexport type TooltipProps = {\n content: React.ReactNode;\n children: React.ReactElement;\n className?: string;\n side?: 'top' | 'bottom';\n};\n\nexport function Tooltip({ content, children, className, side = 'top' }: TooltipProps) {\n const [visible, setVisible] = useState(false);\n const [pos, setPos] = useState<{ top: number; left: number } | null>(null);\n const triggerWrapRef = useRef<HTMLSpanElement>(null);\n\n useLayoutEffect(() => {\n if (!visible) {\n setPos(null);\n return;\n }\n\n const update = () => {\n const el = triggerWrapRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setPos({\n top: side === 'bottom' ? rect.bottom + 6 : rect.top - 6,\n left: rect.left + rect.width / 2,\n });\n };\n\n update();\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n return () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }, [visible, side]);\n\n if (!isValidElement(children)) return children;\n\n type AnyProps = React.HTMLAttributes<Element>;\n const p = children.props as AnyProps;\n const child = cloneElement(children as React.ReactElement<AnyProps>, {\n onMouseEnter(e: React.MouseEvent<Element>) {\n setVisible(true);\n (p.onMouseEnter as ((e: React.MouseEvent<Element>) => void) | undefined)?.(e);\n },\n onMouseLeave(e: React.MouseEvent<Element>) {\n setVisible(false);\n (p.onMouseLeave as ((e: React.MouseEvent<Element>) => void) | undefined)?.(e);\n },\n onFocus(e: React.FocusEvent<Element>) {\n setVisible(true);\n (p.onFocus as ((e: React.FocusEvent<Element>) => void) | undefined)?.(e);\n },\n onBlur(e: React.FocusEvent<Element>) {\n setVisible(false);\n (p.onBlur as ((e: React.FocusEvent<Element>) => void) | undefined)?.(e);\n },\n onClick(e: React.MouseEvent<Element>) {\n setVisible(false);\n (p.onClick as ((e: React.MouseEvent<Element>) => void) | undefined)?.(e);\n },\n });\n\n const tooltip =\n visible && content != null && pos != null\n ? createPortal(\n <span\n role=\"tooltip\"\n style={{\n top: pos.top,\n left: pos.left,\n transform: side === 'bottom' ? 'translate(-50%, 0)' : 'translate(-50%, -100%)',\n }}\n className={cn(\n 'pointer-events-none fixed z-[200]',\n 'whitespace-nowrap rounded bg-card-bg px-2 py-1 text-xs text-text-primary shadow-md',\n className,\n )}\n >\n {content}\n </span>,\n themePortalRoot(triggerWrapRef.current),\n )\n : null;\n\n return (\n <span ref={triggerWrapRef} className=\"relative inline-flex\">\n {child}\n {tooltip}\n </span>\n );\n}\n\nexport type LightTooltipProps = {\n title: React.ReactNode;\n children: React.ReactElement;\n className?: string;\n size?: string;\n side?: 'top' | 'bottom';\n};\n\nexport function LightTooltip({ title, children, className, size: _size, side }: LightTooltipProps) {\n return (\n <Tooltip content={title} className={className} side={side}>\n {children}\n </Tooltip>\n );\n}\n","import type { AgentRuntimeConfig } from '../../server/types.js';\n\nexport type AgentCapabilityValues = {\n generativeUi: boolean;\n dynamicSubAgents: boolean;\n askUserQuestions: boolean;\n};\n\nexport const DEFAULT_AGENT_CAPABILITIES: AgentCapabilityValues = {\n generativeUi: true,\n dynamicSubAgents: true,\n askUserQuestions: true,\n};\n\nexport function readAgentCapabilities(config?: AgentRuntimeConfig): AgentCapabilityValues {\n return {\n generativeUi: config?.generativeUi?.enabled ?? DEFAULT_AGENT_CAPABILITIES.generativeUi,\n dynamicSubAgents: config?.dynamicSubAgents?.enabled ?? DEFAULT_AGENT_CAPABILITIES.dynamicSubAgents,\n askUserQuestions: config?.askUserQuestions?.enabled ?? DEFAULT_AGENT_CAPABILITIES.askUserQuestions,\n };\n}\n\nexport function withAgentCapabilities({\n config,\n values,\n}: {\n config?: AgentRuntimeConfig;\n values: AgentCapabilityValues;\n}): AgentRuntimeConfig {\n return {\n ...config,\n generativeUi: { ...config?.generativeUi, enabled: values.generativeUi },\n dynamicSubAgents: { ...config?.dynamicSubAgents, enabled: values.dynamicSubAgents },\n askUserQuestions: { ...config?.askUserQuestions, enabled: values.askUserQuestions },\n };\n}\n","'use client';\n\nimport type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '../lib/cn.js';\n\nexport type SwitchSize = 'sm' | 'md';\n\nexport type SwitchProps = Omit<ComponentPropsWithoutRef<'button'>, 'aria-checked' | 'children' | 'onClick' | 'role'> & {\n checked: boolean;\n onCheckedChange: (checked: boolean) => void;\n size?: SwitchSize;\n};\n\nconst sizeClasses: Record<SwitchSize, { track: string; thumb: string; checkedThumb: string }> = {\n sm: {\n track: 'h-5 w-9 p-0.5',\n thumb: 'size-4',\n checkedThumb: 'translate-x-4',\n },\n md: {\n track: 'h-6 w-11 p-0.5',\n thumb: 'size-5',\n checkedThumb: 'translate-x-5',\n },\n};\n\nexport function Switch({ checked, onCheckedChange, size = 'sm', disabled, className, ...props }: SwitchProps) {\n const classes = sizeClasses[size];\n\n return (\n <button\n {...props}\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n data-state={checked ? 'checked' : 'unchecked'}\n disabled={disabled}\n className={cn(\n 'flex shrink-0 cursor-pointer items-center overflow-hidden rounded-full transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-ring/40',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n classes.track,\n checked ? 'bg-primary-button-bg' : 'bg-text-secondary/35 dark:bg-text-secondary/50',\n className,\n )}\n onClick={() => onCheckedChange(!checked)}\n >\n <span\n aria-hidden\n className={cn(\n 'shrink-0 translate-x-0 rounded-full shadow-sm transition-[transform,background-color]',\n checked ? 'bg-primary-button-text' : 'bg-primary-bg',\n classes.thumb,\n checked && classes.checkedThumb,\n )}\n />\n </button>\n );\n}\n","'use client';\n\nimport { cn } from '../lib/cn.js';\nimport { Switch } from '../primitives/Switch.js';\nimport type { AgentCapabilityValues } from './agentCapabilities.js';\n\nconst CAPABILITIES: Array<{\n id: keyof AgentCapabilityValues;\n label: string;\n description: string;\n}> = [\n {\n id: 'generativeUi',\n label: 'Generative UI',\n description: 'Let the agent render interactive UI in its replies.',\n },\n {\n id: 'dynamicSubAgents',\n label: 'Dynamic sub-agents',\n description: 'Let the agent spin up sub-agents for complex tasks.',\n },\n {\n id: 'askUserQuestions',\n label: 'Ask clarifying questions',\n description: 'Let the agent ask before acting when unsure.',\n },\n];\n\nexport function DraftCapabilitiesPanel({\n value,\n onChange,\n disabled = false,\n divided = false,\n layout = 'list',\n}: {\n value: AgentCapabilityValues;\n onChange: (value: AgentCapabilityValues) => void;\n disabled?: boolean;\n divided?: boolean;\n layout?: 'list' | 'cards';\n}) {\n if (layout === 'cards') {\n return (\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n {CAPABILITIES.map(capability => {\n const checked = value[capability.id];\n return (\n <div\n key={capability.id}\n className=\"border-border flex min-w-0 flex-col gap-2 rounded-lg border p-3 sm:flex-1\"\n >\n <div className=\"flex items-start justify-between gap-2\">\n <p className=\"text-text-primary text-sm font-medium\">{capability.label}</p>\n <Switch\n checked={checked}\n aria-label={capability.label}\n disabled={disabled}\n className=\"mt-0.5\"\n onCheckedChange={nextChecked => onChange({ ...value, [capability.id]: nextChecked })}\n />\n </div>\n <p className=\"text-text-secondary text-xs leading-snug\">{capability.description}</p>\n </div>\n );\n })}\n </div>\n );\n }\n\n return (\n <div className={cn('flex flex-col', divided && 'overflow-hidden rounded-xl border border-border')}>\n {CAPABILITIES.map((capability, index) => {\n const checked = value[capability.id];\n return (\n <div\n key={capability.id}\n className={cn('flex items-start gap-3 px-3 py-3', divided && index > 0 && 'border-t border-border')}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-text-primary text-sm font-medium\">{capability.label}</p>\n <p className=\"text-text-secondary mt-0.5 text-xs leading-snug\">{capability.description}</p>\n </div>\n <Switch\n checked={checked}\n aria-label={capability.label}\n disabled={disabled}\n className=\"mt-0.5\"\n onCheckedChange={nextChecked => onChange({ ...value, [capability.id]: nextChecked })}\n />\n </div>\n );\n })}\n </div>\n );\n}\n","'use client';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\n\nexport function DraftCatalogEmptyState({\n loading,\n emptyLabel,\n settingsTarget,\n onOpenSettings,\n}: {\n loading: boolean;\n emptyLabel: string;\n settingsTarget: string;\n onOpenSettings?: () => void;\n}) {\n if (!loading && onOpenSettings) {\n return (\n <button\n type=\"button\"\n className={auiButtonClass({\n variant: 'ghost',\n className: 'text-text-secondary w-full justify-center gap-1 py-4 text-xs',\n })}\n onClick={onOpenSettings}\n >\n Please configure {settingsTarget} in the <span className=\"underline\">settings</span>\n <Icon name=\"chevron-right\" className=\"size-3\" />\n </button>\n );\n }\n\n return <p className=\"text-text-secondary px-2 py-4 text-center text-sm\">{loading ? 'Loading…' : emptyLabel}</p>;\n}\n","'use client';\n\nimport { useTrueFoundryAgentSpec, useTrueFoundryUpdateAgentSpec } from '@truefoundry/assistant-ui-runtime';\nimport { useEffect, useId, useRef, useState } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { useOptionalCatalogServer } from '../../server/ServerContext.js';\nimport { useOptionalShellMode } from '../../server/ShellModeContext.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { cn } from '../lib/cn.js';\nimport { useCompactLayout } from '../lib/CompactLayoutContext.js';\nimport { useIsMobile } from '../lib/useIsMobile.js';\nimport { BottomSheet } from '../primitives/BottomSheet.js';\nimport { useDraftCatalog } from './DraftCatalogProvider.js';\nimport { displayModelLabel, DraftModelCatalogPanel, ProviderMark } from './DraftModelCatalogPanel.js';\nimport { modelPatchWithReasoningEffort } from './reasoningEffort.js';\n\nexport type DraftModelSelectorProps = {\n disabled?: boolean;\n isRunning?: boolean;\n};\n\nexport function DraftModelSelector({ disabled, isRunning }: DraftModelSelectorProps) {\n const { models, loading, ensureLoaded } = useDraftCatalog();\n const { agentSpec } = useTrueFoundryAgentSpec();\n const updateAgentSpec = useTrueFoundryUpdateAgentSpec();\n const catalog = useOptionalCatalogServer();\n const shell = useOptionalShellMode();\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const containerRef = useRef<HTMLDivElement>(null);\n const menuId = useId();\n const isMobile = useIsMobile();\n const compactLayout = useCompactLayout();\n const showConfigureSettingsCta = !loading && models.length === 0 && catalog != null;\n const seededDefaultModelRef = useRef<string | null>(null);\n\n useEffect(() => {\n ensureLoaded();\n }, [ensureLoaded]);\n\n // Keep agentSpec in sync with the visual default: when no model is set (or the\n // current name is not in the catalog), commit the first available catalog model.\n useEffect(() => {\n if (!updateAgentSpec || loading || models.length === 0) return;\n const first = models[0];\n if (first === undefined) return;\n const firstValue = first.name;\n const currentName = agentSpec?.model?.name?.trim() ?? '';\n if (currentName) {\n const inCatalog = models.some(m => m.name === currentName);\n if (inCatalog) {\n seededDefaultModelRef.current = null;\n return;\n }\n }\n if (seededDefaultModelRef.current === firstValue) return;\n seededDefaultModelRef.current = firstValue;\n updateAgentSpec({\n model: modelPatchWithReasoningEffort(firstValue, agentSpec?.model?.params, first.properties.reasoningEfforts),\n });\n }, [updateAgentSpec, loading, models, agentSpec?.model?.name, agentSpec?.model?.params]);\n\n const selectedName = agentSpec?.model?.name ?? models[0]?.name ?? '';\n const selected = models.find(m => m.name === selectedName);\n const label = selected\n ? displayModelLabel(selected.name)\n : selectedName\n ? displayModelLabel(selectedName)\n : loading\n ? 'Loading…'\n : 'Select model';\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n const account = selected?.provider.name ?? selectedName;\n\n const content = (\n <DraftModelCatalogPanel\n models={models}\n loading={loading}\n selectedName={selectedName}\n query={query}\n onQueryChange={setQuery}\n listboxId={menuId}\n onOpenSettings={\n showConfigureSettingsCta\n ? () => {\n setOpen(false);\n setQuery('');\n shell?.setSettingsOpen(true, 'models');\n }\n : undefined\n }\n onSelect={model => {\n updateAgentSpec?.({\n model: modelPatchWithReasoningEffort(model.name, agentSpec?.model?.params, model.properties.reasoningEfforts),\n });\n setOpen(false);\n setQuery('');\n }}\n />\n );\n\n return (\n <div ref={containerRef} className=\"relative\">\n <button\n type=\"button\"\n disabled={disabled || isRunning}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n title=\"Select model\"\n className={auiButtonClass({\n variant: 'ghost',\n size: 'sm',\n className: cn('h-8 max-w-48 gap-1.5 rounded-full px-2 text-xs font-medium', 'hover:bg-ghost-button-hover'),\n })}\n onClick={() => setOpen(v => !v)}\n >\n <ProviderMark logo={selected?.provider.logo} label={account} className=\"size-4 text-xs\" />\n <span className=\"truncate\">{label}</span>\n <Icon name=\"chevron-down\" className=\"size-3.5 shrink-0 opacity-60\" />\n </button>\n\n {open ? (\n isMobile || compactLayout ? (\n <BottomSheet open onOpenChange={setOpen} aria-label=\"Select model\">\n {content}\n </BottomSheet>\n ) : (\n <div className=\"bg-card-bg text-text-primary absolute right-0 bottom-full z-50 mb-2 flex max-h-[22rem] w-[18rem] flex-col overflow-hidden rounded-lg border border-border shadow-lg\">\n {content}\n </div>\n )\n ) : null}\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n DraftModelSelector: typeof DraftModelSelector;\n }\n}\n","'use client';\n\nimport { useEffect, useState, type ImgHTMLAttributes } from 'react';\n\nimport { useThemeMode } from '../../theme/SlotsProvider.js';\nimport { resolveCatalogLogoSrc } from '../../utils/catalogLogo.js';\n\nexport type CatalogLogoProps = Omit<ImgHTMLAttributes<HTMLImageElement>, 'src'> & {\n src: string;\n};\n\n/**\n * Catalog logo with mode-matched siblings:\n * - `…/icon.png` in dark mode → try `…/icon-dark.png`, else catalog URL\n * - `…/icon-dark.png` in light mode → try `…/icon.png`, else catalog URL\n */\nexport function CatalogLogo({ src, alt = '', onError, ...props }: CatalogLogoProps) {\n const mode = useThemeMode();\n const preferred = resolveCatalogLogoSrc({ src, mode });\n const [failedPreferred, setFailedPreferred] = useState(false);\n\n useEffect(() => {\n setFailedPreferred(false);\n }, [src, mode, preferred]);\n\n const canFallback = preferred !== src;\n const resolved = failedPreferred && canFallback ? src : preferred;\n\n return (\n <img\n {...props}\n key={resolved}\n src={resolved}\n alt={alt}\n onError={event => {\n if (canFallback && !failedPreferred) {\n setFailedPreferred(true);\n return;\n }\n onError?.(event);\n }}\n />\n );\n}\n","function splitCatalogLogoUrl(src: string): { dir: string; base: string; ext: string; suffix: string } | undefined {\n const match = /^(.*\\/)?([^/?#]+?)(\\.[^./?#]+)([?#].*)?$/.exec(src);\n if (match == null) return undefined;\n const dir = match[1] ?? '';\n const base = match[2];\n const ext = match[3];\n const suffix = match[4] ?? '';\n if (base == null || ext == null) return undefined;\n return { dir, base, ext, suffix };\n}\n\n/** Insert `-dark` before the file extension. Undefined when already dark-suffixed or unparseable. */\nexport function toDarkCatalogLogoUrl(src: string): string | undefined {\n const parts = splitCatalogLogoUrl(src);\n if (parts == null || /-dark$/i.test(parts.base)) return undefined;\n return `${parts.dir}${parts.base}-dark${parts.ext}${parts.suffix}`;\n}\n\n/** Strip a trailing `-dark` before the file extension. Undefined when not dark-suffixed or unparseable. */\nexport function toLightCatalogLogoUrl(src: string): string | undefined {\n const parts = splitCatalogLogoUrl(src);\n if (parts == null || !/-dark$/i.test(parts.base)) return undefined;\n return `${parts.dir}${parts.base.replace(/-dark$/i, '')}${parts.ext}${parts.suffix}`;\n}\n\n/**\n * Mode-matched logo URL:\n * - dark → prefer icon-dark.ext (derived from icon.ext, or keep if already dark)\n * - light → prefer icon.ext (derived from icon-dark.ext, or keep if already light)\n */\nexport function resolveCatalogLogoSrc({ src, mode }: { src: string; mode: 'light' | 'dark' }): string {\n if (mode === 'dark') return toDarkCatalogLogoUrl(src) ?? src;\n return toLightCatalogLogoUrl(src) ?? src;\n}\n","'use client';\n\nimport { Icon } from '../../icons/Icon.js';\nimport type { ModelSelection } from '../../server/types.js';\nimport { cn } from '../lib/cn.js';\nimport { auiInputClass } from '../lib/inputClasses.js';\nimport { CatalogLogo } from '../primitives/CatalogLogo.js';\nimport { DraftCatalogEmptyState } from './DraftCatalogEmptyState.js';\n\nfunction monogram(value: string): string {\n const trimmed = value.trim();\n return trimmed ? trimmed.charAt(0).toUpperCase() : '?';\n}\n\nexport function displayModelLabel(modelName: string): string {\n const slash = modelName.lastIndexOf('/');\n return slash >= 0 ? modelName.slice(slash + 1) : modelName;\n}\n\nexport function ProviderMark({ logo, label, className }: { logo?: string; label: string; className?: string }) {\n if (logo) {\n return <CatalogLogo src={logo} alt=\"\" className={cn('shrink-0 rounded object-contain', className)} aria-hidden />;\n }\n return (\n <span\n className={cn(\n 'bg-secondary-bg text-text-secondary flex shrink-0 items-center justify-center rounded font-semibold',\n className,\n )}\n aria-hidden\n >\n {monogram(label)}\n </span>\n );\n}\n\ntype ProviderSection = { name: string; logo?: string; models: ModelSelection[] };\n\nfunction groupModelsByProvider(models: ModelSelection[]): ProviderSection[] {\n const sections: ProviderSection[] = [];\n const byProvider = new Map<string, ProviderSection>();\n for (const model of models) {\n const name = model.provider.name.trim() || 'Other';\n const existing = byProvider.get(name);\n if (existing) {\n existing.models.push(model);\n if (!existing.logo && model.provider.logo) existing.logo = model.provider.logo;\n } else {\n const section: ProviderSection = { name, logo: model.provider.logo, models: [model] };\n byProvider.set(name, section);\n sections.push(section);\n }\n }\n return sections;\n}\n\nexport function DraftModelCatalogPanel({\n models,\n loading,\n selectedName,\n query,\n onQueryChange,\n onSelect,\n onOpenSettings,\n listboxId,\n showHeading = true,\n}: {\n models: ModelSelection[];\n loading: boolean;\n selectedName: string;\n query: string;\n onQueryChange: (query: string) => void;\n onSelect: (model: ModelSelection) => void;\n onOpenSettings?: () => void;\n listboxId: string;\n showHeading?: boolean;\n}) {\n const needle = query.trim().toLowerCase();\n const filtered = needle\n ? models.filter(\n model =>\n model.name.toLowerCase().includes(needle) ||\n model.id.toLowerCase().includes(needle) ||\n model.provider.name.toLowerCase().includes(needle),\n )\n : models;\n const sections = groupModelsByProvider(filtered);\n\n return (\n <>\n <div className=\"border-b border-border px-3 py-2\">\n {showHeading ? <p className=\"text-text-primary mb-2 text-sm font-semibold\">Select model</p> : null}\n <label className=\"relative block\">\n <Icon\n name=\"search\"\n className=\"text-text-secondary pointer-events-none absolute top-1/2 left-2 size-3.5 -translate-y-1/2\"\n />\n <input\n type=\"search\"\n value={query}\n onChange={event => onQueryChange(event.target.value)}\n placeholder=\"Search\"\n className={auiInputClass('h-8 py-1 pr-2 pl-7')}\n autoFocus\n />\n </label>\n </div>\n <div\n id={listboxId}\n role=\"listbox\"\n aria-label=\"Select model\"\n className=\"flex min-h-0 flex-1 flex-col overflow-y-auto p-1\"\n >\n {filtered.length === 0 ? (\n <DraftCatalogEmptyState\n loading={loading}\n emptyLabel=\"No models\"\n settingsTarget=\"Models\"\n onOpenSettings={onOpenSettings}\n />\n ) : (\n sections.map((section, sectionIndex) => {\n const headingId = `${listboxId}-provider-${sectionIndex}`;\n return (\n <div\n key={section.name}\n role=\"group\"\n aria-labelledby={headingId}\n className={cn(sectionIndex > 0 && 'mt-2')}\n >\n <div\n id={headingId}\n className=\"text-text-secondary flex items-center gap-1.5 px-2 py-1.5 text-[11px] font-medium tracking-wide uppercase\"\n >\n <ProviderMark logo={section.logo} label={section.name} className=\"size-3.5 text-[9px]\" />\n <span className=\"truncate\">{section.name}</span>\n </div>\n {section.models.map(model => {\n const active = selectedName ? model.name === selectedName : filtered[0] === model;\n return (\n <button\n key={model.id || model.name}\n type=\"button\"\n role=\"option\"\n aria-selected={active}\n className={cn(\n 'flex w-full items-center rounded-md px-2 py-2 text-left text-sm',\n active\n ? 'bg-dropdown-selected-item-bg text-dropdown-selected-item-text'\n : 'hover:bg-ghost-button-hover',\n )}\n onClick={() => onSelect(model)}\n >\n <span className=\"truncate font-medium\">{displayModelLabel(model.name)}</span>\n {active ? <Icon name=\"check\" className=\"ml-auto size-3.5\" /> : null}\n </button>\n );\n })}\n </div>\n );\n })\n )}\n </div>\n </>\n );\n}\n","import { forwardRef, type ComponentPropsWithRef } from 'react';\n\nimport { cn } from './lib/cn.js';\nimport { Spinner } from './primitives/Spinner.js';\n\nexport type HistoryLoaderProps = ComponentPropsWithRef<'div'> & {\n /** True while an older-history page is being fetched. */\n isLoading?: boolean;\n};\n\n/**\n * Inline status row shown at the top of the message list when older history\n * pages are available. Doubles as the scroll sentinel observed by\n * `HistoryLoaderContainer`.\n */\nexport const HistoryLoader = forwardRef<HTMLDivElement, HistoryLoaderProps>(\n ({ className, isLoading = false, ...rest }, ref) => (\n <div\n ref={ref}\n data-slot=\"aui_history-loader\"\n role=\"status\"\n aria-live=\"polite\"\n aria-label={isLoading ? 'Loading older messages' : 'Scroll up to load older messages'}\n className={cn('flex justify-center py-2', className)}\n {...rest}\n >\n {isLoading && <Spinner size={14} />}\n </div>\n ),\n);\nHistoryLoader.displayName = 'HistoryLoader';\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n HistoryLoader: typeof HistoryLoader;\n }\n}\n","'use client';\n\nimport type { ComponentType, ReactNode } from 'react';\nimport { useMemo, useRef } from 'react';\nimport ReactMarkdown, { type Components } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\n\nimport { useSlot, useThemeMode } from '../theme/SlotsProvider.js';\nimport { useOptionalContentClassNames } from '../theme/ThemeProvider.js';\nimport { cn } from './lib/cn.js';\nimport type { OpenUiFenceBlockProps } from './OpenUiFenceBlock.js';\nimport type { SandboxArtifactDownloadProps } from './SandboxArtifactDownload.js';\nimport type { SyntaxHighlighterProps } from './SyntaxHighlighter.js';\n\n/** Preloads OpenUiFenceBlock so it's ready before the user sees openui content. */\nexport function preloadMarkdownOpenUI(): Promise<unknown> {\n return import('./OpenUiFenceBlock.js');\n}\n\n/**\n * Prism cost grows with the code body. While the final fence is still open and changing, render\n * it as plain code above this size; closed fences remain highlighted and are not repeatedly\n * downgraded. The active fence is highlighted once when its closing delimiter arrives.\n */\nexport const LARGE_STREAMING_FENCE_CHARS = 8 * 1024;\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\n/**\n * Body of the final unmatched fenced block while streaming, or null when every fence is closed.\n * Used so only the growing fence skips Prism — completed large fences stay highlighted.\n */\nexport function getActiveStreamingFenceCode(content: string): string | null {\n const re = /^(`{3,})([^\\n]*)\\n?/gm;\n const markers: Array<{ after: number }> = [];\n let match: RegExpExecArray | null;\n while ((match = re.exec(content)) !== null) {\n markers.push({ after: match.index + match[0].length });\n }\n if (markers.length % 2 === 0) return null;\n const open = markers[markers.length - 1];\n if (open == null) return null;\n return content.slice(open.after).replace(/\\n$/, '');\n}\n\nfunction makeComponents(opts: {\n isStreaming?: boolean;\n /** Latest unmatched fence body; read via ref so `components` identity stays stable across growth. */\n getActiveFenceCode: () => string | null;\n darkTheme: boolean;\n fileDownloadBaseUrl?: string;\n onDownloadArtifact?: (path: string, filename: string) => Promise<void>;\n readOnly?: boolean;\n OpenUiFenceBlock: ComponentType<OpenUiFenceBlockProps>;\n SandboxArtifactDownload: ComponentType<SandboxArtifactDownloadProps>;\n SyntaxHighlighter: ComponentType<SyntaxHighlighterProps>;\n inlineCodeClassName?: string;\n}): Components {\n const {\n isStreaming,\n getActiveFenceCode,\n darkTheme,\n fileDownloadBaseUrl,\n onDownloadArtifact,\n readOnly,\n OpenUiFenceBlock,\n SandboxArtifactDownload,\n SyntaxHighlighter,\n inlineCodeClassName,\n } = opts;\n\n return {\n // Strip default <pre> wrapper — each block renderer provides its own container.\n pre({ children }: { children?: ReactNode }) {\n return <>{children}</>;\n },\n code({ className, children }) {\n const language = /language-(\\w+)/.exec(className ?? '')?.[1];\n const code = String(children ?? '').replace(/\\n$/, '');\n\n // Inline code: no language class\n if (!className) {\n return (\n <code\n className={cn('aui-inline-code rounded bg-secondary-bg px-1 py-0.5 font-mono text-sm', inlineCodeClassName)}\n >\n {children}\n </code>\n );\n }\n\n if (language === 'openui') {\n return <OpenUiFenceBlock content={code} isStreaming={isStreaming} darkTheme={darkTheme} />;\n }\n\n if (language === 'sandbox_artifacts') {\n return (\n <SandboxArtifactDownload\n code={code}\n fileDownloadBaseUrl={fileDownloadBaseUrl}\n onDownloadArtifact={onDownloadArtifact}\n readOnly={readOnly}\n />\n );\n }\n\n // Only the unmatched growing fence skips Prism; closed fences stay highlighted.\n const activeFenceCode = getActiveFenceCode();\n const isActiveOversizedFence =\n isStreaming === true &&\n activeFenceCode != null &&\n code === activeFenceCode &&\n code.length > LARGE_STREAMING_FENCE_CHARS;\n\n if (isActiveOversizedFence) {\n return (\n <pre\n className={cn(\n 'aui-syntax-highlighter my-2 max-w-full min-w-0 overflow-x-auto whitespace-pre-wrap break-words rounded-md',\n )}\n data-testid=\"aui-plain-streaming-fence\"\n >\n <code className={cn(className, 'whitespace-pre-wrap break-words')}>{code}</code>\n </pre>\n );\n }\n\n return <SyntaxHighlighter code={code} language={language} darkTheme={darkTheme} />;\n },\n };\n}\n\nconst REMARK_PLUGINS = [remarkGfm];\n\nexport function Markdown({\n content,\n isStreaming,\n fileDownloadBaseUrl,\n onDownloadArtifact,\n readOnly,\n className,\n}: MarkdownProps) {\n const mode = useThemeMode();\n const classNames = useOptionalContentClassNames();\n const darkTheme = mode === 'dark';\n const OpenUiFenceBlock = useSlot('OpenUiFenceBlock');\n const SandboxArtifactDownload = useSlot('SandboxArtifactDownload');\n const SyntaxHighlighter = useSlot('SyntaxHighlighter');\n\n // Ref keeps `components` stable while the active fence grows so completed Prism trees do not remount.\n const activeFenceCodeRef = useRef<string | null>(null);\n activeFenceCodeRef.current = isStreaming === true ? getActiveStreamingFenceCode(content) : null;\n\n const components = useMemo(\n () =>\n makeComponents({\n isStreaming,\n getActiveFenceCode: () => activeFenceCodeRef.current,\n darkTheme,\n fileDownloadBaseUrl,\n onDownloadArtifact,\n readOnly,\n OpenUiFenceBlock,\n SandboxArtifactDownload,\n SyntaxHighlighter,\n inlineCodeClassName: classNames.inlineCode,\n }),\n [\n isStreaming,\n darkTheme,\n fileDownloadBaseUrl,\n onDownloadArtifact,\n readOnly,\n OpenUiFenceBlock,\n SandboxArtifactDownload,\n SyntaxHighlighter,\n classNames.inlineCode,\n ],\n );\n\n return (\n <div\n className={cn('aui-markdown markdown-body min-w-0 max-w-full overflow-x-clip', classNames.markdown, className)}\n >\n <ReactMarkdown remarkPlugins={REMARK_PLUGINS} 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","'use client';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { cn } from './lib/cn.js';\nimport { IconButton } from './primitives/IconButton.js';\n\nexport type MessageActionBarProps = {\n isCopied: boolean;\n onCopy: () => void;\n createdAt?: Date | string;\n className?: string;\n};\n\nconst actionBtnClass = 'h-6 w-6 text-text-secondary hover:text-text-primary [&_svg]:size-3.5';\n\nexport function MessageActionBar({ isCopied, onCopy, createdAt, className }: MessageActionBarProps) {\n const MessageTimestamp = useSlot('MessageTimestamp');\n\n return (\n <div\n className={cn('aui-assistant-action-bar-root animate-in fade-in flex items-center gap-1 duration-200', className)}\n >\n <MessageTimestamp createdAt={createdAt} className=\"mr-1\" />\n <IconButton aria-label=\"Copy\" tooltip=\"Copy\" variant=\"ghost\" className={actionBtnClass} onClick={onCopy}>\n <Icon name={isCopied ? 'check' : 'clone'} size=\"0.875em\" />\n </IconButton>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n MessageActionBar: typeof MessageActionBar;\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-failure-bg bg-failure-bg/10 text-failure-bg mt-2 rounded-md border p-3 text-sm',\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 { cn } from './lib/cn.js';\nimport { LightTooltip } from './primitives/Tooltip.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 createdAt?: Date | string;\n className?: string;\n};\n\nexport function MessageTimestamp({ createdAt, className }: MessageTimestampProps) {\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 className={cn('text-xs font-medium cursor-pointer leading-normal shrink-0 text-text-secondary', className)}>\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 { useEffect, useRef, useState } from 'react';\n\nimport { useOptionalContentClassNames, useOptionalThemeMode } from '../theme/ThemeProvider.js';\nimport { cn } from './lib/cn.js';\n\nexport type MonacoEditorCoreProps = {\n value: string;\n language?: string;\n /** Monaco theme name. Defaults to SDK light/dark themes (`aui-monaco-light` / `aui-monaco-dark`). */\n theme?: string;\n options?: Record<string, unknown>;\n onChange?: (value: string) => void;\n onMount?: (editor: unknown, monaco: unknown) => void;\n beforeMount?: (monaco: unknown) => void;\n onAutoHeightChange?: (height: number) => void; // Reports Monaco's measured, clamped content height while `autoHeight` is active.\n className?: string;\n /**\n * Fixed height. Ignored when `autoHeight` is true (except as an initial\n * fallback before the editor mounts). Use `\"100%\"` for fill-parent layouts\n * (e.g. fullscreen dialogs) with `autoHeight={false}`.\n */\n height?: string | number;\n /** Grow/shrink to content height, capped by `maxHeight`. Default false. */\n autoHeight?: boolean;\n /** Cap for `autoHeight` (px number or CSS length). Default `10.5rem`. */\n maxHeight?: string | number;\n /** Floor for `autoHeight` (px number or CSS length). Default one line. */\n minHeight?: string | number;\n};\n\ntype MonacoEditor = {\n getValue(): string;\n setValue(value: string): void;\n getContentHeight(): number;\n onDidChangeModelContent(listener: () => void): { dispose(): void };\n onDidContentSizeChange(listener: () => void): { dispose(): void };\n updateOptions(options: Record<string, unknown>): void;\n dispose(): void;\n layout(): void;\n};\n\ntype MonacoModule = {\n editor: {\n create(container: HTMLElement, options: Record<string, unknown>): MonacoEditor;\n defineTheme(\n name: string,\n theme: {\n base: 'vs' | 'vs-dark' | 'hc-black' | 'hc-light';\n inherit: boolean;\n rules: unknown[];\n colors: Record<string, string>;\n },\n ): void;\n setTheme(name: string): void;\n };\n};\n\nconst AUI_MONACO_LIGHT = 'aui-monaco-light';\nconst AUI_MONACO_DARK = 'aui-monaco-dark';\nconst TRANSPARENT = '#00000000';\nconst DEFAULT_LINE_HEIGHT = 18;\nconst DEFAULT_VERTICAL_PADDING = 8;\nconst DEFAULT_MAX_HEIGHT = '10.5rem';\n\nfunction defineAuiThemes(monaco: MonacoModule) {\n const sharedColors = {\n 'editor.background': TRANSPARENT,\n 'editor.lineHighlightBackground': TRANSPARENT,\n 'editor.lineHighlightBorder': TRANSPARENT,\n 'editorGutter.background': TRANSPARENT,\n 'minimap.background': TRANSPARENT,\n focusBorder: TRANSPARENT,\n 'scrollbar.shadow': TRANSPARENT,\n 'editorOverviewRuler.border': TRANSPARENT,\n 'editorOverviewRuler.background': TRANSPARENT,\n };\n\n monaco.editor.defineTheme(AUI_MONACO_LIGHT, {\n base: 'vs',\n inherit: true,\n rules: [],\n colors: sharedColors,\n });\n\n monaco.editor.defineTheme(AUI_MONACO_DARK, {\n base: 'vs-dark',\n inherit: true,\n rules: [],\n colors: sharedColors,\n });\n}\n\nfunction resolveThemeName(\n explicit: string | undefined,\n classNameTheme: string | undefined,\n mode: 'light' | 'dark',\n): string {\n if (explicit) return explicit;\n if (classNameTheme) return classNameTheme;\n return mode === 'dark' ? AUI_MONACO_DARK : AUI_MONACO_LIGHT;\n}\n\nfunction toPx(value: string | number | undefined, fallback: number): number {\n if (value == null) return fallback;\n if (typeof value === 'number') return value;\n const trimmed = value.trim();\n if (trimmed.endsWith('rem')) {\n const rem = parseFloat(trimmed);\n const root =\n typeof document !== 'undefined' ? parseFloat(getComputedStyle(document.documentElement).fontSize) || 16 : 16;\n return Number.isFinite(rem) ? rem * root : fallback;\n }\n if (trimmed.endsWith('px')) {\n const px = parseFloat(trimmed);\n return Number.isFinite(px) ? px : fallback;\n }\n const n = parseFloat(trimmed);\n return Number.isFinite(n) ? n : fallback;\n}\n\nfunction estimateHeightFromValue(value: string, minPx: number, maxPx: number): number {\n const lines = Math.max(1, value.split('\\n').length);\n const estimated = lines * DEFAULT_LINE_HEIGHT + DEFAULT_VERTICAL_PADDING;\n return Math.min(maxPx, Math.max(minPx, estimated));\n}\n\nconst EMBEDDED_DEFAULTS: Record<string, unknown> = {\n automaticLayout: true,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n wordWrap: 'on',\n fontSize: 12,\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace',\n lineHeight: DEFAULT_LINE_HEIGHT,\n padding: { top: 4, bottom: 4 },\n renderLineHighlight: 'none',\n overviewRulerLanes: 0,\n overviewRulerBorder: false,\n hideCursorInOverviewRuler: true,\n glyphMargin: false,\n folding: true,\n scrollbar: {\n verticalScrollbarSize: 8,\n horizontalScrollbarSize: 8,\n useShadows: false,\n },\n stickyScroll: { enabled: false },\n};\n\nexport function MonacoEditorCore({\n value,\n language = 'plaintext',\n theme,\n options,\n onChange,\n onMount,\n beforeMount,\n onAutoHeightChange,\n className,\n height = 400,\n autoHeight = false,\n maxHeight = DEFAULT_MAX_HEIGHT,\n minHeight,\n}: MonacoEditorCoreProps) {\n const mode = useOptionalThemeMode();\n const classNames = useOptionalContentClassNames();\n const wrapperRef = useRef<HTMLDivElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<MonacoEditor | null>(null);\n const monacoRef = useRef<MonacoModule | null>(null);\n const onChangeRef = useRef(onChange);\n const onMountRef = useRef(onMount);\n const beforeMountRef = useRef(beforeMount);\n const onAutoHeightChangeRef = useRef(onAutoHeightChange);\n onChangeRef.current = onChange;\n onMountRef.current = onMount;\n beforeMountRef.current = beforeMount;\n onAutoHeightChangeRef.current = onAutoHeightChange;\n\n const minPx = toPx(minHeight, DEFAULT_LINE_HEIGHT + DEFAULT_VERTICAL_PADDING);\n const maxPx = toPx(maxHeight, toPx(DEFAULT_MAX_HEIGHT, 168));\n const clampRef = useRef({ minPx, maxPx, autoHeight });\n clampRef.current = { minPx, maxPx, autoHeight };\n\n const [autoPx, setAutoPx] = useState(() => (autoHeight ? estimateHeightFromValue(value, minPx, maxPx) : 0));\n\n const resolvedTheme = resolveThemeName(theme, classNames.monaco?.monacoTheme, mode);\n\n const syncAutoHeight = () => {\n const editor = editorRef.current;\n const wrapper = wrapperRef.current;\n const { minPx: min, maxPx: max, autoHeight: enabled } = clampRef.current;\n if (!editor || !wrapper || !enabled) return;\n const next = Math.min(max, Math.max(min, editor.getContentHeight()));\n setAutoPx(next);\n wrapper.style.height = `${next}px`;\n editor.layout();\n onAutoHeightChangeRef.current?.(next);\n };\n\n useEffect(() => {\n if (!containerRef.current) return;\n\n let editor: MonacoEditor | null = null;\n let changeDisposable: { dispose(): void } | null = null;\n let sizeDisposable: { dispose(): void } | null = null;\n let destroyed = false;\n\n void import('monaco-editor').then(mod => {\n if (destroyed || !containerRef.current) return;\n\n const monaco = mod as unknown as MonacoModule;\n monacoRef.current = monaco;\n defineAuiThemes(monaco);\n beforeMountRef.current?.(monaco);\n\n editor = monaco.editor.create(containerRef.current, {\n value,\n language,\n theme: resolvedTheme,\n ...EMBEDDED_DEFAULTS,\n ...options,\n });\n\n editorRef.current = editor;\n\n changeDisposable = editor.onDidChangeModelContent(() => {\n onChangeRef.current?.(editor!.getValue());\n });\n\n if (autoHeight) {\n sizeDisposable = editor.onDidContentSizeChange(() => {\n syncAutoHeight();\n });\n // Layout after first paint so getContentHeight is accurate.\n requestAnimationFrame(() => syncAutoHeight());\n }\n\n onMountRef.current?.(editor, monaco);\n });\n\n return () => {\n destroyed = true;\n changeDisposable?.dispose();\n sizeDisposable?.dispose();\n editor?.dispose();\n editorRef.current = null;\n monacoRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // mount-only: editor manages its own state\n\n // Sync external value changes without recreating the editor.\n useEffect(() => {\n const editor = editorRef.current;\n if (editor && editor.getValue() !== value) {\n editor.setValue(value);\n if (autoHeight) {\n requestAnimationFrame(() => syncAutoHeight());\n }\n }\n }, [value, autoHeight, minPx, maxPx]);\n\n // Re-clamp when max/min change.\n useEffect(() => {\n if (autoHeight) {\n requestAnimationFrame(() => syncAutoHeight());\n }\n }, [autoHeight, minPx, maxPx]);\n\n // Follow light/dark (and host theme overrides) after mount.\n useEffect(() => {\n monacoRef.current?.editor.setTheme(resolvedTheme);\n }, [resolvedTheme]);\n\n const styleHeight = autoHeight ? autoPx : typeof height === 'number' ? height : height;\n\n return (\n <div\n ref={wrapperRef}\n className={cn('aui-monaco overflow-hidden', classNames.monaco?.root, className)}\n style={{ height: styleHeight }}\n >\n <div ref={containerRef} className={cn('h-full w-full overflow-hidden', classNames.monaco?.editor)} />\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n MonacoEditorCore: typeof MonacoEditorCore;\n }\n}\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport type { ChatFileDownloadFile } from './ChatFileDownload.js';\n\nexport type SandboxArtifactDownloadProps = {\n code: string;\n fileDownloadBaseUrl?: string;\n onDownloadArtifact?: (path: string, filename: string) => Promise<void>;\n readOnly?: boolean;\n};\n\nexport type SandboxArtifact = ChatFileDownloadFile;\n\nconst PREFIX = 'sandbox_artifacts';\n/** tfy / agent format: `[name](path)` */\nconst PAIR_RE = /\\[([^\\]]*)\\]\\(([^)]*)\\)/g;\n\n/**\n * Parses a `sandbox_artifacts` fence body into `{ name, path }` entries.\n * Primary format matches tfy-web-components: `[file.js](/tmp/file.js)`.\n * Colon lines (`name: path`) are accepted as a fallback.\n */\nexport function parseSandboxArtifacts(raw: string): SandboxArtifact[] {\n const trimmed = raw.trim();\n const body = trimmed.startsWith(PREFIX) ? trimmed.slice(PREFIX.length).trimStart() : trimmed;\n\n const fromLinks: SandboxArtifact[] = [];\n PAIR_RE.lastIndex = 0;\n let match: RegExpExecArray | null = PAIR_RE.exec(body);\n while (match !== null) {\n const name = match[1]?.trim() ?? '';\n const path = match[2]?.trim() ?? '';\n if (name && path) fromLinks.push({ name, path });\n match = PAIR_RE.exec(body);\n }\n if (fromLinks.length > 0) return fromLinks;\n\n // Fallback: `name: path` per line\n return body.split('\\n').flatMap(line => {\n const idx = line.indexOf(':');\n if (idx === -1) return [];\n const name = line.slice(0, idx).trim();\n const path = line.slice(idx + 1).trim();\n if (!name || !path) return [];\n // Skip leftover markdown link debris\n if (name.startsWith('[') || path.startsWith('(')) return [];\n return [{ name, path }];\n });\n}\n\nexport function SandboxArtifactDownload({\n code,\n fileDownloadBaseUrl,\n onDownloadArtifact,\n readOnly,\n}: SandboxArtifactDownloadProps) {\n const ChatFileDownload = useSlot('ChatFileDownload');\n const artifacts = useMemo(() => parseSandboxArtifacts(code), [code]);\n if (artifacts.length === 0) return null;\n\n return (\n <ChatFileDownload\n files={artifacts}\n fileDownloadBaseUrl={fileDownloadBaseUrl}\n onDownloadArtifact={onDownloadArtifact}\n readOnly={readOnly}\n />\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n SandboxArtifactDownload: typeof SandboxArtifactDownload;\n }\n}\n","'use client';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\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 dataTestPrefix?: string;\n className?: string;\n};\n\nfunction JsonPane({ value, className }: { value: string; className?: string }) {\n const MonacoEditorCore = useSlot('MonacoEditorCore');\n\n return (\n <MonacoEditorCore\n language=\"json\"\n value={value}\n autoHeight\n maxHeight=\"10.5rem\"\n options={{\n readOnly: true,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n wordWrap: 'on',\n lineNumbers: 'off',\n folding: true,\n fontSize: 12,\n }}\n className={cn('!border-0', className)}\n />\n );\n}\n\nfunction SandboxBody({\n command,\n exitCode,\n argsJson,\n resultText,\n resultJson,\n viewMode = 'terminal',\n hasContent = false,\n onViewModeChange,\n dataTestPrefix,\n}: Pick<\n SandboxToolCallCardProps,\n | 'command'\n | 'exitCode'\n | 'argsJson'\n | 'resultText'\n | 'resultJson'\n | 'viewMode'\n | 'hasContent'\n | 'onViewModeChange'\n | 'dataTestPrefix'\n>) {\n return (\n <div\n className=\"rounded-lg border border-border bg-primary-bg\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-sandbox` : undefined}\n >\n <div className=\"rounded-t-md border-b border-primary-button-bg/30 bg-primary-button-bg/10\">\n <div className=\"flex w-full min-w-0 items-center gap-2 px-3 py-1.5\">\n <p className=\"min-w-0 font-sans text-xs font-medium text-primary-button-bg\">sandbox</p>\n <div\n className=\"ml-auto flex shrink-0 items-center gap-1.5\"\n onClick={e => e.stopPropagation()}\n onKeyDown={e => e.stopPropagation()}\n >\n {exitCode != null && (\n <span\n className={cn(\n 'inline-flex h-6 items-center gap-1 rounded px-1.5 text-xs lowercase',\n exitCode === 0 ? 'bg-success-bg/10 text-success-bg' : 'bg-failure-bg/10 text-failure-bg',\n )}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-exit-code` : undefined}\n >\n <Icon name={exitCode === 0 ? 'circle-check' : 'circle-xmark'} size={12} />\n exit: {exitCode}\n </span>\n )}\n <div\n className=\"inline-flex h-6 items-center rounded-md border border-border bg-primary-bg p-0.5\"\n role=\"group\"\n aria-label=\"Sandbox view\"\n >\n <button\n type=\"button\"\n title=\"Terminal View\"\n aria-label=\"Terminal View\"\n aria-pressed={viewMode === 'terminal'}\n onClick={() => onViewModeChange?.('terminal')}\n className={cn(\n 'inline-flex size-5 cursor-pointer items-center justify-center rounded-sm text-text-secondary transition-colors',\n viewMode === 'terminal' && 'bg-dropdown-selected-item-bg text-dropdown-selected-item-text shadow-sm',\n )}\n >\n <Icon name=\"terminal\" size={12} />\n </button>\n <button\n type=\"button\"\n title=\"Code View\"\n aria-label=\"Code View\"\n aria-pressed={viewMode === 'code'}\n onClick={() => onViewModeChange?.('code')}\n className={cn(\n 'inline-flex size-5 cursor-pointer items-center justify-center rounded-sm text-text-secondary transition-colors',\n viewMode === 'code' && 'bg-dropdown-selected-item-bg text-dropdown-selected-item-text shadow-sm',\n )}\n >\n <Icon name=\"code\" size={12} />\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div className=\"rounded-b-lg border border-t-0 border-border p-3\">\n {hasContent && (\n <div className=\"max-h-80 overflow-x-hidden overflow-y-auto whitespace-pre-wrap break-words font-mono text-xs text-text-primary\">\n {viewMode === 'code' ? (\n <>\n {argsJson && (\n <div className=\"my-1 border-l-4 border-primary-button-bg px-3\">\n <div className=\"mb-1 font-sans text-xs font-medium leading-4\">Arguments</div>\n <JsonPane value={argsJson} className=\"pl-2\" />\n </div>\n )}\n {resultJson && (\n <div className=\"my-1 border-l-4 border-primary-button-bg/60 px-3\">\n <div className=\"mb-1 mt-2 font-sans text-xs font-medium leading-4\">Result</div>\n <JsonPane value={resultJson} className=\"pl-2\" />\n </div>\n )}\n </>\n ) : (\n <>\n {command && (\n <div className=\"my-1 break-all border-l-4 border-primary-button-bg px-3\">\n <div className=\"mb-1 text-[12px] font-medium leading-4 text-text-secondary\">COMMAND</div>\n <div>\n <span className=\"text-primary-button-bg\">$</span> {command}\n </div>\n </div>\n )}\n {resultText ? (\n <>\n <div className=\"mx-3 my-1 border-t border-border\" />\n <div className=\"my-1 break-all border-l-4 border-primary-button-bg/60 px-3\">\n <div className=\"mb-1 text-[12px] font-medium leading-4 text-text-secondary\">OUTPUT</div>\n <div>{resultText}</div>\n </div>\n </>\n ) : (\n resultJson && (\n <>\n <div className=\"mx-3 my-1 border-t border-border\" />\n <div className=\"my-1 border-l-4 border-primary-button-bg/60 px-3\">\n <div className=\"mb-1 text-[12px] font-medium leading-4 text-text-secondary\">OUTPUT</div>\n <JsonPane value={resultJson} className=\"pl-2\" />\n </div>\n </>\n )\n )}\n </>\n )}\n </div>\n )}\n </div>\n </div>\n );\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 = 'terminal',\n hasContent = false,\n onViewModeChange,\n durationText,\n dataTestPrefix,\n className,\n}: SandboxToolCallCardProps) {\n const ToolCallCard = useSlot('ToolCallCard');\n const awaiting = status === 'running';\n\n return (\n <ToolCallCard\n toolName={intent || name}\n icon=\"cube\"\n iconClassName=\"text-primary-button-bg shrink-0\"\n expanded={expanded}\n onToggle={onToggle}\n awaiting={awaiting}\n awaitingText={durationText ?? 'Running…'}\n showResponseLine={false}\n status={awaiting ? undefined : status}\n exitCode={exitCode}\n dataTestPrefix={dataTestPrefix}\n requestSlot={\n <SandboxBody\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 dataTestPrefix={dataTestPrefix}\n />\n }\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 useTrueFoundryAdoptAgentSpec,\n useTrueFoundryAgentSpec,\n useTrueFoundryFlushAgentSpec,\n} from '@truefoundry/assistant-ui-runtime';\nimport { useEffect, useId, useMemo, useRef, useState, type ReactNode } from 'react';\nimport { useSaveAgentVisible } from '../hooks/useChatChromeActionsVisible.js';\nimport { Icon } from '../icons/Icon.js';\nimport { useOptionalServer, useServerCapabilities } from '../server/ServerContext.js';\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\nimport type { AgentSpec } from '../server/types.js';\nimport { getErrorMessage } from '../utils/getErrorMessage.js';\nimport { readAgentCapabilities, withAgentCapabilities } from './draft/agentCapabilities.js';\nimport { DraftCapabilitiesPanel } from './draft/DraftCapabilitiesPanel.js';\nimport { DraftCatalogProvider, useDraftCatalog } from './draft/DraftCatalogProvider.js';\nimport { CatalogRow, ConnectorConnectButton, isUnauthenticatedDcrConnector } from './draft/DraftCompositeSelector.js';\nimport { displayModelLabel, DraftModelCatalogPanel, ProviderMark } from './draft/DraftModelCatalogPanel.js';\nimport { modelPatchWithReasoningEffort } from './draft/reasoningEffort.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\nimport { auiInputClass } from './lib/inputClasses.js';\nimport { CenteredModal } from './primitives/CenteredModal.js';\nimport { Tooltip } from './primitives/Tooltip.js';\n\ntype SaveIntent = 'create' | 'update';\ntype Editor = 'model' | 'mcp' | 'skills';\ntype EditableMount = { id: string; name: string; value: object };\n\nfunction editableMountsFromSpec(value: unknown): EditableMount[] {\n if (!Array.isArray(value)) return [];\n const mounts: EditableMount[] = [];\n for (const item of value) {\n if (typeof item !== 'object' || item === null) continue;\n const name = Reflect.get(item, 'name');\n if (typeof name !== 'string') continue;\n const id = Reflect.get(item, 'id');\n mounts.push({ id: typeof id === 'string' ? id : name, name, value: item });\n }\n return mounts;\n}\n\nfunction ConfigSection({\n label,\n onEdit,\n disabled,\n children,\n}: {\n label: string;\n onEdit: () => void;\n disabled: boolean;\n children: ReactNode;\n}) {\n return (\n <div className=\"mb-3\">\n <div className=\"mb-1.5 flex items-center justify-between\">\n <span className=\"text-text-secondary text-xs font-semibold tracking-wide uppercase\">{label}</span>\n <button\n type=\"button\"\n aria-label={`Edit ${label}`}\n disabled={disabled}\n className={auiButtonClass({ variant: 'ghost', size: 'icon', className: 'size-7' })}\n onClick={onEdit}\n >\n <Icon name=\"pencil\" className=\"size-3.5\" />\n </button>\n </div>\n {children}\n </div>\n );\n}\n\nconst PRELOAD_TOOLS_COPY = {\n header: 'Preload tools',\n on: 'Tool definitions load into context upfront. No discovery step, but uses more context.',\n off: 'The agent discovers tools on demand. Lighter context upfront, but a discovery step the first time it needs a tool.',\n} as const;\n\nfunction PreloadToggle({ on, disabled, onToggle }: { on: boolean; disabled: boolean; onToggle: () => void }) {\n const label = `${PRELOAD_TOOLS_COPY.header} · ${on ? 'ON' : 'OFF'}`;\n const body = on ? PRELOAD_TOOLS_COPY.on : PRELOAD_TOOLS_COPY.off;\n return (\n <Tooltip\n className=\"max-w-[17rem] whitespace-normal\"\n content={\n <div className=\"text-left\">\n <p className=\"mb-1 text-[11px] font-semibold tracking-wide uppercase\">{label}</p>\n <p className=\"text-xs leading-snug\">{body}</p>\n </div>\n }\n >\n <button\n type=\"button\"\n aria-label={label}\n aria-pressed={on}\n disabled={disabled}\n onClick={onToggle}\n className={cn(\n 'flex size-6 shrink-0 cursor-pointer items-center justify-center rounded-md border',\n 'transition-[color,background-color,border-color,transform] active:scale-90',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-ring/40',\n 'disabled:cursor-not-allowed disabled:opacity-50 disabled:active:scale-100',\n on\n ? 'border-primary-button-bg/40 bg-primary-button-bg/10 text-primary-button-bg hover:border-primary-button-bg/70 hover:bg-primary-button-bg/20'\n : 'border-border text-text-secondary hover:border-text-secondary/50 hover:bg-text-secondary/10 hover:text-text-primary',\n )}\n >\n <Icon name=\"book-open\" className=\"size-3.5\" />\n </button>\n </Tooltip>\n );\n}\n\nfunction MountChips({\n mounts,\n disabled,\n emptyLabel,\n onTogglePreload,\n}: {\n mounts: EditableMount[];\n disabled: boolean;\n emptyLabel: string;\n onTogglePreload?: (id: string) => void;\n}) {\n if (mounts.length === 0) {\n return <p className=\"text-text-secondary text-xs\">{emptyLabel}</p>;\n }\n return (\n <div className=\"flex flex-wrap gap-2\">\n {mounts.map(mount => {\n const on = Boolean((mount.value as { preload?: boolean }).preload);\n return (\n <span\n key={mount.id}\n className={cn(\n 'border-border flex items-center gap-2 rounded-lg border py-1 pr-2.5',\n onTogglePreload ? 'pl-1.5' : 'pl-2.5',\n )}\n >\n {onTogglePreload ? (\n <PreloadToggle on={on} disabled={disabled} onToggle={() => onTogglePreload(mount.id)} />\n ) : null}\n <span className=\"text-text-primary text-sm\">{mount.name}</span>\n </span>\n );\n })}\n </div>\n );\n}\n\nexport type SaveAgentButtonProps = {\n disabled?: boolean;\n className?: string;\n children?: string;\n};\n\nexport function SaveAgentButton({ disabled = false, className, children = 'Save Agent' }: SaveAgentButtonProps) {\n return (\n <DraftCatalogProvider>\n <SaveAgentButtonContent disabled={disabled} className={className}>\n {children}\n </SaveAgentButtonContent>\n </DraftCatalogProvider>\n );\n}\n\nfunction SaveAgentButtonContent({\n disabled,\n className,\n children,\n}: {\n disabled: boolean;\n className?: string;\n children: string;\n}) {\n const { agentSpec, draftSessionId } = useTrueFoundryAgentSpec();\n const agentSpecRef = useRef(agentSpec);\n agentSpecRef.current = agentSpec;\n const flushAgentSpec = useTrueFoundryFlushAgentSpec();\n const adoptAgentSpec = useTrueFoundryAdoptAgentSpec();\n const builder = useOptionalServer();\n const shell = useOptionalShellMode();\n const catalog = useDraftCatalog();\n const serverCapabilities = useServerCapabilities();\n const modelListId = useId();\n const visible = useSaveAgentVisible();\n const [open, setOpen] = useState(false);\n const [editor, setEditor] = useState<Editor | null>(null);\n const [intent, setIntent] = useState<SaveIntent>('create');\n const [name, setName] = useState('');\n const [draftSpec, setDraftSpec] = useState<AgentSpec | null>(null);\n const [modelQuery, setModelQuery] = useState('');\n const [search, setSearch] = useState('');\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const errorRef = useRef<HTMLParagraphElement>(null);\n\n const mcpMounts = useMemo(() => editableMountsFromSpec(draftSpec?.mcpServers), [draftSpec?.mcpServers]);\n const skillMounts = useMemo(() => editableMountsFromSpec(draftSpec?.skills), [draftSpec?.skills]);\n const modelEntry = useMemo(\n () => catalog.models.find(model => model.name === draftSpec?.model.name),\n [catalog.models, draftSpec?.model.name],\n );\n\n useEffect(() => {\n if (error === null) return;\n // scrollIntoView is unimplemented in jsdom; guard so tests don't throw.\n errorRef.current?.scrollIntoView?.({ block: 'nearest', behavior: 'smooth' });\n }, [error]);\n\n const close = () => {\n if (saving) return;\n setEditor(null);\n setOpen(false);\n setDraftSpec(null);\n setError(null);\n };\n\n const show = async () => {\n if (agentSpecRef.current === null || builder === null) return;\n setError(null);\n catalog.ensureLoaded();\n await flushAgentSpec();\n const latestAgentSpec = agentSpecRef.current;\n if (latestAgentSpec === null) return;\n const currentName = shell?.mode.status === 'active' ? (shell.mode.agentName ?? shell.mode.agentId ?? '') : '';\n setIntent(currentName ? 'update' : 'create');\n setName(currentName);\n setDraftSpec({\n ...latestAgentSpec,\n model: {\n ...latestAgentSpec.model,\n params: latestAgentSpec.model.params ? { ...latestAgentSpec.model.params } : undefined,\n },\n mcpServers: latestAgentSpec.mcpServers?.map(item => ({ ...item })),\n skills: latestAgentSpec.skills?.map(item => ({ ...item })),\n config: latestAgentSpec.config ? { ...latestAgentSpec.config } : undefined,\n });\n setOpen(true);\n };\n\n const save = async () => {\n if (builder === null || draftSpec === null) return;\n const normalizedName = name.trim();\n if (!normalizedName || !draftSpec.model.name.trim()) return;\n setSaving(true);\n setError(null);\n try {\n const result = await builder.saveAgent({\n agentName: normalizedName,\n agentSpec: draftSpec,\n intent,\n sessionId: draftSessionId,\n });\n adoptAgentSpec({ agentSpec: draftSpec, updatedAt: result.sessionUpdatedAt });\n shell?.bindMutableAgent({\n agentId: result.agentId ?? normalizedName,\n agentName: normalizedName,\n agentSpec: draftSpec,\n });\n shell?.invalidateAgentsList();\n setOpen(false);\n setDraftSpec(null);\n setEditor(null);\n } catch (caught) {\n setError(getErrorMessage(caught, 'Could not save agent'));\n } finally {\n setSaving(false);\n }\n };\n\n const toggleMcpPreload = (id: string) => {\n if (draftSpec === null) return;\n const next = (draftSpec.mcpServers ?? []).map(item => {\n const record = item as Record<string, unknown>;\n const itemId = typeof record.id === 'string' ? record.id : (record.name as string);\n return itemId === id ? ({ ...record, preload: record.preload !== true } as typeof item) : item;\n });\n setDraftSpec({ ...draftSpec, mcpServers: next });\n };\n\n const filteredConnectors = catalog.connectors.filter(item =>\n `${item.name} ${item.description ?? ''}`.toLowerCase().includes(search.trim().toLowerCase()),\n );\n const filteredSkills = catalog.skills.filter(item =>\n `${item.name} ${item.description ?? ''}`.toLowerCase().includes(search.trim().toLowerCase()),\n );\n const isUpdateMode =\n shell?.mode.status === 'active' &&\n shell.mode.isMutable &&\n (shell.mode.agentName !== undefined || shell.mode.agentId !== undefined);\n const triggerLabel = isUpdateMode && children === 'Save Agent' ? 'Update Agent' : children;\n\n if (!visible) return null;\n\n return (\n <>\n <button\n type=\"button\"\n disabled={disabled || builder === null || agentSpec === null}\n className={auiButtonClass({ variant: 'outline', size: 'sm', className })}\n onClick={() => void show()}\n >\n <Icon name=\"save\" className=\"size-3.5\" />\n {triggerLabel}\n </button>\n\n <CenteredModal\n open={open}\n onOpenChange={next => !next && close()}\n title={intent === 'create' ? 'Save agent' : 'Update agent'}\n className=\"md:h-auto md:max-h-[85dvh] md:max-w-2xl\"\n aria-label={intent === 'create' ? 'Save agent' : 'Update agent'}\n >\n {draftSpec ? (\n <div className=\"flex min-h-0 w-full flex-1 flex-col\">\n <div className=\"min-h-0 flex-1 overflow-y-auto px-5 py-3\">\n <label className=\"mb-3 block\">\n <span className=\"mb-1.5 block text-sm font-medium\">Agent name</span>\n <input\n value={name}\n disabled={saving || intent === 'update'}\n onChange={event => setName(event.target.value)}\n placeholder=\"release-notes\"\n className={auiInputClass('h-9 disabled:opacity-60')}\n />\n </label>\n\n <label className=\"mb-3 block\">\n <span className=\"mb-1.5 block text-sm font-medium\">Instructions</span>\n <textarea\n value={draftSpec.instructions ?? ''}\n disabled={saving}\n onChange={event => setDraftSpec({ ...draftSpec, instructions: event.target.value })}\n rows={5}\n placeholder=\"You are a release notes writer for a platform team.\"\n className={auiInputClass('resize-y py-2 disabled:opacity-60')}\n />\n </label>\n\n <ConfigSection label=\"Model\" onEdit={() => setEditor('model')} disabled={saving}>\n {draftSpec.model.name ? (\n <span className=\"border-border inline-flex items-center gap-2 rounded-lg border py-1 pr-2.5 pl-2\">\n <ProviderMark\n logo={modelEntry?.provider.logo}\n label={modelEntry?.provider.name ?? draftSpec.model.name}\n className=\"size-5 text-[10px]\"\n />\n <span className=\"text-text-primary text-sm\">{displayModelLabel(draftSpec.model.name)}</span>\n </span>\n ) : (\n <p className=\"text-text-secondary text-xs\">No model selected.</p>\n )}\n </ConfigSection>\n\n <ConfigSection label=\"Connectors\" onEdit={() => setEditor('mcp')} disabled={saving}>\n <MountChips\n mounts={mcpMounts}\n disabled={saving}\n emptyLabel=\"No connectors added.\"\n onTogglePreload={toggleMcpPreload}\n />\n </ConfigSection>\n\n <ConfigSection label=\"Skills\" onEdit={() => setEditor('skills')} disabled={saving}>\n <MountChips mounts={skillMounts} disabled={saving} emptyLabel=\"No skills added.\" />\n </ConfigSection>\n\n <div>\n <p className=\"text-text-secondary mb-1.5 text-xs font-semibold tracking-wide uppercase\">Capabilities</p>\n <DraftCapabilitiesPanel\n layout=\"cards\"\n value={readAgentCapabilities(draftSpec.config)}\n disabled={saving}\n onChange={values =>\n setDraftSpec({\n ...draftSpec,\n config: withAgentCapabilities({ config: draftSpec.config, values }),\n })\n }\n />\n </div>\n\n {error ? (\n <p\n ref={errorRef}\n role=\"alert\"\n className=\"text-failure-bg mt-3 text-sm wrap-break-word whitespace-pre-wrap tab-4\"\n >\n {error}\n </p>\n ) : null}\n </div>\n\n <div className=\"bg-card-bg sticky bottom-0 z-10 flex shrink-0 justify-end gap-2 border-t border-border px-5 py-4\">\n <button\n type=\"button\"\n disabled={saving}\n className={auiButtonClass({ variant: 'secondary' })}\n onClick={close}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n disabled={saving || !name.trim() || !draftSpec.model.name.trim()}\n className={auiButtonClass({ variant: 'default' })}\n onClick={() => void save()}\n >\n {saving ? 'Saving…' : 'Save changes'}\n </button>\n </div>\n </div>\n ) : null}\n </CenteredModal>\n\n <CenteredModal\n open={editor !== null}\n onOpenChange={next => {\n if (!next) {\n setEditor(null);\n setSearch('');\n setModelQuery('');\n }\n }}\n title={editor === 'model' ? 'Select model' : editor === 'mcp' ? 'Connectors' : 'Skills'}\n className=\"md:max-w-md\"\n contentSized\n aria-label={editor === 'model' ? 'Edit model' : editor === 'mcp' ? 'Edit Connectors' : 'Edit skills'}\n >\n {draftSpec && editor ? (\n <div className=\"flex h-[min(28rem,calc(100dvh-10rem))] w-[min(28rem,calc(100vw-2rem))] flex-col\">\n {editor === 'model' ? (\n <>\n {catalog.error ? (\n <p role=\"alert\" className=\"text-failure-bg px-3 pt-3 text-sm\">\n {catalog.error}\n </p>\n ) : null}\n <DraftModelCatalogPanel\n models={catalog.models}\n loading={catalog.loading}\n selectedName={draftSpec.model.name}\n query={modelQuery}\n onQueryChange={setModelQuery}\n listboxId={modelListId}\n showHeading={false}\n onSelect={nextModel => {\n setDraftSpec({\n ...draftSpec,\n model: modelPatchWithReasoningEffort(\n nextModel.name,\n draftSpec.model.params,\n nextModel.properties.reasoningEfforts,\n ),\n });\n }}\n />\n </>\n ) : (\n <>\n {catalog.error ? (\n <p role=\"alert\" className=\"text-failure-bg px-3 pt-3 text-sm\">\n {catalog.error}\n </p>\n ) : null}\n <div className=\"border-b border-border p-3\">\n <label className=\"relative block\">\n <Icon\n name=\"search\"\n className=\"text-text-secondary pointer-events-none absolute top-1/2 left-2 size-3.5 -translate-y-1/2\"\n />\n <input\n value={search}\n onChange={event => setSearch(event.target.value)}\n placeholder={editor === 'mcp' ? 'Search connectors' : 'Search skills'}\n className={auiInputClass('h-8 pr-2 pl-7')}\n autoFocus\n />\n </label>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto p-2\">\n {editor === 'mcp'\n ? filteredConnectors.map(connector => {\n const checked = mcpMounts.some(item => item.id === connector.id);\n const needsConnect = isUnauthenticatedDcrConnector(connector);\n return (\n <CatalogRow\n key={connector.id}\n title={connector.name}\n description={connector.description}\n checked={checked}\n disabled={!connector.authenticated && !checked}\n action={\n needsConnect ? (\n <ConnectorConnectButton connector={connector} onConnected={catalog.refreshConnectors} />\n ) : undefined\n }\n onToggle={() => {\n if (!connector.authenticated && !checked) return;\n const next = checked\n ? mcpMounts.filter(item => item.id !== connector.id)\n : [\n ...mcpMounts,\n {\n id: connector.id,\n name: connector.name,\n value: { id: connector.id, name: connector.name },\n },\n ];\n setDraftSpec({\n ...draftSpec,\n mcpServers: next.map(item => item.value),\n });\n }}\n />\n );\n })\n : filteredSkills.map(skill => {\n const checked = skillMounts.some(item => item.id === skill.id);\n const disabledSkill = serverCapabilities?.skill.enabled !== true;\n return (\n <CatalogRow\n key={skill.id}\n title={skill.name}\n description={skill.description}\n checked={checked}\n disabled={disabledSkill && !checked}\n onToggle={() => {\n if (disabledSkill && !checked) return;\n const next = checked\n ? skillMounts.filter(item => item.id !== skill.id)\n : [\n ...skillMounts,\n {\n id: skill.id,\n name: skill.name,\n value: { id: skill.id, name: skill.name },\n },\n ];\n setDraftSpec({\n ...draftSpec,\n skills: next.map(item => item.value),\n });\n }}\n />\n );\n })}\n </div>\n </>\n )}\n <div className=\"bg-card-bg sticky bottom-0 z-10 flex shrink-0 justify-end border-t border-border px-5 py-4\">\n <button\n type=\"button\"\n className={auiButtonClass({ variant: 'default' })}\n onClick={() => {\n setEditor(null);\n setSearch('');\n setModelQuery('');\n }}\n >\n Continue\n </button>\n </div>\n </div>\n ) : null}\n </CenteredModal>\n </>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n SaveAgentButton: typeof SaveAgentButton;\n }\n}\n","import { forwardRef, type ComponentProps } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\n\nexport type ScrollToBottomButtonProps = Omit<ComponentProps<'button'>, 'children' | 'aria-label'>;\n\nexport const ScrollToBottomButton = forwardRef<HTMLSpanElement, ScrollToBottomButtonProps>(\n ({ className, disabled, ...rest }, ref) => {\n if (disabled) return null;\n return (\n <span ref={ref} className={cn('absolute -top-14 z-10 inline-flex self-center')}>\n <button\n type=\"button\"\n aria-label=\"Scroll to bottom\"\n title=\"Scroll to bottom\"\n disabled={disabled}\n className={auiButtonClass({\n variant: 'ghost',\n size: 'icon',\n className: cn(\n 'aui-thread-scroll-to-bottom rounded-full border border-border bg-primary-bg text-text-primary shadow-sm hover:bg-ghost-button-hover hover:text-text-primary p-3',\n className,\n ),\n })}\n {...rest}\n >\n <Icon name=\"arrow-down\" />\n </button>\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","'use client';\n\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\n\n/** Empty main pane when AgentLibrary has no agent selected yet. */\nexport function SelectAgentEmptyState() {\n const shell = useOptionalShellMode();\n const AgentsLibraryButton = useSlot('AgentsLibraryButton');\n\n if (shell?.mode.status !== 'idle') return null;\n\n return (\n <div\n className=\"flex h-full min-h-0 w-full flex-col items-center justify-center gap-4 px-6\"\n data-slot=\"aui_select-agent-empty\"\n >\n <p className=\"text-text-secondary max-w-sm text-center text-sm\">Select an agent to start chatting</p>\n <AgentsLibraryButton className=\"w-56 max-w-full\" />\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n SelectAgentEmptyState: typeof SelectAgentEmptyState;\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\n/**\n * Optional host chrome (e.g. logout) to the right of theme + settings in {@link ShellActions}.\n * Default is empty; override via `overrides.ShellActionsActionSlot`.\n * Layouts keep {@link ShellActions} mounted while Settings is open so host state is not remounted.\n */\nexport function ShellActionsActionSlot(): ReactNode {\n return null;\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ShellActionsActionSlot: typeof ShellActionsActionSlot;\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","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { AgentStepRow, type AgentStepStatus } from './agent-chat/AgentStepRow.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 renderInstruction?: (instruction: string) => ReactNode;\n dataTestPrefix?: string;\n className?: string;\n};\n\nexport function SubAgentCard({\n agentName,\n instruction,\n stepCount: _stepCount,\n status,\n expanded,\n onToggle,\n durationText,\n children,\n renderInstruction,\n dataTestPrefix,\n className,\n}: SubAgentCardProps) {\n const Markdown = useSlot('Markdown');\n\n const agentStatus: AgentStepStatus = status === 'running' ? 'running' : status === 'success' ? 'success' : 'error';\n\n const instructionContent =\n instruction.trim().length > 0 ? (\n renderInstruction ? (\n renderInstruction(instruction)\n ) : (\n <Markdown content={instruction} className=\"flex flex-col font-sans text-sm text-text-secondary\" />\n )\n ) : null;\n\n return (\n <div\n className={cn('aui-sub-agent-card min-w-0', className)}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-sub-agent-card` : undefined}\n >\n <AgentStepRow\n icon=\"agent-2\"\n iconVariant=\"primary\"\n title={`Sub-agent: ${agentName}`}\n expandable\n expanded={expanded}\n onToggle={onToggle}\n status={agentStatus}\n statusText={durationText}\n dataTestPrefix={dataTestPrefix}\n >\n {instructionContent != null && (\n <div className=\"mb-3 flex flex-col gap-2 rounded-md border border-border p-2\">\n <h4 className=\"text-sm font-semibold text-text-primary\">Instructions</h4>\n <div\n className=\"text-sm text-text-secondary\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-instructions` : undefined}\n >\n {instructionContent}\n </div>\n </div>\n )}\n\n {children != null && (\n <div\n className=\"flex min-w-0 flex-col gap-3\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-nested-content` : undefined}\n >\n {children}\n </div>\n )}\n </AgentStepRow>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n SubAgentCard: typeof SubAgentCard;\n }\n}\n","'use client';\n\nimport {\n Children,\n cloneElement,\n isValidElement,\n memo,\n useCallback,\n useState,\n type ComponentType,\n type ReactNode,\n} from 'react';\nimport { Prism as PrismHighlighter } from 'react-syntax-highlighter';\nimport { oneDark, oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useOptionalContentClassNames } from '../theme/ThemeProvider.js';\nimport { cn } from './lib/cn.js';\n\nexport type SyntaxHighlighterProps = {\n code: string;\n language?: string;\n darkTheme?: boolean;\n className?: string;\n showLineNumbers?: boolean;\n};\n\nfunction applyLineNumberClassName(children: ReactNode, className: string | undefined): ReactNode {\n if (!className) return children;\n\n return Children.map(children, child => {\n if (\n !isValidElement<{ className?: string }>(child) ||\n !child.props.className?.includes('react-syntax-highlighter-line-number')\n ) {\n return child;\n }\n\n return cloneElement(child, { className: cn(child.props.className, className) });\n });\n}\n\nfunction SyntaxHighlighterImpl({ code, language, darkTheme, className, showLineNumbers }: SyntaxHighlighterProps) {\n const classNames = useOptionalContentClassNames();\n const style = darkTheme ? oneDark : oneLight;\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(() => {\n void navigator.clipboard.writeText(code).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }, [code]);\n\n return (\n <div\n className={cn(\n 'aui-syntax-highlighter relative my-2 max-w-full min-w-0 overflow-x-auto rounded-md',\n classNames.syntaxHighlighter?.root,\n className,\n )}\n >\n <button\n type=\"button\"\n onClick={handleCopy}\n title={copied ? 'Copied!' : 'Copy'}\n aria-label={copied ? 'Copied!' : 'Copy'}\n className={cn(\n 'absolute top-2 right-2 z-10 flex cursor-pointer items-center justify-center rounded p-1.5 text-xs transition-colors',\n 'bg-primary-bg/80 text-text-secondary hover:bg-ghost-button-hover hover:text-text-primary',\n )}\n >\n <Icon name={copied ? 'check' : 'copy'} size=\"0.875em\" />\n </button>\n <PrismHighlighter\n language={language}\n style={style}\n customStyle={{ margin: 0, maxWidth: '100%', whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}\n wrapLongLines\n showLineNumbers={showLineNumbers}\n PreTag={({ children, className: preClass, ...rest }) => (\n <pre\n {...rest}\n className={cn(\n 'max-w-full overflow-x-auto whitespace-pre-wrap break-words',\n classNames.syntaxHighlighter?.pre,\n preClass,\n )}\n >\n {children}\n </pre>\n )}\n CodeTag={({ children, className: codeClass, ...rest }) => (\n <code\n {...rest}\n className={cn('whitespace-pre-wrap break-words', classNames.syntaxHighlighter?.code, codeClass)}\n >\n {applyLineNumberClassName(children, classNames.syntaxHighlighter?.lineNumber)}\n </code>\n )}\n >\n {code}\n </PrismHighlighter>\n </div>\n );\n}\n\nexport const SyntaxHighlighter: ComponentType<SyntaxHighlighterProps> = memo(SyntaxHighlighterImpl);\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n SyntaxHighlighter: typeof SyntaxHighlighter;\n }\n}\n","export default {\n \"code[class*=\\\"language-\\\"]\": {\n \"background\": \"hsl(220, 13%, 18%)\",\n \"color\": \"hsl(220, 14%, 71%)\",\n \"textShadow\": \"0 1px rgba(0, 0, 0, 0.3)\",\n \"fontFamily\": \"\\\"Fira Code\\\", \\\"Fira Mono\\\", Menlo, Consolas, \\\"DejaVu Sans Mono\\\", monospace\",\n \"direction\": \"ltr\",\n \"textAlign\": \"left\",\n \"whiteSpace\": \"pre\",\n \"wordSpacing\": \"normal\",\n \"wordBreak\": \"normal\",\n \"lineHeight\": \"1.5\",\n \"MozTabSize\": \"2\",\n \"OTabSize\": \"2\",\n \"tabSize\": \"2\",\n \"WebkitHyphens\": \"none\",\n \"MozHyphens\": \"none\",\n \"msHyphens\": \"none\",\n \"hyphens\": \"none\"\n },\n \"pre[class*=\\\"language-\\\"]\": {\n \"background\": \"hsl(220, 13%, 18%)\",\n \"color\": \"hsl(220, 14%, 71%)\",\n \"textShadow\": \"0 1px rgba(0, 0, 0, 0.3)\",\n \"fontFamily\": \"\\\"Fira Code\\\", \\\"Fira Mono\\\", Menlo, Consolas, \\\"DejaVu Sans Mono\\\", monospace\",\n \"direction\": \"ltr\",\n \"textAlign\": \"left\",\n \"whiteSpace\": \"pre\",\n \"wordSpacing\": \"normal\",\n \"wordBreak\": \"normal\",\n \"lineHeight\": \"1.5\",\n \"MozTabSize\": \"2\",\n \"OTabSize\": \"2\",\n \"tabSize\": \"2\",\n \"WebkitHyphens\": \"none\",\n \"MozHyphens\": \"none\",\n \"msHyphens\": \"none\",\n \"hyphens\": \"none\",\n \"padding\": \"1em\",\n \"margin\": \"0.5em 0\",\n \"overflow\": \"auto\",\n \"borderRadius\": \"0.3em\"\n },\n \"code[class*=\\\"language-\\\"]::-moz-selection\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"inherit\",\n \"textShadow\": \"none\"\n },\n \"code[class*=\\\"language-\\\"] *::-moz-selection\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"inherit\",\n \"textShadow\": \"none\"\n },\n \"pre[class*=\\\"language-\\\"] *::-moz-selection\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"inherit\",\n \"textShadow\": \"none\"\n },\n \"code[class*=\\\"language-\\\"]::selection\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"inherit\",\n \"textShadow\": \"none\"\n },\n \"code[class*=\\\"language-\\\"] *::selection\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"inherit\",\n \"textShadow\": \"none\"\n },\n \"pre[class*=\\\"language-\\\"] *::selection\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"inherit\",\n \"textShadow\": \"none\"\n },\n \":not(pre) > code[class*=\\\"language-\\\"]\": {\n \"padding\": \"0.2em 0.3em\",\n \"borderRadius\": \"0.3em\",\n \"whiteSpace\": \"normal\"\n },\n \"comment\": {\n \"color\": \"hsl(220, 10%, 40%)\",\n \"fontStyle\": \"italic\"\n },\n \"prolog\": {\n \"color\": \"hsl(220, 10%, 40%)\"\n },\n \"cdata\": {\n \"color\": \"hsl(220, 10%, 40%)\"\n },\n \"doctype\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"punctuation\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"entity\": {\n \"color\": \"hsl(220, 14%, 71%)\",\n \"cursor\": \"help\"\n },\n \"attr-name\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \"class-name\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \"boolean\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \"constant\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \"number\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \"atrule\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \"keyword\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \"property\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \"tag\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \"symbol\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \"deleted\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \"important\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \"selector\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"string\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"char\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"builtin\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"inserted\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"regex\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"attr-value\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"attr-value > .token.punctuation\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"variable\": {\n \"color\": \"hsl(207, 82%, 66%)\"\n },\n \"operator\": {\n \"color\": \"hsl(207, 82%, 66%)\"\n },\n \"function\": {\n \"color\": \"hsl(207, 82%, 66%)\"\n },\n \"url\": {\n \"color\": \"hsl(187, 47%, 55%)\"\n },\n \"attr-value > .token.punctuation.attr-equals\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"special-attr > .token.attr-value > .token.value.css\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \".language-css .token.selector\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \".language-css .token.property\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \".language-css .token.function\": {\n \"color\": \"hsl(187, 47%, 55%)\"\n },\n \".language-css .token.url > .token.function\": {\n \"color\": \"hsl(187, 47%, 55%)\"\n },\n \".language-css .token.url > .token.string.url\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \".language-css .token.important\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \".language-css .token.atrule .token.rule\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \".language-javascript .token.operator\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \".language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation\": {\n \"color\": \"hsl(5, 48%, 51%)\"\n },\n \".language-json .token.operator\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \".language-json .token.null.keyword\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \".language-markdown .token.url\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \".language-markdown .token.url > .token.operator\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \".language-markdown .token.url-reference.url > .token.string\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \".language-markdown .token.url > .token.content\": {\n \"color\": \"hsl(207, 82%, 66%)\"\n },\n \".language-markdown .token.url > .token.url\": {\n \"color\": \"hsl(187, 47%, 55%)\"\n },\n \".language-markdown .token.url-reference.url\": {\n \"color\": \"hsl(187, 47%, 55%)\"\n },\n \".language-markdown .token.blockquote.punctuation\": {\n \"color\": \"hsl(220, 10%, 40%)\",\n \"fontStyle\": \"italic\"\n },\n \".language-markdown .token.hr.punctuation\": {\n \"color\": \"hsl(220, 10%, 40%)\",\n \"fontStyle\": \"italic\"\n },\n \".language-markdown .token.code-snippet\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \".language-markdown .token.bold .token.content\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \".language-markdown .token.italic .token.content\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \".language-markdown .token.strike .token.content\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \".language-markdown .token.strike .token.punctuation\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \".language-markdown .token.list.punctuation\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \".language-markdown .token.title.important > .token.punctuation\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \"bold\": {\n \"fontWeight\": \"bold\"\n },\n \"italic\": {\n \"fontStyle\": \"italic\"\n },\n \"namespace\": {\n \"Opacity\": \"0.8\"\n },\n \"token.tab:not(:empty):before\": {\n \"color\": \"hsla(220, 14%, 71%, 0.15)\",\n \"textShadow\": \"none\"\n },\n \"token.cr:before\": {\n \"color\": \"hsla(220, 14%, 71%, 0.15)\",\n \"textShadow\": \"none\"\n },\n \"token.lf:before\": {\n \"color\": \"hsla(220, 14%, 71%, 0.15)\",\n \"textShadow\": \"none\"\n },\n \"token.space:before\": {\n \"color\": \"hsla(220, 14%, 71%, 0.15)\",\n \"textShadow\": \"none\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item\": {\n \"marginRight\": \"0.4em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button\": {\n \"background\": \"hsl(220, 13%, 26%)\",\n \"color\": \"hsl(220, 9%, 55%)\",\n \"padding\": \"0.1em 0.4em\",\n \"borderRadius\": \"0.3em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a\": {\n \"background\": \"hsl(220, 13%, 26%)\",\n \"color\": \"hsl(220, 9%, 55%)\",\n \"padding\": \"0.1em 0.4em\",\n \"borderRadius\": \"0.3em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span\": {\n \"background\": \"hsl(220, 13%, 26%)\",\n \"color\": \"hsl(220, 9%, 55%)\",\n \"padding\": \"0.1em 0.4em\",\n \"borderRadius\": \"0.3em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \".line-highlight.line-highlight\": {\n \"background\": \"hsla(220, 100%, 80%, 0.04)\"\n },\n \".line-highlight.line-highlight:before\": {\n \"background\": \"hsl(220, 13%, 26%)\",\n \"color\": \"hsl(220, 14%, 71%)\",\n \"padding\": \"0.1em 0.6em\",\n \"borderRadius\": \"0.3em\",\n \"boxShadow\": \"0 2px 0 0 rgba(0, 0, 0, 0.2)\"\n },\n \".line-highlight.line-highlight[data-end]:after\": {\n \"background\": \"hsl(220, 13%, 26%)\",\n \"color\": \"hsl(220, 14%, 71%)\",\n \"padding\": \"0.1em 0.6em\",\n \"borderRadius\": \"0.3em\",\n \"boxShadow\": \"0 2px 0 0 rgba(0, 0, 0, 0.2)\"\n },\n \"pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before\": {\n \"backgroundColor\": \"hsla(220, 100%, 80%, 0.04)\"\n },\n \".line-numbers.line-numbers .line-numbers-rows\": {\n \"borderRightColor\": \"hsla(220, 14%, 71%, 0.15)\"\n },\n \".command-line .command-line-prompt\": {\n \"borderRightColor\": \"hsla(220, 14%, 71%, 0.15)\"\n },\n \".line-numbers .line-numbers-rows > span:before\": {\n \"color\": \"hsl(220, 14%, 45%)\"\n },\n \".command-line .command-line-prompt > span:before\": {\n \"color\": \"hsl(220, 14%, 45%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-1\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-5\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-9\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-2\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-6\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-10\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-3\": {\n \"color\": \"hsl(207, 82%, 66%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-7\": {\n \"color\": \"hsl(207, 82%, 66%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-11\": {\n \"color\": \"hsl(207, 82%, 66%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-4\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-8\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-12\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(353, 100%, 66%, 0.15)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(353, 100%, 66%, 0.15)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(137, 100%, 55%, 0.15)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(137, 100%, 55%, 0.15)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \".prism-previewer.prism-previewer:before\": {\n \"borderColor\": \"hsl(224, 13%, 17%)\"\n },\n \".prism-previewer-gradient.prism-previewer-gradient div\": {\n \"borderColor\": \"hsl(224, 13%, 17%)\",\n \"borderRadius\": \"0.3em\"\n },\n \".prism-previewer-color.prism-previewer-color:before\": {\n \"borderRadius\": \"0.3em\"\n },\n \".prism-previewer-easing.prism-previewer-easing:before\": {\n \"borderRadius\": \"0.3em\"\n },\n \".prism-previewer.prism-previewer:after\": {\n \"borderTopColor\": \"hsl(224, 13%, 17%)\"\n },\n \".prism-previewer-flipped.prism-previewer-flipped.after\": {\n \"borderBottomColor\": \"hsl(224, 13%, 17%)\"\n },\n \".prism-previewer-angle.prism-previewer-angle:before\": {\n \"background\": \"hsl(219, 13%, 22%)\"\n },\n \".prism-previewer-time.prism-previewer-time:before\": {\n \"background\": \"hsl(219, 13%, 22%)\"\n },\n \".prism-previewer-easing.prism-previewer-easing\": {\n \"background\": \"hsl(219, 13%, 22%)\"\n },\n \".prism-previewer-angle.prism-previewer-angle circle\": {\n \"stroke\": \"hsl(220, 14%, 71%)\",\n \"strokeOpacity\": \"1\"\n },\n \".prism-previewer-time.prism-previewer-time circle\": {\n \"stroke\": \"hsl(220, 14%, 71%)\",\n \"strokeOpacity\": \"1\"\n },\n \".prism-previewer-easing.prism-previewer-easing circle\": {\n \"stroke\": \"hsl(220, 14%, 71%)\",\n \"fill\": \"transparent\"\n },\n \".prism-previewer-easing.prism-previewer-easing path\": {\n \"stroke\": \"hsl(220, 14%, 71%)\"\n },\n \".prism-previewer-easing.prism-previewer-easing line\": {\n \"stroke\": \"hsl(220, 14%, 71%)\"\n }\n};","export default {\n \"code[class*=\\\"language-\\\"]\": {\n \"background\": \"hsl(230, 1%, 98%)\",\n \"color\": \"hsl(230, 8%, 24%)\",\n \"fontFamily\": \"\\\"Fira Code\\\", \\\"Fira Mono\\\", Menlo, Consolas, \\\"DejaVu Sans Mono\\\", monospace\",\n \"direction\": \"ltr\",\n \"textAlign\": \"left\",\n \"whiteSpace\": \"pre\",\n \"wordSpacing\": \"normal\",\n \"wordBreak\": \"normal\",\n \"lineHeight\": \"1.5\",\n \"MozTabSize\": \"2\",\n \"OTabSize\": \"2\",\n \"tabSize\": \"2\",\n \"WebkitHyphens\": \"none\",\n \"MozHyphens\": \"none\",\n \"msHyphens\": \"none\",\n \"hyphens\": \"none\"\n },\n \"pre[class*=\\\"language-\\\"]\": {\n \"background\": \"hsl(230, 1%, 98%)\",\n \"color\": \"hsl(230, 8%, 24%)\",\n \"fontFamily\": \"\\\"Fira Code\\\", \\\"Fira Mono\\\", Menlo, Consolas, \\\"DejaVu Sans Mono\\\", monospace\",\n \"direction\": \"ltr\",\n \"textAlign\": \"left\",\n \"whiteSpace\": \"pre\",\n \"wordSpacing\": \"normal\",\n \"wordBreak\": \"normal\",\n \"lineHeight\": \"1.5\",\n \"MozTabSize\": \"2\",\n \"OTabSize\": \"2\",\n \"tabSize\": \"2\",\n \"WebkitHyphens\": \"none\",\n \"MozHyphens\": \"none\",\n \"msHyphens\": \"none\",\n \"hyphens\": \"none\",\n \"padding\": \"1em\",\n \"margin\": \"0.5em 0\",\n \"overflow\": \"auto\",\n \"borderRadius\": \"0.3em\"\n },\n \"code[class*=\\\"language-\\\"]::-moz-selection\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"inherit\"\n },\n \"code[class*=\\\"language-\\\"] *::-moz-selection\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"inherit\"\n },\n \"pre[class*=\\\"language-\\\"] *::-moz-selection\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"inherit\"\n },\n \"code[class*=\\\"language-\\\"]::selection\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"inherit\"\n },\n \"code[class*=\\\"language-\\\"] *::selection\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"inherit\"\n },\n \"pre[class*=\\\"language-\\\"] *::selection\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"inherit\"\n },\n \":not(pre) > code[class*=\\\"language-\\\"]\": {\n \"padding\": \"0.2em 0.3em\",\n \"borderRadius\": \"0.3em\",\n \"whiteSpace\": \"normal\"\n },\n \"comment\": {\n \"color\": \"hsl(230, 4%, 64%)\",\n \"fontStyle\": \"italic\"\n },\n \"prolog\": {\n \"color\": \"hsl(230, 4%, 64%)\"\n },\n \"cdata\": {\n \"color\": \"hsl(230, 4%, 64%)\"\n },\n \"doctype\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"punctuation\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"entity\": {\n \"color\": \"hsl(230, 8%, 24%)\",\n \"cursor\": \"help\"\n },\n \"attr-name\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \"class-name\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \"boolean\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \"constant\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \"number\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \"atrule\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \"keyword\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \"property\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \"tag\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \"symbol\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \"deleted\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \"important\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \"selector\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"string\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"char\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"builtin\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"inserted\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"regex\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"attr-value\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"attr-value > .token.punctuation\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"variable\": {\n \"color\": \"hsl(221, 87%, 60%)\"\n },\n \"operator\": {\n \"color\": \"hsl(221, 87%, 60%)\"\n },\n \"function\": {\n \"color\": \"hsl(221, 87%, 60%)\"\n },\n \"url\": {\n \"color\": \"hsl(198, 99%, 37%)\"\n },\n \"attr-value > .token.punctuation.attr-equals\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"special-attr > .token.attr-value > .token.value.css\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \".language-css .token.selector\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \".language-css .token.property\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \".language-css .token.function\": {\n \"color\": \"hsl(198, 99%, 37%)\"\n },\n \".language-css .token.url > .token.function\": {\n \"color\": \"hsl(198, 99%, 37%)\"\n },\n \".language-css .token.url > .token.string.url\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \".language-css .token.important\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \".language-css .token.atrule .token.rule\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \".language-javascript .token.operator\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \".language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation\": {\n \"color\": \"hsl(344, 84%, 43%)\"\n },\n \".language-json .token.operator\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \".language-json .token.null.keyword\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \".language-markdown .token.url\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \".language-markdown .token.url > .token.operator\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \".language-markdown .token.url-reference.url > .token.string\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \".language-markdown .token.url > .token.content\": {\n \"color\": \"hsl(221, 87%, 60%)\"\n },\n \".language-markdown .token.url > .token.url\": {\n \"color\": \"hsl(198, 99%, 37%)\"\n },\n \".language-markdown .token.url-reference.url\": {\n \"color\": \"hsl(198, 99%, 37%)\"\n },\n \".language-markdown .token.blockquote.punctuation\": {\n \"color\": \"hsl(230, 4%, 64%)\",\n \"fontStyle\": \"italic\"\n },\n \".language-markdown .token.hr.punctuation\": {\n \"color\": \"hsl(230, 4%, 64%)\",\n \"fontStyle\": \"italic\"\n },\n \".language-markdown .token.code-snippet\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \".language-markdown .token.bold .token.content\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \".language-markdown .token.italic .token.content\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \".language-markdown .token.strike .token.content\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \".language-markdown .token.strike .token.punctuation\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \".language-markdown .token.list.punctuation\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \".language-markdown .token.title.important > .token.punctuation\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \"bold\": {\n \"fontWeight\": \"bold\"\n },\n \"italic\": {\n \"fontStyle\": \"italic\"\n },\n \"namespace\": {\n \"Opacity\": \"0.8\"\n },\n \"token.tab:not(:empty):before\": {\n \"color\": \"hsla(230, 8%, 24%, 0.2)\"\n },\n \"token.cr:before\": {\n \"color\": \"hsla(230, 8%, 24%, 0.2)\"\n },\n \"token.lf:before\": {\n \"color\": \"hsla(230, 8%, 24%, 0.2)\"\n },\n \"token.space:before\": {\n \"color\": \"hsla(230, 8%, 24%, 0.2)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item\": {\n \"marginRight\": \"0.4em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"hsl(230, 6%, 44%)\",\n \"padding\": \"0.1em 0.4em\",\n \"borderRadius\": \"0.3em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"hsl(230, 6%, 44%)\",\n \"padding\": \"0.1em 0.4em\",\n \"borderRadius\": \"0.3em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"hsl(230, 6%, 44%)\",\n \"padding\": \"0.1em 0.4em\",\n \"borderRadius\": \"0.3em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover\": {\n \"background\": \"hsl(230, 1%, 78%)\",\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus\": {\n \"background\": \"hsl(230, 1%, 78%)\",\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover\": {\n \"background\": \"hsl(230, 1%, 78%)\",\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus\": {\n \"background\": \"hsl(230, 1%, 78%)\",\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover\": {\n \"background\": \"hsl(230, 1%, 78%)\",\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus\": {\n \"background\": \"hsl(230, 1%, 78%)\",\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \".line-highlight.line-highlight\": {\n \"background\": \"hsla(230, 8%, 24%, 0.05)\"\n },\n \".line-highlight.line-highlight:before\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"hsl(230, 8%, 24%)\",\n \"padding\": \"0.1em 0.6em\",\n \"borderRadius\": \"0.3em\",\n \"boxShadow\": \"0 2px 0 0 rgba(0, 0, 0, 0.2)\"\n },\n \".line-highlight.line-highlight[data-end]:after\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"hsl(230, 8%, 24%)\",\n \"padding\": \"0.1em 0.6em\",\n \"borderRadius\": \"0.3em\",\n \"boxShadow\": \"0 2px 0 0 rgba(0, 0, 0, 0.2)\"\n },\n \"pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before\": {\n \"backgroundColor\": \"hsla(230, 8%, 24%, 0.05)\"\n },\n \".line-numbers.line-numbers .line-numbers-rows\": {\n \"borderRightColor\": \"hsla(230, 8%, 24%, 0.2)\"\n },\n \".command-line .command-line-prompt\": {\n \"borderRightColor\": \"hsla(230, 8%, 24%, 0.2)\"\n },\n \".line-numbers .line-numbers-rows > span:before\": {\n \"color\": \"hsl(230, 1%, 62%)\"\n },\n \".command-line .command-line-prompt > span:before\": {\n \"color\": \"hsl(230, 1%, 62%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-1\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-5\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-9\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-2\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-6\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-10\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-3\": {\n \"color\": \"hsl(221, 87%, 60%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-7\": {\n \"color\": \"hsl(221, 87%, 60%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-11\": {\n \"color\": \"hsl(221, 87%, 60%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-4\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-8\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-12\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(353, 100%, 66%, 0.15)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(353, 100%, 66%, 0.15)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(137, 100%, 55%, 0.15)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(137, 100%, 55%, 0.15)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \".prism-previewer.prism-previewer:before\": {\n \"borderColor\": \"hsl(0, 0, 95%)\"\n },\n \".prism-previewer-gradient.prism-previewer-gradient div\": {\n \"borderColor\": \"hsl(0, 0, 95%)\",\n \"borderRadius\": \"0.3em\"\n },\n \".prism-previewer-color.prism-previewer-color:before\": {\n \"borderRadius\": \"0.3em\"\n },\n \".prism-previewer-easing.prism-previewer-easing:before\": {\n \"borderRadius\": \"0.3em\"\n },\n \".prism-previewer.prism-previewer:after\": {\n \"borderTopColor\": \"hsl(0, 0, 95%)\"\n },\n \".prism-previewer-flipped.prism-previewer-flipped.after\": {\n \"borderBottomColor\": \"hsl(0, 0, 95%)\"\n },\n \".prism-previewer-angle.prism-previewer-angle:before\": {\n \"background\": \"hsl(0, 0%, 100%)\"\n },\n \".prism-previewer-time.prism-previewer-time:before\": {\n \"background\": \"hsl(0, 0%, 100%)\"\n },\n \".prism-previewer-easing.prism-previewer-easing\": {\n \"background\": \"hsl(0, 0%, 100%)\"\n },\n \".prism-previewer-angle.prism-previewer-angle circle\": {\n \"stroke\": \"hsl(230, 8%, 24%)\",\n \"strokeOpacity\": \"1\"\n },\n \".prism-previewer-time.prism-previewer-time circle\": {\n \"stroke\": \"hsl(230, 8%, 24%)\",\n \"strokeOpacity\": \"1\"\n },\n \".prism-previewer-easing.prism-previewer-easing circle\": {\n \"stroke\": \"hsl(230, 8%, 24%)\",\n \"fill\": \"transparent\"\n },\n \".prism-previewer-easing.prism-previewer-easing path\": {\n \"stroke\": \"hsl(230, 8%, 24%)\"\n },\n \".prism-previewer-easing.prism-previewer-easing line\": {\n \"stroke\": \"hsl(230, 8%, 24%)\"\n }\n};","import type { ComponentProps, ReactNode } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\nimport { Skeleton } from './primitives/Skeleton.js';\n\nexport type ThreadListNewButtonProps = ComponentProps<'button'>;\n\nexport function ThreadListNewButton({ className, children, style, ...rest }: ThreadListNewButtonProps) {\n return (\n <button\n type=\"button\"\n aria-label=\"Start new chat\"\n style={{ borderRadius: 'var(--thread-list-item-radius, 0.5rem)', ...style }}\n className={auiButtonClass({\n variant: 'ghost',\n className: cn(\n '!justify-start h-8 px-2.5 text-sm font-medium text-text-primary shadow-none hover:bg-ghost-button-hover hover:text-ghost-button-text',\n className,\n ),\n })}\n {...rest}\n >\n {children ?? (\n <>\n <Icon name=\"square-pen\" />\n New Chat\n </>\n )}\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\n className={cn('text-text-secondary flex flex-1 items-center justify-center px-4 text-center text-sm', className)}\n >\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 h-full min-h-0 flex-1 flex-col overflow-hidden', className)}>\n <div className=\"shrink-0 border-b border-border px-2 py-2\">{header}</div>\n {/* History section owns overflow scroll so infinite-load IO can root on it. */}\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden p-2\">{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","/** Compact relative age for sidebar session rows (e.g. 30m, 22h, 1d). */\nexport function formatRelativeShort(date: Date, now: Date = new Date()): string {\n const diffMs = Math.max(0, now.getTime() - date.getTime());\n const minutes = Math.floor(diffMs / 60_000);\n if (minutes < 60) return `${Math.max(1, minutes)}m`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h`;\n const days = Math.floor(hours / 24);\n if (days < 7) return `${days}d`;\n const weeks = Math.floor(days / 7);\n if (weeks < 5) return `${weeks}w`;\n const months = Math.floor(days / 30);\n if (months < 12) return `${months}mo`;\n return `${Math.floor(days / 365)}y`;\n}\n\n/**\n * Indices into `threadIds` ordered newest-first by `lastMessageAt`.\n * Stabilizes UI when assistant-ui appends a switched-to thread at the end.\n * Missing `lastMessageAt` (empty local \"New Chat\") sorts as newest so it stays on top.\n */\nexport function threadListIndicesByRecency({\n threadIds,\n threadItems,\n}: {\n threadIds: readonly string[];\n threadItems: readonly { id: string; remoteId?: string | null; lastMessageAt?: Date | null }[];\n}): number[] {\n const timeByKey = new Map<string, number>();\n for (const item of threadItems) {\n // Empty / not-yet-messaged threads have no timestamp; treat as newest.\n const t = item.lastMessageAt?.getTime() ?? Number.POSITIVE_INFINITY;\n timeByKey.set(item.id, t);\n if (item.remoteId != null) timeByKey.set(item.remoteId, t);\n }\n return threadIds\n .map((id, index) => ({ index, t: timeByKey.get(id) ?? 0 }))\n .sort((a, b) => b.t - a.t || a.index - b.index)\n .map(row => row.index);\n}\n\nexport function readThreadAgentName(custom: unknown): string | undefined {\n if (custom == null || typeof custom !== 'object') return undefined;\n if (!('agentName' in custom)) return undefined;\n const value = Reflect.get(custom, 'agentName');\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\n/** Session mutability from thread-list custom (runtime ≥ isMutable stamp). */\nexport function readThreadIsMutable(custom: unknown): boolean | undefined {\n if (custom == null || typeof custom !== 'object') return undefined;\n if (!('isMutable' in custom)) return undefined;\n const value = Reflect.get(custom, 'isMutable');\n return typeof value === 'boolean' ? value : undefined;\n}\n\n/**\n * Prefer `custom.isMutable`; fall back to agentName presence for older runtimes\n * that only stamped `agentName` on named rows.\n */\nexport function threadListItemIsMutable(custom: unknown): boolean {\n return readThreadIsMutable(custom) ?? readThreadAgentName(custom) == null;\n}\n\n/**\n * Fast-path `switchToThread` for mutable history rows only when Edit chrome is\n * safe to keep. Blank drafts (no agentName/agentId) may share one shell; an\n * Edit-bound shell must remount via `openHistorySession` when leaving its\n * pending session so Update does not keep the previous agentName over another\n * draft's runtime spec.\n */\nexport function canReuseMutableShell({\n sessionMutable,\n shellMutable,\n shellAgentName,\n shellAgentId,\n remoteId,\n pendingSessionId,\n}: {\n sessionMutable: boolean;\n shellMutable: boolean;\n shellAgentName?: string;\n shellAgentId?: string;\n remoteId?: string | null;\n pendingSessionId?: string;\n}): boolean {\n if (!sessionMutable || !shellMutable) return false;\n const editBound = (shellAgentName != null && shellAgentName !== '') || (shellAgentId != null && shellAgentId !== '');\n if (!editBound) return true;\n return remoteId != null && remoteId === pendingSessionId;\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\nimport { formatRelativeShort } from './lib/threadListMeta.js';\n\nexport type ThreadListRowProps = {\n title: string;\n active: boolean;\n onSelect: () => void;\n /** Named-agent label under the title (from session.agentName). */\n agentName?: string;\n /** Shown as compact relative time on the right. */\n lastMessageAt?: Date;\n /** Overflow actions (e.g. delete menu) — rendered as a sibling of the title button. */\n actions?: ReactNode;\n className?: string;\n};\n\nexport function ThreadListRow({\n title,\n active,\n onSelect,\n agentName,\n lastMessageAt,\n actions,\n className,\n}: ThreadListRowProps) {\n const relative = lastMessageAt != null ? formatRelativeShort(lastMessageAt) : undefined;\n const hasTrailing = relative != null || actions != null;\n\n return (\n <div\n data-slot=\"aui_thread-list-item\"\n data-active={active || undefined}\n className={cn(\n 'group flex min-w-0 items-center gap-0.5 rounded-md transition-colors',\n active\n ? 'bg-dropdown-selected-item-bg text-dropdown-selected-item-text'\n : 'text-text-secondary hover:bg-ghost-button-hover hover:text-text-primary',\n className,\n )}\n >\n <button\n type=\"button\"\n onClick={onSelect}\n style={{ borderRadius: 'var(--thread-list-item-radius, 0.5rem)' }}\n className={auiButtonClass({\n variant: 'ghost',\n className: cn(\n '!justify-start h-auto min-h-8 min-w-0 flex-1 overflow-hidden rounded-md px-2.5 py-1.5 text-left font-normal shadow-none',\n 'bg-transparent hover:bg-transparent hover:text-inherit',\n active ? 'text-dropdown-selected-item-text' : 'text-inherit',\n ),\n })}\n >\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-medium text-text-primary\">{title}</span>\n {agentName != null ? (\n <span className=\"mt-0.5 flex min-w-0 items-center gap-1 text-xs text-text-secondary\">\n <Icon name=\"robot\" className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{agentName}</span>\n </span>\n ) : null}\n </span>\n </button>\n {hasTrailing ? (\n <div className=\"relative mr-1 flex size-7 shrink-0 items-center justify-center\">\n {relative != null ? (\n <span\n data-slot=\"aui_thread-list-item-age\"\n className={cn(\n 'pointer-events-none text-xs text-text-secondary transition-opacity',\n // md: variants survive host Tailwind tree-shaking (same set as AgentsLibrary).\n // Bare group-hover:opacity-* is dropped from the example CSS bundle.\n actions != null &&\n 'opacity-0 md:opacity-100 md:group-hover:opacity-0 md:group-focus-within:opacity-0 md:group-has-[[data-state=open]]:opacity-0',\n )}\n >\n {relative}\n </span>\n ) : null}\n {actions != null ? (\n <div\n data-slot=\"aui_thread-list-item-actions\"\n className={cn(\n 'absolute inset-0 flex items-center justify-center transition-opacity',\n relative != null &&\n 'md:opacity-0 md:group-hover:opacity-100 md:group-focus-within:opacity-100 md:group-has-[[data-state=open]]:opacity-100',\n )}\n >\n {actions}\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ThreadListRow: typeof ThreadListRow;\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-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-primary-bg @container flex h-full min-h-0 w-full min-w-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(\n 'relative flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto overscroll-contain',\n className,\n )}\n {...rest}\n >\n <div\n className={cn(\n 'mx-auto flex w-full min-w-0 max-w-(--thread-max-width) flex-col px-3 pt-3 sm:px-4 sm:pt-4',\n isEmpty ? 'min-h-full justify-center pb-4' : 'pb-32',\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-primary-bg relative mx-auto flex w-full min-w-0 max-w-(--thread-max-width) shrink-0 flex-col gap-3 px-3 pb-[max(1rem,env(safe-area-inset-bottom,0px))] sm:gap-4 sm:px-4 md:pb-[max(1.5rem,env(safe-area-inset-bottom,0px))]',\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","'use client';\n\nimport { useCallback, useState, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\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 variant?: 'error' | 'success';\n className?: string;\n};\n\nexport function Toast({ title, description, open, onOpenChange, variant = 'error', className }: ToastProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n const text = `${title}\\n${description}`;\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n } catch {\n // clipboard can fail in insecure contexts; toast still usable\n }\n }, [title, description]);\n\n if (!open) return null;\n\n return (\n <div\n role=\"alert\"\n className={cn(\n 'font-sans-flex bg-primary-bg text-text-primary pointer-events-auto flex w-full items-start gap-3 rounded-xl border border-border px-4 py-4 shadow-md dark:bg-card-bg',\n 'animate-in fade-in-0 slide-in-from-bottom-4',\n className,\n )}\n >\n <Icon\n name={variant === 'success' ? 'circle-check' : 'circle-exclamation'}\n size=\"1.25em\"\n className={cn('shrink-0', variant === 'success' ? 'text-success-bg' : 'text-failure-bg')}\n />\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-start justify-between gap-2\">\n <div\n className={cn(\n 'text-sm leading-none font-semibold',\n variant === 'success' ? 'text-success-bg' : 'text-failure-bg',\n )}\n >\n {title}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {variant === 'error' ? (\n <button\n type=\"button\"\n aria-label=\"Copy\"\n title=\"Copy\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={handleCopy}\n >\n <Icon name={copied ? 'check' : 'clone'} />\n </button>\n ) : null}\n <button\n type=\"button\"\n aria-label=\"Close\"\n title=\"Close\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={() => onOpenChange(false)}\n >\n <Icon name=\"xmark\" />\n </button>\n </div>\n </div>\n {description ? (\n <div className=\"text-text-secondary mt-1 max-h-24 overflow-y-auto text-sm leading-snug break-words whitespace-pre-wrap\">\n {description}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport type ToastStackProps = {\n children: ReactNode;\n duration?: number;\n};\n\nconst openToastStack = (element: HTMLDivElement | null): void => {\n if (element === null) return;\n try {\n if (typeof element.showPopover !== 'function') return;\n if (element.matches(':popover-open')) element.hidePopover();\n element.showPopover();\n } catch {\n // Popover APIs can reject during attachment; the fixed stack remains usable.\n }\n};\n\nexport function ToastStack({ children, duration: _duration = Number.POSITIVE_INFINITY }: ToastStackProps) {\n const stack = (\n <div\n ref={openToastStack}\n popover=\"manual\"\n className=\"pointer-events-none fixed inset-auto right-4 bottom-4 z-50 m-0 flex w-[calc(100vw-2rem)] max-w-md flex-col-reverse gap-2 overflow-visible bg-transparent\"\n >\n {children}\n </div>\n );\n\n if (typeof document === 'undefined') return stack;\n const dialogs = document.querySelectorAll<HTMLDialogElement>('dialog[open]');\n const activeDialog = dialogs.item(dialogs.length - 1);\n return activeDialog === null ? stack : createPortal(stack, activeDialog);\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n Toast: typeof Toast;\n ToastStack: typeof ToastStack;\n }\n}\n","'use client';\n\nimport { Icon } from '../icons/Icon.js';\nimport { StepIconBox } from './agent-chat/StepIconBox.js';\nimport { cn } from './lib/cn.js';\nimport { Button } from './primitives/Button.js';\n\nexport type ApprovalOption = {\n id: string;\n label: string;\n variant?: 'primary' | 'secondary' | 'destructive';\n requiresReason?: boolean;\n grants?: readonly string[];\n confirm?: {\n title?: string;\n description?: string;\n };\n};\n\nexport type ToolApprovalBarProps = {\n toolName: string;\n approveOptions?: ApprovalOption[];\n denyOptions?: ApprovalOption[];\n onSelect: (optionId: string, reason?: string) => void;\n status?: {\n type: 'approved' | 'denied';\n label?: string;\n reason?: string;\n };\n selectedDenyOption?: ApprovalOption;\n denialReason?: string;\n showReasonError?: boolean;\n onDenyOptionChange?: (optionId: string | null) => void;\n onDenialReasonChange?: (reason: string) => void;\n onReasonSubmit?: () => void;\n disabled?: boolean;\n readOnly?: boolean;\n showLineBelow?: boolean;\n dataTestPrefix?: string;\n className?: string;\n};\n\nconst DEFAULT_APPROVE_OPTIONS: ApprovalOption[] = [{ id: 'approve', label: 'Approve', variant: 'primary' }];\n\nconst DEFAULT_DENY_OPTIONS: ApprovalOption[] = [\n { id: 'deny', label: 'Deny', variant: 'secondary', requiresReason: true },\n];\n\nfunction optionVariant(option: ApprovalOption): 'default' | 'secondary' | 'destructive' {\n if (option.variant === 'destructive') return 'destructive';\n if (option.variant === 'secondary') return 'secondary';\n return 'default';\n}\n\nexport function ToolApprovalBar({\n toolName,\n approveOptions = DEFAULT_APPROVE_OPTIONS,\n denyOptions = DEFAULT_DENY_OPTIONS,\n onSelect,\n status,\n selectedDenyOption,\n denialReason = '',\n showReasonError = false,\n onDenyOptionChange,\n onDenialReasonChange,\n onReasonSubmit,\n disabled = false,\n readOnly = false,\n showLineBelow = false,\n dataTestPrefix,\n className,\n}: ToolApprovalBarProps) {\n const isDecided = !!status;\n const isApproved = status?.type === 'approved';\n const isDenied = status?.type === 'denied';\n const interactionsLocked = disabled && !isDecided;\n\n const headingText = isApproved ? 'Tool Approved' : isDenied ? 'Tool Approval Denied' : 'Tool Approval Required for';\n\n return (\n <div\n className={cn('aui-tool-approval-bar', className)}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-approval` : undefined}\n >\n <div className=\"flex gap-2\">\n <div className={cn('flex shrink-0 flex-col items-center', !showLineBelow && 'pb-1')}>\n <div className=\"min-h-[0.75rem] w-px flex-1 bg-border\" />\n <StepIconBox icon=\"wrench\" variant=\"muted\" iconSize=\"0.875em\" className=\"my-1\" />\n {showLineBelow && <div className=\"min-h-[0.75rem] w-px flex-1 bg-border\" />}\n </div>\n\n <div className=\"mt-2 flex flex-1 items-center justify-between\">\n <div className=\"flex w-full items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"inline-flex flex-wrap items-center gap-1 font-sans text-xs font-medium leading-4 text-text-primary\">\n {headingText}\n <span className=\"rounded bg-secondary-bg px-1.5 py-0.5 text-xs text-text-secondary\">{toolName}</span>\n </span>\n {isDecided && (\n <Icon\n name={isDenied ? 'circle-xmark' : 'circle-check'}\n size=\"0.875em\"\n className={cn('shrink-0', isDenied ? 'text-failure-bg' : 'text-success-bg')}\n />\n )}\n </div>\n {!isDecided && !readOnly && selectedDenyOption && (\n <Button\n size=\"sm\"\n variant=\"secondary\"\n disabled={interactionsLocked}\n onClick={() => onDenyOptionChange?.(null)}\n >\n Back\n </Button>\n )}\n </div>\n {!isDecided && !readOnly && !selectedDenyOption && (\n <div className=\"flex gap-2\">\n {approveOptions.map(option => (\n <Button\n key={option.id}\n size=\"sm\"\n variant={optionVariant(option)}\n disabled={interactionsLocked}\n onClick={() => onSelect(option.id)}\n >\n {option.variant === 'primary' && <Icon name=\"check\" size=\"0.75em\" className=\"mr-1\" />}\n {option.label}\n </Button>\n ))}\n {denyOptions.map(option => (\n <Button\n key={option.id}\n size=\"sm\"\n variant={optionVariant(option)}\n disabled={interactionsLocked}\n onClick={() => {\n if (option.requiresReason) {\n onDenyOptionChange?.(option.id);\n } else {\n onSelect(option.id);\n }\n }}\n >\n {option.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {!isDecided && !readOnly && selectedDenyOption && (\n <div className=\"flex flex-col gap-1 pl-8 pt-3\">\n {(selectedDenyOption.confirm?.title || selectedDenyOption.confirm?.description) && (\n <div className=\"flex flex-col gap-0.5\">\n {selectedDenyOption.confirm.title && (\n <span className=\"text-xs font-medium text-text-primary\">{selectedDenyOption.confirm.title}</span>\n )}\n {selectedDenyOption.confirm.description && (\n <span className=\"text-xs text-text-secondary\">{selectedDenyOption.confirm.description}</span>\n )}\n </div>\n )}\n {selectedDenyOption.grants && selectedDenyOption.grants.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-1\">\n <span className=\"text-xs text-text-secondary\">Grants:</span>\n {selectedDenyOption.grants.map(grant => (\n <span key={grant} className=\"rounded bg-secondary-bg px-1.5 py-0.5 text-xs text-text-secondary\">\n {grant}\n </span>\n ))}\n </div>\n )}\n <div className=\"flex items-center gap-2\">\n <input\n placeholder=\"Enter reason for denial\"\n aria-label=\"Reason for denial\"\n aria-invalid={showReasonError || undefined}\n aria-describedby={showReasonError ? 'aui-denial-reason-error' : undefined}\n value={denialReason}\n disabled={interactionsLocked}\n onChange={e => onDenialReasonChange?.(e.target.value)}\n className={cn(\n 'h-8 flex-1 rounded border border-input-border bg-primary-bg px-2 text-xs text-text-primary',\n 'focus:outline-none focus:ring-1 focus:ring-focus-ring',\n )}\n />\n <Button size=\"sm\" disabled={interactionsLocked} onClick={onReasonSubmit}>\n Submit\n </Button>\n </div>\n {showReasonError && (\n <span id=\"aui-denial-reason-error\" className=\"text-xs text-failure-bg\" role=\"alert\">\n Reason is required\n </span>\n )}\n </div>\n )}\n\n {isDecided && status?.reason && (\n <div className=\"pl-8 pt-2\">\n <span className=\"text-xs text-text-secondary\">Reason: {status.reason}</span>\n </div>\n )}\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ToolApprovalBar: typeof ToolApprovalBar;\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { AgentStepRow, type AgentStepStatus } from './agent-chat/AgentStepRow.js';\nimport { cn } from './lib/cn.js';\n\nexport type ToolCallStatus = 'running' | 'success' | 'error';\n\nexport type ToolCallCardProps = {\n icon?: string;\n iconClassName?: string;\n iconVariant?: 'primary' | 'muted';\n toolName: string;\n expanded?: boolean;\n onToggle?: () => void;\n awaiting?: boolean;\n awaitingText?: string;\n status?: ToolCallStatus;\n exitCode?: number | null;\n showExpandChevron?: boolean;\n showResponseLine?: boolean;\n responseIcon?: ReactNode;\n approvalSlot?: ReactNode;\n requestSlot?: ReactNode;\n responseSlot?: ReactNode;\n highlightCard?: boolean;\n className?: string;\n mcpServerName?: string;\n dataTestPrefix?: string;\n};\n\nconst DEFAULT_AWAITING_TEXT = 'Awaiting Response...';\n\nexport function ToolCallCard({\n icon = 'mcp-server',\n iconClassName,\n iconVariant,\n toolName,\n expanded = false,\n onToggle,\n awaiting = false,\n awaitingText = DEFAULT_AWAITING_TEXT,\n status: explicitStatus,\n exitCode,\n showExpandChevron = true,\n showResponseLine = false,\n approvalSlot,\n requestSlot,\n responseSlot,\n highlightCard = false,\n className,\n mcpServerName: _mcpServerName,\n dataTestPrefix,\n}: ToolCallCardProps) {\n const hasApproval = !!approvalSlot;\n const hasRequest = !!requestSlot;\n const hasResponse = !!responseSlot;\n const showConnector = hasApproval || hasRequest || hasResponse;\n const isExpandable = showExpandChevron && (hasRequest || hasResponse);\n\n let derivedStatus: AgentStepStatus = 'idle';\n if (explicitStatus) derivedStatus = explicitStatus;\n else if (awaiting) derivedStatus = 'running';\n else if (exitCode === 0) derivedStatus = 'success';\n else if (exitCode != null) derivedStatus = 'error';\n else if (showResponseLine) derivedStatus = 'success';\n\n const statusText = awaiting ? awaitingText : undefined;\n const isCubeIcon = icon === 'cube';\n const derivedIconVariant = iconVariant || (isCubeIcon ? 'primary' : 'muted');\n const derivedIconSize = isCubeIcon ? '0.75em' : undefined;\n\n return (\n <div\n className={cn(\n 'aui-tool-call-card flex min-w-0 flex-col',\n highlightCard ? 'rounded-md p-1 -mx-1' : 'mx-0 mt-2 p-0',\n className,\n )}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-tool-call-card` : undefined}\n >\n <AgentStepRow\n icon={icon}\n iconClassName={iconClassName}\n iconVariant={derivedIconVariant}\n iconSize={derivedIconSize}\n title={toolName}\n expandable={isExpandable}\n expanded={expanded}\n onToggle={onToggle}\n status={derivedStatus}\n statusText={statusText}\n showConnector={showConnector}\n showContentConnector={true}\n showPersistentContentConnector={!hasApproval}\n dataTestPrefix={dataTestPrefix ? `${dataTestPrefix}-header` : undefined}\n persistentChildren={\n <>\n {approvalSlot}\n {expanded && showResponseLine && responseSlot && (\n <div data-testid={dataTestPrefix ? `${dataTestPrefix}-response` : undefined}>{responseSlot}</div>\n )}\n </>\n }\n >\n {requestSlot && (\n <div className=\"py-2 pt-0\" data-testid={dataTestPrefix ? `${dataTestPrefix}-request` : undefined}>\n {requestSlot}\n </div>\n )}\n </AgentStepRow>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ToolCallCard: typeof ToolCallCard;\n }\n}\n","'use client';\n\nimport { useState } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { cn } from './lib/cn.js';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from './primitives/Dialog.js';\nimport { IconButton } from './primitives/IconButton.js';\n\nexport type ToolCallContentBlockProps = {\n title: string;\n content: string;\n isJson?: boolean;\n copyValue?: string;\n maxHeight?: string;\n resizable?: boolean;\n fullscreen?: boolean;\n onFullscreenChange?: (fullscreen: boolean) => void;\n contentHeightRem?: number;\n contentRef?: (node: HTMLDivElement | null) => void;\n onContentHeightChange?: (height: number) => void;\n dataTestPrefix?: string;\n className?: string;\n};\n\nfunction JsonEditor({\n content,\n height,\n autoHeight = false,\n maxHeight,\n onAutoHeightChange,\n}: {\n content: string;\n height?: string | number;\n autoHeight?: boolean;\n maxHeight?: string | number;\n onAutoHeightChange?: (height: number) => void;\n}) {\n const MonacoEditorCore = useSlot('MonacoEditorCore');\n\n return (\n <MonacoEditorCore\n language=\"json\"\n value={content}\n height={height}\n autoHeight={autoHeight}\n maxHeight={maxHeight}\n onAutoHeightChange={onAutoHeightChange}\n options={{\n readOnly: true,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n wordWrap: 'on',\n lineNumbers: 'on',\n folding: true,\n fontSize: 12,\n }}\n className=\"border-0!\"\n />\n );\n}\n\nexport function ToolCallContentBlock({\n title,\n content,\n isJson = true,\n copyValue,\n maxHeight = '10.5rem',\n resizable = false,\n fullscreen = false,\n onFullscreenChange,\n contentHeightRem,\n contentRef,\n onContentHeightChange,\n dataTestPrefix,\n className,\n}: ToolCallContentBlockProps) {\n const Markdown = useSlot('Markdown');\n const [copied, setCopied] = useState(false);\n\n const handleCopy = () => {\n const val = copyValue ?? content;\n void navigator.clipboard.writeText(val).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n });\n };\n\n const hasMeasuredResizableHeight = resizable && contentHeightRem !== undefined;\n const bodyStyle = resizable\n ? {\n ...(hasMeasuredResizableHeight ? { height: `${Math.min(contentHeightRem, 10)}rem` } : {}),\n resize: 'vertical' as const,\n padding: '0.25rem',\n }\n : {\n padding: '0.25rem',\n };\n\n return (\n <div\n className={cn(\n 'aui-tool-call-content-block flex flex-col font-sans text-xs font-medium leading-4 text-text-primary',\n className,\n )}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-content-block` : 'tfy-tool-call-content-block'}\n data-content={content}\n >\n <div className=\"flex items-center justify-between rounded-t-lg border border-primary-button-bg/30 bg-primary-button-bg/10 px-3 py-1\">\n <div className=\"font-sans text-xs font-medium text-primary-button-bg\">{title}</div>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"inline-flex size-6 cursor-pointer items-center justify-center rounded text-text-secondary transition-colors hover:text-text-primary\"\n aria-label=\"Copy\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-copy` : undefined}\n >\n <Icon name={copied ? 'check' : 'clone'} size={14} />\n </button>\n <button\n type=\"button\"\n onClick={() => onFullscreenChange?.(true)}\n className=\"inline-flex size-6 cursor-pointer items-center justify-center rounded text-text-secondary transition-colors hover:text-text-primary\"\n aria-label=\"Expand\"\n >\n <Icon name=\"expand-alt\" size={14} />\n </button>\n </div>\n </div>\n <div\n ref={resizable ? contentRef : undefined}\n className={cn(\n 'relative min-h-7.5 rounded-b-lg border border-t-0 border-border bg-primary-bg',\n resizable && 'overflow-hidden',\n )}\n style={bodyStyle}\n >\n {isJson ? (\n <JsonEditor\n content={content}\n height={hasMeasuredResizableHeight ? '100%' : undefined}\n autoHeight={!hasMeasuredResizableHeight}\n maxHeight={maxHeight}\n onAutoHeightChange={resizable ? onContentHeightChange : undefined}\n />\n ) : (\n <div\n className={cn('overflow-y-auto', hasMeasuredResizableHeight && 'h-full')}\n style={!hasMeasuredResizableHeight && maxHeight ? { maxHeight } : undefined}\n >\n <Markdown content={content} className=\"text-xs text-text-secondary\" />\n </div>\n )}\n </div>\n\n {fullscreen && (\n <Dialog open onOpenChange={open => onFullscreenChange?.(open)}>\n <DialogContent className=\"flex h-[80vh] max-w-4xl flex-col\">\n <DialogHeader className=\"flex flex-row items-center justify-between gap-2\">\n <DialogTitle>{title}</DialogTitle>\n <IconButton variant=\"ghost\" onClick={() => onFullscreenChange?.(false)} aria-label=\"Minimize\">\n <Icon name=\"compress\" size=\"0.875em\" />\n </IconButton>\n </DialogHeader>\n <div className=\"min-h-0 flex-1\">\n <JsonEditor content={content} height=\"100%\" />\n </div>\n </DialogContent>\n </Dialog>\n )}\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ToolCallContentBlock: typeof ToolCallContentBlock;\n }\n}\n","import type { ReactNode } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\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 Accordion = useSlot('Accordion');\n const AccordionSummary = useSlot('AccordionSummary');\n const AccordionDetails = useSlot('AccordionDetails');\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-text-secondary hover:text-text-primary flex origin-left items-center gap-2 py-1.5 text-sm transition-[color,scale] active:scale-[0.98]\">\n {active && <Icon name=\"loader\" className=\"size-3 shrink-0 animate-spin [animation-duration:0.6s]\" />}\n <span className=\"text-xs font-medium\">{label}</span>\n <Icon\n name=\"chevron-down\"\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-text-primary\">{children}</div>\n </AccordionDetails>\n </Accordion>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ToolGroupCard: typeof ToolGroupCard;\n }\n}\n","'use client';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { cn } from './lib/cn.js';\nimport { IconButton } from './primitives/IconButton.js';\n\nexport type UserMessageActionBarProps = {\n isCopied: boolean;\n editDisabled?: boolean;\n createdAt?: Date | string;\n onCopy: () => void;\n onEdit: () => void;\n onRetry: () => void;\n className?: string;\n};\n\nconst actionBtnClass = 'h-6 w-6 text-text-secondary hover:text-text-primary [&_svg]:size-3.5';\n\nexport function UserMessageActionBar({\n isCopied,\n editDisabled,\n createdAt,\n onCopy,\n onEdit,\n onRetry,\n className,\n}: UserMessageActionBarProps) {\n const MessageTimestamp = useSlot('MessageTimestamp');\n\n return (\n <div className={cn('aui-user-action-bar-root animate-in fade-in flex items-center gap-1 duration-200', className)}>\n <MessageTimestamp createdAt={createdAt} className=\"mr-1\" />\n <IconButton\n aria-label=\"Try again\"\n tooltip=\"Try again\"\n variant=\"ghost\"\n className={actionBtnClass}\n onClick={onRetry}\n >\n <Icon name=\"rotate-right\" size=\"0.875em\" />\n </IconButton>\n <IconButton\n aria-label=\"Edit\"\n tooltip=\"Edit\"\n variant=\"ghost\"\n className={actionBtnClass}\n disabled={editDisabled}\n onClick={onEdit}\n >\n <Icon name=\"pencil\" size=\"0.875em\" />\n </IconButton>\n <IconButton aria-label=\"Copy\" tooltip=\"Copy\" variant=\"ghost\" className={actionBtnClass} onClick={onCopy}>\n <Icon name={isCopied ? 'check' : 'clone'} size=\"0.875em\" />\n </IconButton>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n UserMessageActionBar: typeof UserMessageActionBar;\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\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('group/user-message flex w-full min-w-0 flex-col items-end gap-1', className)}\n >\n {attachments}\n <div\n data-slot=\"aui_user-message-content\"\n style={{ borderRadius: 'var(--composer-radius, 1.5rem)' }}\n className=\"max-w-[min(80%,100%)] min-w-0 bg-user-message-bg px-3 py-2 text-sm text-user-message-text whitespace-pre-wrap break-words sm:px-4 sm:py-2.5\"\n >\n {text}\n </div>\n {editAction && (\n <div className=\"flex max-w-[min(80%,100%)] justify-end opacity-0 transition-opacity group-hover/user-message:opacity-100 focus-within:opacity-100\">\n {editAction}\n </div>\n )}\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';\n\nimport { cn } from './lib/cn.js';\n\nexport type UserMessageEditProps = {\n /** Timestamp node rendered beside the \"User\" label. */\n timestamp?: ReactNode;\n /** Read-only attachments shown above the input while editing. */\n attachments?: ReactNode;\n input: ReactNode;\n footer: ReactNode;\n className?: string;\n};\n\nexport const UserMessageEdit = forwardRef<HTMLDivElement, UserMessageEditProps & HTMLAttributes<HTMLDivElement>>(\n function UserMessageEdit({ timestamp, attachments, input, footer, className, ...rest }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"aui_user-message-edit\"\n className={cn('flex flex-col gap-2 w-full', className)}\n {...rest}\n >\n {(timestamp || attachments) && (\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <span className=\"font-medium text-text-primary\">User</span>\n {timestamp}\n </div>\n )}\n {attachments && <div className=\"flex flex-wrap gap-1\">{attachments}</div>}\n <div className=\"w-full\">{input}</div>\n <div>{footer}</div>\n </div>\n );\n },\n);\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n UserMessageEdit: typeof UserMessageEdit;\n }\n}\n","import type { ReactNode } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { useOptionalThemePreset } from '../theme/ThemeProvider.js';\nimport { cn } from './lib/cn.js';\n\nexport type WelcomeScreenProps = {\n heading?: string;\n icon?: ReactNode;\n className?: string;\n};\n\nexport function WelcomeScreen({ heading = 'How can I help you today?', icon, className }: WelcomeScreenProps) {\n const preset = useOptionalThemePreset();\n const BrandLogo = useSlot('BrandLogo');\n const resolvedIcon =\n icon !== undefined ? (\n icon\n ) : preset === 'chatgpt' ? null : preset === 'claude' ? (\n <Icon name=\"welcome-sparkle\" className=\"size-5 fill-current text-primary-button-bg\" />\n ) : (\n <BrandLogo className={'size-10'} />\n );\n\n return (\n <div\n data-preset={preset}\n className={cn(\n 'aui-thread-welcome-root relative isolate mb-6 flex flex-col items-center px-4 text-center text-text-primary',\n preset === 'gemini' && 'py-8',\n className,\n )}\n >\n {preset === 'gemini' && (\n <div\n aria-hidden\n className=\"pointer-events-none absolute left-1/2 top-1/2 -z-10 size-64 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-button-bg/20 blur-3xl motion-safe:animate-pulse motion-reduce:animate-none [animation-duration:4s]\"\n />\n )}\n {resolvedIcon !== null && (\n <div\n className={cn(\n 'fill-mode-both mb-4 motion-safe:animate-in motion-safe:fade-in motion-safe:slide-in-from-bottom-1 motion-reduce:animate-none',\n preset === 'claude' ? 'duration-300' : 'duration-200',\n )}\n >\n {resolvedIcon}\n </div>\n )}\n <h1\n className={cn(\n 'aui-thread-welcome-message-inner fill-mode-both text-2xl motion-safe:animate-in motion-safe:fade-in motion-safe:slide-in-from-bottom-1 motion-reduce:animate-none',\n preset === 'trueforge' ? 'font-semibold' : 'font-normal',\n resolvedIcon !== null && 'delay-75',\n preset === 'gemini' ? 'text-[1.75rem] leading-tight duration-300' : 'duration-200',\n )}\n >\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 { Accordion, AccordionDetails, AccordionSummary } from '../atoms/primitives/Accordion.js';\n\nimport { AgentStepsCard } from '../atoms/adapters/AgentStepsCardAdapter.js';\nimport { AskUserPrompt } from '../atoms/adapters/AskUserPromptAdapter.js';\nimport { McpAuthPrompt } from '../atoms/adapters/McpAuthPromptAdapter.js';\nimport { ReasoningCard } from '../atoms/adapters/ReasoningCardAdapter.js';\nimport { ResumeUnavailable } from '../atoms/ResumeUnavailable.js';\n\nimport { AgentsLibrary } from '../atoms/AgentsLibrary.js';\nimport { AgentsLibraryButton } from '../atoms/AgentsLibraryButton.js';\nimport { AssistantMessageBubble } from '../atoms/AssistantMessageBubble.js';\nimport { AttachmentCard } from '../atoms/AttachmentCard.js';\nimport { AttachmentPickerButton } from '../atoms/AttachmentPickerButton.js';\nimport { AttachmentPreviewDialog } from '../atoms/AttachmentPreviewDialog.js';\nimport { ChatFileDownload } from '../atoms/ChatFileDownload.js';\nimport { ClearChatButton } from '../atoms/ClearChatButton.js';\nimport { CodeEditor } from '../atoms/CodeEditor.js';\nimport { ComposerLeftSection, ComposerRightSection, ComposerSendButton } from '../atoms/ComposerSections.js';\nimport { ComposerShell } from '../atoms/ComposerShell.js';\nimport { DraftComposerLeftSection, DraftComposerRightSection } from '../atoms/draft/DraftComposerSections.js';\nimport { DraftCompositeSelector } from '../atoms/draft/DraftCompositeSelector.js';\nimport { DraftModelSelector } from '../atoms/draft/DraftModelSelector.js';\nimport { HistoryLoader } from '../atoms/HistoryLoader.js';\nimport { Markdown } from '../atoms/Markdown.js';\nimport { MessageActionBar } from '../atoms/MessageActionBar.js';\nimport { MessageErrorBanner } from '../atoms/MessageErrorBanner.js';\nimport { MessageIndicator } from '../atoms/MessageIndicator.js';\nimport { MessageTimestamp } from '../atoms/MessageTimestamp.js';\nimport { MonacoEditorCore } from '../atoms/MonacoEditorCore.js';\nimport { OpenUiFenceBlock } from '../atoms/OpenUiFenceBlock.js';\nimport { SandboxArtifactDownload } from '../atoms/SandboxArtifactDownload.js';\nimport { SandboxToolCallCard } from '../atoms/SandboxToolCallCard.js';\nimport { SaveAgentButton } from '../atoms/SaveAgentButton.js';\nimport { ScrollToBottomButton } from '../atoms/ScrollToBottomButton.js';\nimport { SelectAgentEmptyState } from '../atoms/SelectAgentEmptyState.js';\nimport { ShellActionsActionSlot } from '../atoms/ShellActionsActionSlot.js';\nimport { MessageListSkeleton } from '../atoms/Skeletons.js';\nimport { SubAgentCard } from '../atoms/SubAgentCard.js';\nimport { SyntaxHighlighter } from '../atoms/SyntaxHighlighter.js';\nimport {\n ThreadListEmptyState,\n ThreadListNewButton,\n ThreadListRowSkeleton,\n ThreadListShell,\n} from '../atoms/ThreadListMisc.js';\nimport { ThreadListRow } from '../atoms/ThreadListRow.js';\nimport { MessageGroup, ThreadComposerAreaShell, ThreadRootShell, ThreadViewportShell } from '../atoms/ThreadShell.js';\nimport { Toast, ToastStack } from '../atoms/Toast.js';\nimport { ToolApprovalBar } from '../atoms/ToolApprovalBar.js';\nimport { ToolCallCard } from '../atoms/ToolCallCard.js';\nimport { ToolCallContentBlock } from '../atoms/ToolCallContentBlock.js';\nimport { ToolGroupCard } from '../atoms/ToolGroupCard.js';\nimport { UserMessageActionBar } from '../atoms/UserMessageActionBar.js';\nimport { UserMessageBubble } from '../atoms/UserMessageBubble.js';\nimport { UserMessageEdit } from '../atoms/UserMessageEdit.js';\nimport { WelcomeScreen } from '../atoms/WelcomeScreen.js';\nimport { BrandLogo } from './brand.js';\nimport type { AtomSlots } from './SlotsProvider.js';\n\n// ponytail: primitives stay CSS/token-styled (not slots) — see docs/customization.md.\n// import { Button } from \"../atoms/primitives/Button.js\";\n// import { Dialog, Modal } from \"../atoms/primitives/Dialog.js\";\n// import { IconButton } from \"../atoms/primitives/IconButton.js\";\n// import { Skeleton } from \"../atoms/primitives/Skeleton.js\";\n// import { LightTooltip } from \"../atoms/primitives/Tooltip.js\";\n// import { Avatar, AvatarFallback, AvatarImage } from \"../atoms/primitives/Avatar.js\";\n\n/** Default slot implementations. Feature atoms + chrome; primitives via theme/CSS. */\nexport const defaultSlots = {\n Accordion,\n AccordionSummary,\n AccordionDetails,\n BrandLogo,\n ComposerShell,\n ComposerLeftSection,\n ComposerRightSection,\n ComposerSendButton,\n DraftComposerLeftSection,\n DraftComposerRightSection,\n DraftCompositeSelector,\n DraftModelSelector,\n AssistantMessageBubble,\n UserMessageBubble,\n UserMessageEdit,\n UserMessageActionBar,\n MessageActionBar,\n MessageErrorBanner,\n MessageIndicator,\n MessageTimestamp,\n Markdown,\n SyntaxHighlighter,\n OpenUiFenceBlock,\n SandboxArtifactDownload,\n ChatFileDownload,\n MonacoEditorCore,\n CodeEditor,\n WelcomeScreen,\n ToolCallCard,\n ToolCallContentBlock,\n ToolApprovalBar,\n ToolGroupCard,\n SubAgentCard,\n SandboxToolCallCard,\n AgentStepsCard,\n ReasoningCard,\n AskUserPrompt,\n McpAuthPrompt,\n ResumeUnavailable,\n AttachmentCard,\n AttachmentPreviewDialog,\n AttachmentPickerButton,\n ScrollToBottomButton,\n ThreadListRow,\n ThreadListNewButton,\n AgentsLibrary,\n AgentsLibraryButton,\n SaveAgentButton,\n SelectAgentEmptyState,\n ClearChatButton,\n ThreadListRowSkeleton,\n ThreadListEmptyState,\n ThreadListShell,\n HistoryLoader,\n MessageListSkeleton,\n ThreadRootShell,\n ThreadViewportShell,\n ThreadComposerAreaShell,\n MessageGroup,\n Toast,\n ToastStack,\n ShellActionsActionSlot,\n} satisfies AtomSlots;\n"],"mappings":"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","names":["useContext","jsx","jsx","React","jsx","React","createContext","useContext","useMemo","React","jsx","React","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","jsx","Markdown","jsx","jsxs","useEffect","useState","useEffect","useState","useState","useState","useEffect","useEffect","useId","useRef","useState","jsx","jsxs","useRef","useId","useEffect","jsx","jsxs","jsx","Fragment","jsx","jsxs","useState","useEffect","useEffect","useState","Fragment","jsx","jsxs","AgentsLibrary","useState","useEffect","jsx","jsxs","useState","jsx","useState","jsx","jsxs","jsx","jsxs","jsx","useState","React","jsx","React","Fragment","jsx","jsxs","useState","useState","jsx","jsxs","useState","jsx","jsxs","useCallback","useState","jsx","jsxs","MonacoEditorCore","useState","useCallback","jsx","jsxs","jsx","jsxs","ComposerLeftSection","ComposerRightSection","ComposerSendButton","useTrueFoundryAgentSpec","useEffect","useId","useRef","useState","useEffect","useRef","jsx","jsxs","useRef","useEffect","Fragment","jsx","jsxs","useTrueFoundryAgentSpec","useState","useRef","useId","useEffect","jsx","jsxs","DraftCompositeSelector","DraftModelSelector","useTrueFoundryAgentSpec","useTrueFoundryUpdateAgentSpec","useCallback","useEffect","useId","useMemo","useRef","useState","useCallback","useEffect","useMemo","useRef","useState","createContext","useCallback","useContext","useState","jsx","jsxs","createContext","Toast","ToastStack","useState","useCallback","useContext","useState","useMemo","useRef","useCallback","useEffect","useLayoutEffect","useRef","useState","jsx","jsxs","useState","useRef","useLayoutEffect","jsx","sizeClasses","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","useTrueFoundryAgentSpec","useTrueFoundryUpdateAgentSpec","useState","useRef","useId","useMemo","useCallback","useEffect","useTrueFoundryAgentSpec","useTrueFoundryUpdateAgentSpec","useEffect","useId","useRef","useState","useEffect","useState","useState","useEffect","Fragment","jsx","jsxs","displayModelLabel","jsx","jsxs","useTrueFoundryAgentSpec","useTrueFoundryUpdateAgentSpec","useState","useRef","useId","useEffect","displayModelLabel","jsx","useMemo","useRef","Fragment","jsx","OpenUiFenceBlock","SandboxArtifactDownload","SyntaxHighlighter","useRef","useMemo","jsx","jsxs","MessageTimestamp","jsx","jsx","jsx","useEffect","useRef","useState","jsx","useRef","useState","useEffect","useMemo","jsx","ChatFileDownload","useMemo","Fragment","jsx","jsxs","MonacoEditorCore","ToolCallCard","useTrueFoundryAgentSpec","useEffect","useId","useMemo","useRef","useState","Fragment","jsx","jsxs","useTrueFoundryAgentSpec","useRef","useId","useState","useMemo","useEffect","displayModelLabel","forwardRef","jsx","forwardRef","jsx","jsxs","AgentsLibraryButton","jsx","jsxs","jsx","jsxs","Markdown","cloneElement","isValidElement","useCallback","useState","jsx","jsxs","isValidElement","cloneElement","useState","useCallback","Fragment","jsx","jsxs","jsx","jsxs","forwardRef","jsx","forwardRef","useCallback","useState","createPortal","jsx","jsxs","useState","useCallback","createPortal","jsx","jsxs","Fragment","jsx","jsxs","useState","jsx","jsxs","MonacoEditorCore","Markdown","useState","jsx","jsxs","Accordion","AccordionSummary","AccordionDetails","jsx","jsxs","actionBtnClass","MessageTimestamp","jsx","jsxs","forwardRef","jsx","jsxs","forwardRef","UserMessageEdit","jsx","jsxs","BrandLogo","jsx","createContext","useContext","useMemo"]}