@truefoundry/trueforge-ui 0.2.3 → 0.3.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/README.md +41 -17
- package/dist/{ConnectorSettings-ODC3LVHN.js → ConnectorSettings-FXQ5B7TN.js} +5 -5
- package/dist/{DockLayout-2RWDSUKE.js → DockLayout-LBNQJZNF.js} +9 -9
- package/dist/{DrawerLayout-CZLJYMIN.js → DrawerLayout-Q6UK4VMI.js} +9 -9
- package/dist/{ModelSettings-CKQ5CVAC.js → ModelSettings-4L4LOQJA.js} +5 -5
- package/dist/OpenUiFenceBlock-6UIIAVBX.js +9 -0
- package/dist/{SandboxSettings-HSCPYUOC.js → SandboxSettings-Z4ZG6ZX4.js} +5 -5
- package/dist/{SettingsBuilder-MYWRFXRI.js → SettingsBuilder-WF7ZWKQW.js} +7 -7
- package/dist/{SidebarLayout-WVY54TGZ.js → SidebarLayout-3WZ3CVON.js} +31 -14
- package/dist/SidebarLayout-3WZ3CVON.js.map +1 -0
- package/dist/{SkillSettings-ECH6SHZ7.js → SkillSettings-3EPPC3IT.js} +5 -5
- package/dist/{TrueForgeUIWithRouter-RKZ2E7PV.js → TrueForgeUIWithRouter-NZ4FGPE4.js} +7 -7
- package/dist/{WidgetLayout-NWWB2SXI.js → WidgetLayout-3QZ357FL.js} +10 -10
- package/dist/{WidgetLayout-NWWB2SXI.js.map → WidgetLayout-3QZ357FL.js.map} +1 -1
- package/dist/chunk-36KOSC2J.js +567 -0
- package/dist/chunk-36KOSC2J.js.map +1 -0
- package/dist/{chunk-HVSUPYX2.js → chunk-3S6KHO7H.js} +311 -238
- package/dist/chunk-3S6KHO7H.js.map +1 -0
- package/dist/{chunk-TCAVLWYL.js → chunk-7L63OK3O.js} +7 -7
- package/dist/{chunk-JRRCAKEP.js → chunk-B52K63AW.js} +2 -2
- package/dist/{chunk-FXCYLEFB.js → chunk-BSIPI3KV.js} +18 -2
- package/dist/chunk-BSIPI3KV.js.map +1 -0
- package/dist/{chunk-IFLE7OMM.js → chunk-FJ5RSSMA.js} +4 -4
- package/dist/{chunk-IFLE7OMM.js.map → chunk-FJ5RSSMA.js.map} +1 -1
- package/dist/{chunk-XRTTKGKN.js → chunk-OSV3HI5M.js} +746 -680
- package/dist/chunk-OSV3HI5M.js.map +1 -0
- package/dist/{chunk-KFUBFJR5.js → chunk-WREC7D54.js} +13 -11
- package/dist/chunk-WREC7D54.js.map +1 -0
- package/dist/{chunk-OZTNBS6V.js → chunk-ZXOADNF3.js} +4 -4
- package/dist/index.d.ts +179 -121
- package/dist/index.js +17 -9
- package/dist/index.js.map +1 -1
- package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +1 -5
- package/dist/plugins/trueforge-agent-server-adapter/index.js +3 -0
- package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +6 -6
- package/dist/OpenUiFenceBlock-3EFPY4JW.js +0 -9
- package/dist/SidebarLayout-WVY54TGZ.js.map +0 -1
- package/dist/chunk-72LC2M3R.js +0 -567
- package/dist/chunk-72LC2M3R.js.map +0 -1
- package/dist/chunk-FXCYLEFB.js.map +0 -1
- package/dist/chunk-HVSUPYX2.js.map +0 -1
- package/dist/chunk-KFUBFJR5.js.map +0 -1
- package/dist/chunk-XRTTKGKN.js.map +0 -1
- /package/dist/{ConnectorSettings-ODC3LVHN.js.map → ConnectorSettings-FXQ5B7TN.js.map} +0 -0
- /package/dist/{DockLayout-2RWDSUKE.js.map → DockLayout-LBNQJZNF.js.map} +0 -0
- /package/dist/{DrawerLayout-CZLJYMIN.js.map → DrawerLayout-Q6UK4VMI.js.map} +0 -0
- /package/dist/{ModelSettings-CKQ5CVAC.js.map → ModelSettings-4L4LOQJA.js.map} +0 -0
- /package/dist/{OpenUiFenceBlock-3EFPY4JW.js.map → OpenUiFenceBlock-6UIIAVBX.js.map} +0 -0
- /package/dist/{SandboxSettings-HSCPYUOC.js.map → SandboxSettings-Z4ZG6ZX4.js.map} +0 -0
- /package/dist/{SettingsBuilder-MYWRFXRI.js.map → SettingsBuilder-WF7ZWKQW.js.map} +0 -0
- /package/dist/{SkillSettings-ECH6SHZ7.js.map → SkillSettings-3EPPC3IT.js.map} +0 -0
- /package/dist/{TrueForgeUIWithRouter-RKZ2E7PV.js.map → TrueForgeUIWithRouter-NZ4FGPE4.js.map} +0 -0
- /package/dist/{chunk-TCAVLWYL.js.map → chunk-7L63OK3O.js.map} +0 -0
- /package/dist/{chunk-JRRCAKEP.js.map → chunk-B52K63AW.js.map} +0 -0
- /package/dist/{chunk-OZTNBS6V.js.map → chunk-ZXOADNF3.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme/brand.tsx","../src/icons/trueforge-logo-dark.svg","../src/icons/trueforge-logo.svg","../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/primitives/Tooltip.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/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 { cn } from '../atoms/lib/cn.js';\nimport { Icon } from '../icons/Icon.js';\nimport TrueForgeLogoDark from '../icons/trueforge-logo-dark.svg';\nimport TrueForgeLogoLight from '../icons/trueforge-logo.svg';\nimport { ThemeContext } from './ThemeProvider.js';\nimport type { BrandConfig, BrandLogoConfig } from './types.js';\n\nconst DEFAULT_BRAND_NAME = 'TrueForge';\n\n/** Expanded / collapsed chrome choices derived from `theme.brand.mode`. */\nexport type BrandChrome = {\n expandedVariant: 'icon' | 'logo';\n collapsedVariant: 'icon';\n /** Whether to render `name` as visible text beside the mark in expanded chrome. */\n showTitle: boolean;\n};\n\n/**\n * Maps `brand.mode` to layout chrome. Layouts should not re-derive field combinations.\n */\nexport function resolveBrandChrome(brand: Partial<BrandConfig> | undefined): BrandChrome {\n switch (brand?.mode) {\n case 'logo':\n return { expandedVariant: 'logo', collapsedVariant: 'icon', showTitle: false };\n case 'icon-only':\n return { expandedVariant: 'icon', collapsedVariant: 'icon', showTitle: false };\n case 'icon-title':\n return { expandedVariant: 'icon', collapsedVariant: 'icon', showTitle: true };\n default:\n // Omit `brand` (or incomplete Partial) → default TrueForge wordmark.\n return { expandedVariant: 'logo', collapsedVariant: 'icon', showTitle: false };\n }\n}\n\n/** Mode-matched source, falling back to the other mode then the mode-agnostic `src`. */\nfunction resolveImageSrc({\n image,\n mode,\n}: {\n image: string | BrandLogoConfig;\n mode: 'light' | 'dark';\n}): string | undefined {\n if (typeof image === 'string') return image;\n const preferred = mode === 'dark' ? image.dark : image.light;\n return preferred ?? image.light ?? image.dark ?? image.src;\n}\n\n/** Configured display name, or the SDK default when no custom brand is set. */\nexport function useBrandName(): string | undefined {\n const brand = useContext(ThemeContext)?.brand;\n if (brand?.name != null) return brand.name;\n return brand?.mode == null ? DEFAULT_BRAND_NAME : undefined;\n}\n\n/**\n * The product mark resolved against the active theme mode. Compact surfaces use\n * `icon`; expanded surfaces use `logo` and fall back to `icon`.\n */\nexport function BrandLogo({ className, variant = 'icon' }: { className?: string; variant?: 'icon' | 'logo' }) {\n const theme = useContext(ThemeContext);\n const brand = theme?.brand;\n const name = useBrandName();\n const label = name ?? DEFAULT_BRAND_NAME;\n const mode = theme?.mode ?? 'light';\n const preferredImage = variant === 'logo' ? brand?.logo : brand?.icon;\n const preferredSrc = preferredImage == null ? undefined : resolveImageSrc({ image: preferredImage, mode });\n const icon = brand?.icon;\n const src = preferredSrc ?? (variant === 'logo' && icon != null ? resolveImageSrc({ image: icon, mode }) : undefined);\n\n if (src == null) {\n if (variant === 'logo') {\n const Wordmark = mode === 'dark' ? TrueForgeLogoDark : TrueForgeLogoLight;\n // svgr pins width/height to 1em; clearing both lets the viewBox aspect\n // ratio widen the wordmark to match the caller's height.\n return (\n <Wordmark\n className={cn('w-auto', className)}\n width={undefined}\n height={undefined}\n role=\"img\"\n aria-label={label}\n />\n );\n }\n return (\n <Icon name={mode === 'dark' ? 'trueforge-logomark-dark' : 'trueforge-logomark-light'} className={className} />\n );\n }\n\n const image = <img src={src} alt={label} className={className} />;\n const href = brand?.href;\n if (href == null) return image;\n\n return (\n <a href={href} aria-label={label} 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 * as React from \"react\";\nconst SvgTrueforgeLogoDark = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 737 120\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><g clipPath=\"url(#clip0_10580_645)\"><path d=\"M0 0.015625L40 20.0156V40L20 40V80.0156H40V100.016L0 120.016V0.015625Z\" fill=\"white\" /><path d=\"M120 0L80 20V40H100V80H80V100L120 120V0Z\" fill=\"white\" /><path d=\"M59.9971 39.8193C61.0556 45.6178 63.1951 50.1614 66.5771 53.5215C69.9455 56.868 74.4738 58.9678 80.2051 60.0088C74.4712 61.0714 69.9429 63.2075 66.5752 66.5752C63.1954 69.955 61.0558 74.5036 59.9971 80.2666C58.933 74.5031 56.7854 69.9547 53.4004 66.5752C50.0276 63.2078 45.4981 61.0704 39.7725 60.0078C45.4953 58.9668 50.0251 56.8676 53.3984 53.5215C56.7857 50.1616 58.9332 45.6182 59.9971 39.8193Z\" fill=\"white\" stroke=\"white\" strokeWidth={1.6} strokeLinejoin=\"round\" /></g><path d=\"M622.099 24.752C631.17 24.752 637.822 27.7322 642.056 33.6934V27.084H659.938V90.4531C659.938 99.87 656.785 107.127 650.479 112.225C644.172 117.408 636.008 120 625.986 120C614.669 120 603.784 116.76 593.33 110.28L602.66 96.1553C611.559 101.252 619.248 103.801 625.728 103.801C635.835 103.801 640.89 98.7473 640.89 88.6396V84.752C636.57 89.8491 630.306 92.3975 622.099 92.3975C613.632 92.3974 606.548 89.2442 600.846 82.9375C595.23 76.6308 592.423 68.5094 592.423 58.5742C592.423 48.6393 595.23 40.5185 600.846 34.2119C606.548 27.9052 613.632 24.752 622.099 24.752ZM292.13 69.46C292.13 76.285 295.456 79.6982 302.108 79.6982C310.229 79.6982 314.29 75.421 314.29 66.8682V27.084H333.729V94.4707H315.975V87.3438C311.914 93.564 305.391 96.6738 296.406 96.6738C288.458 96.6738 282.497 94.773 278.522 90.9717C274.635 87.1704 272.691 81.7275 272.691 74.6436V27.084H292.13V69.46ZM378.339 24.752C388.62 24.752 396.525 27.7322 402.054 33.6934C407.669 39.6545 410.478 48.0349 410.478 58.834C410.478 61.2528 410.391 63.758 410.218 66.3496H362.658C364.732 75.5937 370.693 80.2158 380.542 80.2158C384.084 80.2158 387.237 79.6109 390.002 78.4014C392.766 77.1055 396.049 74.8595 399.851 71.6631L410.478 83.8447C401.579 92.3976 391.427 96.6738 380.023 96.6738C368.965 96.6738 360.153 93.4345 353.587 86.9551C347.108 80.4757 343.868 71.836 343.868 61.0371C343.868 50.4108 346.978 41.7279 353.198 34.9893C359.419 28.1642 367.799 24.752 378.339 24.752ZM499.098 24.752C509.465 24.752 517.974 28.121 524.626 34.8594C531.278 41.5116 534.604 50.1077 534.604 60.6475C534.604 71.2738 531.278 79.9566 524.626 86.6953C517.974 93.3474 509.465 96.6738 499.098 96.6738C488.644 96.6738 480.091 93.3476 473.438 86.6953C466.786 79.9567 463.46 71.2738 463.46 60.6475C463.46 50.1077 466.786 41.5116 473.438 34.8594C480.091 28.1207 488.644 24.752 499.098 24.752ZM704.464 24.752C714.745 24.752 722.65 27.7322 728.179 33.6934C733.794 39.6545 736.603 48.0349 736.603 58.834C736.603 61.2528 736.516 63.758 736.343 66.3496H688.783C690.857 75.5937 696.818 80.2158 706.667 80.2158C710.209 80.2158 713.362 79.6109 716.127 78.4014C718.891 77.1055 722.174 74.8595 725.976 71.6631L736.603 83.8447C727.704 92.3976 717.552 96.6738 706.148 96.6738C695.09 96.6738 686.278 93.4345 679.712 86.9551C673.233 80.4757 669.993 71.836 669.993 61.0371C669.993 50.4108 673.103 41.7279 679.323 34.9893C685.544 28.1642 693.924 24.752 704.464 24.752ZM194.087 27.085H209.249V41.5996H194.087V73.0898C194.087 75.3359 194.605 76.9345 195.642 77.8848C196.678 78.7486 198.277 79.1797 200.437 79.1797C202.078 79.1797 204.626 78.8347 208.082 78.1436L210.285 93.6943C204.842 95.3358 199.702 96.1562 194.864 96.1562C187.694 96.1562 182.51 94.6013 179.313 91.4912C176.203 88.3811 174.649 83.4137 174.648 76.5889V41.5996H162.855V27.085H174.648V7.3877H194.087V27.085ZM254.532 25.9189C257.21 25.9189 260.883 26.6959 265.548 28.251L261.919 45.3574C257.858 44.4071 254.921 43.9316 253.106 43.9316C248.787 43.9317 245.374 45.6162 242.869 48.9854C240.364 52.2683 239.111 56.8044 239.111 62.5928V94.4717H219.673V27.085H237.686V36.6748C241.314 29.5042 246.93 25.919 254.532 25.9189ZM579.519 25.9189C582.197 25.9189 585.869 26.6959 590.534 28.251L586.905 45.3574C582.845 44.4072 579.908 43.9317 578.094 43.9316C573.774 43.9316 570.361 45.616 567.855 48.9854C565.35 52.2683 564.098 56.8044 564.098 62.5928V94.4717H544.659V27.085H562.672V36.6748C566.3 29.5043 571.916 25.9191 579.519 25.9189ZM449.276 0C453.942 0 458.866 0.77795 464.05 2.33301L460.681 16.7168C458.175 16.1121 455.627 15.8096 453.035 15.8096C450.53 15.8096 448.758 16.3712 447.722 17.4941C446.685 18.5309 446.167 20.3892 446.167 23.0674V27.084H460.292V41.5986H446.167V94.4707H426.729V41.5986H415.454V27.084H426.729V22.2891C426.729 7.42983 434.244 0.000142379 449.276 0ZM499.098 41.209C494.346 41.209 490.501 42.9803 487.563 46.5225C484.626 50.0645 483.158 54.773 483.158 60.6475C483.158 66.6084 484.626 71.3603 487.563 74.9023C490.501 78.4445 494.346 80.2158 499.098 80.2158C503.849 80.2157 507.65 78.4444 510.501 74.9023C513.438 71.3602 514.907 66.6085 514.907 60.6475C514.907 54.7729 513.438 50.0645 510.501 46.5225C507.564 42.9806 503.763 41.2091 499.098 41.209ZM626.764 41.3389C622.358 41.3389 618.772 42.9373 616.008 46.1338C613.33 49.2439 611.99 53.3908 611.99 58.5742C611.99 63.7578 613.373 67.948 616.138 71.1445C618.902 74.341 622.444 75.9394 626.764 75.9395C631.17 75.9395 634.755 74.341 637.52 71.1445C640.284 67.948 641.667 63.7578 641.667 58.5742C641.667 53.3907 640.284 49.2439 637.52 46.1338C634.755 42.9374 631.17 41.3389 626.764 41.3389ZM378.08 39.9131C370.218 39.9131 365.207 44.1902 363.047 52.7432H391.945C390.995 44.1904 386.374 39.9132 378.08 39.9131ZM704.205 39.9131C696.343 39.9131 691.332 44.1902 689.172 52.7432H718.07C717.12 44.1904 712.499 39.9132 704.205 39.9131Z\" fill=\"white\" /><defs><clipPath id=\"clip0_10580_645\"><rect width={120} height={120} fill=\"white\" /></clipPath></defs></svg>;\nexport default SvgTrueforgeLogoDark;","import * as React from \"react\";\nconst SvgTrueforgeLogo = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 614 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><g clipPath=\"url(#clip0_10581_1412)\"><path d=\"M-0.00195312 0.0136719L33.3314 16.6803V33.334L16.6647 33.334V66.6803H33.3314V83.347L-0.00195312 100.014V0.0136719Z\" fill=\"#05090E\" /><path d=\"M99.998 0L66.6647 16.6667V33.3333H83.3314V66.6667H66.6647V83.3333L99.998 100V0Z\" fill=\"#05090E\" /><path d=\"M49.9961 33.1826C50.8782 38.0147 52.6612 41.8005 55.4795 44.6006C58.2863 47.3892 62.0592 49.1393 66.835 50.0068C62.057 50.8924 58.2839 52.6732 55.4775 55.4795C52.6611 58.2959 50.8784 62.0863 49.9961 66.8887C49.1093 62.0858 47.3189 58.2958 44.498 55.4795C41.6875 52.6735 37.9135 50.8924 33.1426 50.0068C37.9113 49.1393 41.6861 47.3898 44.4971 44.6016C47.3198 41.8016 49.1095 38.0151 49.9961 33.1826Z\" fill=\"#6D58FB\" stroke=\"#6D58FB\" strokeWidth={1.33333} strokeLinejoin=\"round\" /></g><path d=\"M518.559 20.627C526.12 20.627 531.665 23.1106 535.193 28.0781V22.5703H550.1V75.3789C550.1 83.2261 547.47 89.2739 542.214 93.5215C536.957 97.8409 530.153 100.001 521.8 100.001C512.367 100.001 503.293 97.3008 494.58 91.9014L502.356 80.1299C509.773 84.3774 516.182 86.5019 521.583 86.502C530.008 86.502 534.221 82.2902 534.221 73.8672V70.627C530.62 74.8745 525.399 76.998 518.559 76.998C511.502 76.998 505.597 74.3706 500.845 69.1152C496.164 63.8597 493.823 57.0918 493.823 48.8125C493.823 40.5333 496.164 33.7663 500.845 28.5107C505.597 23.2553 511.502 20.627 518.559 20.627ZM315.383 20.627C323.952 20.627 330.541 23.1106 335.149 28.0781C339.83 33.0457 342.17 40.0293 342.17 49.0283C342.17 51.0441 342.098 53.1322 341.954 55.292H302.312C304.041 62.9954 309.01 66.8477 317.219 66.8477C320.171 66.8476 322.799 66.3429 325.104 65.335C327.408 64.2551 330.144 62.3835 333.312 59.7197L342.17 69.8711C334.753 76.9984 326.292 80.5624 316.787 80.5625C307.57 80.5625 300.225 77.8624 294.752 72.4629C289.351 67.0633 286.65 59.8635 286.65 50.8643C286.65 42.0091 289.243 34.7737 294.428 29.1582C299.612 23.4707 306.598 20.627 315.383 20.627ZM416.036 20.627C424.677 20.627 431.77 23.4346 437.314 29.0498C442.859 34.5934 445.632 41.7577 445.632 50.541C445.632 59.3961 442.859 66.6316 437.314 72.2471C431.77 77.7904 424.677 80.5625 416.036 80.5625C407.323 80.5625 400.194 77.7905 394.649 72.2471C389.105 66.6316 386.332 59.3961 386.332 50.541C386.332 41.7577 389.105 34.5934 394.649 29.0498C400.194 23.4345 407.323 20.627 416.036 20.627ZM587.211 20.627C595.78 20.627 602.369 23.1106 606.978 28.0781C611.658 33.0457 613.998 40.0292 613.998 49.0283C613.998 51.0441 613.926 53.1322 613.782 55.292H574.141C575.869 62.9953 580.838 66.8476 589.047 66.8477C591.999 66.8477 594.627 66.3428 596.932 65.335C599.236 64.2551 601.972 62.3834 605.141 59.7197L613.998 69.8711C606.581 76.9984 598.12 80.5624 588.615 80.5625C579.398 80.5625 572.053 77.8624 566.58 72.4629C561.179 67.0633 558.479 59.8635 558.479 50.8643C558.479 42.0091 561.071 34.7737 566.256 29.1582C571.441 23.4707 578.426 20.627 587.211 20.627ZM243.526 57.8838C243.526 63.5711 246.299 66.415 251.844 66.415C258.612 66.4149 261.997 62.8509 261.997 55.7236V22.5703H278.199V78.7256H263.4V72.7861C260.016 77.9696 254.58 80.5615 247.091 80.5615C240.466 80.5615 235.497 78.9782 232.185 75.8105C228.944 72.6428 227.324 68.1067 227.324 62.2031V22.5703H243.526V57.8838ZM161.807 22.5713H174.444V34.666H161.807V60.9082C161.807 62.7799 162.239 64.1114 163.104 64.9033C163.968 65.6232 165.299 65.9834 167.1 65.9834C168.468 65.9834 170.592 65.6951 173.473 65.1191L175.309 78.0781C170.772 79.446 166.488 80.1299 162.455 80.1299C156.478 80.1299 152.158 78.834 149.493 76.2422C146.901 73.6504 145.604 69.5106 145.604 63.8232V34.666H135.775V22.5713H145.604V6.15625H161.807V22.5713ZM212.189 21.5977C214.422 21.5977 217.482 22.2453 221.37 23.541L218.346 37.7959C214.962 37.004 212.513 36.6084 211.001 36.6084C207.401 36.6085 204.556 38.0126 202.468 40.8203C200.38 43.5561 199.336 47.3357 199.336 52.1592V78.7256H183.134V22.5693H198.147V30.5605C201.172 24.5852 205.853 21.5977 212.189 21.5977ZM374.509 0C378.397 0 382.502 0.647547 386.822 1.94336L384.015 13.9307C381.926 13.4267 379.802 13.1748 377.642 13.1748C375.553 13.1748 374.077 13.6432 373.213 14.5791C372.349 15.4431 371.917 16.9909 371.917 19.2227V22.5703H383.69V34.665H371.917V78.7256H355.715V34.665H346.317V22.5703H355.715V18.5742C355.715 6.19146 361.979 5.23399e-05 374.509 0ZM483.068 21.5977C485.301 21.5977 488.361 22.2453 492.249 23.541L489.225 37.7959C485.84 37.004 483.392 36.6084 481.88 36.6084C478.279 36.6084 475.435 38.0125 473.347 40.8203C471.258 43.5561 470.214 47.3357 470.214 52.1592V78.7256H454.012V22.5693H469.026V30.5605C472.051 24.5853 476.732 21.5977 483.068 21.5977ZM416.036 34.3418C412.076 34.3418 408.871 35.8178 406.423 38.7695C403.975 41.7213 402.75 45.6454 402.75 50.541C402.75 55.5084 403.975 59.4682 406.423 62.4199C408.871 65.3715 412.076 66.8477 416.036 66.8477C419.996 66.8476 423.165 65.3715 425.541 62.4199C427.989 59.4682 429.214 55.5084 429.214 50.541C429.214 45.6454 427.989 41.7213 425.541 38.7695C423.093 35.8179 419.925 34.3418 416.036 34.3418ZM522.447 34.4502C518.775 34.4502 515.787 35.7817 513.482 38.4453C511.25 41.0371 510.134 44.4929 510.134 48.8125C510.134 53.1321 511.286 56.6243 513.59 59.2881C515.894 61.9518 518.847 63.2831 522.447 63.2832C526.12 63.2832 529.109 61.9519 531.413 59.2881C533.717 56.6243 534.869 53.1321 534.869 48.8125C534.869 44.493 533.717 41.0371 531.413 38.4453C529.109 35.7815 526.12 34.4502 522.447 34.4502ZM315.166 33.2617C308.613 33.2619 304.437 36.8258 302.637 43.9531H326.724C325.932 36.8257 322.079 33.2617 315.166 33.2617ZM586.995 33.2617C580.442 33.2617 576.265 36.8257 574.465 43.9531H598.552C597.76 36.8258 593.908 33.2619 586.995 33.2617Z\" fill=\"black\" /><defs><clipPath id=\"clip0_10581_1412\"><rect width={100} height={100} fill=\"white\" /></clipPath></defs></svg>;\nexport default SvgTrueforgeLogo;","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'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';\nimport { Tooltip } from './primitives/Tooltip.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 const skillNames = (spec?.skills ?? []).map(s => (s as { name?: string }).name).filter(Boolean);\n const mcpNames = (spec?.mcpServers ?? []).map(m => (m as { name?: string }).name).filter(Boolean);\n const connectorsTitle = mcpNames.length ? `Connectors: ${mcpNames.join(', ')}` : `${mcpCount} connectors`;\n const skillsTitle = skillNames.length ? `Skills: ${skillNames.join(', ')}` : `${skillsCount} skills`;\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 <Tooltip content={connectorsTitle}>\n <span className=\"inline-flex items-center gap-1 text-xs\" aria-label={connectorsTitle}>\n <Icon name=\"plug\" className=\"size-3.5\" />\n {mcpCount}\n </span>\n </Tooltip>\n <Tooltip content={skillsTitle}>\n <span className=\"inline-flex items-center gap-1 text-xs\" aria-label={skillsTitle}>\n <Icon name=\"lightbulb\" className=\"size-3.5\" />\n {skillsCount}\n </span>\n </Tooltip>\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 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","'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 returnTo: `${callbackUrl.pathname}${callbackUrl.search}`,\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","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 // Chat markdown links should open in a new tab.\n a({ href, children, node: _node, ...props }) {\n return (\n <a {...props} href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n </a>\n );\n },\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.75rem\" />}\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 variant=\"icon\" 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":["React","jsx","jsxs","jsx","React","useContext","jsx","React","jsx","jsxs","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","useLayoutEffect","useRef","useState","jsx","jsxs","useState","useRef","useLayoutEffect","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","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"]}
|