@truefoundry/agent-ui-sdk 0.0.4 → 0.0.6
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/README.md +35 -1
- package/dist/index.d.ts +6 -14
- package/dist/index.js +150 -213
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +8 -7
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/icons/fontawesome.ts","../src/icons/registerAgentIcons.ts","../src/icons/agent-2.svg","../src/icons/ai.svg","../src/icons/brain-regular.svg","../src/icons/compare.svg","../src/icons/mcp-server.svg","../src/icons/search-globe.svg","../src/theme/SlotsProvider.tsx","../src/theme/defaultSlots.ts","../src/atoms/adapters/AskUserPromptAdapter.tsx","../src/atoms/adapters/McpAuthPromptAdapter.tsx","../src/atoms/adapters/ReasoningCardAdapter.tsx","../src/atoms/primitives/Avatar.tsx","../src/atoms/lib/cn.ts","../src/atoms/UserMessageBubble.tsx","../src/atoms/UserMessageEdit.tsx","../src/atoms/ToolCallCard.tsx","../src/atoms/ToolCallContentBlock.tsx","../src/atoms/SubAgentCard.tsx","../src/atoms/SandboxToolCallCard.tsx","../src/atoms/ToolApprovalBar.tsx","../src/atoms/ToolGroupCard.tsx","../src/atoms/AgentStepsCard.tsx","../src/atoms/Skeletons.tsx","../src/atoms/ComposerShell.tsx","../src/atoms/ComposerSections.tsx","../src/atoms/AttachmentCard.tsx","../src/constants/attachments.ts","../src/atoms/AttachmentPickerButton.tsx","../src/atoms/AttachmentPreviewDialog.tsx","../src/atoms/ScrollToBottomButton.tsx","../src/atoms/ThreadListRow.tsx","../src/atoms/ThreadListMisc.tsx","../src/atoms/MessageActionBar.tsx","../src/atoms/Markdown.tsx","../src/atoms/AssistantMessageBubble.tsx","../src/atoms/HistoryLoader.tsx","../src/atoms/MessageErrorBanner.tsx","../src/atoms/MessageIndicator.tsx","../src/atoms/MessageTimestamp.tsx","../src/atoms/UserMessageActionBar.tsx","../src/atoms/ThreadShell.tsx","../src/atoms/WelcomeScreen.tsx","../src/atoms/Toast.tsx","../src/theme/tokens.ts","../src/index.ts","../src/containers/ThreadContainer.tsx","../src/hooks/useComposerBusyState.ts","../src/containers/AssistantMessageContainer.tsx","../src/utils/computeAgentStepsSplit.ts","../src/containers/AssistantTextContainer.tsx","../src/containers/ErrorToasterContainer.tsx","../src/containers/MessageImageContainer.tsx","../src/containers/ReasoningContainer.tsx","../src/containers/ToolCallContainer.tsx","../src/containers/nestedApprovalBridge.ts","../src/containers/SandboxToolCallContainer.tsx","../src/containers/ToolApprovalContainer.tsx","../src/containers/ToolCallContentBlockContainer.tsx","../src/containers/AgentStepsContainer.tsx","../src/containers/HistoryLoaderContainer.tsx","../src/containers/UserEditComposerContainer.tsx","../src/containers/AttachmentsContainer.tsx","../src/containers/useAttachmentPreviewSrc.ts","../src/containers/UserMessageContainer.tsx","../src/containers/ToolGroupContainer.tsx","../src/containers/ComposerContainer.tsx","../src/hooks/useComposerPauseView.ts","../src/containers/AskUserContainer.tsx","../src/containers/McpAuthContainer.tsx","../src/containers/ThreadListContainer.tsx","../src/containers/Thread.tsx"],"sourcesContent":["import { library } from \"@fortawesome/fontawesome-svg-core\";\nimport {\n faArrowDown,\n faArrowUp,\n faBoxArchive,\n faEllipsis,\n faPencil,\n faPlus,\n faTrash,\n faXmark,\n} from \"@fortawesome/free-solid-svg-icons\";\n\nlibrary.add(faArrowDown, faArrowUp, faBoxArchive, faEllipsis, faPencil, faPlus, faTrash, faXmark);\n","import { registerIcons } from \"tfy-web-components/components/atoms/IconProvider\";\n\nimport Agent2Icon from \"./agent-2.svg\";\nimport AiIcon from \"./ai.svg\";\nimport BrainRegularIcon from \"./brain-regular.svg\";\nimport CompareIcon from \"./compare.svg\";\nimport McpServerIcon from \"./mcp-server.svg\";\nimport SearchGlobeIcon from \"./search-globe.svg\";\n\nregisterIcons({\n \"mcp-server\": McpServerIcon,\n \"agent-2\": Agent2Icon,\n compare: CompareIcon,\n ai: AiIcon,\n searchGlobe: SearchGlobeIcon,\n \"brain-regular\": BrainRegularIcon,\n});\n","import * as React from \"react\";\nconst SvgAgent2 = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path d=\"M8 0C8.40158 8.28071e-05 8.72754 0.325937 8.72754 0.727539V2.90918H12.3623C13.5671 2.90921 14.5437 3.88607 14.5439 5.09082V7.27246H15.2725C15.6741 7.27253 16 7.59839 16 8C15.9999 8.40155 15.674 8.72747 15.2725 8.72754H14.5439V10.9092C14.5437 12.1139 13.5671 13.0908 12.3623 13.0908H3.63477C2.43015 13.0906 1.45334 12.1138 1.45312 10.9092V8.72754H0.727539C0.325964 8.7275 7.21982e-05 8.40157 0 8C0 7.59837 0.32592 7.2725 0.727539 7.27246H1.45312V5.09082C1.45335 3.8862 2.43015 2.90942 3.63477 2.90918H7.27246V1.45508H5.09082C4.68943 1.4549 4.36346 1.12893 4.36328 0.727539C4.36328 0.325997 4.68932 0.00017902 5.09082 0H8ZM3.63477 4.36426C3.23346 4.3645 2.90843 4.68951 2.9082 5.09082V7.99023C2.90824 7.99344 2.90918 7.99678 2.90918 8C2.90918 8.00326 2.90825 8.00651 2.9082 8.00977V10.9092C2.90841 11.3105 3.23345 11.6365 3.63477 11.6367H12.3623C12.7638 11.6367 13.0896 11.3106 13.0898 10.9092V5.09082C13.0896 4.68937 12.7638 4.36428 12.3623 4.36426H3.63477ZM5.81738 6.54492C6.21902 6.54492 6.54489 6.87084 6.54492 7.27246V8.72656C6.54492 9.12822 6.21904 9.4541 5.81738 9.4541C5.41587 9.45393 5.08984 9.12811 5.08984 8.72656V7.27246C5.08988 6.87094 5.41589 6.54509 5.81738 6.54492ZM10.1816 6.54492C10.5831 6.54514 10.9091 6.87097 10.9092 7.27246V8.72656C10.9092 9.12808 10.5831 9.45388 10.1816 9.4541C9.77999 9.4541 9.4541 9.12822 9.4541 8.72656V7.27246C9.45413 6.87084 9.78001 6.54492 10.1816 6.54492Z\" fill=\"currentColor\" /></svg>;\nexport default SvgAgent2;","import * as React from \"react\";\nconst SvgAi = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><g opacity={0.9}><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M15.4419 9.43023C15.7501 9.43023 16 9.68012 16 9.98837V10.0304C16 11.398 16 12.4813 15.886 13.329C15.7687 14.2015 15.5216 14.9077 14.9647 15.4647C14.4077 16.0216 13.7015 16.2687 12.829 16.386C11.9813 16.5 10.898 16.5 9.53035 16.5H9.48837C9.18012 16.5 8.93023 16.2501 8.93023 15.9419C8.93023 15.6336 9.18012 15.3837 9.48837 15.3837C10.9074 15.3837 11.9155 15.3825 12.6803 15.2797C13.429 15.1791 13.8604 14.9903 14.1753 14.6753C14.4903 14.3604 14.6791 13.929 14.7797 13.1803C14.8825 12.4155 14.8837 11.4074 14.8837 9.98837C14.8837 9.68012 15.1336 9.43023 15.4419 9.43023Z\" fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M0.55814 9.43023C0.866392 9.43023 1.11628 9.68012 1.11628 9.98837C1.11628 11.4074 1.11747 12.4155 1.22029 13.1803C1.32095 13.929 1.50973 14.3604 1.82467 14.6753C2.13962 14.9903 2.57098 15.1791 3.3197 15.2797C4.08448 15.3825 5.0926 15.3837 6.51163 15.3837C6.81988 15.3837 7.06977 15.6336 7.06977 15.9419C7.06977 16.2501 6.81988 16.5 6.51163 16.5H6.46965C5.10201 16.5 4.01875 16.5 3.17096 16.386C2.29846 16.2687 1.59227 16.0216 1.03534 15.4647C0.478423 14.9077 0.231266 14.2015 0.113961 13.329C-2.0957e-05 12.4813 -1.15596e-05 11.398 2.3934e-07 10.0304C3.72411e-07 10.0164 5.05482e-07 10.0024 5.05482e-07 9.98837C5.05482e-07 9.68012 0.249888 9.43023 0.55814 9.43023Z\" fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M6.46964 0.5L6.51163 0.500001C6.81988 0.500001 7.06977 0.749888 7.06977 1.05814C7.06977 1.36639 6.81988 1.61628 6.51163 1.61628C5.0926 1.61628 4.08448 1.61747 3.3197 1.72029C2.57098 1.82095 2.13962 2.00973 1.82467 2.32467C1.50973 2.63962 1.32095 3.07098 1.22029 3.8197C1.11747 4.58448 1.11628 5.5926 1.11628 7.01163C1.11628 7.31988 0.866392 7.56977 0.55814 7.56977C0.249888 7.56977 5.05482e-07 7.31988 5.05482e-07 7.01163L2.3934e-07 6.96964C-1.15596e-05 5.60201 -2.0957e-05 4.51875 0.113961 3.67096C0.231266 2.79846 0.478423 2.09227 1.03534 1.53534C1.59227 0.978423 2.29846 0.731266 3.17096 0.613961C4.01875 0.499979 5.10201 0.499988 6.46964 0.5Z\" fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M12.6803 1.72029C11.9155 1.61747 10.9074 1.61628 9.48837 1.61628C9.18012 1.61628 8.93023 1.36639 8.93023 1.05814C8.93023 0.749888 9.18012 0.500001 9.48837 0.500001C9.5024 0.500001 9.51639 0.5 9.53036 0.5C10.898 0.499988 11.9813 0.499979 12.829 0.613961C13.7015 0.731266 14.4077 0.978423 14.9647 1.53534C15.5216 2.09227 15.7687 2.79846 15.886 3.67096C16 4.51875 16 5.60201 16 6.96965V7.01163C16 7.31988 15.7501 7.56977 15.4419 7.56977C15.1336 7.56977 14.8837 7.31988 14.8837 7.01163C14.8837 5.5926 14.8825 4.58448 14.7797 3.8197C14.6791 3.07098 14.4903 2.63962 14.1753 2.32467C13.8604 2.00973 13.429 1.82095 12.6803 1.72029Z\" fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M2.70041 3.20041C2.04651 3.85431 2.04651 4.90675 2.04651 7.01163V9.98837C2.04651 12.0933 2.04651 13.1457 2.70041 13.7996C3.35431 14.4535 4.40675 14.4535 6.51163 14.4535H9.48837C11.5933 14.4535 12.6457 14.4535 13.2996 13.7996C13.9535 13.1457 13.9535 12.0933 13.9535 9.98837V7.01163C13.9535 4.90675 13.9535 3.85431 13.2996 3.20041C12.6457 2.54651 11.5933 2.54651 9.48837 2.54651H6.51163C4.40675 2.54651 3.35431 2.54651 2.70041 3.20041ZM5.65417 10.5348C5.81478 10.3181 6.12065 10.2726 6.33733 10.4332C6.8116 10.7848 7.38407 10.9884 8 10.9884C8.61593 10.9884 9.1884 10.7848 9.66267 10.4332C9.87936 10.2726 10.1852 10.3181 10.3458 10.5348C10.5064 10.7514 10.461 11.0573 10.2443 11.2179C9.61111 11.6873 8.83673 11.9651 8 11.9651C7.16327 11.9651 6.38889 11.6873 5.75569 11.2179C5.53901 11.0573 5.49356 10.7514 5.65417 10.5348ZM10.6047 7.24419C10.6047 7.78363 10.3131 8.22093 9.95349 8.22093C9.59386 8.22093 9.30233 7.78363 9.30233 7.24419C9.30233 6.70475 9.59386 6.26744 9.95349 6.26744C10.3131 6.26744 10.6047 6.70475 10.6047 7.24419ZM6.04651 8.22093C6.40614 8.22093 6.69767 7.78363 6.69767 7.24419C6.69767 6.70475 6.40614 6.26744 6.04651 6.26744C5.68688 6.26744 5.39535 6.70475 5.39535 7.24419C5.39535 7.78363 5.68688 8.22093 6.04651 8.22093Z\" fill=\"currentColor\" /></g></svg>;\nexport default SvgAi;","import * as React from \"react\";\nconst SvgBrainRegular = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path d=\"M0 6.9375C0 6.30469 0.234375 5.69531 0.609375 5.25C0.5625 5.0625 0.5625 4.875 0.5625 4.6875C0.5625 3.9375 0.9375 3.25781 1.52344 2.85938C1.61719 2.17969 2.01562 1.59375 2.60156 1.26562C2.90625 0.515625 3.63281 0 4.5 0C5.08594 0 5.60156 0.257812 6 0.65625C6.375 0.257812 6.89062 0 7.5 0C8.34375 0 9.07031 0.515625 9.375 1.26562C9.96094 1.59375 10.3594 2.17969 10.4531 2.85938C11.0391 3.25781 11.4375 3.9375 11.4375 4.6875C11.4375 4.875 11.4141 5.0625 11.3672 5.25C11.7422 5.69531 12 6.30469 12 6.9375C12 7.66406 11.6953 8.32031 11.2266 8.78906L11.25 8.8125C11.25 9.9375 10.4297 10.8516 9.375 11.0391C9 11.625 8.34375 12 7.59375 12C6.96094 12 6.375 11.7422 6 11.2969C5.60156 11.7422 5.01562 12 4.40625 12C3.63281 12 2.97656 11.625 2.60156 11.0391C1.54688 10.8516 0.75 9.9375 0.75 8.8125V8.78906C0.28125 8.32031 0 7.66406 0 6.9375ZM5.41406 9.9375H5.4375V2.0625C5.4375 1.54688 5.01562 1.125 4.5 1.125C3.96094 1.125 3.5625 1.54688 3.5625 2.0625V2.08594C3.07031 2.17969 2.69531 2.55469 2.625 3.04688C2.625 3.09375 2.625 3.14062 2.625 3.1875C2.625 3.32812 2.625 3.46875 2.67188 3.58594C2.50781 3.60938 2.32031 3.65625 2.17969 3.75C1.89844 3.9375 1.71094 4.24219 1.6875 4.57031C1.6875 4.61719 1.6875 4.66406 1.6875 4.6875C1.6875 5.03906 1.82812 5.34375 2.0625 5.55469C1.71094 5.69531 1.40625 5.97656 1.24219 6.32812C1.17188 6.51562 1.10156 6.72656 1.10156 6.9375C1.10156 7.5 1.42969 7.99219 1.875 8.25C1.92188 8.27344 1.94531 8.29688 1.99219 8.32031C1.96875 8.34375 1.96875 8.36719 1.94531 8.39062C1.89844 8.53125 1.875 8.67188 1.875 8.8125C1.875 9.32812 2.20312 9.77344 2.67188 9.91406C2.76562 9.9375 2.88281 9.9375 3 9.9375C3.11719 9.9375 3.25781 9.91406 3.375 9.89062C3.375 10.1016 3.44531 10.3125 3.58594 10.4766C3.77344 10.7344 4.05469 10.875 4.40625 10.875C4.92188 10.875 5.36719 10.4766 5.41406 9.9375ZM8.41406 2.08594L8.4375 2.0625C8.4375 1.54688 8.01562 1.125 7.5 1.125C6.96094 1.125 6.5625 1.54688 6.5625 2.0625V9.9375C6.60938 10.4766 7.05469 10.875 7.59375 10.875C7.92188 10.875 8.20312 10.7344 8.39062 10.4766C8.53125 10.3125 8.60156 10.1016 8.60156 9.89062C8.71875 9.91406 8.85938 9.9375 9 9.9375C9.09375 9.9375 9.21094 9.9375 9.30469 9.91406C9.77344 9.77344 10.125 9.32812 10.125 8.8125C10.125 8.67188 10.0781 8.53125 10.0312 8.39062C10.0078 8.36719 10.0078 8.34375 9.98438 8.32031C10.0312 8.29688 10.0547 8.27344 10.1016 8.25C10.5469 7.99219 10.875 7.5 10.875 6.9375C10.875 6.72656 10.8047 6.51562 10.7344 6.32812C10.5703 5.97656 10.2656 5.69531 9.91406 5.55469C10.1484 5.34375 10.3125 5.03906 10.3125 4.6875C10.3125 4.66406 10.2891 4.61719 10.2891 4.57031C10.2656 4.24219 10.0781 3.9375 9.79688 3.75C9.65625 3.65625 9.46875 3.60938 9.30469 3.58594C9.35156 3.46875 9.375 3.32812 9.375 3.1875C9.375 3.14062 9.35156 3.09375 9.35156 3.04688C9.28125 2.55469 8.90625 2.17969 8.41406 2.08594Z\" fill=\"currentColor\" /></svg>;\nexport default SvgBrainRegular;","import * as React from \"react\";\nconst SvgCompare = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 14 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path d=\"M5.09091 16.5V15.0455H1.45455C1.05455 15.0455 0.712121 14.903 0.427273 14.6182C0.142424 14.3333 0 13.9909 0 13.5909V3.40909C0 3.00909 0.142424 2.66667 0.427273 2.38182C0.712121 2.09697 1.05455 1.95455 1.45455 1.95455H5.09091V0.5H6.54545V16.5H5.09091ZM8 15.0455V13.5909L11.6364 13.5909V3.40909H8V1.95455H11.6364C12.0364 1.95455 12.3788 2.09697 12.6636 2.38182C12.9485 2.66667 13.0909 3.00909 13.0909 3.40909V13.5909C13.0909 13.9909 12.9485 14.3333 12.6636 14.6182C12.3788 14.903 12.0364 15.0455 11.6364 15.0455H8Z\" fill=\"currentColor\" /></svg>;\nexport default SvgCompare;","import * as React from \"react\";\nconst SvgMcpServer = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 14 14\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><g clipPath=\"url(#clip0_5446_3655)\"><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M9.15174 1.36702C8.86989 1.09272 8.49212 0.939234 8.09883 0.939234C7.70553 0.939234 7.32776 1.09272 7.04591 1.36702L1.43074 6.87369C1.33678 6.96502 1.21091 7.01611 1.07987 7.01611C0.948831 7.01611 0.822958 6.96502 0.728994 6.87369C0.68299 6.82895 0.646423 6.77544 0.621453 6.71633C0.596483 6.65721 0.583618 6.59369 0.583618 6.52952C0.583618 6.46535 0.596483 6.40183 0.621453 6.34272C0.646423 6.2836 0.68299 6.23009 0.728994 6.18536L6.34416 0.678689C6.81387 0.221585 7.44341 -0.0341797 8.09883 -0.0341797C8.75424 -0.0341797 9.38379 0.221585 9.85349 0.678689C10.1253 0.943 10.3306 1.26791 10.4527 1.62683C10.5748 1.98575 10.6101 2.36848 10.5558 2.74369C10.936 2.68962 11.3235 2.72356 11.6885 2.8429C12.0535 2.96224 12.3863 3.16379 12.6611 3.43202L12.6902 3.46119C12.9203 3.68489 13.1031 3.95243 13.2279 4.248C13.3528 4.54357 13.4171 4.86117 13.4171 5.18202C13.4171 5.50288 13.3528 5.82048 13.2279 6.11605C13.1031 6.41162 12.9203 6.67916 12.6902 6.90286L7.61174 11.8828C7.59642 11.8977 7.58423 11.9155 7.57591 11.9352C7.56759 11.9549 7.5633 11.976 7.5633 11.9974C7.5633 12.0188 7.56759 12.0399 7.57591 12.0596C7.58423 12.0793 7.59642 12.0971 7.61174 12.112L8.65474 13.1352C8.70075 13.1799 8.73731 13.2334 8.76228 13.2926C8.78725 13.3517 8.80012 13.4152 8.80012 13.4794C8.80012 13.5435 8.78725 13.607 8.76228 13.6662C8.73731 13.7253 8.70075 13.7788 8.65474 13.8235C8.56078 13.9149 8.43491 13.9659 8.30387 13.9659C8.17283 13.9659 8.04696 13.9149 7.95299 13.8235L6.90999 12.8009C6.80257 12.6966 6.71717 12.5717 6.65886 12.4337C6.60054 12.2957 6.5705 12.1475 6.5705 11.9977C6.5705 11.8479 6.60054 11.6996 6.65886 11.5617C6.71717 11.4237 6.80257 11.2988 6.90999 11.1944L11.9885 6.21394C12.1264 6.07968 12.2361 5.91914 12.3109 5.74181C12.3858 5.56447 12.4244 5.37393 12.4244 5.18144C12.4244 4.98895 12.3858 4.79841 12.3109 4.62107C12.2361 4.44374 12.1264 4.2832 11.9885 4.14894L11.9593 4.12036C11.6778 3.84634 11.3005 3.69287 10.9076 3.69254C10.5148 3.69222 10.1372 3.84506 9.85524 4.11861L5.67158 8.22177L5.67041 8.22294L5.61324 8.27952C5.51925 8.37103 5.39326 8.42223 5.26208 8.42223C5.1309 8.42223 5.0049 8.37103 4.91091 8.27952C4.86491 8.23478 4.82834 8.18128 4.80337 8.12216C4.7784 8.06305 4.76553 7.99953 4.76553 7.93536C4.76553 7.87118 4.7784 7.80766 4.80337 7.74855C4.82834 7.68944 4.86491 7.63593 4.91091 7.59119L9.15349 3.43027C9.29105 3.29592 9.40033 3.1354 9.47488 2.95816C9.54943 2.78093 9.58776 2.59056 9.58759 2.39828C9.58743 2.206 9.54878 2.0157 9.47393 1.83859C9.39907 1.66147 9.28953 1.50114 9.15174 1.36702Z\" fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M8.44964 2.74425C8.49564 2.69951 8.53221 2.646 8.55718 2.58689C8.58215 2.52777 8.59501 2.46425 8.59501 2.40008C8.59501 2.33591 8.58215 2.27239 8.55718 2.21328C8.53221 2.15416 8.49564 2.10066 8.44964 2.05592C8.35564 1.96441 8.22965 1.91321 8.09847 1.91321C7.96729 1.91321 7.84129 1.96441 7.7473 2.05592L3.59455 6.12875C3.36454 6.35245 3.1817 6.61999 3.05685 6.91556C2.932 7.21113 2.86768 7.52873 2.86768 7.84958C2.86768 8.17044 2.932 8.48804 3.05685 8.78361C3.1817 9.07918 3.36454 9.34672 3.59455 9.57042C4.06433 10.0274 4.69385 10.2831 5.34922 10.2831C6.00459 10.2831 6.63411 10.0274 7.10389 9.57042L11.2572 5.49758C11.3032 5.45284 11.3398 5.39934 11.3648 5.34022C11.3897 5.28111 11.4026 5.21759 11.4026 5.15342C11.4026 5.08925 11.3897 5.02573 11.3648 4.96661C11.3398 4.9075 11.3032 4.85399 11.2572 4.80925C11.1632 4.71774 11.0372 4.66654 10.9061 4.66654C10.7749 4.66654 10.6489 4.71774 10.5549 4.80925L6.40214 8.88208C6.12029 9.15639 5.74252 9.30987 5.34922 9.30987C4.95592 9.30987 4.57815 9.15639 4.2963 8.88208C4.15836 8.74782 4.04873 8.58729 3.97386 8.40995C3.899 8.23261 3.86043 8.04207 3.86043 7.84958C3.86043 7.65709 3.899 7.46655 3.97386 7.28922C4.04873 7.11188 4.15836 6.95134 4.2963 6.81708L8.44964 2.74425Z\" fill=\"currentColor\" /></g><defs><clipPath id=\"clip0_5446_3655\"><rect width={14} height={14} fill=\"white\" /></clipPath></defs></svg>;\nexport default SvgMcpServer;","import * as React from \"react\";\nconst SvgSearchGlobe = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path d=\"M7 0C10.8555 0 14 3.14453 14 7C14 10.8828 10.8555 14 7 14C3.11719 14 0 10.8828 0 7C0 3.14453 3.11719 0 7 0ZM7 12.6875C7.19141 12.6875 7.71094 12.4961 8.28516 11.375C8.53125 10.8828 8.72266 10.3086 8.88672 9.625H5.08594C5.25 10.3086 5.44141 10.8828 5.6875 11.375C6.26172 12.4961 6.78125 12.6875 7 12.6875ZM4.86719 8.3125H9.10547C9.16016 7.90234 9.1875 7.46484 9.1875 7C9.1875 6.5625 9.16016 6.125 9.10547 5.6875H4.86719C4.8125 6.125 4.8125 6.5625 4.8125 7C4.8125 7.46484 4.8125 7.90234 4.86719 8.3125ZM8.88672 4.375C8.72266 3.71875 8.53125 3.14453 8.28516 2.65234C7.71094 1.53125 7.19141 1.3125 7 1.3125C6.78125 1.3125 6.26172 1.53125 5.6875 2.65234C5.44141 3.14453 5.25 3.71875 5.08594 4.375H8.88672ZM10.418 5.6875C10.4727 6.125 10.5 6.5625 10.5 7C10.5 7.46484 10.4727 7.90234 10.418 8.3125H12.5234C12.6328 7.90234 12.6875 7.46484 12.6875 7C12.6875 6.5625 12.6328 6.125 12.5234 5.6875H10.418ZM9.35156 1.83203C9.73438 2.54297 10.0352 3.41797 10.2266 4.375H12.0312C11.457 3.25391 10.5 2.35156 9.35156 1.83203ZM4.62109 1.83203C3.47266 2.35156 2.51562 3.25391 1.94141 4.375H3.74609C3.9375 3.41797 4.23828 2.54297 4.62109 1.83203ZM1.3125 7C1.3125 7.46484 1.33984 7.90234 1.44922 8.3125H3.55469C3.5 7.90234 3.5 7.46484 3.5 7C3.5 6.5625 3.5 6.125 3.55469 5.6875H1.44922C1.33984 6.125 1.3125 6.5625 1.3125 7ZM12.0312 9.625H10.2266C10.0352 10.6094 9.73438 11.4844 9.35156 12.1953C10.5 11.6758 11.457 10.7734 12.0312 9.625ZM3.74609 9.625H1.94141C2.51562 10.7734 3.47266 11.6758 4.62109 12.1953C4.23828 11.4844 3.9375 10.6094 3.74609 9.625Z\" fill=\"currentColor\" /></svg>;\nexport default SvgSearchGlobe;","import { createContext, useContext, useMemo, type ReactNode } from \"react\";\nimport {\n ThemeProvider as TfyThemeProvider,\n useTheme as useTfyTheme,\n} from \"tfy-web-components/components/theme/useTheme\";\n\nimport type {\n ComposerLeftSectionProps,\n ComposerRightSectionProps,\n ComposerSendButtonProps,\n} from \"../atoms/ComposerSections.js\";\nimport { defaultSlots } from \"./defaultSlots.js\";\n\n/**\n * Registry of atom-name -> atom-implementation. Empty by default; each atom module\n * augments this interface via `declare module \"../theme/SlotsProvider\"` when it is\n * introduced, so adding an atom never requires editing this file or any container.\n */\nexport interface AtomSlots {\n ComposerLeftSection: ComposerLeftSectionSlot;\n ComposerRightSection: ComposerRightSectionSlot;\n ComposerSendButton: ComposerSendButtonSlot;\n}\n\nexport type ComposerLeftSectionSlot = (props: ComposerLeftSectionProps) => ReactNode;\nexport type ComposerRightSectionSlot = (props: ComposerRightSectionProps) => ReactNode;\nexport type ComposerSendButtonSlot = (props: ComposerSendButtonProps) => ReactNode;\n\nexport type SlotOverrides = Partial<AtomSlots> & Record<string, unknown>;\nexport type ThemeMode = \"light\" | \"dark\";\n\nconst SlotsContext = createContext<AtomSlots>(defaultSlots);\nconst ThemeModeContext = createContext<ThemeMode | undefined>(undefined);\n\n/**\n * Wrap a subtree to override one or more atoms with a different design system.\n * Containers never reference concrete atoms directly -- they resolve everything\n * through `useSlot`, so this is the only thing a design-system swap has to touch.\n */\nexport function SlotsProvider({\n overrides,\n theme,\n children,\n}: {\n overrides?: SlotOverrides;\n theme?: ThemeMode;\n children: ReactNode;\n}) {\n const parentSlots = useContext(SlotsContext);\n const inheritedTheme = useContext(ThemeModeContext);\n const resolved = useMemo(\n () => ({ ...parentSlots, ...overrides }) as AtomSlots,\n [parentSlots, overrides],\n );\n\n return (\n <TfyThemeProvider theme={theme ?? inheritedTheme}>\n <SlotsProviderContents slots={resolved}>{children}</SlotsProviderContents>\n </TfyThemeProvider>\n );\n}\n\nfunction SlotsProviderContents({\n slots,\n children,\n}: {\n slots: AtomSlots;\n children: ReactNode;\n}) {\n const { mode } = useTfyTheme();\n\n return (\n <ThemeModeContext.Provider value={mode}>\n <SlotsContext.Provider value={slots}>{children}</SlotsContext.Provider>\n </ThemeModeContext.Provider>\n );\n}\n\n/** Resolves the atom implementation registered for `name` -- default unless overridden. */\nexport function useSlot<K extends keyof AtomSlots>(name: K): AtomSlots[K] {\n const slots = useContext(SlotsContext);\n return slots[name];\n}\n\n/** Resolves the light or dark theme mode supplied by the SDK consumer. */\nexport function useThemeMode(): ThemeMode {\n return useContext(ThemeModeContext) ?? \"light\";\n}\n","// tfy-web-components — direct slot defaults\n// Primitives and shared agent-chat molecules registered as-is.\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n} from \"tfy-web-components/components/atoms/Accordion\";\nimport Button from \"tfy-web-components/components/atoms/Button\";\nimport IconButton from \"tfy-web-components/components/atoms/IconButton\";\nimport Modal from \"tfy-web-components/components/atoms/Modal\";\nimport Skeleton from \"tfy-web-components/components/atoms/Skeleton\";\nimport { LightTooltip } from \"tfy-web-components/components/atoms/Tooltip\";\nimport Dialog from \"tfy-web-components/components/molecules/Dialog\";\n\nimport { AskUserPrompt } from \"../atoms/adapters/AskUserPromptAdapter.js\";\nimport { McpAuthPrompt } from \"../atoms/adapters/McpAuthPromptAdapter.js\";\nimport { ReasoningCard } from \"../atoms/adapters/ReasoningCardAdapter.js\";\n\n// SDK atoms — wrap or compose tfy-web-components internally\n// Thin adapters: tfy component + SDK slot prop contract.\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"../atoms/primitives/Avatar.js\";\nimport { UserMessageBubble } from \"../atoms/UserMessageBubble.js\";\nimport { UserMessageEdit } from \"../atoms/UserMessageEdit.js\";\nimport { ToolCallCard } from \"../atoms/ToolCallCard.js\";\nimport { ToolCallContentBlock } from \"../atoms/ToolCallContentBlock.js\";\nimport { SubAgentCard } from \"../atoms/SubAgentCard.js\";\nimport { SandboxToolCallCard } from \"../atoms/SandboxToolCallCard.js\";\nimport { ToolApprovalBar } from \"../atoms/ToolApprovalBar.js\";\nimport { ToolGroupCard } from \"../atoms/ToolGroupCard.js\";\nimport { AgentStepsCard } from \"../atoms/AgentStepsCard.js\";\nimport { MessageListSkeleton } from \"../atoms/Skeletons.js\";\nimport { ComposerShell } from \"../atoms/ComposerShell.js\";\nimport {\n ComposerLeftSection,\n ComposerRightSection,\n ComposerSendButton,\n} from \"../atoms/ComposerSections.js\";\nimport { AttachmentCard } from \"../atoms/AttachmentCard.js\";\nimport { AttachmentPickerButton } from \"../atoms/AttachmentPickerButton.js\";\nimport { AttachmentPreviewDialog } from \"../atoms/AttachmentPreviewDialog.js\";\nimport { ScrollToBottomButton } from \"../atoms/ScrollToBottomButton.js\";\nimport { ThreadListRow } from \"../atoms/ThreadListRow.js\";\nimport {\n ThreadListEmptyState,\n ThreadListNewButton,\n ThreadListRowSkeleton,\n ThreadListShell,\n} from \"../atoms/ThreadListMisc.js\";\nimport { MessageActionBar } from \"../atoms/MessageActionBar.js\";\nimport { Markdown } from \"../atoms/Markdown.js\";\nimport { AssistantMessageBubble } from \"../atoms/AssistantMessageBubble.js\";\n\n// SDK atoms — SDK-owned (no tfy slot component)\n// Local Tailwind implementations; pending tfy migration where a shared design exists.\nimport { HistoryLoader } from \"../atoms/HistoryLoader.js\";\nimport { MessageErrorBanner } from \"../atoms/MessageErrorBanner.js\";\nimport { MessageIndicator } from \"../atoms/MessageIndicator.js\";\nimport { MessageTimestamp } from \"../atoms/MessageTimestamp.js\";\nimport { UserMessageActionBar } from \"../atoms/UserMessageActionBar.js\";\nimport {\n MessageGroup,\n ThreadComposerAreaShell,\n ThreadRootShell,\n ThreadViewportShell,\n} from \"../atoms/ThreadShell.js\";\nimport { WelcomeScreen } from \"../atoms/WelcomeScreen.js\";\nimport { Toast, ToastStack } from \"../atoms/Toast.js\";\nimport type { AtomSlots } from \"./SlotsProvider.js\";\n\n/**\n * This SDK's default atom implementations, keyed by slot name. Populated\n * incrementally as atoms are added under `src/atoms/**`; each atom module\n * augments `AtomSlots` and this object gains the matching entry in the same\n * milestone.\n */\nexport const defaultSlots: AtomSlots = {\n // tfy-web-components — direct slot defaults\n Button,\n IconButton,\n LightTooltip,\n Modal,\n Dialog,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Skeleton,\n ReasoningCard,\n AskUserPrompt,\n McpAuthPrompt,\n\n // SDK atoms — wrap or compose tfy-web-components internally\n Avatar,\n AvatarImage,\n AvatarFallback,\n UserMessageBubble,\n UserMessageEdit,\n ToolCallCard,\n ToolCallContentBlock,\n SubAgentCard,\n SandboxToolCallCard,\n ToolApprovalBar,\n ToolGroupCard,\n AgentStepsCard,\n MessageListSkeleton,\n ComposerShell,\n ComposerLeftSection,\n ComposerRightSection,\n ComposerSendButton,\n AttachmentCard,\n AttachmentPreviewDialog,\n AttachmentPickerButton,\n ScrollToBottomButton,\n ThreadListRow,\n ThreadListNewButton,\n ThreadListRowSkeleton,\n ThreadListEmptyState,\n ThreadListShell,\n MessageActionBar,\n Markdown,\n\n // SDK atoms — SDK-owned (no tfy slot component)\n AssistantMessageBubble,\n HistoryLoader,\n MessageErrorBanner,\n MessageTimestamp,\n UserMessageActionBar,\n MessageIndicator,\n WelcomeScreen,\n ThreadRootShell,\n ThreadViewportShell,\n ThreadComposerAreaShell,\n MessageGroup,\n Toast,\n ToastStack,\n};\n\ndeclare module \"./SlotsProvider.js\" {\n interface AtomSlots {\n Button: typeof Button;\n IconButton: typeof IconButton;\n Skeleton: typeof Skeleton;\n LightTooltip: typeof LightTooltip;\n Modal: typeof Modal;\n Dialog: typeof Dialog;\n Accordion: typeof Accordion;\n AccordionSummary: typeof AccordionSummary;\n AccordionDetails: typeof AccordionDetails;\n }\n}\n","import {\n AskUserQuestionCard as TfyAskUserQuestionCard,\n type AskUserQuestionCardProps,\n type AskUserAnswerDraft,\n type AnsweredQuestion,\n type Question,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nexport type AskUserPromptProps = AskUserQuestionCardProps;\nexport type { AskUserAnswerDraft, AnsweredQuestion, Question };\n\n/** Typed SDK slot adapter over tfy-web-components AskUserQuestionCard. */\nexport function AskUserPrompt(props: AskUserPromptProps) {\n return <TfyAskUserQuestionCard {...props} />;\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AskUserPrompt: typeof AskUserPrompt;\n }\n}\n","import {\n McpAuthCard as TfyMcpAuthCard,\n type McpAuthCardProps,\n type McpServer,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nexport type McpAuthPromptProps = McpAuthCardProps;\nexport type { McpServer };\n\n/** Typed SDK slot adapter over tfy-web-components McpAuthCard. */\nexport function McpAuthPrompt(props: McpAuthPromptProps) {\n return <TfyMcpAuthCard {...props} />;\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n McpAuthPrompt: typeof McpAuthPrompt;\n }\n}\n","import {\n ReasoningCard as TfyReasoningCard,\n type ReasoningCardProps,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nexport type { ReasoningCardProps };\n\n/** Typed SDK slot adapter over tfy-web-components ReasoningCard. */\nexport function ReasoningCard(props: ReasoningCardProps) {\n return <TfyReasoningCard {...props} />;\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ReasoningCard: typeof ReasoningCard;\n }\n}\n","import React from \"react\";\n// Import as values; cast to any to bridge React 18 FC types from tfy-web-components\n// with the React 19 JSX types used in this package.\nimport TfyAvatar, {\n AvatarImage as TfyAvatarImage,\n AvatarFallback as TfyAvatarFallback,\n} from \"tfy-web-components/components/atoms/Avatar\";\n\nimport { cn } from \"../lib/cn.js\";\n\nconst AvatarRoot = TfyAvatar as unknown as React.FC<\n React.HTMLAttributes<HTMLDivElement> & { size?: \"default\" | \"sm\" | \"lg\" }\n>;\nconst AvatarImagePrimitive = TfyAvatarImage as unknown as React.FC<React.ImgHTMLAttributes<HTMLImageElement>>;\nconst AvatarFallbackPrimitive = TfyAvatarFallback as unknown as React.FC<React.HTMLAttributes<HTMLDivElement>>;\n\nexport type AvatarProps = React.HTMLAttributes<HTMLDivElement> & {\n size?: \"default\" | \"sm\" | \"lg\";\n};\n\nexport function Avatar({ className, size = \"default\", ...props }: AvatarProps) {\n return (\n <AvatarRoot\n data-slot=\"avatar\"\n data-size={size}\n size={size}\n className={cn(className)}\n {...props}\n />\n );\n}\n\nexport type AvatarImageProps = React.ImgHTMLAttributes<HTMLImageElement>;\n\nexport function AvatarImage({ className, ...props }: AvatarImageProps) {\n return <AvatarImagePrimitive data-slot=\"avatar-image\" className={cn(className)} {...props} />;\n}\n\nexport type AvatarFallbackProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function AvatarFallback({ className, ...props }: AvatarFallbackProps) {\n return <AvatarFallbackPrimitive data-slot=\"avatar-fallback\" className={cn(className)} {...props} />;\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n Avatar: typeof Avatar;\n AvatarImage: typeof AvatarImage;\n AvatarFallback: typeof AvatarFallback;\n }\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { UserMessage } from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type UserMessageBubbleProps = {\n text: string;\n attachments?: ReactNode;\n editAction?: ReactNode;\n className?: string;\n};\n\nexport function UserMessageBubble({ text, attachments, editAction, className }: UserMessageBubbleProps) {\n return (\n <div\n data-slot=\"aui_user-message-root\"\n className={cn(\"fade-in slide-in-from-bottom-1 animate-in duration-150\", className)}\n >\n {attachments}\n <UserMessage text={text} editAction={editAction} />\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n UserMessageBubble: typeof UserMessageBubble;\n }\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { forwardRef } from \"react\";\nimport TfyUserMessageEdit, {\n type UserMessageEditProps as TfyUserMessageEditProps,\n} from \"tfy-web-components/components/molecules/agent-chat/UserMessageEdit\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type UserMessageEditProps = Pick<\n TfyUserMessageEditProps,\n \"timestamp\" | \"attachments\" | \"input\" | \"footer\" | \"className\"\n>;\n\nexport const UserMessageEdit = forwardRef<\n HTMLDivElement,\n UserMessageEditProps & HTMLAttributes<HTMLDivElement>\n>(function UserMessageEdit({ timestamp, attachments, input, footer, className, ...rest }, ref) {\n return (\n <TfyUserMessageEdit\n ref={ref}\n data-slot=\"aui_user-message-edit\"\n timestamp={timestamp}\n attachments={attachments}\n input={input}\n footer={footer}\n className={cn(className)}\n {...rest}\n />\n );\n});\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n UserMessageEdit: typeof UserMessageEdit;\n }\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport {\n ToolCallCard as TfyToolCallCard,\n type ToolCallCardProps as TfyToolCallCardProps,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ToolCallStatus = \"running\" | \"success\" | \"error\";\n\nexport type ToolCallCardProps = Omit<TfyToolCallCardProps, \"className\"> & {\n approvalSlot?: ReactNode;\n requestSlot?: ReactNode;\n responseSlot?: ReactNode;\n className?: string;\n mcpServerName?: string;\n};\n\nexport function ToolCallCard(props: ToolCallCardProps) {\n const { mcpServerName, ...tfyProps } = props;\n return (\n <TfyToolCallCard\n {...tfyProps}\n className={cn(\"aui-tool-call-card\", props.className)}\n />\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ToolCallCard: typeof ToolCallCard;\n }\n}\n","\"use client\";\n\nimport {\n ToolCallContentBlock as TfyToolCallContentBlock,\n type ToolCallContentBlockProps as TfyToolCallContentBlockProps,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nexport type ToolCallContentBlockProps = TfyToolCallContentBlockProps;\n\nexport function ToolCallContentBlock(props: ToolCallContentBlockProps) {\n return <TfyToolCallContentBlock {...props} />;\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ToolCallContentBlock: typeof ToolCallContentBlock;\n }\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { SubAgentCard as TfySubAgentCard } from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\nimport type { ToolCallStatus } from \"./ToolCallCard.js\";\n\nexport type SubAgentCardProps = {\n agentName: string;\n instruction: string;\n stepCount: number;\n status: ToolCallStatus;\n expanded: boolean;\n onToggle: () => void;\n durationText?: string;\n children?: ReactNode;\n className?: string;\n};\n\nexport function SubAgentCard({\n agentName,\n instruction,\n stepCount,\n status,\n expanded,\n onToggle,\n durationText,\n children,\n className,\n}: SubAgentCardProps) {\n const Markdown = useSlot(\"Markdown\");\n\n return (\n <TfySubAgentCard\n agentName={agentName}\n instruction={instruction}\n stepCount={stepCount}\n status={status}\n expanded={expanded}\n onToggle={onToggle}\n durationText={durationText}\n renderInstruction={(content: string) => <Markdown content={content} />}\n className={cn(\"aui-sub-agent-card\", className)}\n >\n {children}\n </TfySubAgentCard>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n SubAgentCard: typeof SubAgentCard;\n }\n}\n","\"use client\";\n\nimport {\n SandboxToolCall,\n ToolCallCard as TfyToolCallCard,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { cn } from \"./lib/cn.js\";\nimport type { ToolCallStatus } from \"./ToolCallCard.js\";\n\nexport type SandboxToolCallCardProps = {\n name: string;\n intent?: string;\n status: ToolCallStatus;\n expanded: boolean;\n onToggle: () => void;\n command?: string;\n exitCode?: number | null;\n argsJson?: string;\n resultText?: string;\n resultJson?: string;\n viewMode?: \"terminal\" | \"code\";\n hasContent?: boolean;\n onViewModeChange?: (viewMode: \"terminal\" | \"code\") => void;\n durationText?: string;\n className?: string;\n};\n\nexport function SandboxToolCallCard({\n name,\n intent,\n status,\n expanded,\n onToggle,\n command,\n exitCode,\n argsJson,\n resultText,\n resultJson,\n viewMode,\n hasContent,\n onViewModeChange,\n durationText,\n className,\n}: SandboxToolCallCardProps) {\n const awaiting = status === \"running\";\n\n const sandboxContent = (\n <SandboxToolCall\n command={command}\n exitCode={exitCode}\n argsJson={argsJson}\n resultText={resultText}\n resultJson={resultJson}\n viewMode={viewMode}\n hasContent={hasContent}\n onViewModeChange={onViewModeChange}\n />\n );\n\n return (\n <TfyToolCallCard\n toolName={intent || name}\n icon=\"cube\"\n iconClassName=\"text-indigo-600 dark:text-gray-750 shrink-0\"\n expanded={expanded}\n onToggle={onToggle}\n awaiting={awaiting}\n awaitingText={durationText ?? \"Running…\"}\n showResponseLine={false}\n requestSlot={sandboxContent}\n className={cn(\"aui-sandbox-tool-call-card\", className)}\n />\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n SandboxToolCallCard: typeof SandboxToolCallCard;\n }\n}\n","\"use client\";\n\nimport {\n ToolApprovalBlock,\n type ToolApprovalBlockProps as TfyToolApprovalBlockProps,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ToolApprovalBarProps = TfyToolApprovalBlockProps;\n\nexport function ToolApprovalBar({ className, ...props }: ToolApprovalBarProps) {\n return (\n <ToolApprovalBlock\n {...props}\n className={cn(\"aui-tool-approval-bar\", className)}\n />\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ToolApprovalBar: typeof ToolApprovalBar;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { ChevronDownIcon, LoaderIcon } from \"lucide-react\";\nimport { Accordion, AccordionDetails, AccordionSummary } from \"tfy-web-components/components/atoms/Accordion\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ToolGroupCardProps = {\n toolCallCount: number;\n expanded: boolean;\n active?: boolean;\n onToggle: () => void;\n children: ReactNode;\n className?: string;\n};\n\nexport function ToolGroupCard({\n toolCallCount,\n expanded,\n active = false,\n onToggle,\n children,\n className,\n}: ToolGroupCardProps) {\n const label = `${toolCallCount} tool ${toolCallCount === 1 ? \"call\" : \"calls\"}`;\n\n return (\n <Accordion\n data-slot=\"tool-group-card\"\n expanded={expanded}\n onChange={() => onToggle()}\n background=\"transparent\"\n className={cn(\"aui-tool-group-card group/tool-group w-full\", className)}\n sx={{ margin: 0, border: \"none\", boxShadow: \"none\" }}\n >\n <AccordionSummary\n hideIcon\n disableRipple\n sx={{\n padding: 0,\n minHeight: 0,\n \"&.Mui-expanded\": { minHeight: 0 },\n \"&:hover\": { backgroundColor: \"transparent\" },\n \"& .MuiAccordionSummary-content\": { margin: 0, width: \"100%\" },\n }}\n >\n <div className=\"text-muted-foreground hover:text-foreground flex origin-left items-center gap-2 py-1.5 text-sm transition-[color,scale] active:scale-[0.98]\">\n {active && <LoaderIcon className=\"size-3 shrink-0 animate-spin [animation-duration:0.6s]\" />}\n <span className=\"text-xs font-medium\">{label}</span>\n <ChevronDownIcon\n className={cn(\n \"size-3 shrink-0 transition-transform duration-200 ease-[cubic-bezier(0.32,0.72,0,1)]\",\n expanded ? \"rotate-0\" : \"-rotate-90\",\n )}\n />\n </div>\n </AccordionSummary>\n <AccordionDetails sx={{ padding: 0 }}>\n <div className=\"mt-1 flex flex-col gap-2 text-foreground\">{children}</div>\n </AccordionDetails>\n </Accordion>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ToolGroupCard: typeof ToolGroupCard;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { LoaderIcon } from \"lucide-react\";\nimport { Accordion, AccordionDetails, AccordionSummary } from \"tfy-web-components/components/atoms/Accordion\";\nimport IconProvider from \"tfy-web-components/components/atoms/IconProvider\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type AgentStepsCardProps = {\n toolCount: number;\n thinkingCount: number;\n expanded: boolean;\n active?: boolean;\n onToggle: () => void;\n children: ReactNode;\n className?: string;\n};\n\nexport function AgentStepsCard({\n toolCount,\n thinkingCount,\n expanded,\n active = false,\n onToggle,\n children,\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 data-slot=\"agent-steps-card\"\n expanded={expanded}\n onChange={() => onToggle()}\n background=\"transparent\"\n className={cn(\"aui-agent-steps-card rounded-lg border border-border/50 bg-secondary/20\", className)}\n sx={{ margin: 0, boxShadow: \"none\" }}\n >\n <AccordionSummary\n hideIcon\n disableRipple\n sx={{\n padding: 0,\n minHeight: 0,\n \"&.Mui-expanded\": { minHeight: 0 },\n \"& .MuiAccordionSummary-content\": { margin: 0, width: \"100%\" },\n }}\n >\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 rounded-t-lg py-2 px-2.5 text-left text-xs transition-colors hover:bg-secondary/40\"\n >\n <IconProvider\n icon={expanded ? \"chevron-down\" : \"chevron-right\"}\n size={0.75}\n className=\"shrink-0 text-muted-foreground\"\n />\n <span className=\"font-semibold text-foreground/90\">Agent steps</span>\n <span className=\"text-muted-foreground\">\n · {toolLabel}\n {thinkingLabel}\n </span>\n {active && <LoaderIcon className=\"ml-auto size-3 shrink-0 animate-spin text-primary\" />}\n </button>\n </AccordionSummary>\n <AccordionDetails sx={{ padding: 0 }}>\n <div className=\"space-y-3 border-t border-border/50 px-1.5 py-1.5 pt-3\">{children}</div>\n </AccordionDetails>\n </Accordion>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AgentStepsCard: typeof AgentStepsCard;\n }\n}\n","import Skeleton from \"tfy-web-components/components/atoms/Skeleton\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type MessageListSkeletonProps = {\n className?: string;\n};\n\nexport function MessageListSkeleton({ className }: MessageListSkeletonProps) {\n return (\n <div\n role=\"status\"\n aria-label=\"Loading conversation\"\n data-slot=\"aui_thread-history-skeleton\"\n className={cn(\"mb-14 flex flex-col gap-y-6\", className)}\n >\n <div className=\"flex justify-end\">\n <Skeleton className=\"h-10 w-[min(85%,20rem)] rounded-xl\" />\n </div>\n <div className=\"flex flex-col gap-2 px-2\">\n <Skeleton className=\"h-4 w-full max-w-md\" />\n <Skeleton className=\"h-4 w-full max-w-sm\" />\n <Skeleton className=\"h-4 w-2/3 max-w-xs\" />\n </div>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageListSkeleton: typeof MessageListSkeleton;\n }\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\n\nexport type ComposerShellProps = {\n value: string;\n placeholder: string;\n disabled: boolean;\n isRunning?: boolean;\n attachments?: ReactNode;\n modelLabel?: string;\n modelIcon?: ReactNode;\n connectorStatusLabel?: string;\n onValueChange: (value: string) => void;\n onSubmit: () => void;\n onCancel?: () => void;\n onAttach?: () => void;\n className?: string;\n};\n\nexport function ComposerShell({\n value,\n placeholder,\n disabled,\n isRunning = false,\n attachments,\n modelLabel,\n modelIcon,\n connectorStatusLabel,\n onValueChange,\n onSubmit,\n onCancel,\n onAttach,\n className,\n}: ComposerShellProps) {\n const ComposerLeftSection = useSlot(\"ComposerLeftSection\");\n const ComposerRightSection = useSlot(\"ComposerRightSection\");\n const ComposerSendButton = useSlot(\"ComposerSendButton\");\n\n return (\n <div\n data-slot=\"aui_composer-shell\"\n className={cn(\n \"border-border/60 focus-within:border-ring focus-within:ring-ring/20 flex w-full flex-col gap-2 rounded-[var(--composer-radius,1.5rem)] border bg-[var(--composer-bg,var(--muted))] p-[var(--composer-padding,8px)] shadow-sm transition-colors focus-within:ring-3\",\n className,\n )}\n >\n {attachments}\n <textarea\n value={value}\n placeholder={placeholder}\n disabled={disabled}\n rows={1}\n aria-label=\"Message input\"\n onChange={(event) => onValueChange(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n onSubmit();\n }\n }}\n className=\"placeholder:text-muted-foreground/80 max-h-32 min-h-10 w-full resize-none rounded-lg bg-transparent px-2.5 py-1 text-base outline-none\"\n />\n <div className=\"flex items-center justify-between px-1\">\n <div className=\"flex items-center gap-2\">\n <ComposerLeftSection\n disabled={disabled}\n isRunning={isRunning}\n onAttach={onAttach}\n />\n {connectorStatusLabel && (\n <span className=\"text-muted-foreground text-xs\">{connectorStatusLabel}</span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {modelLabel && (\n <span className=\"bg-muted text-muted-foreground flex items-center gap-1 rounded-full px-2 py-0.5 text-xs\">\n {modelIcon}\n {modelLabel}\n </span>\n )}\n <ComposerRightSection disabled={disabled} isRunning={isRunning} />\n <ComposerSendButton\n disabled={disabled}\n canSubmit={!disabled && value.trim().length > 0}\n isRunning={isRunning}\n onSubmit={onSubmit}\n onCancel={onCancel}\n />\n </div>\n </div>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ComposerShell: typeof ComposerShell;\n }\n}\n","\"use client\";\n\nimport Spinner from \"tfy-web-components/components/atoms/Spinner\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport type ComposerLeftSectionProps = {\n disabled: boolean;\n isRunning: boolean;\n onAttach?: () => void;\n};\n\nexport type ComposerRightSectionProps = {\n disabled: boolean;\n isRunning: boolean;\n};\n\nexport type ComposerSendButtonProps = {\n disabled: boolean;\n canSubmit: boolean;\n isRunning: boolean;\n onSubmit: () => void;\n onCancel?: () => void;\n};\n\nexport function ComposerLeftSection({ onAttach }: ComposerLeftSectionProps) {\n const IconButton = useSlot(\"IconButton\");\n\n if (!onAttach) return null;\n\n return <IconButton icon=\"plus\" tooltip=\"Attach\" onClick={onAttach} />;\n}\n\nexport function ComposerRightSection(_: ComposerRightSectionProps) {\n return null;\n}\n\nexport function ComposerSendButton({\n canSubmit,\n isRunning,\n onSubmit,\n onCancel,\n}: ComposerSendButtonProps) {\n const Button = useSlot(\"Button\");\n\n if (isRunning) {\n return (\n <Button.Primary\n disabled={!onCancel}\n onClick={onCancel}\n text={\n <>\n <Spinner small />\n Cancel\n </>\n }\n />\n );\n }\n\n return (\n <Button.Primary\n disabled={!canSubmit}\n onClick={onSubmit}\n icon=\"arrow-up\"\n tooltipProps={{\n title: \"Send message\",\n size: \"fit\",\n }}\n />\n );\n}\n","\"use client\";\n\nimport { FileTextIcon } from \"lucide-react\";\n\nimport { USER_MESSAGE_ATTACHMENT_PREVIEW_REM } from \"../constants/attachments.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\n\nexport { USER_MESSAGE_ATTACHMENT_PREVIEW_REM };\n\nexport type AttachmentCardSize = \"chip\" | \"preview\";\n\nexport type AttachmentCardProps = {\n name: string;\n contentType?: string;\n previewSrc?: string;\n isImage?: boolean;\n size?: AttachmentCardSize;\n /** When set, constrains image preview and file chip width to this rem size. */\n previewRem?: number;\n onRemove?: () => void;\n className?: string;\n};\n\nexport function AttachmentCard({\n name,\n previewSrc,\n isImage = false,\n size = \"chip\",\n previewRem,\n onRemove,\n className,\n}: AttachmentCardProps) {\n const IconButton = useSlot(\"IconButton\");\n const Avatar = useSlot(\"Avatar\");\n const AvatarImage = useSlot(\"AvatarImage\");\n const AvatarFallback = useSlot(\"AvatarFallback\");\n\n if (size === \"preview\" && isImage && previewSrc) {\n const previewSize =\n previewRem != null ? { width: `${previewRem}rem`, height: `${previewRem}rem` } : undefined;\n\n return (\n <div\n data-slot=\"aui_attachment-preview\"\n style={previewSize}\n className={cn(\n \"aui-attachment-preview relative shrink-0 cursor-pointer overflow-hidden rounded-lg border\",\n previewRem == null && \"size-24\",\n className,\n )}\n >\n <img src={previewSrc} alt={name} className=\"h-full w-full object-cover\" />\n </div>\n );\n }\n\n return (\n <div\n data-slot=\"aui_attachment-chip\"\n style={previewRem != null ? { maxWidth: `${previewRem}rem` } : undefined}\n className={cn(\n \"aui-attachment-chip bg-muted flex max-w-full shrink-0 items-center gap-2 rounded-lg border px-2 py-1.5\",\n className,\n )}\n >\n <div className=\"bg-background flex size-7 shrink-0 items-center justify-center overflow-hidden rounded-md border\">\n {isImage && previewSrc ? (\n <Avatar className=\"size-7 rounded-none\">\n <AvatarImage src={previewSrc} alt={name} className=\"object-cover\" />\n <AvatarFallback>\n <FileTextIcon className=\"text-muted-foreground size-4\" />\n </AvatarFallback>\n </Avatar>\n ) : (\n <FileTextIcon className=\"text-muted-foreground size-4\" />\n )}\n </div>\n <span className=\"text-foreground min-w-0 truncate text-sm\">{name}</span>\n {onRemove && (\n <IconButton\n icon=\"xmark\"\n tooltip=\"Remove file\"\n className=\"size-6 shrink-0 rounded-full\"\n onClick={onRemove}\n />\n )}\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AttachmentCard: typeof AttachmentCard;\n }\n}\n","/** Fixed preview bounds for attachments rendered in user message bubbles. */\nexport const USER_MESSAGE_ATTACHMENT_PREVIEW_REM = 12;\n","import IconButton from \"tfy-web-components/components/atoms/IconButton\";\nimport type { IconButtonProps } from \"tfy-web-components/components/atoms/IconButton\";\n\nexport type AttachmentPickerButtonProps = Omit<IconButtonProps, \"tooltip\" | \"icon\">;\n\nexport function AttachmentPickerButton(props: AttachmentPickerButtonProps) {\n return (\n <IconButton\n icon=\"plus\"\n tooltip=\"Add Attachment\"\n className=\"size-7 rounded-full p-1\"\n {...props}\n />\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AttachmentPickerButton: typeof AttachmentPickerButton;\n }\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport Modal from \"tfy-web-components/components/atoms/Modal\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport type AttachmentPreviewDialogProps = {\n previewSrc?: string;\n children: ReactNode;\n};\n\nexport function AttachmentPreviewDialog({ previewSrc, children }: AttachmentPreviewDialogProps) {\n const IconButton = useSlot(\"IconButton\");\n const [open, setOpen] = useState(false);\n\n if (!previewSrc) return <>{children}</>;\n\n return (\n <>\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => setOpen(true)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n setOpen(true);\n }\n }}\n className=\"contents cursor-pointer\"\n >\n {children}\n </div>\n {/* tfy ModalProps omits MUI `open` in published types; runtime accepts it. */}\n {/* @ts-expect-error MUI Modal `open` is accepted at runtime */}\n <Modal open={open} onClose={() => setOpen(false)}>\n <div className=\"bg-popover fixed top-1/2 left-1/2 z-50 w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 rounded-xl p-2 outline-none sm:max-w-3xl\">\n <span className=\"absolute top-2 right-2 z-10 inline-flex\">\n <IconButton icon=\"xmark\" tooltip=\"Close\" onClick={() => setOpen(false)} />\n </span>\n <div className=\"bg-background relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden\">\n <img\n src={previewSrc}\n alt=\"Attachment preview\"\n className=\"block h-auto max-h-[80vh] w-auto max-w-full object-contain\"\n />\n </div>\n </div>\n </Modal>\n </>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AttachmentPreviewDialog: typeof AttachmentPreviewDialog;\n }\n}\n","import { forwardRef } from \"react\";\nimport IconButton from \"tfy-web-components/components/atoms/IconButton\";\nimport type { IconButtonProps } from \"tfy-web-components/components/atoms/IconButton\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ScrollToBottomButtonProps = Omit<IconButtonProps, \"tooltip\" | \"icon\">;\n\nexport const ScrollToBottomButton = forwardRef<HTMLSpanElement, ScrollToBottomButtonProps>(\n ({ className, disabled, ...rest }, ref) => {\n if (disabled) return null;\n return (\n <span\n ref={ref}\n className={cn(\"absolute -top-14 z-10 inline-flex self-center\")}\n >\n <IconButton\n icon=\"arrow-down\"\n tooltip=\"Scroll to bottom\"\n disabled={disabled}\n className={cn(\n \"aui-thread-scroll-to-bottom dark:border-border dark:bg-background dark:hover:bg-accent rounded-full p-4\",\n className,\n )}\n {...rest}\n />\n </span>\n );\n },\n);\n\nScrollToBottomButton.displayName = \"ScrollToBottomButton\";\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ScrollToBottomButton: typeof ScrollToBottomButton;\n }\n}\n","import IconProvider from \"tfy-web-components/components/atoms/IconProvider\";\nimport IconButton from \"tfy-web-components/components/atoms/IconButton\";\nimport DropdownMenu from \"tfy-web-components/components/molecules/DropdownMenu\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ThreadListRowProps = {\n title: string;\n active: boolean;\n onSelect: () => void;\n onArchive?: () => void;\n onDelete?: () => void;\n className?: string;\n};\n\nexport function ThreadListRow({ title, active, onSelect, onArchive, onDelete, className }: ThreadListRowProps) {\n return (\n <div\n data-slot=\"aui_thread-list-item\"\n data-active={active || undefined}\n className={cn(\n \"group hover:bg-muted data-[active]:bg-muted relative flex min-h-9 items-center rounded-lg transition-colors\",\n className,\n )}\n >\n <button\n type=\"button\"\n onClick={onSelect}\n data-slot=\"aui_thread-list-item-trigger\"\n className=\"flex min-h-9 min-w-0 flex-1 items-center rounded-lg px-2.5 py-2 text-start text-sm outline-none group-hover:pe-9\"\n >\n <span className=\"min-w-0 flex-1 truncate\">{title}</span>\n </button>\n {(onArchive || onDelete) && (\n <div className=\"absolute end-1.5 top-1/2 inline-flex -translate-y-1/2 opacity-0 group-hover:opacity-100\">\n <DropdownMenu\n trigger={\n <IconButton\n icon=\"ellipsis\"\n tooltip=\"More options\"\n className=\"size-6 p-0\"\n />\n }\n side=\"right\"\n align=\"start\"\n >\n {onArchive && (\n <DropdownMenu.Item onClick={onArchive}>\n <IconProvider icon=\"box-archive\" size={0.75} />\n Archive\n </DropdownMenu.Item>\n )}\n {onDelete && (\n <DropdownMenu.Item onClick={onDelete} className=\"text-destructive hover:bg-destructive/10\">\n <IconProvider icon=\"trash\" size={0.75} />\n Delete\n </DropdownMenu.Item>\n )}\n </DropdownMenu>\n </div>\n )}\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ThreadListRow: typeof ThreadListRow;\n }\n}\n","import type { ReactNode } from \"react\";\nimport Button, { type ButtonProps } from \"tfy-web-components/components/atoms/Button\";\nimport Skeleton from \"tfy-web-components/components/atoms/Skeleton\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ThreadListNewButtonProps = Omit<ButtonProps, \"text\" | \"icon\">;\n\nexport function ThreadListNewButton({ className, ...rest }: ThreadListNewButtonProps) {\n return (\n <Button.Ghost\n data-slot=\"aui_thread-list-new\"\n className={cn(\"hover:bg-muted h-8 justify-start gap-2 rounded-md px-2.5 text-sm font-normal\", className)}\n icon=\"plus\"\n text=\"New Thread\"\n {...rest}\n />\n );\n}\n\nexport type ThreadListRowSkeletonProps = {\n count?: number;\n className?: string;\n};\n\nexport function ThreadListRowSkeleton({ count = 5, className }: ThreadListRowSkeletonProps) {\n return (\n <div className={cn(\"flex flex-col gap-1\", className)} role=\"status\" aria-label=\"Loading threads\">\n {Array.from({ length: count }, (_, i) => (\n <div key={i} className=\"flex h-8 items-center px-2.5\">\n <Skeleton className=\"h-3.5 w-full\" />\n </div>\n ))}\n </div>\n );\n}\n\nexport type ThreadListEmptyStateProps = {\n message?: string;\n className?: string;\n};\n\nexport function ThreadListEmptyState({ message = \"No threads yet\", className }: ThreadListEmptyStateProps) {\n return (\n <div className={cn(\"text-muted-foreground flex flex-1 items-center justify-center px-4 text-center text-sm\", className)}>\n {message}\n </div>\n );\n}\n\nexport type ThreadListShellProps = {\n header: ReactNode;\n children: ReactNode;\n className?: string;\n};\n\nexport function ThreadListShell({ header, children, className }: ThreadListShellProps) {\n return (\n <div className={cn(\"font-sans-flex flex min-h-0 flex-1 flex-col gap-1 overflow-hidden p-3\", className)}>\n {header}\n <div className=\"flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto pb-1\">{children}</div>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ThreadListNewButton: typeof ThreadListNewButton;\n ThreadListRowSkeleton: typeof ThreadListRowSkeleton;\n ThreadListEmptyState: typeof ThreadListEmptyState;\n ThreadListShell: typeof ThreadListShell;\n }\n}\n","\"use client\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\n\nexport type MessageActionBarProps = {\n isCopied: boolean;\n onCopy: () => void;\n className?: string;\n};\n\nexport function MessageActionBar({ isCopied, onCopy, className }: MessageActionBarProps) {\n const MessageTimestamp = useSlot(\"MessageTimestamp\");\n const IconButton = useSlot(\"IconButton\");\n\n return (\n <div\n className={cn(\n \"aui-assistant-action-bar-root text-muted-foreground animate-in fade-in flex items-center gap-3 duration-200\",\n className,\n )}\n >\n <MessageTimestamp />\n <IconButton\n icon={isCopied ? \"check\" : [\"far\", \"clone\"]}\n tooltip=\"Copy\"\n onClick={onCopy}\n />\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageActionBar: typeof MessageActionBar;\n }\n}\n","\"use client\";\n\nimport { MarkdownWithOpenUI } from \"tfy-web-components/components/molecules/Markdown\";\n\nimport { useThemeMode } from \"../theme/SlotsProvider.js\";\n\nexport type MarkdownProps = {\n content: string;\n isStreaming?: boolean;\n /** Base URL for resolving sandbox artifact download paths (e.g. gateway file endpoint). */\n fileDownloadBaseUrl?: string;\n /** Custom download handler that receives the original sandbox artifact path. */\n onDownloadArtifact?: (path: string, filename: string) => Promise<void>;\n /** When true, download actions in sandbox artifact blocks are hidden/disabled. */\n readOnly?: boolean;\n className?: string;\n};\n\nexport function Markdown({\n content,\n isStreaming,\n fileDownloadBaseUrl,\n onDownloadArtifact,\n readOnly,\n className,\n}: MarkdownProps) {\n const mode = useThemeMode();\n\n return (\n <MarkdownWithOpenUI\n isStreaming={isStreaming}\n darkTheme={mode === \"dark\"}\n fileDownloadBaseUrl={fileDownloadBaseUrl}\n onDownloadArtifact={onDownloadArtifact}\n readOnly={readOnly}\n className={className}\n >\n {content}\n </MarkdownWithOpenUI>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n Markdown: typeof Markdown;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { AssistantMessage } from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type AssistantMessageBubbleProps = {\n children: ReactNode;\n error?: ReactNode;\n actionBar?: ReactNode;\n className?: string;\n};\n\nexport function AssistantMessageBubble({\n children,\n error,\n actionBar,\n className,\n}: AssistantMessageBubbleProps) {\n return (\n <div\n data-slot=\"aui_assistant-message-root\"\n className={cn(\n \"group/assistant fade-in slide-in-from-bottom-1 animate-in relative duration-150\",\n className,\n )}\n >\n <AssistantMessage error={error} actionBar={actionBar}>\n {children}\n </AssistantMessage>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AssistantMessageBubble: typeof AssistantMessageBubble;\n }\n}\n","import { forwardRef, type ComponentPropsWithRef } from \"react\";\n\nimport Spinner from \"tfy-web-components/components/atoms/Spinner\";\n\nimport { cn } from \"./lib/cn.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 small />}\n </div>\n ),\n);\nHistoryLoader.displayName = \"HistoryLoader\";\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n HistoryLoader: typeof HistoryLoader;\n }\n}\n","import { cn } from \"./lib/cn.js\";\n\nexport type MessageErrorBannerProps = {\n message: string;\n className?: string;\n};\n\nexport function MessageErrorBanner({ message, className }: MessageErrorBannerProps) {\n return (\n <div\n role=\"alert\"\n className={cn(\n \"aui-message-error-root border-destructive bg-destructive/10 text-destructive dark:bg-destructive/5 mt-2 rounded-md border p-3 text-sm dark:text-red-200\",\n className,\n )}\n >\n <span className=\"aui-message-error-message line-clamp-2\">{message}</span>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageErrorBanner: typeof MessageErrorBanner;\n }\n}\n","import { cn } from \"./lib/cn.js\";\n\nexport type MessageIndicatorProps = {\n className?: string;\n};\n\nexport function MessageIndicator({ className }: MessageIndicatorProps) {\n return (\n <span\n data-slot=\"aui_assistant-message-indicator\"\n className={cn(\"animate-pulse font-sans\", className)}\n aria-label=\"Assistant is working\"\n >\n {\"●\"}\n </span>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageIndicator: typeof MessageIndicator;\n }\n}\n","\"use client\";\n\nimport { useAuiState } from \"@assistant-ui/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\n\nfunction toDate(createdAt: Date | string | undefined): Date | null {\n if (createdAt == null) {\n return null;\n }\n const date = createdAt instanceof Date ? createdAt : new Date(createdAt);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\nfunction formatTime(date: Date): string {\n return new Intl.DateTimeFormat(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true,\n }).format(date);\n}\n\nfunction formatFullDate(date: Date): string {\n return new Intl.DateTimeFormat(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: true,\n }).format(date);\n}\n\nexport type MessageTimestampProps = {\n className?: string;\n};\n\nexport function MessageTimestamp({ className }: MessageTimestampProps) {\n const LightTooltip = useSlot(\"LightTooltip\");\n const createdAt = useAuiState((s) => s.message.createdAt);\n const date = toDate(createdAt);\n\n if (date == null) {\n return null;\n }\n\n return (\n <LightTooltip title={formatFullDate(date)} size=\"fit\">\n <span\n className={cn(\n \"text-xs font-medium cursor-pointer leading-normal shrink-0 text-muted-foreground\",\n className,\n )}\n >\n {formatTime(date)}\n </span>\n </LightTooltip>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageTimestamp: typeof MessageTimestamp;\n }\n}\n","\"use client\";\n\nimport { ActionBarPrimitive, useAuiState } from \"@assistant-ui/react\";\nimport { useActionBarCopy, useActionBarEdit } from \"@assistant-ui/core/react\";\nimport { useTrueFoundryResetFromTurn } from \"@truefoundry/assistant-ui-runtime\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\n\nfunction parseTurnIdFromMessageId(messageId: string): string {\n return messageId.replace(/-user$/, \"\");\n}\n\nexport type UserMessageActionBarProps = {\n className?: string;\n};\n\nexport function UserMessageActionBar({ className }: UserMessageActionBarProps) {\n const IconButton = useSlot(\"IconButton\");\n const MessageTimestamp = useSlot(\"MessageTimestamp\");\n const messageId = useAuiState((s) => s.message.id);\n const turnId = parseTurnIdFromMessageId(messageId);\n const resetFromTurn = useTrueFoundryResetFromTurn();\n const { edit, disabled: editDisabled } = useActionBarEdit();\n const { copy, isCopied } = useActionBarCopy({\n copyToClipboard: (text) => navigator.clipboard.writeText(text),\n });\n\n return (\n <ActionBarPrimitive.Root\n hideWhenRunning\n className={cn(\n \"aui-user-action-bar-root text-muted-foreground animate-in fade-in flex items-center gap-2 duration-200\",\n className,\n )}\n >\n <IconButton\n icon=\"rotate-right\"\n tooltip=\"Try again\"\n onClick={() => void resetFromTurn(turnId)}\n />\n <IconButton\n icon=\"pencil\"\n tooltip=\"Edit\"\n disabled={editDisabled}\n onClick={edit}\n />\n <IconButton\n icon={isCopied ? \"check\" : [\"far\", \"clone\"]}\n tooltip=\"Copy\"\n onClick={copy}\n />\n <MessageTimestamp />\n </ActionBarPrimitive.Root>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n UserMessageActionBar: typeof UserMessageActionBar;\n }\n}\n","import { forwardRef, type ComponentPropsWithRef, type CSSProperties } from \"react\";\n\nimport { cn } from \"./lib/cn.js\";\n\nconst THREAD_CSS_VARS: CSSProperties = {\n [\"--thread-max-width\" as string]: \"44rem\",\n [\"--composer-bg\" as string]: \"color-mix(in oklab, var(--color-muted) 30%, var(--color-background))\",\n [\"--composer-radius\" as string]: \"1.5rem\",\n [\"--composer-padding\" as string]: \"8px\",\n};\n\nexport type ThreadRootShellProps = ComponentPropsWithRef<\"div\">;\n\nexport const ThreadRootShell = forwardRef<HTMLDivElement, ThreadRootShellProps>(\n ({ className, style, ...rest }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"font-sans-flex aui-root aui-thread-root bg-background @container flex h-full min-h-0 flex-col overflow-hidden\",\n className,\n )}\n style={{ ...THREAD_CSS_VARS, ...style }}\n {...rest}\n />\n ),\n);\nThreadRootShell.displayName = \"ThreadRootShell\";\n\nexport type ThreadViewportShellProps = ComponentPropsWithRef<\"div\"> & {\n isEmpty?: boolean;\n};\n\nexport const ThreadViewportShell = forwardRef<HTMLDivElement, ThreadViewportShellProps>(\n ({ className, isEmpty, children, ...rest }, ref) => (\n <div\n ref={ref}\n data-slot=\"aui_thread-viewport\"\n className={cn(\"relative flex min-h-0 flex-1 flex-col overflow-x-auto overflow-y-auto scroll-smooth\", className)}\n {...rest}\n >\n <div\n className={cn(\n \"mx-auto flex w-full max-w-(--thread-max-width) flex-col px-4 pt-4 pb-4\",\n isEmpty && \"min-h-full justify-center\",\n )}\n >\n {children}\n </div>\n </div>\n ),\n);\nThreadViewportShell.displayName = \"ThreadViewportShell\";\n\nexport type ThreadComposerAreaShellProps = ComponentPropsWithRef<\"div\"> & {\n isEmpty?: boolean;\n};\n\nexport const ThreadComposerAreaShell = forwardRef<HTMLDivElement, ThreadComposerAreaShellProps>(\n ({ className, isEmpty, ...rest }, ref) => (\n <div\n ref={ref}\n data-slot=\"aui_thread-composer\"\n className={cn(\n \"aui-thread-composer bg-background relative mx-auto flex w-full max-w-(--thread-max-width) shrink-0 flex-col gap-4 px-4 pb-4 md:pb-6\",\n !isEmpty && \"rounded-t-(--composer-radius)\",\n className,\n )}\n {...rest}\n />\n ),\n);\nThreadComposerAreaShell.displayName = \"ThreadComposerAreaShell\";\n\nexport type MessageGroupProps = ComponentPropsWithRef<\"div\">;\n\nexport const MessageGroup = forwardRef<HTMLDivElement, MessageGroupProps>(({ className, ...rest }, ref) => (\n <div\n ref={ref}\n data-slot=\"aui_message-group\"\n className={cn(\"flex flex-col gap-y-6 empty:hidden\", className)}\n {...rest}\n />\n));\nMessageGroup.displayName = \"MessageGroup\";\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ThreadRootShell: typeof ThreadRootShell;\n ThreadViewportShell: typeof ThreadViewportShell;\n ThreadComposerAreaShell: typeof ThreadComposerAreaShell;\n MessageGroup: typeof MessageGroup;\n }\n}\n","import { cn } from \"./lib/cn.js\";\n\nexport type WelcomeScreenProps = {\n heading?: string;\n className?: string;\n};\n\nexport function WelcomeScreen({ heading = \"How can I help you today?\", className }: WelcomeScreenProps) {\n return (\n <div className={cn(\"aui-thread-welcome-root mb-6 flex flex-col items-center px-4 text-center\", className)}>\n <h1 className=\"aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both text-2xl font-semibold duration-200\">\n {heading}\n </h1>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n WelcomeScreen: typeof WelcomeScreen;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ToastProps = {\n title: string;\n description: string;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n className?: string;\n};\n\nexport function Toast({ title, description, open, onOpenChange, className }: ToastProps) {\n if (!open) return null;\n\n return (\n <div\n className={cn(\n \"font-sans-flex border-destructive bg-background text-destructive dark:bg-card pointer-events-auto relative flex max-h-[min(70vh,32rem)] w-full items-start gap-3 rounded-xl border p-4 shadow-lg dark:text-red-200\",\n \"animate-in fade-in-0 slide-in-from-bottom-4\",\n className,\n )}\n >\n <div className=\"grid min-h-0 min-w-0 flex-1 gap-1 overflow-y-auto pe-6\">\n <div className=\"text-sm leading-none font-semibold\">{title}</div>\n <div className=\"font-mono text-sm break-words whitespace-pre-wrap\">\n {description}\n </div>\n </div>\n <button\n onClick={() => onOpenChange(false)}\n className=\"text-destructive hover:bg-muted focus-visible:ring-ring absolute top-3 right-3 rounded-md p-1 transition-colors focus:outline-none focus-visible:ring-2\"\n >\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </button>\n </div>\n );\n}\n\nexport type ToastStackProps = {\n children: ReactNode;\n duration?: number;\n};\n\nexport function ToastStack({ children, duration = Number.POSITIVE_INFINITY }: ToastStackProps) {\n return (\n <div className=\"pointer-events-none fixed bottom-4 left-1/2 z-50 flex h-full max-h-screen w-full max-w-2xl -translate-x-1/2 flex-col-reverse gap-2 px-4\">\n {children}\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n Toast: typeof Toast;\n ToastStack: typeof ToastStack;\n }\n}\n","import { createContext, createElement, useContext, type ReactNode } from \"react\";\n\n/**\n * Semantic color roles. Atoms reference these instead of raw hex/HSL values so a\n * future design-system swap only has to repoint the token values, not the atoms.\n */\nexport type ColorToken =\n | \"background\"\n | \"foreground\"\n | \"muted\"\n | \"mutedForeground\"\n | \"border\"\n | \"primary\"\n | \"primaryForeground\"\n | \"destructive\"\n | \"destructiveForeground\"\n | \"accent\"\n | \"accentForeground\";\n\nexport type RadiusToken = \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\n\nexport type SpacingToken = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport type TypeRoleToken = \"body\" | \"bodySmall\" | \"label\" | \"heading\" | \"code\" | \"caption\";\n\nexport interface TypeRoleValue {\n fontSize: string;\n lineHeight: string;\n fontWeight: string | number;\n}\n\nexport interface DesignTokens {\n colors: Record<ColorToken, string>;\n radii: Record<RadiusToken, string>;\n spacing: Record<SpacingToken, string>;\n typography: Record<TypeRoleToken, TypeRoleValue>;\n}\n\n/**\n * Values reference the CSS custom properties already emitted by the shadcn/Tailwind\n * theme in the ported reference app, so default atoms render identically to today\n * without requiring every atom to be rewritten to consume tokens in this pass.\n */\nexport const defaultTokens: DesignTokens = {\n colors: {\n background: \"var(--background)\",\n foreground: \"var(--foreground)\",\n muted: \"var(--muted)\",\n mutedForeground: \"var(--muted-foreground)\",\n border: \"var(--border)\",\n primary: \"var(--primary)\",\n primaryForeground: \"var(--primary-foreground)\",\n destructive: \"var(--destructive)\",\n destructiveForeground: \"var(--destructive-foreground)\",\n accent: \"var(--accent)\",\n accentForeground: \"var(--accent-foreground)\",\n },\n radii: {\n none: \"0px\",\n sm: \"calc(var(--radius) - 4px)\",\n md: \"calc(var(--radius) - 2px)\",\n lg: \"var(--radius)\",\n full: \"9999px\",\n },\n spacing: {\n none: \"0px\",\n xs: \"0.25rem\",\n sm: \"0.5rem\",\n md: \"0.75rem\",\n lg: \"1rem\",\n xl: \"1.5rem\",\n },\n typography: {\n body: { fontSize: \"0.875rem\", lineHeight: \"1.5rem\", fontWeight: 400 },\n bodySmall: { fontSize: \"0.75rem\", lineHeight: \"1.25rem\", fontWeight: 400 },\n label: { fontSize: \"0.75rem\", lineHeight: \"1rem\", fontWeight: 500 },\n heading: { fontSize: \"1.25rem\", lineHeight: \"1.75rem\", fontWeight: 600 },\n code: { fontSize: \"0.8125rem\", lineHeight: \"1.25rem\", fontWeight: 400 },\n caption: { fontSize: \"0.6875rem\", lineHeight: \"1rem\", fontWeight: 400 },\n },\n};\n\nconst TokensContext = createContext<DesignTokens>(defaultTokens);\n\nexport function TokensProvider({\n tokens,\n children,\n}: {\n tokens: DesignTokens;\n children: ReactNode;\n}) {\n return createElement(TokensContext.Provider, { value: tokens }, children);\n}\n\n/** Atoms may call this for theme-driven values; it is not an assistant-ui/runtime hook. */\nexport function useTokens(): DesignTokens {\n return useContext(TokensContext);\n}\n","\"use client\";\n\nimport \"./icons/fontawesome.js\";\nimport \"./icons/registerAgentIcons.js\";\n\nexport { SlotsProvider, useSlot, useThemeMode } from \"./theme/SlotsProvider.js\";\nexport type { AtomSlots, SlotOverrides, ThemeMode } from \"./theme/SlotsProvider.js\";\nexport { defaultSlots } from \"./theme/defaultSlots.js\";\nexport { TokensProvider, useTokens, defaultTokens } from \"./theme/tokens.js\";\nexport type {\n ColorToken,\n RadiusToken,\n SpacingToken,\n TypeRoleToken,\n TypeRoleValue,\n DesignTokens,\n} from \"./theme/tokens.js\";\n\nexport {\n Button,\n DestructiveButton,\n GhostButton,\n PrimaryButton,\n SecondaryButton,\n TertiaryButton,\n} from \"tfy-web-components/components/atoms/Button\";\nexport type {\n ButtonProps,\n ButtonSize,\n} from \"tfy-web-components/components/atoms/Button\";\nexport { default as IconButton } from \"tfy-web-components/components/atoms/IconButton\";\nexport type { IconButtonProps } from \"tfy-web-components/components/atoms/IconButton\";\nexport {\n default as IconProvider,\n registerIcons,\n registerImgIcons,\n} from \"tfy-web-components/components/atoms/IconProvider\";\nexport type { IconProp } from \"tfy-web-components/components/atoms/IconProvider\";\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n} from \"./atoms/primitives/Avatar.js\";\nexport type {\n AvatarProps,\n AvatarImageProps,\n AvatarFallbackProps,\n} from \"./atoms/primitives/Avatar.js\";\nexport { LightTooltip } from \"tfy-web-components/components/atoms/Tooltip\";\nexport type { TooltipProps } from \"tfy-web-components/components/atoms/Tooltip\";\nexport { default as Modal } from \"tfy-web-components/components/atoms/Modal\";\nexport type { ModalProps } from \"tfy-web-components/components/atoms/Modal\";\nexport { default as Dialog } from \"tfy-web-components/components/molecules/Dialog\";\nexport {\n Accordion,\n AccordionSummary,\n AccordionDetails,\n} from \"tfy-web-components/components/atoms/Accordion\";\nexport type { AccordionSummaryProps } from \"tfy-web-components/components/atoms/Accordion\";\nexport { default as Skeleton } from \"tfy-web-components/components/atoms/Skeleton\";\n\nexport { Markdown } from \"./atoms/Markdown.js\";\nexport type { MarkdownProps } from \"./atoms/Markdown.js\";\nexport { UserMessageBubble } from \"./atoms/UserMessageBubble.js\";\nexport type { UserMessageBubbleProps } from \"./atoms/UserMessageBubble.js\";\nexport { UserMessageEdit } from \"./atoms/UserMessageEdit.js\";\nexport type { UserMessageEditProps } from \"./atoms/UserMessageEdit.js\";\nexport { AssistantMessageBubble } from \"./atoms/AssistantMessageBubble.js\";\nexport type { AssistantMessageBubbleProps } from \"./atoms/AssistantMessageBubble.js\";\nexport { MessageErrorBanner } from \"./atoms/MessageErrorBanner.js\";\nexport type { MessageErrorBannerProps } from \"./atoms/MessageErrorBanner.js\";\nexport { MessageActionBar } from \"./atoms/MessageActionBar.js\";\nexport type { MessageActionBarProps } from \"./atoms/MessageActionBar.js\";\nexport { MessageTimestamp } from \"./atoms/MessageTimestamp.js\";\nexport type { MessageTimestampProps } from \"./atoms/MessageTimestamp.js\";\nexport { UserMessageActionBar } from \"./atoms/UserMessageActionBar.js\";\nexport type { UserMessageActionBarProps } from \"./atoms/UserMessageActionBar.js\";\nexport { MessageIndicator } from \"./atoms/MessageIndicator.js\";\nexport type { MessageIndicatorProps } from \"./atoms/MessageIndicator.js\";\nexport { WelcomeScreen } from \"./atoms/WelcomeScreen.js\";\nexport type { WelcomeScreenProps } from \"./atoms/WelcomeScreen.js\";\nexport { MessageListSkeleton } from \"./atoms/Skeletons.js\";\nexport type { MessageListSkeletonProps } from \"./atoms/Skeletons.js\";\nexport { ScrollToBottomButton } from \"./atoms/ScrollToBottomButton.js\";\nexport type { ScrollToBottomButtonProps } from \"./atoms/ScrollToBottomButton.js\";\nexport { HistoryLoader } from \"./atoms/HistoryLoader.js\";\nexport type { HistoryLoaderProps } from \"./atoms/HistoryLoader.js\";\nexport {\n ThreadRootShell,\n ThreadViewportShell,\n ThreadComposerAreaShell,\n MessageGroup,\n} from \"./atoms/ThreadShell.js\";\nexport type {\n ThreadRootShellProps,\n ThreadViewportShellProps,\n ThreadComposerAreaShellProps,\n MessageGroupProps,\n} from \"./atoms/ThreadShell.js\";\n\nexport { ToolCallCard } from \"./atoms/ToolCallCard.js\";\nexport type {\n ToolCallStatus,\n ToolCallCardProps,\n} from \"./atoms/ToolCallCard.js\";\nexport { ToolCallContentBlock } from \"./atoms/ToolCallContentBlock.js\";\nexport type { ToolCallContentBlockProps } from \"./atoms/ToolCallContentBlock.js\";\nexport { SubAgentCard } from \"./atoms/SubAgentCard.js\";\nexport type { SubAgentCardProps } from \"./atoms/SubAgentCard.js\";\nexport { SandboxToolCallCard } from \"./atoms/SandboxToolCallCard.js\";\nexport type { SandboxToolCallCardProps } from \"./atoms/SandboxToolCallCard.js\";\nexport { ToolApprovalBar } from \"./atoms/ToolApprovalBar.js\";\nexport type { ToolApprovalBarProps } from \"./atoms/ToolApprovalBar.js\";\nexport { ToolGroupCard } from \"./atoms/ToolGroupCard.js\";\nexport type { ToolGroupCardProps } from \"./atoms/ToolGroupCard.js\";\nexport { AgentStepsCard } from \"./atoms/AgentStepsCard.js\";\nexport type { AgentStepsCardProps } from \"./atoms/AgentStepsCard.js\";\nexport type { ReasoningCardProps } from \"./atoms/adapters/ReasoningCardAdapter.js\";\nexport { ComposerShell } from \"./atoms/ComposerShell.js\";\nexport type { ComposerShellProps } from \"./atoms/ComposerShell.js\";\nexport {\n ComposerLeftSection,\n ComposerRightSection,\n ComposerSendButton,\n} from \"./atoms/ComposerSections.js\";\nexport type {\n ComposerLeftSectionProps,\n ComposerRightSectionProps,\n ComposerSendButtonProps,\n} from \"./atoms/ComposerSections.js\";\nexport type {\n AskUserPromptProps,\n AskUserPromptProps as AskUserQuestionCardProps,\n AskUserAnswerDraft,\n AnsweredQuestion as AskUserAnsweredQuestion,\n Question as AskUserQuestion,\n} from \"./atoms/adapters/AskUserPromptAdapter.js\";\nexport type {\n McpAuthPromptProps,\n McpAuthPromptProps as McpAuthCardProps,\n McpServer as McpAuthServer,\n} from \"./atoms/adapters/McpAuthPromptAdapter.js\";\nexport {\n AttachmentCard,\n USER_MESSAGE_ATTACHMENT_PREVIEW_REM,\n} from \"./atoms/AttachmentCard.js\";\nexport type {\n AttachmentCardProps,\n AttachmentCardSize,\n} from \"./atoms/AttachmentCard.js\";\nexport { AttachmentPreviewDialog } from \"./atoms/AttachmentPreviewDialog.js\";\nexport type { AttachmentPreviewDialogProps } from \"./atoms/AttachmentPreviewDialog.js\";\nexport { AttachmentPickerButton } from \"./atoms/AttachmentPickerButton.js\";\nexport type { AttachmentPickerButtonProps } from \"./atoms/AttachmentPickerButton.js\";\nexport { ThreadListRow } from \"./atoms/ThreadListRow.js\";\nexport type { ThreadListRowProps } from \"./atoms/ThreadListRow.js\";\nexport {\n ThreadListNewButton,\n ThreadListRowSkeleton,\n ThreadListEmptyState,\n ThreadListShell,\n} from \"./atoms/ThreadListMisc.js\";\nexport type {\n ThreadListNewButtonProps,\n ThreadListRowSkeletonProps,\n ThreadListEmptyStateProps,\n ThreadListShellProps,\n} from \"./atoms/ThreadListMisc.js\";\nexport { Toast, ToastStack } from \"./atoms/Toast.js\";\nexport type { ToastProps, ToastStackProps } from \"./atoms/Toast.js\";\nexport { ThreadContainer } from \"./containers/ThreadContainer.js\";\nexport type { ThreadContainerProps } from \"./containers/ThreadContainer.js\";\nexport { HistoryLoaderContainer } from \"./containers/HistoryLoaderContainer.js\";\nexport { AssistantMessageContainer } from \"./containers/AssistantMessageContainer.js\";\nexport { UserMessageContainer } from \"./containers/UserMessageContainer.js\";\nexport { UserEditComposerContainer } from \"./containers/UserEditComposerContainer.js\";\nexport { AssistantTextContainer } from \"./containers/AssistantTextContainer.js\";\nexport { ToolCallContainer } from \"./containers/ToolCallContainer.js\";\nexport { ToolCallContentBlockContainer } from \"./containers/ToolCallContentBlockContainer.js\";\nexport { ToolApprovalContainer } from \"./containers/ToolApprovalContainer.js\";\nexport type { ToolApprovalOption } from \"./containers/ToolApprovalContainer.js\";\nexport { ToolGroupContainer } from \"./containers/ToolGroupContainer.js\";\nexport type { ThreadGroupPart } from \"./containers/ToolGroupContainer.js\";\nexport { AgentStepsContainer } from \"./containers/AgentStepsContainer.js\";\nexport type { AgentStepsContainerProps } from \"./containers/AgentStepsContainer.js\";\nexport { ReasoningContainer } from \"./containers/ReasoningContainer.js\";\nexport { ComposerContainer } from \"./containers/ComposerContainer.js\";\nexport type { ComposerContainerProps } from \"./containers/ComposerContainer.js\";\nexport {\n ComposerBusyProvider,\n useComposerBusyState,\n} from \"./hooks/useComposerBusyState.js\";\nexport type { ComposerBusyState } from \"./hooks/useComposerBusyState.js\";\nexport {\n threadHasPendingMcpAuth,\n useComposerPauseView,\n} from \"./hooks/useComposerPauseView.js\";\nexport type {\n ComposerPauseView,\n ThreadPauseState,\n} from \"./hooks/useComposerPauseView.js\";\nexport { AskUserContainer } from \"./containers/AskUserContainer.js\";\nexport { McpAuthContainer } from \"./containers/McpAuthContainer.js\";\nexport {\n ComposerAttachmentsContainer,\n ComposerAttachmentPickerContainer,\n MessageAttachmentsContainer,\n} from \"./containers/AttachmentsContainer.js\";\nexport { ThreadListContainer } from \"./containers/ThreadListContainer.js\";\nexport {\n ErrorToasterProvider,\n useErrorToaster,\n useErrorToasterOptional,\n} from \"./containers/ErrorToasterContainer.js\";\nexport { Thread } from \"./containers/Thread.js\";\n\n// Utils\nexport { computeAgentStepsSplit } from \"./utils/computeAgentStepsSplit.js\";\nexport type { AgentStepsSplitResult } from \"./utils/computeAgentStepsSplit.js\";\n","\"use client\";\n\nimport { useEffect, type ReactNode } from \"react\";\nimport { preloadMarkdownOpenUI } from \"tfy-web-components/components/molecules/Markdown\";\nimport { ThreadPrimitive, useAuiState, type AssistantState } from \"@assistant-ui/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { ComposerBusyProvider } from \"../hooks/useComposerBusyState.js\";\nimport { AssistantMessageContainer } from \"./AssistantMessageContainer.js\";\nimport { HistoryLoaderContainer } from \"./HistoryLoaderContainer.js\";\nimport { UserEditComposerContainer } from \"./UserEditComposerContainer.js\";\nimport { UserMessageContainer } from \"./UserMessageContainer.js\";\n\n// Startup exposes a loading placeholder thread; treat it as a new chat so the\n// composer mounts centered. Loads after startup keep the docked layout.\nconst isNewChatView = (s: AssistantState) =>\n s.thread.messages.length === 0 && (!s.thread.isLoading || s.threads.isLoading);\n\nfunction ThreadMessage({ isEditing }: { isEditing: boolean }) {\n const role = useAuiState((s) => s.message.role);\n if (role === \"user\") {\n if (isEditing) {\n return <UserEditComposerContainer />;\n }\n return <UserMessageContainer />;\n }\n return <AssistantMessageContainer />;\n}\n\nexport type ThreadContainerProps = {\n /**\n * Rendered in the bottom composer area. Left undefined until\n * `ComposerContainer` exists (milestone 6); the public `<Thread/>` export\n * wires the two together once it does.\n */\n composer?: ReactNode;\n};\n\nexport function ThreadContainer({ composer }: ThreadContainerProps) {\n useEffect(() => {\n void preloadMarkdownOpenUI();\n }, []);\n\n const ThreadRootShell = useSlot(\"ThreadRootShell\");\n const ThreadViewportShell = useSlot(\"ThreadViewportShell\");\n const ThreadComposerAreaShell = useSlot(\"ThreadComposerAreaShell\");\n const MessageGroup = useSlot(\"MessageGroup\");\n const WelcomeScreen = useSlot(\"WelcomeScreen\");\n const MessageListSkeleton = useSlot(\"MessageListSkeleton\");\n const ScrollToBottomButton = useSlot(\"ScrollToBottomButton\");\n\n const isEmpty = useAuiState(isNewChatView);\n const isLoading = useAuiState((s) => s.thread.isLoading);\n\n return (\n <ComposerBusyProvider>\n <ThreadPrimitive.Root asChild>\n <ThreadRootShell>\n <ThreadPrimitive.Viewport asChild turnAnchor=\"top\" autoScroll>\n <ThreadViewportShell isEmpty={isEmpty}>\n {isEmpty && <WelcomeScreen />}\n {isLoading ? (\n <MessageListSkeleton />\n ) : (\n <>\n <HistoryLoaderContainer />\n <MessageGroup>\n <ThreadPrimitive.Messages>\n {({ message }) => (\n <ThreadMessage\n isEditing={\n message.role === \"user\" &&\n message.composer.isEditing\n }\n />\n )}\n </ThreadPrimitive.Messages>\n </MessageGroup>\n </>\n )}\n </ThreadViewportShell>\n </ThreadPrimitive.Viewport>\n\n {!isLoading && (\n <ThreadComposerAreaShell isEmpty={isEmpty}>\n {!isEmpty && (\n <ThreadPrimitive.ScrollToBottom asChild>\n <ScrollToBottomButton />\n </ThreadPrimitive.ScrollToBottom>\n )}\n {composer}\n </ThreadComposerAreaShell>\n )}\n </ThreadRootShell>\n </ThreadPrimitive.Root>\n </ComposerBusyProvider>\n );\n}\n","\"use client\";\n\nimport { useThreadIsRunning } from \"@assistant-ui/core/react\";\nimport { createContext, createElement, useCallback, useContext, useEffect, useState, type ReactNode } from \"react\";\n\nexport type ComposerBusyState = {\n /** True while submitting or while the turn stream is active. */\n isBusy: boolean;\n isRunning: boolean;\n isSubmitting: boolean;\n send: (sendFn: () => void | Promise<void>) => void;\n resetBusy: () => void;\n};\n\nconst ComposerBusyContext = createContext<ComposerBusyState | null>(null);\n\nfunction useComposerBusyStateValue(): ComposerBusyState {\n const isRunning = useThreadIsRunning();\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n useEffect(() => {\n if (!isRunning) {\n setIsSubmitting(false);\n }\n }, [isRunning]);\n\n const isBusy = isRunning || isSubmitting;\n\n const resetBusy = useCallback(() => {\n setIsSubmitting(false);\n }, []);\n\n const send = useCallback((sendFn: () => void | Promise<void>) => {\n setIsSubmitting(true);\n try {\n const result = sendFn();\n if (result != null && typeof result.then === \"function\") {\n void result.catch(() => {\n setIsSubmitting(false);\n });\n }\n } catch {\n setIsSubmitting(false);\n }\n }, []);\n\n return { isBusy, isRunning, isSubmitting, send, resetBusy };\n}\n\nexport function ComposerBusyProvider({ children }: { children: ReactNode }) {\n const value = useComposerBusyStateValue();\n return createElement(ComposerBusyContext.Provider, { value }, children);\n}\n\n/**\n * Optimistic composer busy state shared across the thread. `useThreadIsRunning()`\n * only becomes true once the turn stream starts; this hook flips to busy\n * immediately on submit so the send button shows loading before session setup /\n * turn API work finishes.\n *\n * Must be used within `<ComposerBusyProvider>` (wired by default in `<Thread />`).\n */\nexport function useComposerBusyState(): ComposerBusyState {\n const value = useContext(ComposerBusyContext);\n if (value == null) {\n throw new Error(\"useComposerBusyState must be used within ComposerBusyProvider\");\n }\n return value;\n}\n","\"use client\";\n\nimport { MessagePrimitive, type EnrichedPartState, useAuiState, type GroupByContext } from \"@assistant-ui/react\";\nimport { useActionBarCopy, useMessageError, useThreadIsRunning, type PartState } from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { computeAgentStepsSplit } from \"../utils/computeAgentStepsSplit.js\";\nimport { AssistantTextContainer } from \"./AssistantTextContainer.js\";\nimport { MessageImageContainer } from \"./MessageImageContainer.js\";\nimport { ReasoningContainer } from \"./ReasoningContainer.js\";\nimport { ToolCallContainer } from \"./ToolCallContainer.js\";\nimport { AgentStepsContainer } from \"./AgentStepsContainer.js\";\nimport type { ThreadGroupPart } from \"./ToolGroupContainer.js\";\n\n/**\n * Dispatches a leaf message part to its renderer. \"data\" parts (generative\n * UI) are out of scope for this SDK entirely.\n */\nfunction AssistantLeafPartContainer({ part }: { part: EnrichedPartState }) {\n switch (part.type) {\n case \"text\":\n case \"reasoning\":\n return <AssistantTextContainer />;\n case \"image\":\n return <MessageImageContainer />;\n case \"tool-call\":\n return <ToolCallContainer {...part} />;\n default:\n return null;\n }\n}\n\nexport function AssistantMessageContainer() {\n const AssistantMessageBubble = useSlot(\"AssistantMessageBubble\");\n const MessageIndicator = useSlot(\"MessageIndicator\");\n const MessageErrorBanner = useSlot(\"MessageErrorBanner\");\n const MessageActionBar = useSlot(\"MessageActionBar\");\n\n const isRunning = useThreadIsRunning();\n const error = useMessageError();\n const { copy, isCopied } = useActionBarCopy({\n copyToClipboard: (text) => navigator.clipboard.writeText(text),\n });\n\n const parts = useAuiState((s) => s.message.parts);\n \n const { cutIndex, hasFinal, toolCount, thinkingCount } = computeAgentStepsSplit(parts, isRunning);\n\n const groupBy = (part: PartState, _context: GroupByContext): readonly `group-${string}`[] | null => {\n const index = parts.findIndex((p) => p === part);\n if (index === -1) return null;\n\n if (part.type === \"text\" && index >= cutIndex) {\n return null;\n }\n\n if (index < cutIndex) {\n if (part.type === \"reasoning\") {\n return [\"group-agentSteps\", \"group-reasoning\"];\n }\n return [\"group-agentSteps\"];\n }\n\n return null;\n };\n\n const agentStepsActive = isRunning && !hasFinal;\n\n return (\n <MessagePrimitive.Root data-role=\"assistant\">\n <AssistantMessageBubble\n error={error !== undefined ? <MessageErrorBanner message={String(error)} /> : undefined}\n actionBar={\n !isRunning ? (\n <MessageActionBar isCopied={isCopied} onCopy={copy} />\n ) : undefined\n }\n >\n <MessagePrimitive.GroupedParts groupBy={groupBy}>\n {({ part, children }) => {\n switch (part.type) {\n case \"group-agentSteps\":\n return (\n <AgentStepsContainer\n toolCount={toolCount}\n thinkingCount={thinkingCount}\n hasFinal={hasFinal}\n active={agentStepsActive}\n >\n {children}\n </AgentStepsContainer>\n );\n case \"group-reasoning\":\n return (\n <ReasoningContainer group={part as ThreadGroupPart} />\n );\n case \"text\":\n case \"reasoning\":\n case \"tool-call\":\n case \"image\":\n case \"data\":\n return <AssistantLeafPartContainer part={part} />;\n case \"indicator\":\n return <MessageIndicator />;\n default:\n return null;\n }\n }}\n </MessagePrimitive.GroupedParts>\n </AssistantMessageBubble>\n </MessagePrimitive.Root>\n );\n}\n","import type { PartState } from \"@assistant-ui/core/react\";\n\nexport interface AgentStepsSplitResult {\n cutIndex: number;\n hasFinal: boolean;\n toolCount: number;\n thinkingCount: number;\n}\n\nexport function computeAgentStepsSplit(\n parts: readonly PartState[],\n isRunning: boolean,\n): AgentStepsSplitResult {\n const finalTexts: Array<{ index: number; content: string }> = [];\n let cutIdx = parts.length;\n\n for (let i = parts.length - 1; i >= 0; i--) {\n const part = parts[i];\n if (!part) continue;\n\n if (part.type === \"text\") {\n const text = (part as { text?: string }).text ?? \"\";\n const trimmed = text.trim();\n \n if (trimmed) {\n finalTexts.unshift({ index: i, content: text });\n cutIdx = i;\n } else {\n cutIdx = i;\n }\n } else {\n break;\n }\n }\n\n const trailingChars = finalTexts.reduce((sum, t) => sum + t.content.length, 0);\n\n const finalConfirmed = finalTexts.length > 0 && (!isRunning || trailingChars >= 500);\n\n const actualCutIndex = finalConfirmed ? cutIdx : parts.length;\n\n let toolCount = 0;\n let thinkingCount = 0;\n for (let i = 0; i < actualCutIndex; i++) {\n const part = parts[i];\n if (!part) continue;\n \n if (part.type === \"tool-call\") {\n toolCount++;\n } else if (part.type === \"reasoning\") {\n thinkingCount++;\n }\n }\n\n return {\n cutIndex: actualCutIndex,\n hasFinal: finalConfirmed,\n toolCount,\n thinkingCount,\n };\n}\n","\"use client\";\n\nimport { useCallback } from \"react\";\nimport { useAuiState } from \"@assistant-ui/react\";\nimport { useTrueFoundryDownloadSandboxFile } from \"@truefoundry/assistant-ui-runtime\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { useErrorToasterOptional } from \"./ErrorToasterContainer.js\";\n\nfunction filenameFromPath(path: string): string {\n return path.split(\"/\").pop() || \"download\";\n}\n\nfunction triggerBrowserDownload(blob: Blob, filename: string) {\n if (typeof document === \"undefined\") return;\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = filename;\n anchor.click();\n URL.revokeObjectURL(url);\n}\n\nexport function AssistantTextContainer() {\n const Markdown = useSlot(\"Markdown\");\n const downloadSandboxFile = useTrueFoundryDownloadSandboxFile();\n const errorToaster = useErrorToasterOptional();\n const text = useAuiState((s) =>\n s.part.type === \"text\" || s.part.type === \"reasoning\" ? s.part.text : \"\",\n );\n const isStreaming = useAuiState((s) => {\n if (s.message.status?.type !== \"running\") return false;\n const lastIndex = s.message.parts.length - 1;\n if (lastIndex < 0) return false;\n if (s.part.type !== \"text\" && s.part.type !== \"reasoning\") return false;\n return s.message.parts[lastIndex] === s.part;\n });\n const handleDownloadArtifact = useCallback(\n (path: string) =>\n downloadSandboxFile(path)\n .then((blob) => triggerBrowserDownload(blob, filenameFromPath(path)))\n .catch((error) => {\n if (errorToaster != null) {\n errorToaster.showError(error);\n } else {\n console.error(\"Failed to download sandbox artifact\", error);\n }\n }),\n [downloadSandboxFile, errorToaster],\n );\n\n return <Markdown content={text} isStreaming={isStreaming} onDownloadArtifact={handleDownloadArtifact} />;\n}\n","\"use client\";\n\nimport { createContext, useCallback, useContext, useMemo, useState, type ReactNode } from \"react\";\nimport { TrueFoundryGatewayError } from \"truefoundry-gateway-sdk\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\ntype ErrorToastContent = { title: string; description: string };\n\ntype ErrorToasterContextValue = { showError: (error: unknown) => void };\n\nconst ErrorToasterContext = createContext<ErrorToasterContextValue | null>(null);\n\nfunction formatErrorBody(body: unknown): string | undefined {\n if (body == null) return undefined;\n if (typeof body === \"string\") return body;\n try {\n return JSON.stringify(body, null, 2);\n } catch {\n return String(body);\n }\n}\n\nfunction normalizeError(error: unknown): ErrorToastContent {\n if (error instanceof TrueFoundryGatewayError) {\n const statusCode = error.statusCode;\n const title = statusCode != null ? `Request failed (${statusCode})` : \"Request failed\";\n const description = formatErrorBody(error.body) ?? (error.message || \"The gateway returned an error.\");\n return { title, description };\n }\n\n if (error instanceof Error) {\n return { title: \"Something went wrong\", description: error.message || \"An unexpected error occurred.\" };\n }\n\n return { title: \"Something went wrong\", description: String(error) };\n}\n\nexport function ErrorToasterProvider({ children }: { children: ReactNode }) {\n const ToastStack = useSlot(\"ToastStack\");\n const Toast = useSlot(\"Toast\");\n\n const [toast, setToast] = useState<ErrorToastContent | null>(null);\n const [open, setOpen] = useState(false);\n\n const showError = useCallback((error: unknown) => {\n setToast(normalizeError(error));\n setOpen(true);\n }, []);\n\n const value = useMemo(() => ({ showError }), [showError]);\n\n return (\n <ErrorToasterContext.Provider value={value}>\n {children}\n <ToastStack>\n {toast != null && (\n <Toast title={toast.title} description={toast.description} open={open} onOpenChange={setOpen} />\n )}\n </ToastStack>\n </ErrorToasterContext.Provider>\n );\n}\n\nexport function useErrorToaster(): ErrorToasterContextValue {\n const context = useContext(ErrorToasterContext);\n if (context == null) {\n throw new Error(\"useErrorToaster must be used within ErrorToasterProvider\");\n }\n return context;\n}\n\n/** Same as `useErrorToaster`, but returns `null` instead of throwing outside `ErrorToasterProvider`. */\nexport function useErrorToasterOptional(): ErrorToasterContextValue | null {\n return useContext(ErrorToasterContext);\n}\n","\"use client\";\n\nimport { useAuiState } from \"@assistant-ui/react\";\n\nimport { USER_MESSAGE_ATTACHMENT_PREVIEW_REM } from \"../constants/attachments.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport function MessageImageContainer() {\n const AttachmentCard = useSlot(\"AttachmentCard\");\n const AttachmentPreviewDialog = useSlot(\"AttachmentPreviewDialog\");\n const image = useAuiState((s) => (s.part.type === \"image\" ? s.part.image : \"\"));\n const filename = useAuiState((s) =>\n s.part.type === \"image\" ? s.part.filename : undefined,\n );\n\n if (!image) {\n return null;\n }\n\n const card = (\n <AttachmentCard\n name={filename ?? \"image\"}\n previewSrc={image}\n isImage\n size=\"preview\"\n previewRem={USER_MESSAGE_ATTACHMENT_PREVIEW_REM}\n />\n );\n\n return (\n <AttachmentPreviewDialog previewSrc={image}>\n <div className=\"aui-message-image\">{card}</div>\n </AttachmentPreviewDialog>\n );\n}\n","\"use client\";\n\nimport { useCallback, useRef, useState } from \"react\";\nimport { useAuiState } from \"@assistant-ui/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport type { ThreadGroupPart } from \"./ToolGroupContainer.js\";\n\nexport function ReasoningContainer({ group }: { group: ThreadGroupPart }) {\n const ReasoningCard = useSlot(\"ReasoningCard\");\n\n const content = useAuiState((s) =>\n group.indices\n .map((i) => s.message.parts[i])\n .filter((p): p is NonNullable<typeof p> => p != null && p.type === \"reasoning\")\n .map((p) => ((p as { text?: string }).text ?? \"\"))\n .join(\"\"),\n );\n\n const streaming = useAuiState((s) => {\n if (s.message.status?.type !== \"running\") return false;\n const lastIndex = s.message.parts.length - 1;\n if (lastIndex < 0) return false;\n if (s.message.parts[lastIndex]?.type !== \"reasoning\") return false;\n const lastGroupIndex = group.indices[group.indices.length - 1];\n return lastGroupIndex !== undefined && lastIndex >= group.indices[0]! && lastIndex <= lastGroupIndex;\n });\n\n const [expanded, setExpanded] = useState(streaming);\n const [prevStreaming, setPrevStreaming] = useState(streaming);\n const [isMultiLine, setIsMultiLine] = useState(false);\n const observerRef = useRef<ResizeObserver | null>(null);\n if (streaming !== prevStreaming) {\n setPrevStreaming(streaming);\n if (streaming) setExpanded(true);\n }\n\n const contentRef = useCallback(\n (node: HTMLDivElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n if (node == null || streaming) return;\n\n const check = () => {\n const lineHeight = Number.parseFloat(getComputedStyle(node).lineHeight) || 24;\n setIsMultiLine(node.scrollHeight > lineHeight * 1.5);\n };\n\n check();\n observerRef.current = new ResizeObserver(check);\n observerRef.current.observe(node);\n },\n [streaming],\n );\n const reasoningTimeText = null;\n const previewText = content.replace(/\\s+/g, \" \").trim();\n const isShortText = !streaming && content.length > 0 && !isMultiLine;\n const headingText =\n streaming && !content\n ? expanded\n ? \"Reasoning\"\n : \"Show Reasoning\"\n : reasoningTimeText ?? (expanded ? \"Hide Reasoning\" : \"Show Reasoning\");\n\n return (\n <ReasoningCard\n content={content}\n isStreaming={streaming}\n expanded={expanded}\n isMultiLine={isMultiLine}\n reasoningTimeText={reasoningTimeText}\n previewText={previewText}\n headingText={headingText}\n contentRef={isShortText ? contentRef : undefined}\n onToggle={() => setExpanded((prev) => !prev)}\n />\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport {\n MessagePartPrimitive,\n MessagePrimitive,\n useToolCallElapsed,\n type ToolApprovalOption as AuiToolApprovalOption,\n type ToolApprovalResponse,\n type ToolCallMessagePartComponent,\n type ToolCallMessagePartProps,\n} from \"@assistant-ui/react\";\nimport { useTrueFoundryRespondToToolApproval } from \"@truefoundry/assistant-ui-runtime\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport type { ToolCallStatus } from \"../atoms/ToolCallCard.js\";\nimport { AssistantTextContainer } from \"./AssistantTextContainer.js\";\nimport {\n NestedApprovalBridgeContext,\n useNestedApprovalBridge,\n} from \"./nestedApprovalBridge.js\";\nimport { SandboxToolCallContainer } from \"./SandboxToolCallContainer.js\";\nimport {\n ToolApprovalContainer,\n type ToolApprovalOption,\n} from \"./ToolApprovalContainer.js\";\nimport { ToolCallContentBlockContainer } from \"./ToolCallContentBlockContainer.js\";\n\nconst SUB_AGENT_TOOL_NAME = \"create_sub_agent\";\nconst ASK_USER_TOOL_NAME = \"ask_user_question\";\n\nfunction NestedSubAgentAssistantMessage() {\n const AssistantMessageBubble = useSlot(\"AssistantMessageBubble\");\n\n return (\n <div className=\"mb-3 min-w-0\">\n <MessagePrimitive.Root data-role=\"assistant\">\n <AssistantMessageBubble>\n <MessagePrimitive.Parts\n components={{\n Text: AssistantTextContainer,\n Reasoning: AssistantTextContainer,\n tools: { Fallback: ToolCallContainer },\n }}\n />\n </AssistantMessageBubble>\n </MessagePrimitive.Root>\n </div>\n );\n}\n\nfunction parseAskUserQuestionArgs(argsText: string | undefined): {\n question?: string;\n options?: string[];\n} {\n if (!argsText) return {};\n try {\n const parsed: unknown = JSON.parse(argsText);\n if (parsed == null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return {};\n }\n const record = parsed as Record<string, unknown>;\n const question =\n typeof record.question === \"string\" ? record.question : undefined;\n const options = Array.isArray(record.options)\n ? record.options.filter(\n (item): item is string => typeof item === \"string\",\n )\n : undefined;\n return { question, options };\n } catch {\n return {};\n }\n}\n\nfunction getAskUserAnswerResult(result: unknown): string | undefined {\n if (result === undefined || result === null) return undefined;\n if (typeof result === \"string\") {\n const trimmed = result.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n if (typeof result === \"object\" && \"content\" in result) {\n const content = (result as { content?: unknown }).content;\n if (typeof content === \"string\" && content.trim()) {\n return content.trim();\n }\n }\n return undefined;\n}\n\nfunction hasPendingAskUserResponse(\n part: Pick<ToolCallMessagePartProps, \"interrupt\" | \"result\">,\n): boolean {\n return part.interrupt != null && part.result === undefined;\n}\n\n/** Tool names that should be rendered as a sandbox execution card. */\nconst SANDBOX_TOOL_NAMES = new Set([\"exec\", \"sandbox_exec\"]);\n\n/** MCP meta-tools that wrap actual tool calls. */\nconst MCP_META_TOOLS = new Set([\"call_tool\", \"list_tools\", \"get_tool_info\"]);\n\nconst APPROVAL_OPTION_DEFAULT_LABELS: Record<string, string> = {\n \"allow-once\": \"Allow\",\n \"allow-always\": \"Always allow\",\n \"reject-once\": \"Deny\",\n \"reject-always\": \"Always deny\",\n};\n\nconst isAllowKind = (kind: string) =>\n kind === \"allow-once\" || kind === \"allow-always\";\n\nfunction hasPendingToolApproval(\n approval:\n { approved?: boolean; resolution?: \"cancelled\" | \"expired\" } | undefined,\n) {\n return (\n approval != null &&\n approval.approved === undefined &&\n approval.resolution === undefined\n );\n}\n\nfunction buildApprovalOptions(\n options: readonly AuiToolApprovalOption[] | undefined,\n): ToolApprovalOption[] {\n const declared = options?.filter((o) =>\n Object.hasOwn(APPROVAL_OPTION_DEFAULT_LABELS, o.kind),\n );\n if (declared && declared.length > 0) {\n const allow = declared.filter((o) => isAllowKind(o.kind));\n const reject = declared.filter((o) => !isAllowKind(o.kind));\n const mapped: ToolApprovalOption[] = [...allow, ...reject].map((o) => ({\n id: o.id,\n label: o.label ?? APPROVAL_OPTION_DEFAULT_LABELS[o.kind] ?? o.id,\n isAllow: isAllowKind(o.kind),\n grants: o.grants,\n confirm:\n o.confirm != null\n ? typeof o.confirm === \"object\"\n ? o.confirm\n : {}\n : undefined,\n }));\n if (reject.length === 0) {\n mapped.push({ id: \"__deny\", label: \"Deny\", isAllow: false, confirm: {} });\n }\n return mapped;\n }\n return [\n { id: \"__allow\", label: \"Allow\", isAllow: true },\n { id: \"__deny\", label: \"Deny\", isAllow: false, confirm: {} },\n ];\n}\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) return \"<1s\";\n const seconds = ms / 1000;\n if (seconds < 10) return `${(Math.floor(seconds * 10) / 10).toFixed(1)}s`;\n if (seconds < 60) return `${Math.floor(seconds)}s`;\n return `${Math.floor(seconds / 60)}m ${Math.floor(seconds % 60)}s`;\n}\n\nfunction toStatus(statusType: string | undefined): ToolCallStatus {\n if (statusType === \"complete\") return \"success\";\n if (statusType === \"incomplete\") return \"error\";\n return \"running\";\n}\n\nfunction parseSandboxArgs(argsText: string | undefined): {\n command?: string;\n intent?: string;\n argsJson?: string;\n} {\n if (!argsText) return {};\n try {\n const parsed = JSON.parse(argsText) as {\n command?: string;\n intent?: string;\n };\n return {\n command: parsed.command,\n intent: parsed.intent,\n argsJson: JSON.stringify(parsed, null, 2),\n };\n } catch {\n return { argsJson: argsText };\n }\n}\n\nfunction parseSandboxResult(result: string | undefined): {\n exitCode?: number | null;\n resultText?: string;\n resultJson?: string;\n} {\n if (result === undefined) return {};\n try {\n const parsed = JSON.parse(result) as {\n response?: { exitCode?: number; result?: string };\n };\n const exitCode = parsed.response?.exitCode ?? null;\n const resultText = parsed.response?.result;\n return {\n exitCode,\n resultText,\n resultJson: JSON.stringify(parsed, null, 2),\n };\n } catch {\n return { resultText: result };\n }\n}\n\nfunction parseMcpToolArgs(argsText: string | undefined): {\n mcpServer?: string;\n innerToolName?: string;\n input?: unknown;\n} {\n if (!argsText) return {};\n try {\n const parsed = JSON.parse(argsText) as {\n mcp_server?: string;\n tool_name?: string;\n input?: unknown;\n };\n return {\n mcpServer: parsed.mcp_server,\n innerToolName: parsed.tool_name,\n input: parsed.input,\n };\n } catch {\n return {};\n }\n}\n\nfunction getJsonDisplayValue(content: string | undefined): {\n value: string;\n isJson: boolean;\n} {\n if (!content?.trim()) return { value: \"\", isJson: false };\n const trimmed = content.trim();\n if (trimmed[0] !== \"{\" && trimmed[0] !== \"[\") {\n return { value: content, isJson: false };\n }\n try {\n const parsed = JSON.parse(content);\n return { value: JSON.stringify(parsed, null, 2), isJson: true };\n } catch {\n return { value: content, isJson: false };\n }\n}\n\nfunction getToolResultContent(content: unknown): {\n data: string;\n isJson: boolean;\n} {\n try {\n if (!content) return { isJson: false, data: \"\" };\n\n const parsedResult =\n typeof content === \"string\" && content.trim().startsWith(\"{\")\n ? JSON.parse(content)\n : content;\n\n if (Array.isArray(parsedResult.content)) {\n const text = parsedResult.content[0]?.text || \"\";\n const display = getJsonDisplayValue(\n typeof text === \"string\" ? text : JSON.stringify(text),\n );\n return { data: display.value, isJson: display.isJson };\n }\n const display = getJsonDisplayValue(\n typeof parsedResult === \"string\"\n ? parsedResult\n : JSON.stringify(parsedResult),\n );\n return { data: display.value, isJson: display.isJson };\n } catch (error) {\n return { data: String(content), isJson: false };\n }\n}\n\nfunction ToolApprovalSlot({ part }: { part: ToolCallMessagePartProps }) {\n const nestedBridge = useNestedApprovalBridge();\n\n const respond = (response: ToolApprovalResponse) => {\n if (nestedBridge) {\n nestedBridge(response);\n return;\n }\n part.respondToApproval(response);\n };\n\n const onSelectOption = (optionId: string, reason?: string) => {\n if (optionId === \"__allow\") return respond({ approved: true });\n if (optionId === \"__deny\") return respond({ approved: false, reason });\n return respond({ optionId, reason });\n };\n\n return (\n <ToolApprovalContainer\n toolName={part.toolName}\n options={buildApprovalOptions(part.approval?.options)}\n onSelectOption={onSelectOption}\n />\n );\n}\n\nexport const ToolCallContainer: ToolCallMessagePartComponent = (part) => {\n const ToolCallCard = useSlot(\"ToolCallCard\");\n const SubAgentCard = useSlot(\"SubAgentCard\");\n const AskUserPrompt = useSlot(\"AskUserPrompt\");\n const respondToNestedApproval = useTrueFoundryRespondToToolApproval();\n const elapsedMs = useToolCallElapsed();\n const isRequiresAction = part.status?.type === \"requires-action\";\n const isSubAgent = part.toolName === SUB_AGENT_TOOL_NAME;\n const isSandbox = SANDBOX_TOOL_NAMES.has(part.toolName);\n const [expanded, setExpanded] = useState(isRequiresAction);\n const [prevRequiresAction, setPrevRequiresAction] =\n useState(isRequiresAction);\n if (isRequiresAction !== prevRequiresAction) {\n setPrevRequiresAction(isRequiresAction);\n if (isRequiresAction) setExpanded(true);\n }\n\n const showApproval =\n isRequiresAction && hasPendingToolApproval(part.approval);\n\n const durationText =\n elapsedMs === undefined ? undefined : formatDuration(elapsedMs);\n const status = toStatus(part.status?.type);\n\n if (part.toolName === ASK_USER_TOOL_NAME) {\n if (hasPendingAskUserResponse(part)) {\n return null;\n }\n const answer = getAskUserAnswerResult(part.result);\n if (answer == null) {\n return null;\n }\n const { question, options = [] } = parseAskUserQuestionArgs(part.argsText);\n const isCustom = options.length > 0 && !options.includes(answer);\n return (\n <AskUserPrompt\n questions={[]}\n answeredQuestions={[\n {\n id: part.toolCallId,\n question: question ?? \"Question\",\n options,\n answer,\n isCustom,\n },\n ]}\n onSubmit={() => {}}\n readOnly\n />\n );\n }\n\n if (isSubAgent) {\n const artifactSubAgent = (\n part as {\n artifact?: {\n subAgents?: Array<{\n title?: string;\n agentInfo?: { name?: string; input?: string };\n }>;\n };\n }\n ).artifact?.subAgents?.[0];\n const firstNested = part.messages?.[0];\n const subAgent = (\n firstNested?.metadata?.custom as\n | { subAgent?: { title?: string; name?: string; input?: string } }\n | undefined\n )?.subAgent;\n const agentName =\n subAgent?.title ??\n subAgent?.name ??\n artifactSubAgent?.title ??\n artifactSubAgent?.agentInfo?.name ??\n part.toolName;\n const instruction =\n subAgent?.input ?? artifactSubAgent?.agentInfo?.input ?? \"\";\n const stepCount = part.messages?.length ?? 0;\n\n const bridge = (response: ToolApprovalResponse) => {\n if (part.approval == null) return;\n const approved = \"approved\" in response ? response.approved : undefined;\n if (approved === undefined) return;\n respondToNestedApproval({ approvalId: part.approval.id, approved });\n };\n\n return (\n <div\n data-slot=\"tool-call-card\"\n data-variant=\"sub-agent\"\n className=\"w-full\"\n >\n <SubAgentCard\n status={status}\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n durationText={durationText}\n agentName={agentName}\n instruction={instruction}\n stepCount={stepCount}\n >\n <NestedApprovalBridgeContext.Provider value={bridge}>\n <MessagePartPrimitive.Messages\n components={{\n AssistantMessage: NestedSubAgentAssistantMessage,\n UserMessage: () => null,\n }}\n />\n </NestedApprovalBridgeContext.Provider>\n </SubAgentCard>\n </div>\n );\n }\n\n const resultString =\n part.result === undefined\n ? undefined\n : typeof part.result === \"string\"\n ? part.result\n : JSON.stringify(part.result, null, 2);\n\n if (isSandbox) {\n const { command, intent, argsJson } = parseSandboxArgs(part.argsText);\n const { exitCode, resultText, resultJson } =\n parseSandboxResult(resultString);\n return (\n <SandboxToolCallContainer\n name={part.toolName}\n intent={intent}\n status={status}\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n durationText={durationText}\n command={command}\n exitCode={exitCode}\n argsJson={argsJson}\n resultText={resultText}\n resultJson={resultJson}\n />\n );\n }\n\n const isMcpMetaTool = MCP_META_TOOLS.has(part.toolName);\n if (isMcpMetaTool) {\n const { mcpServer, innerToolName, input } = parseMcpToolArgs(part.argsText);\n const argsDisplay = getJsonDisplayValue(part.argsText);\n const resultDisplay = getToolResultContent(part.result);\n\n if (part.toolName === \"list_tools\" && mcpServer) {\n return (\n <ToolCallCard\n toolName={`Listing tools · ${mcpServer}`}\n icon=\"mcp-server\"\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n awaiting={status === \"running\"}\n awaitingText={durationText ?? \"Awaiting Response…\"}\n showResponseLine={status !== \"running\" && !!resultDisplay.data}\n mcpServerName={mcpServer}\n requestSlot={\n argsDisplay.value ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content={argsDisplay.value}\n isJson={argsDisplay.isJson}\n maxHeight=\"10.5rem\"\n />\n ) : resultDisplay.data ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content=\"{}\"\n isJson\n maxHeight=\"10.5rem\"\n />\n ) : undefined\n }\n responseSlot={\n resultDisplay.data ? (\n <ToolCallContentBlockContainer\n title=\"Response\"\n content={resultDisplay.data}\n isJson={resultDisplay.isJson}\n resizable\n />\n ) : undefined\n }\n />\n );\n }\n\n let displayName = part.toolName;\n if (part.toolName === \"call_tool\" && innerToolName) {\n displayName = mcpServer\n ? `call_tool: ${innerToolName} (${mcpServer})`\n : `call_tool: ${innerToolName}`;\n } else if (\n part.toolName === \"get_tool_info\" &&\n innerToolName &&\n mcpServer\n ) {\n displayName = `get_tool_info: ${innerToolName} (${mcpServer})`;\n }\n\n const inputDisplay =\n input !== undefined\n ? getJsonDisplayValue(JSON.stringify(input, null, 2))\n : argsDisplay;\n\n return (\n <ToolCallCard\n toolName={displayName}\n icon=\"mcp-server\"\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n awaiting={status === \"running\"}\n awaitingText={durationText ?? \"Awaiting Response…\"}\n showResponseLine={\n status !== \"running\" && resultDisplay.data !== undefined\n }\n mcpServerName={mcpServer}\n requestSlot={\n inputDisplay.value ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content={inputDisplay.value}\n isJson={inputDisplay.isJson}\n maxHeight=\"10.5rem\"\n />\n ) : resultDisplay.data !== undefined ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content=\"{}\"\n isJson\n maxHeight=\"10.5rem\"\n />\n ) : undefined\n }\n responseSlot={\n resultDisplay.data !== undefined ? (\n <ToolCallContentBlockContainer\n title=\"Response\"\n content={resultDisplay.data}\n isJson={resultDisplay.isJson}\n resizable\n />\n ) : undefined\n }\n approvalSlot={\n showApproval ? <ToolApprovalSlot part={part} /> : undefined\n }\n />\n );\n }\n\n const argsDisplay = getJsonDisplayValue(part.argsText);\n const resultDisplay = getToolResultContent(part.result);\n\n return (\n <ToolCallCard\n toolName={part.toolName}\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n awaiting={status === \"running\"}\n awaitingText={durationText ?? \"Awaiting Response…\"}\n showResponseLine={\n status !== \"running\" && resultDisplay.data !== undefined\n }\n requestSlot={\n argsDisplay.value ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content={argsDisplay.value}\n isJson={argsDisplay.isJson}\n maxHeight=\"10.5rem\"\n />\n ) : resultDisplay.data !== undefined ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content=\"{}\"\n isJson\n maxHeight=\"10.5rem\"\n />\n ) : undefined\n }\n responseSlot={\n resultDisplay.data !== undefined ? (\n <ToolCallContentBlockContainer\n title=\"Response\"\n content={resultDisplay.data}\n isJson={resultDisplay.isJson}\n resizable\n />\n ) : undefined\n }\n approvalSlot={showApproval ? <ToolApprovalSlot part={part} /> : undefined}\n />\n );\n};\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { ToolApprovalResponse } from \"@assistant-ui/react\";\n\n/**\n * Sub-agent tool calls render inside a read-only nested thread context\n * (`MessagePartPrimitive.Messages`), so the standard `respondToApproval` prop\n * on their parts doesn't route back to the gateway. `ToolCallContainer` uses\n * this bridge instead when rendering nested calls, translating the response\n * through `useTrueFoundryRespondToToolApproval()` -- mirrors the reference's\n * `nestedToolCallMessageComponents` override.\n */\nexport const NestedApprovalBridgeContext = createContext<((response: ToolApprovalResponse) => void) | null>(\n null,\n);\n\nexport function useNestedApprovalBridge(): ((response: ToolApprovalResponse) => void) | null {\n return useContext(NestedApprovalBridgeContext);\n}\n","\"use client\";\n\nimport { useMemo, useState } from \"react\";\n\nimport type { SandboxToolCallCardProps } from \"../atoms/SandboxToolCallCard.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport function SandboxToolCallContainer(\n props: Omit<\n SandboxToolCallCardProps,\n \"viewMode\" | \"hasContent\" | \"onViewModeChange\"\n >,\n) {\n const SandboxToolCallCard = useSlot(\"SandboxToolCallCard\");\n const [viewMode, setViewMode] = useState<\"terminal\" | \"code\">(\"terminal\");\n const hasContent = useMemo(() => {\n if (viewMode === \"code\") return Boolean(props.argsJson || props.resultJson);\n return Boolean(props.command || props.resultText || props.resultJson);\n }, [\n props.argsJson,\n props.command,\n props.resultJson,\n props.resultText,\n viewMode,\n ]);\n\n return (\n <SandboxToolCallCard\n {...props}\n viewMode={viewMode}\n hasContent={hasContent}\n onViewModeChange={setViewMode}\n />\n );\n}\n","\"use client\";\n\nimport { useCallback, useMemo, useState } from \"react\";\n\nimport type { ApprovalOption } from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport type ToolApprovalOption = {\n id: string;\n label: string;\n isAllow: boolean;\n grants?: readonly string[];\n confirm?: {\n title?: string;\n description?: string;\n };\n};\n\ntype ToolApprovalContainerProps = {\n toolName?: string;\n options: ToolApprovalOption[];\n onSelectOption: (optionId: string, reason?: string) => void;\n};\n\nexport function ToolApprovalContainer({\n toolName = \"\",\n options,\n onSelectOption,\n}: ToolApprovalContainerProps) {\n const ToolApprovalBar = useSlot(\"ToolApprovalBar\");\n const [selectedDenyOptionId, setSelectedDenyOptionId] = useState<\n string | null\n >(null);\n const [denialReason, setDenialReason] = useState(\"\");\n const [showReasonError, setShowReasonError] = useState(false);\n const approveOptions = useMemo<ApprovalOption[]>(\n () =>\n options\n .filter((option) => option.isAllow)\n .map((option, index) => ({\n ...option,\n variant: index === 0 ? \"primary\" : \"secondary\",\n requiresReason: false,\n })),\n [options],\n );\n const denyOptions = useMemo<ApprovalOption[]>(\n () =>\n options\n .filter((option) => !option.isAllow)\n .map((option) => ({\n ...option,\n variant: \"secondary\",\n requiresReason: option.confirm != null,\n })),\n [options],\n );\n const selectedDenyOption = denyOptions.find(\n (option) => option.id === selectedDenyOptionId,\n );\n\n const onDenyOptionChange = useCallback((optionId: string | null) => {\n setSelectedDenyOptionId(optionId);\n setDenialReason(\"\");\n setShowReasonError(false);\n }, []);\n const onDenialReasonChange = useCallback((reason: string) => {\n setDenialReason(reason);\n setShowReasonError(false);\n }, []);\n const onReasonSubmit = useCallback(() => {\n const reason = denialReason.trim();\n if (!reason) {\n setShowReasonError(true);\n return;\n }\n if (selectedDenyOptionId) {\n onSelectOption(selectedDenyOptionId, reason);\n onDenyOptionChange(null);\n }\n }, [denialReason, onDenyOptionChange, onSelectOption, selectedDenyOptionId]);\n\n return (\n <ToolApprovalBar\n toolName={toolName}\n approveOptions={approveOptions.length > 0 ? approveOptions : undefined}\n denyOptions={denyOptions.length > 0 ? denyOptions : undefined}\n selectedDenyOption={selectedDenyOption}\n denialReason={denialReason}\n showReasonError={showReasonError}\n onSelect={onSelectOption}\n onDenyOptionChange={onDenyOptionChange}\n onDenialReasonChange={onDenialReasonChange}\n onReasonSubmit={onReasonSubmit}\n />\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport type { ToolCallContentBlockProps } from \"../atoms/ToolCallContentBlock.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport function ToolCallContentBlockContainer(\n props: ToolCallContentBlockProps,\n) {\n const ToolCallContentBlock = useSlot(\"ToolCallContentBlock\");\n const [fullscreen, setFullscreen] = useState(false);\n const [contentHeightRem, setContentHeightRem] = useState(1.5);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const contentRef = useCallback(\n (node: HTMLDivElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n if (!props.resizable || node == null) return;\n\n const updateHeight = () => setContentHeightRem(node.scrollHeight / 16);\n updateHeight();\n observerRef.current = new ResizeObserver(updateHeight);\n observerRef.current.observe(node);\n },\n [props.resizable],\n );\n\n useEffect(\n () => () => {\n observerRef.current?.disconnect();\n },\n [],\n );\n\n return (\n <ToolCallContentBlock\n {...props}\n fullscreen={fullscreen}\n onFullscreenChange={setFullscreen}\n contentHeightRem={contentHeightRem}\n contentRef={contentRef}\n />\n );\n}\n","\"use client\";\n\nimport { useState, useEffect, useRef, type PropsWithChildren, type ReactNode } from \"react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport interface AgentStepsContainerProps {\n toolCount: number;\n thinkingCount: number;\n hasFinal: boolean;\n active: boolean;\n}\n\n/**\n * Container for \"Agent steps\" section — groups reasoning, intermediate text, and tools\n * in a collapsible accordion that auto-collapses once final answer is confirmed.\n */\nexport function AgentStepsContainer({\n children,\n toolCount,\n thinkingCount,\n hasFinal,\n active,\n}: PropsWithChildren<AgentStepsContainerProps>) {\n const AgentStepsCard = useSlot(\"AgentStepsCard\");\n\n const [expanded, setExpanded] = useState(true);\n const collapsedByFinal = useRef(false);\n\n // Auto-collapse once when hasFinal becomes true (matches AgentTimeline behavior)\n useEffect(() => {\n if (hasFinal && !collapsedByFinal.current) {\n collapsedByFinal.current = true;\n setExpanded(false);\n }\n }, [hasFinal]);\n\n return (\n <AgentStepsCard\n toolCount={toolCount}\n thinkingCount={thinkingCount}\n expanded={expanded}\n active={active}\n onToggle={() => setExpanded((prev) => !prev)}\n >\n {children as ReactNode}\n </AgentStepsCard>\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useTrueFoundryHistoryPagination } from \"@truefoundry/assistant-ui-runtime\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\n/** How close to the viewport top (px) before the next older page is fetched. */\nconst TOP_THRESHOLD_PX = 200;\n\nconst VIEWPORT_SELECTOR = '[data-slot=\"aui_thread-viewport\"]';\n\n/**\n * Renders the `HistoryLoader` slot at the top of the message list and fetches\n * the next older history page when the user scrolls near it. Scroll position\n * is preserved across the prepend so the list doesn't jump.\n *\n * Must be rendered inside `ThreadViewportShell` (it locates the scroll root\n * via the `aui_thread-viewport` data-slot on its nearest scrollable ancestor).\n */\nexport function HistoryLoaderContainer() {\n const HistoryLoader = useSlot(\"HistoryLoader\");\n const { hasOlderHistory, isLoadingOlderHistory, loadOlderHistory } =\n useTrueFoundryHistoryPagination();\n\n const [sentinel, setSentinel] = useState<HTMLDivElement | null>(null);\n const inflightRef = useRef(false);\n\n const maybeLoadOlder = useCallback(async () => {\n if (inflightRef.current) return;\n inflightRef.current = true;\n\n const viewport = sentinel?.closest<HTMLElement>(VIEWPORT_SELECTOR) ?? null;\n const prevScrollHeight = viewport?.scrollHeight ?? 0;\n const prevScrollTop = viewport?.scrollTop ?? 0;\n\n try {\n await loadOlderHistory();\n // Wait for React to commit the prepended messages, then restore the\n // user's anchor so the list doesn't jump to the oldest message.\n requestAnimationFrame(() => {\n if (viewport == null) return;\n const delta = viewport.scrollHeight - prevScrollHeight;\n if (delta > 0) {\n viewport.scrollTo({ top: prevScrollTop + delta, behavior: \"instant\" });\n }\n });\n } catch {\n // Runtime surfaces the error via onError; the sentinel stays retryable.\n } finally {\n inflightRef.current = false;\n }\n }, [sentinel, loadOlderHistory]);\n\n useEffect(() => {\n if (sentinel == null || !hasOlderHistory) return;\n\n const viewport = sentinel.closest<HTMLElement>(VIEWPORT_SELECTOR);\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n void maybeLoadOlder();\n }\n },\n { root: viewport, rootMargin: `${TOP_THRESHOLD_PX}px 0px 0px 0px` },\n );\n observer.observe(sentinel);\n return () => observer.disconnect();\n }, [sentinel, hasOlderHistory, maybeLoadOlder]);\n\n if (!hasOlderHistory) return null;\n\n return <HistoryLoader ref={setSentinel} isLoading={isLoadingOlderHistory} />;\n}\n","\"use client\";\n\nimport {\n ComposerPrimitive,\n MessagePrimitive,\n useAuiState,\n} from \"@assistant-ui/react\";\nimport { useComposerCancel, useComposerSend, useThreadIsRunning } from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { MessageAttachmentsContainer } from \"./AttachmentsContainer.js\";\n\nfunction ReadOnlyMessageAttachments() {\n const hasAttachments = useAuiState(\n (s) => (s.message.attachments?.length ?? 0) > 0,\n );\n if (!hasAttachments) {\n return null;\n }\n return (\n <div className=\"pointer-events-none mb-2 opacity-90\">\n <MessageAttachmentsContainer />\n </div>\n );\n}\n\nexport function UserEditComposerContainer() {\n const Button = useSlot(\"Button\");\n const MessageTimestamp = useSlot(\"MessageTimestamp\");\n const UserMessageEdit = useSlot(\"UserMessageEdit\");\n const isRunning = useThreadIsRunning();\n const { cancel, disabled: cancelDisabled } = useComposerCancel();\n const { send, disabled: sendDisabled } = useComposerSend();\n\n return (\n <MessagePrimitive.Root data-role=\"user\">\n <div\n data-slot=\"aui_user-edit-composer-root\"\n className=\"fade-in slide-in-from-bottom-1 animate-in flex w-full justify-end px-2 duration-150\"\n >\n <ComposerPrimitive.Root asChild>\n <UserMessageEdit\n timestamp={\n <MessageTimestamp className=\"text-gray-500\" />\n }\n attachments={<ReadOnlyMessageAttachments />}\n input={\n <div className=\"mt-1 rounded border border-gray-250 bg-gray-100 p-2 text-gray-750 dark:border-gray-275 dark:bg-gray-275\">\n <ComposerPrimitive.Input\n disabled={isRunning}\n className=\"max-h-32 min-h-10 w-full resize-none border-none bg-transparent p-0 text-base leading-[1.34] outline-none focus:shadow-none\"\n />\n </div>\n }\n footer={\n <div className=\"flex items-center justify-end gap-2\">\n <Button.Secondary\n type=\"button\"\n disabled={cancelDisabled}\n onClick={cancel}\n text=\"Cancel\"\n />\n <Button.Primary\n type=\"button\"\n disabled={sendDisabled || isRunning}\n onClick={() => send()}\n text=\"Save & Rerun\"\n />\n </div>\n }\n />\n </ComposerPrimitive.Root>\n </div>\n </MessagePrimitive.Root>\n );\n}\n","\"use client\";\n\nimport { ComposerPrimitive, MessagePrimitive, useAui, useAuiState } from \"@assistant-ui/react\";\n\nimport { USER_MESSAGE_ATTACHMENT_PREVIEW_REM } from \"../constants/attachments.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { isImageAttachment, useAttachmentPreviewSrc } from \"./useAttachmentPreviewSrc.js\";\n\nfunction ComposerAttachmentItem() {\n const AttachmentCard = useSlot(\"AttachmentCard\");\n const AttachmentPreviewDialog = useSlot(\"AttachmentPreviewDialog\");\n const aui = useAui();\n const name = useAuiState((s) => s.attachment.name);\n const contentType = useAuiState((s) => s.attachment.contentType);\n const type = useAuiState((s) => s.attachment.type);\n const isImage = isImageAttachment(type, contentType);\n const previewSrc = useAttachmentPreviewSrc();\n\n return (\n <AttachmentPreviewDialog previewSrc={previewSrc}>\n <AttachmentCard\n name={name}\n contentType={contentType}\n previewSrc={previewSrc}\n isImage={isImage}\n size=\"chip\"\n onRemove={() => void aui.attachment().remove()}\n />\n </AttachmentPreviewDialog>\n );\n}\n\nfunction MessageAttachmentItem() {\n const AttachmentCard = useSlot(\"AttachmentCard\");\n const AttachmentPreviewDialog = useSlot(\"AttachmentPreviewDialog\");\n const name = useAuiState((s) => s.attachment.name);\n const contentType = useAuiState((s) => s.attachment.contentType);\n const type = useAuiState((s) => s.attachment.type);\n const isImage = isImageAttachment(type, contentType);\n const previewSrc = useAttachmentPreviewSrc();\n\n const card = (\n <AttachmentCard\n name={name}\n contentType={contentType}\n previewSrc={previewSrc}\n isImage={isImage}\n size={isImage ? \"preview\" : \"chip\"}\n previewRem={USER_MESSAGE_ATTACHMENT_PREVIEW_REM}\n />\n );\n\n if (isImage && previewSrc) {\n return <AttachmentPreviewDialog previewSrc={previewSrc}>{card}</AttachmentPreviewDialog>;\n }\n\n return card;\n}\n\nexport function ComposerAttachmentsContainer() {\n return (\n <div className=\"aui-composer-attachments flex w-full flex-row flex-wrap items-center gap-2 empty:hidden\">\n <ComposerPrimitive.Attachments>{() => <ComposerAttachmentItem />}</ComposerPrimitive.Attachments>\n </div>\n );\n}\n\nexport function MessageAttachmentsContainer() {\n return (\n <div className=\"aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2\">\n <MessagePrimitive.Attachments>{() => <MessageAttachmentItem />}</MessagePrimitive.Attachments>\n </div>\n );\n}\n\nexport function ComposerAttachmentPickerContainer() {\n const AttachmentPickerButton = useSlot(\"AttachmentPickerButton\");\n return (\n <ComposerPrimitive.AddAttachment asChild>\n <AttachmentPickerButton />\n </ComposerPrimitive.AddAttachment>\n );\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useAuiState } from \"@assistant-ui/react\";\n\nexport function isImageAttachment(type: string, contentType?: string): boolean {\n return type === \"image\" || (contentType?.startsWith(\"image/\") ?? false);\n}\n\nfunction useFileObjectUrl(file: File | undefined): string | undefined {\n const [src, setSrc] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!file) {\n setSrc(undefined);\n return;\n }\n const objectUrl = URL.createObjectURL(file);\n setSrc(objectUrl);\n return () => URL.revokeObjectURL(objectUrl);\n }, [file]);\n\n return src;\n}\n\n/** Preview URL for staged composer files (object URL) or sent message attachments (data URI). */\nexport function useAttachmentPreviewSrc(): string | undefined {\n const type = useAuiState((s) => s.attachment.type);\n const contentType = useAuiState((s) => s.attachment.contentType);\n const file = useAuiState((s) => (\"file\" in s.attachment ? s.attachment.file : undefined));\n const contentSrc = useAuiState((s) => {\n if (!isImageAttachment(s.attachment.type, s.attachment.contentType)) return undefined;\n const imagePart = s.attachment.content?.find((part) => part.type === \"image\");\n if (imagePart?.type === \"image\" && imagePart.image) return imagePart.image;\n return undefined;\n });\n\n const image = isImageAttachment(type, contentType);\n const fileSrc = useFileObjectUrl(image ? file : undefined);\n if (!image) return undefined;\n return fileSrc ?? contentSrc;\n}\n","\"use client\";\n\nimport { MessagePrimitive, useAuiState } from \"@assistant-ui/react\";\nimport { useThreadIsRunning } from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { MessageAttachmentsContainer } from \"./AttachmentsContainer.js\";\n\nexport function UserMessageContainer() {\n const UserMessageBubble = useSlot(\"UserMessageBubble\");\n const UserMessageActionBar = useSlot(\"UserMessageActionBar\");\n const isRunning = useThreadIsRunning();\n const text = useAuiState((s) =>\n s.message.content\n .filter((part): part is { type: \"text\"; text: string } => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\"),\n );\n\n return (\n <MessagePrimitive.Root data-role=\"user\">\n <UserMessageBubble\n text={text}\n attachments={<MessageAttachmentsContainer />}\n editAction={!isRunning ? <UserMessageActionBar /> : undefined}\n />\n </MessagePrimitive.Root>\n );\n}\n","\"use client\";\n\nimport { useState, type PropsWithChildren, type ReactNode } from \"react\";\nimport { useAuiState, type MessagePrimitive } from \"@assistant-ui/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport type ThreadGroupPart = MessagePrimitive.GroupedParts.GroupPart;\n\nexport function ToolGroupContainer({\n children,\n group,\n}: PropsWithChildren<{ group: ThreadGroupPart }>) {\n const ToolGroupCard = useSlot(\"ToolGroupCard\");\n\n const toolCallCount = group.indices.length;\n\n const active = useAuiState((s) => {\n if (s.message.status?.type !== \"running\") return false;\n const lastIndex = s.message.parts.length - 1;\n if (lastIndex < 0) return false;\n if (s.message.parts[lastIndex]?.type !== \"tool-call\") return false;\n const lastGroupIndex = group.indices[group.indices.length - 1];\n return lastGroupIndex !== undefined && lastIndex >= group.indices[0]! && lastIndex <= lastGroupIndex;\n });\n\n const [expanded, setExpanded] = useState(true);\n const [prevActive, setPrevActive] = useState(active);\n if (active !== prevActive) {\n setPrevActive(active);\n if (active) setExpanded(true);\n }\n\n return (\n <ToolGroupCard\n toolCallCount={toolCallCount}\n expanded={expanded}\n active={active}\n onToggle={() => setExpanded((prev) => !prev)}\n >\n {children as ReactNode}\n </ToolGroupCard>\n );\n}\n","\"use client\";\n\nimport { useRef } from \"react\";\nimport { useAui, useAuiState } from \"@assistant-ui/react\";\nimport { useTrueFoundryCancel } from \"@truefoundry/assistant-ui-runtime\";\n\nimport { useComposerBusyState } from \"../hooks/useComposerBusyState.js\";\nimport { useComposerPauseView } from \"../hooks/useComposerPauseView.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { ComposerAttachmentsContainer } from \"./AttachmentsContainer.js\";\nimport { AskUserContainer } from \"./AskUserContainer.js\";\nimport { McpAuthContainer } from \"./McpAuthContainer.js\";\n\nexport type ComposerContainerProps = {\n placeholder?: string;\n};\n\nexport function ComposerContainer({\n placeholder = \"Ask anything... (Shift+Enter for new line)\",\n}: ComposerContainerProps) {\n const ComposerShell = useSlot(\"ComposerShell\");\n const aui = useAui();\n const text = useAuiState((s) => s.composer.text);\n const { isBusy, send, resetBusy } = useComposerBusyState();\n const pauseView = useComposerPauseView();\n const cancel = useTrueFoundryCancel();\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n if (pauseView.kind === \"mcp\") {\n return <McpAuthContainer />;\n }\n if (pauseView.kind === \"ask-user\") {\n return <AskUserContainer />;\n }\n\n return (\n <>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n hidden\n onChange={(event) => {\n const files = event.target.files;\n if (files) {\n for (const file of files) {\n void aui.composer().addAttachment(file);\n }\n }\n event.target.value = \"\";\n }}\n />\n <ComposerShell\n attachments={<ComposerAttachmentsContainer />}\n value={text}\n placeholder={placeholder}\n disabled={isBusy}\n isRunning={isBusy}\n onValueChange={(value) => aui.composer().setText(value)}\n onSubmit={() => send(() => aui.composer().send())}\n onCancel={() => {\n resetBusy();\n void cancel();\n }}\n onAttach={() => fileInputRef.current?.click()}\n />\n </>\n );\n}\n","\"use client\";\n\nimport { useAuiState } from \"@assistant-ui/react\";\nimport { useTrueFoundryToolResponses } from \"@truefoundry/assistant-ui-runtime\";\n\nexport type ThreadPauseState = {\n thread: {\n messages: readonly {\n role: string;\n status?: { type: string };\n metadata?: { custom?: unknown };\n }[];\n };\n};\n\n/** Returns true when the latest assistant message is paused for MCP authorization. */\nexport function threadHasPendingMcpAuth(s: ThreadPauseState): boolean {\n const messages = s.thread.messages;\n const last = messages[messages.length - 1];\n if (last?.role !== \"assistant\") return false;\n if (last.status?.type !== \"requires-action\") return false;\n return (last.metadata?.custom as { pendingMcpAuth?: boolean } | undefined)?.pendingMcpAuth === true;\n}\n\nexport type ComposerPauseView =\n | { kind: \"mcp\" }\n | { kind: \"ask-user\" }\n | { kind: \"compose\" };\n\n/** Shared composer pause detection for default and custom composer containers. */\nexport function useComposerPauseView(): ComposerPauseView {\n const mcpPending = useAuiState(threadHasPendingMcpAuth);\n const { pending: toolResponsesPending } = useTrueFoundryToolResponses();\n\n if (mcpPending) {\n return { kind: \"mcp\" };\n }\n if (toolResponsesPending.length > 0) {\n return { kind: \"ask-user\" };\n }\n return { kind: \"compose\" };\n}\n","\"use client\";\n\nimport { useTrueFoundryToolResponses } from \"@truefoundry/assistant-ui-runtime\";\nimport { useThreadIsRunning } from \"@assistant-ui/core/react\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n ASK_USER_CUSTOM_OPTION,\n type AskUserAnswerDraft,\n type Question,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nconst EMPTY_ANSWER: AskUserAnswerDraft = { radioValue: \"\", custom: \"\" };\n\nexport function AskUserContainer() {\n const AskUserPrompt = useSlot(\"AskUserPrompt\");\n const { pending, respond } = useTrueFoundryToolResponses();\n const isRunning = useThreadIsRunning();\n const item = pending[0];\n\n const questions = useMemo<Question[]>(\n () =>\n item == null\n ? []\n : [\n {\n id: item.toolCallId,\n question: item.question ?? \"Answer required\",\n options: item.options ?? [],\n },\n ],\n [item],\n );\n const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0);\n const [answers, setAnswers] = useState<Record<string, AskUserAnswerDraft>>(\n {},\n );\n\n useEffect(() => {\n setCurrentQuestionIndex(0);\n setAnswers({});\n }, [item?.toolCallId]);\n\n const safeIndex = Math.min(\n currentQuestionIndex,\n Math.max(questions.length - 1, 0),\n );\n const currentQuestion = questions[safeIndex];\n const currentAnswer =\n currentQuestion == null\n ? EMPTY_ANSWER\n : answers[currentQuestion.id] ?? EMPTY_ANSWER;\n const getResponseForQuestion = useCallback(\n (questionId: string) => {\n const answer = answers[questionId] ?? EMPTY_ANSWER;\n return answer.radioValue === ASK_USER_CUSTOM_OPTION\n ? answer.custom.trim()\n : answer.radioValue.trim();\n },\n [answers],\n );\n const allQuestionsAnswered = useMemo(\n () => questions.every((question) => getResponseForQuestion(question.id)),\n [getResponseForQuestion, questions],\n );\n const selectedResponse =\n currentAnswer.radioValue === ASK_USER_CUSTOM_OPTION\n ? currentAnswer.custom.trim()\n : currentAnswer.radioValue.trim();\n const isSubmitDisabled =\n isRunning || currentQuestion == null || selectedResponse.length === 0;\n const isSubmitAllDisabled = isSubmitDisabled || !allQuestionsAnswered;\n\n const onCurrentAnswerChange = useCallback(\n (questionId: string, update: Partial<AskUserAnswerDraft>) => {\n setAnswers((previous) => ({\n ...previous,\n [questionId]: {\n ...(previous[questionId] ?? EMPTY_ANSWER),\n ...update,\n },\n }));\n },\n [],\n );\n\n const onSubmit = useCallback(() => {\n if (item == null || !allQuestionsAnswered) return;\n const content = getResponseForQuestion(item.toolCallId);\n if (!content) return;\n respond({ toolCallId: item.toolCallId, content });\n }, [allQuestionsAnswered, getResponseForQuestion, item, respond]);\n\n if (item == null || currentQuestion == null) return null;\n\n return (\n <AskUserPrompt\n questions={questions}\n readOnly={isRunning}\n currentQuestion={currentQuestion}\n currentQuestionIndex={safeIndex}\n currentAnswer={currentAnswer}\n totalQuestions={questions.length}\n isMultiQuestion={questions.length > 1}\n isLastQuestion={safeIndex === questions.length - 1}\n allQuestionsAnswered={allQuestionsAnswered}\n isSubmitDisabled={isSubmitDisabled}\n isSubmitAllDisabled={isSubmitAllDisabled}\n onCurrentQuestionIndexChange={setCurrentQuestionIndex}\n onCurrentAnswerChange={onCurrentAnswerChange}\n onSubmit={onSubmit}\n />\n );\n}\n","\"use client\";\n\nimport { useTrueFoundryMcpAuth } from \"@truefoundry/assistant-ui-runtime\";\nimport { useThreadIsRunning } from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport function McpAuthContainer() {\n const McpAuthPrompt = useSlot(\"McpAuthPrompt\");\n const { pending, resume } = useTrueFoundryMcpAuth();\n const isRunning = useThreadIsRunning();\n\n if (!pending) return null;\n\n const handleConnect = (serverId: string) => {\n const server = pending.mcpServers.find((s) => s.id === serverId);\n if (server?.authUrl) {\n window.open(server.authUrl, \"_blank\", \"noopener,noreferrer\");\n }\n };\n\n return (\n <McpAuthPrompt\n servers={pending.mcpServers}\n onConnect={handleConnect}\n onContinue={() => void resume()}\n readOnly={isRunning}\n />\n );\n}\n","\"use client\";\n\nimport { useAui, useAuiState } from \"@assistant-ui/react\";\nimport { useEffect, useRef } from \"react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\n/**\n * Simplified relative to the reference: renders threads in a single flat list\n * rather than grouping them by Today/Yesterday/Earlier. Archive/Delete are\n * wired but no-op against the current thread-list adapter (documented in the\n * runtime README's unsupported-features table).\n */\nexport function ThreadListContainer() {\n const ThreadListShell = useSlot(\"ThreadListShell\");\n const ThreadListNewButton = useSlot(\"ThreadListNewButton\");\n const ThreadListRow = useSlot(\"ThreadListRow\");\n const ThreadListRowSkeleton = useSlot(\"ThreadListRowSkeleton\");\n const ThreadListEmptyState = useSlot(\"ThreadListEmptyState\");\n\n const aui = useAui();\n const isLoading = useAuiState((s) => s.threads.isLoading);\n const isLoadingMore = useAuiState((s) => s.threads.isLoadingMore);\n const hasMore = useAuiState((s) => s.threads.hasMore);\n const threadIds = useAuiState((s) => s.threads.threadIds);\n const threadItems = useAuiState((s) => s.threads.threadItems);\n const mainThreadId = useAuiState((s) => s.threads.mainThreadId);\n\n const sentinelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const node = sentinelRef.current;\n if (!node || !hasMore) return;\n\n const observer = new IntersectionObserver((entries) => {\n if (entries.some((e) => e.isIntersecting) && hasMore && !isLoadingMore) {\n void aui.threads().loadMore();\n }\n });\n observer.observe(node);\n return () => observer.disconnect();\n }, [aui, hasMore, isLoadingMore]);\n\n const itemsById = new Map(threadItems.map((item) => [item.id, item]));\n\n return (\n <ThreadListShell header={<ThreadListNewButton onClick={() => aui.threads().switchToNewThread()} />}>\n {isLoading ? (\n <ThreadListRowSkeleton />\n ) : threadIds.length === 0 ? (\n <ThreadListEmptyState />\n ) : (\n threadIds.map((id) => {\n const item = itemsById.get(id);\n return (\n <ThreadListRow\n key={id}\n title={item?.title ?? \"New Chat\"}\n active={id === mainThreadId}\n onSelect={() => aui.threads().switchToThread(id)}\n onArchive={() => aui.threads().item({ id }).archive()}\n onDelete={() => aui.threads().item({ id }).delete()}\n />\n );\n })\n )}\n {!isLoading && hasMore && (\n <>\n {isLoadingMore && <ThreadListRowSkeleton count={1} />}\n <div ref={sentinelRef} aria-hidden />\n </>\n )}\n </ThreadListShell>\n );\n}\n","\"use client\";\n\nimport { ThreadContainer } from \"./ThreadContainer.js\";\nimport { ComposerContainer } from \"./ComposerContainer.js\";\n\n/** The full assembled thread view: message list + composer. */\nexport function Thread() {\n return <ThreadContainer composer={<ComposerContainer />} />;\n}\n"],"mappings":"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","names":["React","jsx","React","jsx","React","jsx","React","jsx","jsxs","React","jsx","Accordion","AccordionDetails","AccordionSummary","Button","IconButton","Modal","Skeleton","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","UserMessageEdit","jsx","jsx","jsx","Markdown","TfyToolCallCard","jsx","TfyToolCallCard","jsx","jsx","jsxs","LoaderIcon","Accordion","AccordionDetails","AccordionSummary","jsx","jsxs","Accordion","AccordionSummary","LoaderIcon","AccordionDetails","jsx","jsxs","jsx","jsxs","ComposerLeftSection","ComposerRightSection","ComposerSendButton","jsx","jsxs","IconButton","Button","jsx","jsxs","IconButton","Avatar","AvatarImage","AvatarFallback","jsx","jsxs","jsx","Fragment","jsx","jsxs","IconButton","forwardRef","IconButton","jsx","forwardRef","IconButton","IconProvider","IconButton","jsx","jsxs","IconButton","IconProvider","Skeleton","jsx","jsxs","Skeleton","jsx","jsxs","MessageTimestamp","IconButton","jsx","jsx","forwardRef","Spinner","jsx","forwardRef","Spinner","jsx","jsx","jsx","LightTooltip","useAuiState","jsx","jsxs","IconButton","MessageTimestamp","useAuiState","forwardRef","jsx","forwardRef","jsx","jsx","jsxs","Button","IconButton","Modal","Accordion","AccordionSummary","AccordionDetails","Skeleton","jsx","createContext","useContext","Button","default","registerIcons","LightTooltip","Accordion","AccordionSummary","AccordionDetails","useEffect","useAuiState","createContext","createElement","useContext","useState","MessagePrimitive","useAuiState","useActionBarCopy","useThreadIsRunning","useCallback","useAuiState","createContext","useCallback","useContext","useMemo","useState","jsx","jsxs","createContext","ToastStack","Toast","useState","useCallback","useMemo","useContext","jsx","Markdown","useAuiState","useCallback","useAuiState","jsx","AttachmentCard","AttachmentPreviewDialog","useAuiState","useCallback","useState","useAuiState","jsx","ReasoningCard","useAuiState","useState","useCallback","useState","createContext","useContext","useMemo","useState","jsx","SandboxToolCallCard","useState","useMemo","useCallback","useMemo","useState","jsx","ToolApprovalBar","useState","useMemo","useCallback","useCallback","useEffect","useRef","useState","jsx","ToolCallContentBlock","useState","useRef","useCallback","useEffect","jsx","AssistantMessageBubble","display","ToolCallCard","SubAgentCard","AskUserPrompt","useState","argsDisplay","resultDisplay","useState","useEffect","useRef","jsx","AgentStepsCard","useState","useRef","useEffect","jsx","AssistantMessageBubble","MessageIndicator","MessageErrorBanner","MessageActionBar","useThreadIsRunning","useActionBarCopy","useAuiState","MessagePrimitive","useCallback","useEffect","useRef","useState","jsx","HistoryLoader","useState","useRef","useCallback","useEffect","ComposerPrimitive","MessagePrimitive","useAuiState","useThreadIsRunning","MessagePrimitive","useAuiState","useEffect","useState","useAuiState","jsx","AttachmentCard","AttachmentPreviewDialog","useAuiState","MessagePrimitive","AttachmentPickerButton","jsx","jsxs","useAuiState","Button","MessageTimestamp","UserMessageEdit","useThreadIsRunning","MessagePrimitive","ComposerPrimitive","MessagePrimitive","useAuiState","useThreadIsRunning","jsx","UserMessageBubble","UserMessageActionBar","useThreadIsRunning","useAuiState","MessagePrimitive","Fragment","jsx","jsxs","useAuiState","useEffect","ThreadRootShell","ThreadViewportShell","ThreadComposerAreaShell","MessageGroup","WelcomeScreen","MessageListSkeleton","ScrollToBottomButton","useState","useAuiState","jsx","ToolGroupCard","useAuiState","useState","useRef","useAui","useAuiState","useAuiState","useTrueFoundryToolResponses","useThreadIsRunning","useCallback","useEffect","useMemo","useState","jsx","AskUserPrompt","useTrueFoundryToolResponses","useThreadIsRunning","useMemo","useState","useEffect","useCallback","useThreadIsRunning","jsx","McpAuthPrompt","useThreadIsRunning","Fragment","jsx","jsxs","ComposerShell","useAui","useAuiState","useRef","useAui","useAuiState","useEffect","useRef","Fragment","jsx","jsxs","ThreadListShell","ThreadListNewButton","ThreadListRow","ThreadListRowSkeleton","ThreadListEmptyState","useAui","useAuiState","useRef","useEffect","jsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/icons/fontawesome.ts","../src/icons/registerAgentIcons.ts","../src/icons/agent-2.svg","../src/icons/ai.svg","../src/icons/brain-regular.svg","../src/icons/compare.svg","../src/icons/mcp-server.svg","../src/icons/search-globe.svg","../src/theme/SlotsProvider.tsx","../src/theme/defaultSlots.ts","../src/atoms/adapters/AskUserPromptAdapter.tsx","../src/atoms/adapters/McpAuthPromptAdapter.tsx","../src/atoms/adapters/ReasoningCardAdapter.tsx","../src/atoms/adapters/AgentStepsCardAdapter.tsx","../src/atoms/primitives/Avatar.tsx","../src/atoms/lib/cn.ts","../src/atoms/UserMessageBubble.tsx","../src/atoms/UserMessageEdit.tsx","../src/atoms/ToolCallCard.tsx","../src/atoms/ToolCallContentBlock.tsx","../src/atoms/SubAgentCard.tsx","../src/atoms/SandboxToolCallCard.tsx","../src/atoms/ToolApprovalBar.tsx","../src/atoms/ToolGroupCard.tsx","../src/atoms/Skeletons.tsx","../src/atoms/ComposerShell.tsx","../src/atoms/ComposerSections.tsx","../src/atoms/AttachmentCard.tsx","../src/constants/attachments.ts","../src/atoms/AttachmentPickerButton.tsx","../src/atoms/AttachmentPreviewDialog.tsx","../src/atoms/ScrollToBottomButton.tsx","../src/atoms/ThreadListRow.tsx","../src/atoms/ThreadListMisc.tsx","../src/atoms/MessageActionBar.tsx","../src/atoms/Markdown.tsx","../src/atoms/AssistantMessageBubble.tsx","../src/atoms/HistoryLoader.tsx","../src/atoms/MessageErrorBanner.tsx","../src/atoms/MessageIndicator.tsx","../src/atoms/MessageTimestamp.tsx","../src/atoms/UserMessageActionBar.tsx","../src/atoms/ThreadShell.tsx","../src/atoms/WelcomeScreen.tsx","../src/atoms/Toast.tsx","../src/theme/tokens.ts","../src/index.ts","../src/containers/ThreadContainer.tsx","../src/hooks/useComposerBusyState.ts","../src/containers/AssistantMessageContainer.tsx","../src/utils/computeAgentStepsSplit.ts","../src/containers/AssistantTextContainer.tsx","../src/containers/ErrorToasterContainer.tsx","../src/containers/MessageImageContainer.tsx","../src/containers/ReasoningContainer.tsx","../src/containers/ToolCallContainer.tsx","../src/containers/nestedApprovalBridge.ts","../src/containers/SandboxToolCallContainer.tsx","../src/containers/ToolApprovalContainer.tsx","../src/containers/ToolCallContentBlockContainer.tsx","../src/containers/AgentStepsContainer.tsx","../src/containers/HistoryLoaderContainer.tsx","../src/containers/UserEditComposerContainer.tsx","../src/containers/AttachmentsContainer.tsx","../src/containers/useAttachmentPreviewSrc.ts","../src/containers/UserMessageContainer.tsx","../src/containers/ToolGroupContainer.tsx","../src/containers/ComposerContainer.tsx","../src/hooks/useComposerPauseView.ts","../src/containers/AskUserContainer.tsx","../src/containers/McpAuthContainer.tsx","../src/containers/ThreadListContainer.tsx","../src/containers/Thread.tsx"],"sourcesContent":["import { library } from \"@fortawesome/fontawesome-svg-core\";\nimport {\n faArrowDown,\n faArrowUp,\n faBoxArchive,\n faEllipsis,\n faPencil,\n faPlus,\n faTrash,\n faXmark,\n} from \"@fortawesome/free-solid-svg-icons\";\n\nlibrary.add(faArrowDown, faArrowUp, faBoxArchive, faEllipsis, faPencil, faPlus, faTrash, faXmark);\n","import { registerIcons } from \"tfy-web-components/components/atoms/IconProvider\";\n\nimport Agent2Icon from \"./agent-2.svg\";\nimport AiIcon from \"./ai.svg\";\nimport BrainRegularIcon from \"./brain-regular.svg\";\nimport CompareIcon from \"./compare.svg\";\nimport McpServerIcon from \"./mcp-server.svg\";\nimport SearchGlobeIcon from \"./search-globe.svg\";\n\nregisterIcons({\n \"mcp-server\": McpServerIcon,\n \"agent-2\": Agent2Icon,\n compare: CompareIcon,\n ai: AiIcon,\n searchGlobe: SearchGlobeIcon,\n \"brain-regular\": BrainRegularIcon,\n});\n","import * as React from \"react\";\nconst SvgAgent2 = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path d=\"M8 0C8.40158 8.28071e-05 8.72754 0.325937 8.72754 0.727539V2.90918H12.3623C13.5671 2.90921 14.5437 3.88607 14.5439 5.09082V7.27246H15.2725C15.6741 7.27253 16 7.59839 16 8C15.9999 8.40155 15.674 8.72747 15.2725 8.72754H14.5439V10.9092C14.5437 12.1139 13.5671 13.0908 12.3623 13.0908H3.63477C2.43015 13.0906 1.45334 12.1138 1.45312 10.9092V8.72754H0.727539C0.325964 8.7275 7.21982e-05 8.40157 0 8C0 7.59837 0.32592 7.2725 0.727539 7.27246H1.45312V5.09082C1.45335 3.8862 2.43015 2.90942 3.63477 2.90918H7.27246V1.45508H5.09082C4.68943 1.4549 4.36346 1.12893 4.36328 0.727539C4.36328 0.325997 4.68932 0.00017902 5.09082 0H8ZM3.63477 4.36426C3.23346 4.3645 2.90843 4.68951 2.9082 5.09082V7.99023C2.90824 7.99344 2.90918 7.99678 2.90918 8C2.90918 8.00326 2.90825 8.00651 2.9082 8.00977V10.9092C2.90841 11.3105 3.23345 11.6365 3.63477 11.6367H12.3623C12.7638 11.6367 13.0896 11.3106 13.0898 10.9092V5.09082C13.0896 4.68937 12.7638 4.36428 12.3623 4.36426H3.63477ZM5.81738 6.54492C6.21902 6.54492 6.54489 6.87084 6.54492 7.27246V8.72656C6.54492 9.12822 6.21904 9.4541 5.81738 9.4541C5.41587 9.45393 5.08984 9.12811 5.08984 8.72656V7.27246C5.08988 6.87094 5.41589 6.54509 5.81738 6.54492ZM10.1816 6.54492C10.5831 6.54514 10.9091 6.87097 10.9092 7.27246V8.72656C10.9092 9.12808 10.5831 9.45388 10.1816 9.4541C9.77999 9.4541 9.4541 9.12822 9.4541 8.72656V7.27246C9.45413 6.87084 9.78001 6.54492 10.1816 6.54492Z\" fill=\"currentColor\" /></svg>;\nexport default SvgAgent2;","import * as React from \"react\";\nconst SvgAi = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><g opacity={0.9}><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M15.4419 9.43023C15.7501 9.43023 16 9.68012 16 9.98837V10.0304C16 11.398 16 12.4813 15.886 13.329C15.7687 14.2015 15.5216 14.9077 14.9647 15.4647C14.4077 16.0216 13.7015 16.2687 12.829 16.386C11.9813 16.5 10.898 16.5 9.53035 16.5H9.48837C9.18012 16.5 8.93023 16.2501 8.93023 15.9419C8.93023 15.6336 9.18012 15.3837 9.48837 15.3837C10.9074 15.3837 11.9155 15.3825 12.6803 15.2797C13.429 15.1791 13.8604 14.9903 14.1753 14.6753C14.4903 14.3604 14.6791 13.929 14.7797 13.1803C14.8825 12.4155 14.8837 11.4074 14.8837 9.98837C14.8837 9.68012 15.1336 9.43023 15.4419 9.43023Z\" fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M0.55814 9.43023C0.866392 9.43023 1.11628 9.68012 1.11628 9.98837C1.11628 11.4074 1.11747 12.4155 1.22029 13.1803C1.32095 13.929 1.50973 14.3604 1.82467 14.6753C2.13962 14.9903 2.57098 15.1791 3.3197 15.2797C4.08448 15.3825 5.0926 15.3837 6.51163 15.3837C6.81988 15.3837 7.06977 15.6336 7.06977 15.9419C7.06977 16.2501 6.81988 16.5 6.51163 16.5H6.46965C5.10201 16.5 4.01875 16.5 3.17096 16.386C2.29846 16.2687 1.59227 16.0216 1.03534 15.4647C0.478423 14.9077 0.231266 14.2015 0.113961 13.329C-2.0957e-05 12.4813 -1.15596e-05 11.398 2.3934e-07 10.0304C3.72411e-07 10.0164 5.05482e-07 10.0024 5.05482e-07 9.98837C5.05482e-07 9.68012 0.249888 9.43023 0.55814 9.43023Z\" fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M6.46964 0.5L6.51163 0.500001C6.81988 0.500001 7.06977 0.749888 7.06977 1.05814C7.06977 1.36639 6.81988 1.61628 6.51163 1.61628C5.0926 1.61628 4.08448 1.61747 3.3197 1.72029C2.57098 1.82095 2.13962 2.00973 1.82467 2.32467C1.50973 2.63962 1.32095 3.07098 1.22029 3.8197C1.11747 4.58448 1.11628 5.5926 1.11628 7.01163C1.11628 7.31988 0.866392 7.56977 0.55814 7.56977C0.249888 7.56977 5.05482e-07 7.31988 5.05482e-07 7.01163L2.3934e-07 6.96964C-1.15596e-05 5.60201 -2.0957e-05 4.51875 0.113961 3.67096C0.231266 2.79846 0.478423 2.09227 1.03534 1.53534C1.59227 0.978423 2.29846 0.731266 3.17096 0.613961C4.01875 0.499979 5.10201 0.499988 6.46964 0.5Z\" fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M12.6803 1.72029C11.9155 1.61747 10.9074 1.61628 9.48837 1.61628C9.18012 1.61628 8.93023 1.36639 8.93023 1.05814C8.93023 0.749888 9.18012 0.500001 9.48837 0.500001C9.5024 0.500001 9.51639 0.5 9.53036 0.5C10.898 0.499988 11.9813 0.499979 12.829 0.613961C13.7015 0.731266 14.4077 0.978423 14.9647 1.53534C15.5216 2.09227 15.7687 2.79846 15.886 3.67096C16 4.51875 16 5.60201 16 6.96965V7.01163C16 7.31988 15.7501 7.56977 15.4419 7.56977C15.1336 7.56977 14.8837 7.31988 14.8837 7.01163C14.8837 5.5926 14.8825 4.58448 14.7797 3.8197C14.6791 3.07098 14.4903 2.63962 14.1753 2.32467C13.8604 2.00973 13.429 1.82095 12.6803 1.72029Z\" fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M2.70041 3.20041C2.04651 3.85431 2.04651 4.90675 2.04651 7.01163V9.98837C2.04651 12.0933 2.04651 13.1457 2.70041 13.7996C3.35431 14.4535 4.40675 14.4535 6.51163 14.4535H9.48837C11.5933 14.4535 12.6457 14.4535 13.2996 13.7996C13.9535 13.1457 13.9535 12.0933 13.9535 9.98837V7.01163C13.9535 4.90675 13.9535 3.85431 13.2996 3.20041C12.6457 2.54651 11.5933 2.54651 9.48837 2.54651H6.51163C4.40675 2.54651 3.35431 2.54651 2.70041 3.20041ZM5.65417 10.5348C5.81478 10.3181 6.12065 10.2726 6.33733 10.4332C6.8116 10.7848 7.38407 10.9884 8 10.9884C8.61593 10.9884 9.1884 10.7848 9.66267 10.4332C9.87936 10.2726 10.1852 10.3181 10.3458 10.5348C10.5064 10.7514 10.461 11.0573 10.2443 11.2179C9.61111 11.6873 8.83673 11.9651 8 11.9651C7.16327 11.9651 6.38889 11.6873 5.75569 11.2179C5.53901 11.0573 5.49356 10.7514 5.65417 10.5348ZM10.6047 7.24419C10.6047 7.78363 10.3131 8.22093 9.95349 8.22093C9.59386 8.22093 9.30233 7.78363 9.30233 7.24419C9.30233 6.70475 9.59386 6.26744 9.95349 6.26744C10.3131 6.26744 10.6047 6.70475 10.6047 7.24419ZM6.04651 8.22093C6.40614 8.22093 6.69767 7.78363 6.69767 7.24419C6.69767 6.70475 6.40614 6.26744 6.04651 6.26744C5.68688 6.26744 5.39535 6.70475 5.39535 7.24419C5.39535 7.78363 5.68688 8.22093 6.04651 8.22093Z\" fill=\"currentColor\" /></g></svg>;\nexport default SvgAi;","import * as React from \"react\";\nconst SvgBrainRegular = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path d=\"M0 6.9375C0 6.30469 0.234375 5.69531 0.609375 5.25C0.5625 5.0625 0.5625 4.875 0.5625 4.6875C0.5625 3.9375 0.9375 3.25781 1.52344 2.85938C1.61719 2.17969 2.01562 1.59375 2.60156 1.26562C2.90625 0.515625 3.63281 0 4.5 0C5.08594 0 5.60156 0.257812 6 0.65625C6.375 0.257812 6.89062 0 7.5 0C8.34375 0 9.07031 0.515625 9.375 1.26562C9.96094 1.59375 10.3594 2.17969 10.4531 2.85938C11.0391 3.25781 11.4375 3.9375 11.4375 4.6875C11.4375 4.875 11.4141 5.0625 11.3672 5.25C11.7422 5.69531 12 6.30469 12 6.9375C12 7.66406 11.6953 8.32031 11.2266 8.78906L11.25 8.8125C11.25 9.9375 10.4297 10.8516 9.375 11.0391C9 11.625 8.34375 12 7.59375 12C6.96094 12 6.375 11.7422 6 11.2969C5.60156 11.7422 5.01562 12 4.40625 12C3.63281 12 2.97656 11.625 2.60156 11.0391C1.54688 10.8516 0.75 9.9375 0.75 8.8125V8.78906C0.28125 8.32031 0 7.66406 0 6.9375ZM5.41406 9.9375H5.4375V2.0625C5.4375 1.54688 5.01562 1.125 4.5 1.125C3.96094 1.125 3.5625 1.54688 3.5625 2.0625V2.08594C3.07031 2.17969 2.69531 2.55469 2.625 3.04688C2.625 3.09375 2.625 3.14062 2.625 3.1875C2.625 3.32812 2.625 3.46875 2.67188 3.58594C2.50781 3.60938 2.32031 3.65625 2.17969 3.75C1.89844 3.9375 1.71094 4.24219 1.6875 4.57031C1.6875 4.61719 1.6875 4.66406 1.6875 4.6875C1.6875 5.03906 1.82812 5.34375 2.0625 5.55469C1.71094 5.69531 1.40625 5.97656 1.24219 6.32812C1.17188 6.51562 1.10156 6.72656 1.10156 6.9375C1.10156 7.5 1.42969 7.99219 1.875 8.25C1.92188 8.27344 1.94531 8.29688 1.99219 8.32031C1.96875 8.34375 1.96875 8.36719 1.94531 8.39062C1.89844 8.53125 1.875 8.67188 1.875 8.8125C1.875 9.32812 2.20312 9.77344 2.67188 9.91406C2.76562 9.9375 2.88281 9.9375 3 9.9375C3.11719 9.9375 3.25781 9.91406 3.375 9.89062C3.375 10.1016 3.44531 10.3125 3.58594 10.4766C3.77344 10.7344 4.05469 10.875 4.40625 10.875C4.92188 10.875 5.36719 10.4766 5.41406 9.9375ZM8.41406 2.08594L8.4375 2.0625C8.4375 1.54688 8.01562 1.125 7.5 1.125C6.96094 1.125 6.5625 1.54688 6.5625 2.0625V9.9375C6.60938 10.4766 7.05469 10.875 7.59375 10.875C7.92188 10.875 8.20312 10.7344 8.39062 10.4766C8.53125 10.3125 8.60156 10.1016 8.60156 9.89062C8.71875 9.91406 8.85938 9.9375 9 9.9375C9.09375 9.9375 9.21094 9.9375 9.30469 9.91406C9.77344 9.77344 10.125 9.32812 10.125 8.8125C10.125 8.67188 10.0781 8.53125 10.0312 8.39062C10.0078 8.36719 10.0078 8.34375 9.98438 8.32031C10.0312 8.29688 10.0547 8.27344 10.1016 8.25C10.5469 7.99219 10.875 7.5 10.875 6.9375C10.875 6.72656 10.8047 6.51562 10.7344 6.32812C10.5703 5.97656 10.2656 5.69531 9.91406 5.55469C10.1484 5.34375 10.3125 5.03906 10.3125 4.6875C10.3125 4.66406 10.2891 4.61719 10.2891 4.57031C10.2656 4.24219 10.0781 3.9375 9.79688 3.75C9.65625 3.65625 9.46875 3.60938 9.30469 3.58594C9.35156 3.46875 9.375 3.32812 9.375 3.1875C9.375 3.14062 9.35156 3.09375 9.35156 3.04688C9.28125 2.55469 8.90625 2.17969 8.41406 2.08594Z\" fill=\"currentColor\" /></svg>;\nexport default SvgBrainRegular;","import * as React from \"react\";\nconst SvgCompare = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 14 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path d=\"M5.09091 16.5V15.0455H1.45455C1.05455 15.0455 0.712121 14.903 0.427273 14.6182C0.142424 14.3333 0 13.9909 0 13.5909V3.40909C0 3.00909 0.142424 2.66667 0.427273 2.38182C0.712121 2.09697 1.05455 1.95455 1.45455 1.95455H5.09091V0.5H6.54545V16.5H5.09091ZM8 15.0455V13.5909L11.6364 13.5909V3.40909H8V1.95455H11.6364C12.0364 1.95455 12.3788 2.09697 12.6636 2.38182C12.9485 2.66667 13.0909 3.00909 13.0909 3.40909V13.5909C13.0909 13.9909 12.9485 14.3333 12.6636 14.6182C12.3788 14.903 12.0364 15.0455 11.6364 15.0455H8Z\" fill=\"currentColor\" /></svg>;\nexport default SvgCompare;","import * as React from \"react\";\nconst SvgMcpServer = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 14 14\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><g clipPath=\"url(#clip0_5446_3655)\"><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M9.15174 1.36702C8.86989 1.09272 8.49212 0.939234 8.09883 0.939234C7.70553 0.939234 7.32776 1.09272 7.04591 1.36702L1.43074 6.87369C1.33678 6.96502 1.21091 7.01611 1.07987 7.01611C0.948831 7.01611 0.822958 6.96502 0.728994 6.87369C0.68299 6.82895 0.646423 6.77544 0.621453 6.71633C0.596483 6.65721 0.583618 6.59369 0.583618 6.52952C0.583618 6.46535 0.596483 6.40183 0.621453 6.34272C0.646423 6.2836 0.68299 6.23009 0.728994 6.18536L6.34416 0.678689C6.81387 0.221585 7.44341 -0.0341797 8.09883 -0.0341797C8.75424 -0.0341797 9.38379 0.221585 9.85349 0.678689C10.1253 0.943 10.3306 1.26791 10.4527 1.62683C10.5748 1.98575 10.6101 2.36848 10.5558 2.74369C10.936 2.68962 11.3235 2.72356 11.6885 2.8429C12.0535 2.96224 12.3863 3.16379 12.6611 3.43202L12.6902 3.46119C12.9203 3.68489 13.1031 3.95243 13.2279 4.248C13.3528 4.54357 13.4171 4.86117 13.4171 5.18202C13.4171 5.50288 13.3528 5.82048 13.2279 6.11605C13.1031 6.41162 12.9203 6.67916 12.6902 6.90286L7.61174 11.8828C7.59642 11.8977 7.58423 11.9155 7.57591 11.9352C7.56759 11.9549 7.5633 11.976 7.5633 11.9974C7.5633 12.0188 7.56759 12.0399 7.57591 12.0596C7.58423 12.0793 7.59642 12.0971 7.61174 12.112L8.65474 13.1352C8.70075 13.1799 8.73731 13.2334 8.76228 13.2926C8.78725 13.3517 8.80012 13.4152 8.80012 13.4794C8.80012 13.5435 8.78725 13.607 8.76228 13.6662C8.73731 13.7253 8.70075 13.7788 8.65474 13.8235C8.56078 13.9149 8.43491 13.9659 8.30387 13.9659C8.17283 13.9659 8.04696 13.9149 7.95299 13.8235L6.90999 12.8009C6.80257 12.6966 6.71717 12.5717 6.65886 12.4337C6.60054 12.2957 6.5705 12.1475 6.5705 11.9977C6.5705 11.8479 6.60054 11.6996 6.65886 11.5617C6.71717 11.4237 6.80257 11.2988 6.90999 11.1944L11.9885 6.21394C12.1264 6.07968 12.2361 5.91914 12.3109 5.74181C12.3858 5.56447 12.4244 5.37393 12.4244 5.18144C12.4244 4.98895 12.3858 4.79841 12.3109 4.62107C12.2361 4.44374 12.1264 4.2832 11.9885 4.14894L11.9593 4.12036C11.6778 3.84634 11.3005 3.69287 10.9076 3.69254C10.5148 3.69222 10.1372 3.84506 9.85524 4.11861L5.67158 8.22177L5.67041 8.22294L5.61324 8.27952C5.51925 8.37103 5.39326 8.42223 5.26208 8.42223C5.1309 8.42223 5.0049 8.37103 4.91091 8.27952C4.86491 8.23478 4.82834 8.18128 4.80337 8.12216C4.7784 8.06305 4.76553 7.99953 4.76553 7.93536C4.76553 7.87118 4.7784 7.80766 4.80337 7.74855C4.82834 7.68944 4.86491 7.63593 4.91091 7.59119L9.15349 3.43027C9.29105 3.29592 9.40033 3.1354 9.47488 2.95816C9.54943 2.78093 9.58776 2.59056 9.58759 2.39828C9.58743 2.206 9.54878 2.0157 9.47393 1.83859C9.39907 1.66147 9.28953 1.50114 9.15174 1.36702Z\" fill=\"currentColor\" /><path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M8.44964 2.74425C8.49564 2.69951 8.53221 2.646 8.55718 2.58689C8.58215 2.52777 8.59501 2.46425 8.59501 2.40008C8.59501 2.33591 8.58215 2.27239 8.55718 2.21328C8.53221 2.15416 8.49564 2.10066 8.44964 2.05592C8.35564 1.96441 8.22965 1.91321 8.09847 1.91321C7.96729 1.91321 7.84129 1.96441 7.7473 2.05592L3.59455 6.12875C3.36454 6.35245 3.1817 6.61999 3.05685 6.91556C2.932 7.21113 2.86768 7.52873 2.86768 7.84958C2.86768 8.17044 2.932 8.48804 3.05685 8.78361C3.1817 9.07918 3.36454 9.34672 3.59455 9.57042C4.06433 10.0274 4.69385 10.2831 5.34922 10.2831C6.00459 10.2831 6.63411 10.0274 7.10389 9.57042L11.2572 5.49758C11.3032 5.45284 11.3398 5.39934 11.3648 5.34022C11.3897 5.28111 11.4026 5.21759 11.4026 5.15342C11.4026 5.08925 11.3897 5.02573 11.3648 4.96661C11.3398 4.9075 11.3032 4.85399 11.2572 4.80925C11.1632 4.71774 11.0372 4.66654 10.9061 4.66654C10.7749 4.66654 10.6489 4.71774 10.5549 4.80925L6.40214 8.88208C6.12029 9.15639 5.74252 9.30987 5.34922 9.30987C4.95592 9.30987 4.57815 9.15639 4.2963 8.88208C4.15836 8.74782 4.04873 8.58729 3.97386 8.40995C3.899 8.23261 3.86043 8.04207 3.86043 7.84958C3.86043 7.65709 3.899 7.46655 3.97386 7.28922C4.04873 7.11188 4.15836 6.95134 4.2963 6.81708L8.44964 2.74425Z\" fill=\"currentColor\" /></g><defs><clipPath id=\"clip0_5446_3655\"><rect width={14} height={14} fill=\"white\" /></clipPath></defs></svg>;\nexport default SvgMcpServer;","import * as React from \"react\";\nconst SvgSearchGlobe = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><path d=\"M7 0C10.8555 0 14 3.14453 14 7C14 10.8828 10.8555 14 7 14C3.11719 14 0 10.8828 0 7C0 3.14453 3.11719 0 7 0ZM7 12.6875C7.19141 12.6875 7.71094 12.4961 8.28516 11.375C8.53125 10.8828 8.72266 10.3086 8.88672 9.625H5.08594C5.25 10.3086 5.44141 10.8828 5.6875 11.375C6.26172 12.4961 6.78125 12.6875 7 12.6875ZM4.86719 8.3125H9.10547C9.16016 7.90234 9.1875 7.46484 9.1875 7C9.1875 6.5625 9.16016 6.125 9.10547 5.6875H4.86719C4.8125 6.125 4.8125 6.5625 4.8125 7C4.8125 7.46484 4.8125 7.90234 4.86719 8.3125ZM8.88672 4.375C8.72266 3.71875 8.53125 3.14453 8.28516 2.65234C7.71094 1.53125 7.19141 1.3125 7 1.3125C6.78125 1.3125 6.26172 1.53125 5.6875 2.65234C5.44141 3.14453 5.25 3.71875 5.08594 4.375H8.88672ZM10.418 5.6875C10.4727 6.125 10.5 6.5625 10.5 7C10.5 7.46484 10.4727 7.90234 10.418 8.3125H12.5234C12.6328 7.90234 12.6875 7.46484 12.6875 7C12.6875 6.5625 12.6328 6.125 12.5234 5.6875H10.418ZM9.35156 1.83203C9.73438 2.54297 10.0352 3.41797 10.2266 4.375H12.0312C11.457 3.25391 10.5 2.35156 9.35156 1.83203ZM4.62109 1.83203C3.47266 2.35156 2.51562 3.25391 1.94141 4.375H3.74609C3.9375 3.41797 4.23828 2.54297 4.62109 1.83203ZM1.3125 7C1.3125 7.46484 1.33984 7.90234 1.44922 8.3125H3.55469C3.5 7.90234 3.5 7.46484 3.5 7C3.5 6.5625 3.5 6.125 3.55469 5.6875H1.44922C1.33984 6.125 1.3125 6.5625 1.3125 7ZM12.0312 9.625H10.2266C10.0352 10.6094 9.73438 11.4844 9.35156 12.1953C10.5 11.6758 11.457 10.7734 12.0312 9.625ZM3.74609 9.625H1.94141C2.51562 10.7734 3.47266 11.6758 4.62109 12.1953C4.23828 11.4844 3.9375 10.6094 3.74609 9.625Z\" fill=\"currentColor\" /></svg>;\nexport default SvgSearchGlobe;","import { createContext, useContext, useMemo, type ReactNode } from \"react\";\nimport {\n ThemeProvider as TfyThemeProvider,\n useTheme as useTfyTheme,\n} from \"tfy-web-components/components/theme/useTheme\";\n\nimport type {\n ComposerLeftSectionProps,\n ComposerRightSectionProps,\n ComposerSendButtonProps,\n} from \"../atoms/ComposerSections.js\";\nimport { defaultSlots } from \"./defaultSlots.js\";\n\n/**\n * Registry of atom-name -> atom-implementation. Empty by default; each atom module\n * augments this interface via `declare module \"../theme/SlotsProvider\"` when it is\n * introduced, so adding an atom never requires editing this file or any container.\n */\nexport interface AtomSlots {\n ComposerLeftSection: ComposerLeftSectionSlot;\n ComposerRightSection: ComposerRightSectionSlot;\n ComposerSendButton: ComposerSendButtonSlot;\n}\n\nexport type ComposerLeftSectionSlot = (props: ComposerLeftSectionProps) => ReactNode;\nexport type ComposerRightSectionSlot = (props: ComposerRightSectionProps) => ReactNode;\nexport type ComposerSendButtonSlot = (props: ComposerSendButtonProps) => ReactNode;\n\nexport type SlotOverrides = Partial<AtomSlots> & Record<string, unknown>;\nexport type ThemeMode = \"light\" | \"dark\";\n\nconst SlotsContext = createContext<AtomSlots>(defaultSlots);\nconst ThemeModeContext = createContext<ThemeMode | undefined>(undefined);\n\n/**\n * Wrap a subtree to override one or more atoms with a different design system.\n * Containers never reference concrete atoms directly -- they resolve everything\n * through `useSlot`, so this is the only thing a design-system swap has to touch.\n */\nexport function SlotsProvider({\n overrides,\n theme,\n children,\n}: {\n overrides?: SlotOverrides;\n theme?: ThemeMode;\n children: ReactNode;\n}) {\n const parentSlots = useContext(SlotsContext);\n const inheritedTheme = useContext(ThemeModeContext);\n const resolved = useMemo(\n () => ({ ...parentSlots, ...overrides }) as AtomSlots,\n [parentSlots, overrides],\n );\n\n return (\n <TfyThemeProvider theme={theme ?? inheritedTheme}>\n <SlotsProviderContents slots={resolved}>{children}</SlotsProviderContents>\n </TfyThemeProvider>\n );\n}\n\nfunction SlotsProviderContents({\n slots,\n children,\n}: {\n slots: AtomSlots;\n children: ReactNode;\n}) {\n const { mode } = useTfyTheme();\n\n return (\n <ThemeModeContext.Provider value={mode}>\n <SlotsContext.Provider value={slots}>{children}</SlotsContext.Provider>\n </ThemeModeContext.Provider>\n );\n}\n\n/** Resolves the atom implementation registered for `name` -- default unless overridden. */\nexport function useSlot<K extends keyof AtomSlots>(name: K): AtomSlots[K] {\n const slots = useContext(SlotsContext);\n return slots[name];\n}\n\n/** Resolves the light or dark theme mode supplied by the SDK consumer. */\nexport function useThemeMode(): ThemeMode {\n return useContext(ThemeModeContext) ?? \"light\";\n}\n","// tfy-web-components — direct slot defaults\n// Primitives and shared agent-chat molecules registered as-is.\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n} from \"tfy-web-components/components/atoms/Accordion\";\nimport Button from \"tfy-web-components/components/atoms/Button\";\nimport IconButton from \"tfy-web-components/components/atoms/IconButton\";\nimport Modal from \"tfy-web-components/components/atoms/Modal\";\nimport Skeleton from \"tfy-web-components/components/atoms/Skeleton\";\nimport { LightTooltip } from \"tfy-web-components/components/atoms/Tooltip\";\nimport Dialog from \"tfy-web-components/components/molecules/Dialog\";\n\nimport { AskUserPrompt } from \"../atoms/adapters/AskUserPromptAdapter.js\";\nimport { McpAuthPrompt } from \"../atoms/adapters/McpAuthPromptAdapter.js\";\nimport { ReasoningCard } from \"../atoms/adapters/ReasoningCardAdapter.js\";\nimport { AgentStepsCard } from \"../atoms/adapters/AgentStepsCardAdapter.js\";\n\n// SDK atoms — wrap or compose tfy-web-components internally\n// Thin adapters: tfy component + SDK slot prop contract.\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n} from \"../atoms/primitives/Avatar.js\";\nimport { UserMessageBubble } from \"../atoms/UserMessageBubble.js\";\nimport { UserMessageEdit } from \"../atoms/UserMessageEdit.js\";\nimport { ToolCallCard } from \"../atoms/ToolCallCard.js\";\nimport { ToolCallContentBlock } from \"../atoms/ToolCallContentBlock.js\";\nimport { SubAgentCard } from \"../atoms/SubAgentCard.js\";\nimport { SandboxToolCallCard } from \"../atoms/SandboxToolCallCard.js\";\nimport { ToolApprovalBar } from \"../atoms/ToolApprovalBar.js\";\nimport { ToolGroupCard } from \"../atoms/ToolGroupCard.js\";\nimport { MessageListSkeleton } from \"../atoms/Skeletons.js\";\nimport { ComposerShell } from \"../atoms/ComposerShell.js\";\nimport {\n ComposerLeftSection,\n ComposerRightSection,\n ComposerSendButton,\n} from \"../atoms/ComposerSections.js\";\nimport { AttachmentCard } from \"../atoms/AttachmentCard.js\";\nimport { AttachmentPickerButton } from \"../atoms/AttachmentPickerButton.js\";\nimport { AttachmentPreviewDialog } from \"../atoms/AttachmentPreviewDialog.js\";\nimport { ScrollToBottomButton } from \"../atoms/ScrollToBottomButton.js\";\nimport { ThreadListRow } from \"../atoms/ThreadListRow.js\";\nimport {\n ThreadListEmptyState,\n ThreadListNewButton,\n ThreadListRowSkeleton,\n ThreadListShell,\n} from \"../atoms/ThreadListMisc.js\";\nimport { MessageActionBar } from \"../atoms/MessageActionBar.js\";\nimport { Markdown } from \"../atoms/Markdown.js\";\nimport { AssistantMessageBubble } from \"../atoms/AssistantMessageBubble.js\";\n\n// SDK atoms — SDK-owned (no tfy slot component)\n// Local Tailwind implementations; pending tfy migration where a shared design exists.\nimport { HistoryLoader } from \"../atoms/HistoryLoader.js\";\nimport { MessageErrorBanner } from \"../atoms/MessageErrorBanner.js\";\nimport { MessageIndicator } from \"../atoms/MessageIndicator.js\";\nimport { MessageTimestamp } from \"../atoms/MessageTimestamp.js\";\nimport { UserMessageActionBar } from \"../atoms/UserMessageActionBar.js\";\nimport {\n MessageGroup,\n ThreadComposerAreaShell,\n ThreadRootShell,\n ThreadViewportShell,\n} from \"../atoms/ThreadShell.js\";\nimport { WelcomeScreen } from \"../atoms/WelcomeScreen.js\";\nimport { Toast, ToastStack } from \"../atoms/Toast.js\";\nimport type { AtomSlots } from \"./SlotsProvider.js\";\n\n/**\n * This SDK's default atom implementations, keyed by slot name. Populated\n * incrementally as atoms are added under `src/atoms/**`; each atom module\n * augments `AtomSlots` and this object gains the matching entry in the same\n * milestone.\n */\nexport const defaultSlots: AtomSlots = {\n // tfy-web-components — direct slot defaults\n Button,\n IconButton,\n LightTooltip,\n Modal,\n Dialog,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Skeleton,\n ReasoningCard,\n AskUserPrompt,\n McpAuthPrompt,\n\n // SDK atoms — wrap or compose tfy-web-components internally\n Avatar,\n AvatarImage,\n AvatarFallback,\n UserMessageBubble,\n UserMessageEdit,\n ToolCallCard,\n ToolCallContentBlock,\n SubAgentCard,\n SandboxToolCallCard,\n ToolApprovalBar,\n ToolGroupCard,\n AgentStepsCard,\n MessageListSkeleton,\n ComposerShell,\n ComposerLeftSection,\n ComposerRightSection,\n ComposerSendButton,\n AttachmentCard,\n AttachmentPreviewDialog,\n AttachmentPickerButton,\n ScrollToBottomButton,\n ThreadListRow,\n ThreadListNewButton,\n ThreadListRowSkeleton,\n ThreadListEmptyState,\n ThreadListShell,\n MessageActionBar,\n Markdown,\n\n // SDK atoms — SDK-owned (no tfy slot component)\n AssistantMessageBubble,\n HistoryLoader,\n MessageErrorBanner,\n MessageTimestamp,\n UserMessageActionBar,\n MessageIndicator,\n WelcomeScreen,\n ThreadRootShell,\n ThreadViewportShell,\n ThreadComposerAreaShell,\n MessageGroup,\n Toast,\n ToastStack,\n};\n\ndeclare module \"./SlotsProvider.js\" {\n interface AtomSlots {\n Button: typeof Button;\n IconButton: typeof IconButton;\n Skeleton: typeof Skeleton;\n LightTooltip: typeof LightTooltip;\n Modal: typeof Modal;\n Dialog: typeof Dialog;\n Accordion: typeof Accordion;\n AccordionSummary: typeof AccordionSummary;\n AccordionDetails: typeof AccordionDetails;\n }\n}\n","import {\n AskUserQuestionCard as TfyAskUserQuestionCard,\n type AskUserQuestionCardProps,\n type AskUserAnswerDraft,\n type AnsweredQuestion,\n type Question,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nexport type AskUserPromptProps = AskUserQuestionCardProps;\nexport type { AskUserAnswerDraft, AnsweredQuestion, Question };\n\n/** Typed SDK slot adapter over tfy-web-components AskUserQuestionCard. */\nexport function AskUserPrompt(props: AskUserPromptProps) {\n return <TfyAskUserQuestionCard {...props} />;\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AskUserPrompt: typeof AskUserPrompt;\n }\n}\n","import {\n McpAuthCard as TfyMcpAuthCard,\n type McpAuthCardProps,\n type McpServer,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nexport type McpAuthPromptProps = McpAuthCardProps;\nexport type { McpServer };\n\n/** Typed SDK slot adapter over tfy-web-components McpAuthCard. */\nexport function McpAuthPrompt(props: McpAuthPromptProps) {\n return <TfyMcpAuthCard {...props} />;\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n McpAuthPrompt: typeof McpAuthPrompt;\n }\n}\n","import {\n ReasoningCard as TfyReasoningCard,\n type ReasoningCardProps,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nexport type { ReasoningCardProps };\n\n/** Typed SDK slot adapter over tfy-web-components ReasoningCard. */\nexport function ReasoningCard(props: ReasoningCardProps) {\n return <TfyReasoningCard {...props} />;\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ReasoningCard: typeof ReasoningCard;\n }\n}\n","import {\n AgentStepsCard as TfyAgentStepsCard,\n type AgentStepsCardProps,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nexport type { AgentStepsCardProps };\n\n/** Typed SDK slot adapter over tfy-web-components AgentStepsCard. */\nexport function AgentStepsCard(props: AgentStepsCardProps) {\n return <TfyAgentStepsCard {...props} />;\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AgentStepsCard: typeof AgentStepsCard;\n }\n}\n","import React from \"react\";\n// Import as values; cast to any to bridge React 18 FC types from tfy-web-components\n// with the React 19 JSX types used in this package.\nimport TfyAvatar, {\n AvatarImage as TfyAvatarImage,\n AvatarFallback as TfyAvatarFallback,\n} from \"tfy-web-components/components/atoms/Avatar\";\n\nimport { cn } from \"../lib/cn.js\";\n\nconst AvatarRoot = TfyAvatar as unknown as React.FC<\n React.HTMLAttributes<HTMLDivElement> & { size?: \"default\" | \"sm\" | \"lg\" }\n>;\nconst AvatarImagePrimitive = TfyAvatarImage as unknown as React.FC<React.ImgHTMLAttributes<HTMLImageElement>>;\nconst AvatarFallbackPrimitive = TfyAvatarFallback as unknown as React.FC<React.HTMLAttributes<HTMLDivElement>>;\n\nexport type AvatarProps = React.HTMLAttributes<HTMLDivElement> & {\n size?: \"default\" | \"sm\" | \"lg\";\n};\n\nexport function Avatar({ className, size = \"default\", ...props }: AvatarProps) {\n return (\n <AvatarRoot\n data-slot=\"avatar\"\n data-size={size}\n size={size}\n className={cn(className)}\n {...props}\n />\n );\n}\n\nexport type AvatarImageProps = React.ImgHTMLAttributes<HTMLImageElement>;\n\nexport function AvatarImage({ className, ...props }: AvatarImageProps) {\n return <AvatarImagePrimitive data-slot=\"avatar-image\" className={cn(className)} {...props} />;\n}\n\nexport type AvatarFallbackProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function AvatarFallback({ className, ...props }: AvatarFallbackProps) {\n return <AvatarFallbackPrimitive data-slot=\"avatar-fallback\" className={cn(className)} {...props} />;\n}\n\ndeclare module \"../../theme/SlotsProvider.js\" {\n interface AtomSlots {\n Avatar: typeof Avatar;\n AvatarImage: typeof AvatarImage;\n AvatarFallback: typeof AvatarFallback;\n }\n}\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { UserMessage } from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type UserMessageBubbleProps = {\n text: string;\n attachments?: ReactNode;\n editAction?: ReactNode;\n className?: string;\n};\n\nexport function UserMessageBubble({ text, attachments, editAction, className }: UserMessageBubbleProps) {\n return (\n <div\n data-slot=\"aui_user-message-root\"\n className={cn(\"fade-in slide-in-from-bottom-1 animate-in duration-150\", className)}\n >\n {attachments}\n <UserMessage text={text} editAction={editAction} />\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n UserMessageBubble: typeof UserMessageBubble;\n }\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\nimport { forwardRef } from \"react\";\nimport TfyUserMessageEdit, {\n type UserMessageEditProps as TfyUserMessageEditProps,\n} from \"tfy-web-components/components/molecules/agent-chat/UserMessageEdit\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type UserMessageEditProps = Pick<\n TfyUserMessageEditProps,\n \"timestamp\" | \"attachments\" | \"input\" | \"footer\" | \"className\"\n>;\n\nexport const UserMessageEdit = forwardRef<\n HTMLDivElement,\n UserMessageEditProps & HTMLAttributes<HTMLDivElement>\n>(function UserMessageEdit({ timestamp, attachments, input, footer, className, ...rest }, ref) {\n return (\n <TfyUserMessageEdit\n ref={ref}\n data-slot=\"aui_user-message-edit\"\n timestamp={timestamp}\n attachments={attachments}\n input={input}\n footer={footer}\n className={cn(className)}\n {...rest}\n />\n );\n});\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n UserMessageEdit: typeof UserMessageEdit;\n }\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport {\n ToolCallCard as TfyToolCallCard,\n type ToolCallCardProps as TfyToolCallCardProps,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ToolCallStatus = \"running\" | \"success\" | \"error\";\n\nexport type ToolCallCardProps = Omit<TfyToolCallCardProps, \"className\"> & {\n approvalSlot?: ReactNode;\n requestSlot?: ReactNode;\n responseSlot?: ReactNode;\n className?: string;\n mcpServerName?: string;\n};\n\nexport function ToolCallCard(props: ToolCallCardProps) {\n const { mcpServerName, ...tfyProps } = props;\n return (\n <TfyToolCallCard\n {...tfyProps}\n className={cn(\"aui-tool-call-card\", props.className)}\n />\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ToolCallCard: typeof ToolCallCard;\n }\n}\n","\"use client\";\n\nimport {\n ToolCallContentBlock as TfyToolCallContentBlock,\n type ToolCallContentBlockProps as TfyToolCallContentBlockProps,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nexport type ToolCallContentBlockProps = TfyToolCallContentBlockProps;\n\nexport function ToolCallContentBlock(props: ToolCallContentBlockProps) {\n return <TfyToolCallContentBlock {...props} />;\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ToolCallContentBlock: typeof ToolCallContentBlock;\n }\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { SubAgentCard as TfySubAgentCard } from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\nimport type { ToolCallStatus } from \"./ToolCallCard.js\";\n\nexport type SubAgentCardProps = {\n agentName: string;\n instruction: string;\n stepCount: number;\n status: ToolCallStatus;\n expanded: boolean;\n onToggle: () => void;\n durationText?: string;\n children?: ReactNode;\n className?: string;\n};\n\nexport function SubAgentCard({\n agentName,\n instruction,\n stepCount,\n status,\n expanded,\n onToggle,\n durationText,\n children,\n className,\n}: SubAgentCardProps) {\n const Markdown = useSlot(\"Markdown\");\n\n return (\n <TfySubAgentCard\n agentName={agentName}\n instruction={instruction}\n stepCount={stepCount}\n status={status}\n expanded={expanded}\n onToggle={onToggle}\n durationText={durationText}\n renderInstruction={(content: string) => <Markdown content={content} />}\n className={cn(\"aui-sub-agent-card\", className)}\n >\n {children}\n </TfySubAgentCard>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n SubAgentCard: typeof SubAgentCard;\n }\n}\n","\"use client\";\n\nimport {\n SandboxToolCall,\n ToolCallCard as TfyToolCallCard,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { cn } from \"./lib/cn.js\";\nimport type { ToolCallStatus } from \"./ToolCallCard.js\";\n\nexport type SandboxToolCallCardProps = {\n name: string;\n intent?: string;\n status: ToolCallStatus;\n expanded: boolean;\n onToggle: () => void;\n command?: string;\n exitCode?: number | null;\n argsJson?: string;\n resultText?: string;\n resultJson?: string;\n viewMode?: \"terminal\" | \"code\";\n hasContent?: boolean;\n onViewModeChange?: (viewMode: \"terminal\" | \"code\") => void;\n durationText?: string;\n className?: string;\n};\n\nexport function SandboxToolCallCard({\n name,\n intent,\n status,\n expanded,\n onToggle,\n command,\n exitCode,\n argsJson,\n resultText,\n resultJson,\n viewMode,\n hasContent,\n onViewModeChange,\n durationText,\n className,\n}: SandboxToolCallCardProps) {\n const awaiting = status === \"running\";\n\n const sandboxContent = (\n <SandboxToolCall\n command={command}\n exitCode={exitCode}\n argsJson={argsJson}\n resultText={resultText}\n resultJson={resultJson}\n viewMode={viewMode}\n hasContent={hasContent}\n onViewModeChange={onViewModeChange}\n />\n );\n\n return (\n <TfyToolCallCard\n toolName={intent || name}\n icon=\"cube\"\n iconClassName=\"text-indigo-600 dark:text-gray-750 shrink-0\"\n expanded={expanded}\n onToggle={onToggle}\n awaiting={awaiting}\n awaitingText={durationText ?? \"Running…\"}\n showResponseLine={false}\n requestSlot={sandboxContent}\n className={cn(\"aui-sandbox-tool-call-card\", className)}\n />\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n SandboxToolCallCard: typeof SandboxToolCallCard;\n }\n}\n","\"use client\";\n\nimport {\n ToolApprovalBlock,\n type ToolApprovalBlockProps as TfyToolApprovalBlockProps,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ToolApprovalBarProps = TfyToolApprovalBlockProps;\n\nexport function ToolApprovalBar({ className, ...props }: ToolApprovalBarProps) {\n return (\n <ToolApprovalBlock\n {...props}\n className={cn(\"aui-tool-approval-bar\", className)}\n />\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ToolApprovalBar: typeof ToolApprovalBar;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { ChevronDownIcon, LoaderIcon } from \"lucide-react\";\nimport { Accordion, AccordionDetails, AccordionSummary } from \"tfy-web-components/components/atoms/Accordion\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ToolGroupCardProps = {\n toolCallCount: number;\n expanded: boolean;\n active?: boolean;\n onToggle: () => void;\n children: ReactNode;\n className?: string;\n};\n\nexport function ToolGroupCard({\n toolCallCount,\n expanded,\n active = false,\n onToggle,\n children,\n className,\n}: ToolGroupCardProps) {\n const label = `${toolCallCount} tool ${toolCallCount === 1 ? \"call\" : \"calls\"}`;\n\n return (\n <Accordion\n data-slot=\"tool-group-card\"\n expanded={expanded}\n onChange={() => onToggle()}\n background=\"transparent\"\n className={cn(\"aui-tool-group-card group/tool-group w-full\", className)}\n sx={{ margin: 0, border: \"none\", boxShadow: \"none\" }}\n >\n <AccordionSummary\n hideIcon\n disableRipple\n sx={{\n padding: 0,\n minHeight: 0,\n \"&.Mui-expanded\": { minHeight: 0 },\n \"&:hover\": { backgroundColor: \"transparent\" },\n \"& .MuiAccordionSummary-content\": { margin: 0, width: \"100%\" },\n }}\n >\n <div className=\"text-muted-foreground hover:text-foreground flex origin-left items-center gap-2 py-1.5 text-sm transition-[color,scale] active:scale-[0.98]\">\n {active && <LoaderIcon className=\"size-3 shrink-0 animate-spin [animation-duration:0.6s]\" />}\n <span className=\"text-xs font-medium\">{label}</span>\n <ChevronDownIcon\n className={cn(\n \"size-3 shrink-0 transition-transform duration-200 ease-[cubic-bezier(0.32,0.72,0,1)]\",\n expanded ? \"rotate-0\" : \"-rotate-90\",\n )}\n />\n </div>\n </AccordionSummary>\n <AccordionDetails sx={{ padding: 0 }}>\n <div className=\"mt-1 flex flex-col gap-2 text-foreground\">{children}</div>\n </AccordionDetails>\n </Accordion>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ToolGroupCard: typeof ToolGroupCard;\n }\n}\n","import Skeleton from \"tfy-web-components/components/atoms/Skeleton\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type MessageListSkeletonProps = {\n className?: string;\n};\n\nexport function MessageListSkeleton({ className }: MessageListSkeletonProps) {\n return (\n <div\n role=\"status\"\n aria-label=\"Loading conversation\"\n data-slot=\"aui_thread-history-skeleton\"\n className={cn(\"mb-14 flex flex-col gap-y-6\", className)}\n >\n <div className=\"flex justify-end\">\n <Skeleton className=\"h-10 w-[min(85%,20rem)] rounded-xl\" />\n </div>\n <div className=\"flex flex-col gap-2 px-2\">\n <Skeleton className=\"h-4 w-full max-w-md\" />\n <Skeleton className=\"h-4 w-full max-w-sm\" />\n <Skeleton className=\"h-4 w-2/3 max-w-xs\" />\n </div>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageListSkeleton: typeof MessageListSkeleton;\n }\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\n\nexport type ComposerShellProps = {\n value: string;\n placeholder: string;\n disabled: boolean;\n isRunning?: boolean;\n attachments?: ReactNode;\n modelLabel?: string;\n modelIcon?: ReactNode;\n connectorStatusLabel?: string;\n onValueChange: (value: string) => void;\n onSubmit: () => void;\n onCancel?: () => void;\n onAttach?: () => void;\n className?: string;\n};\n\nexport function ComposerShell({\n value,\n placeholder,\n disabled,\n isRunning = false,\n attachments,\n modelLabel,\n modelIcon,\n connectorStatusLabel,\n onValueChange,\n onSubmit,\n onCancel,\n onAttach,\n className,\n}: ComposerShellProps) {\n const ComposerLeftSection = useSlot(\"ComposerLeftSection\");\n const ComposerRightSection = useSlot(\"ComposerRightSection\");\n const ComposerSendButton = useSlot(\"ComposerSendButton\");\n\n return (\n <div\n data-slot=\"aui_composer-shell\"\n className={cn(\n \"border-border/60 focus-within:border-ring focus-within:ring-ring/20 flex w-full flex-col gap-2 rounded-[var(--composer-radius,1.5rem)] border bg-[var(--composer-bg,var(--muted))] p-[var(--composer-padding,8px)] shadow-sm transition-colors focus-within:ring-3\",\n className,\n )}\n >\n {attachments}\n <textarea\n value={value}\n placeholder={placeholder}\n disabled={disabled}\n rows={1}\n aria-label=\"Message input\"\n onChange={(event) => onValueChange(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n onSubmit();\n }\n }}\n className=\"placeholder:text-muted-foreground/80 max-h-32 min-h-10 w-full resize-none rounded-lg bg-transparent px-2.5 py-1 text-base outline-none\"\n />\n <div className=\"flex items-center justify-between px-1\">\n <div className=\"flex items-center gap-2\">\n <ComposerLeftSection\n disabled={disabled}\n isRunning={isRunning}\n onAttach={onAttach}\n />\n {connectorStatusLabel && (\n <span className=\"text-muted-foreground text-xs\">{connectorStatusLabel}</span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {modelLabel && (\n <span className=\"bg-muted text-muted-foreground flex items-center gap-1 rounded-full px-2 py-0.5 text-xs\">\n {modelIcon}\n {modelLabel}\n </span>\n )}\n <ComposerRightSection disabled={disabled} isRunning={isRunning} />\n <ComposerSendButton\n disabled={disabled}\n canSubmit={!disabled && value.trim().length > 0}\n isRunning={isRunning}\n onSubmit={onSubmit}\n onCancel={onCancel}\n />\n </div>\n </div>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ComposerShell: typeof ComposerShell;\n }\n}\n","\"use client\";\n\nimport Spinner from \"tfy-web-components/components/atoms/Spinner\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport type ComposerLeftSectionProps = {\n disabled: boolean;\n isRunning: boolean;\n onAttach?: () => void;\n};\n\nexport type ComposerRightSectionProps = {\n disabled: boolean;\n isRunning: boolean;\n};\n\nexport type ComposerSendButtonProps = {\n disabled: boolean;\n canSubmit: boolean;\n isRunning: boolean;\n onSubmit: () => void;\n onCancel?: () => void;\n};\n\nexport function ComposerLeftSection({ onAttach }: ComposerLeftSectionProps) {\n const IconButton = useSlot(\"IconButton\");\n\n if (!onAttach) return null;\n\n return <IconButton icon=\"plus\" tooltip=\"Attach\" onClick={onAttach} />;\n}\n\nexport function ComposerRightSection(_: ComposerRightSectionProps) {\n return null;\n}\n\nexport function ComposerSendButton({\n canSubmit,\n isRunning,\n onSubmit,\n onCancel,\n}: ComposerSendButtonProps) {\n const Button = useSlot(\"Button\");\n\n if (isRunning) {\n return (\n <Button.Primary\n disabled={!onCancel}\n onClick={onCancel}\n text={\n <>\n <Spinner small />\n Cancel\n </>\n }\n />\n );\n }\n\n return (\n <Button.Primary\n disabled={!canSubmit}\n onClick={onSubmit}\n icon=\"arrow-up\"\n tooltipProps={{\n title: \"Send message\",\n size: \"fit\",\n }}\n />\n );\n}\n","\"use client\";\n\nimport { FileTextIcon } from \"lucide-react\";\n\nimport { USER_MESSAGE_ATTACHMENT_PREVIEW_REM } from \"../constants/attachments.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\n\nexport { USER_MESSAGE_ATTACHMENT_PREVIEW_REM };\n\nexport type AttachmentCardSize = \"chip\" | \"preview\";\n\nexport type AttachmentCardProps = {\n name: string;\n contentType?: string;\n previewSrc?: string;\n isImage?: boolean;\n size?: AttachmentCardSize;\n /** When set, constrains image preview and file chip width to this rem size. */\n previewRem?: number;\n onRemove?: () => void;\n className?: string;\n};\n\nexport function AttachmentCard({\n name,\n previewSrc,\n isImage = false,\n size = \"chip\",\n previewRem,\n onRemove,\n className,\n}: AttachmentCardProps) {\n const IconButton = useSlot(\"IconButton\");\n const Avatar = useSlot(\"Avatar\");\n const AvatarImage = useSlot(\"AvatarImage\");\n const AvatarFallback = useSlot(\"AvatarFallback\");\n\n if (size === \"preview\" && isImage && previewSrc) {\n const previewSize =\n previewRem != null ? { width: `${previewRem}rem`, height: `${previewRem}rem` } : undefined;\n\n return (\n <div\n data-slot=\"aui_attachment-preview\"\n style={previewSize}\n className={cn(\n \"aui-attachment-preview relative shrink-0 cursor-pointer overflow-hidden rounded-lg border\",\n previewRem == null && \"size-24\",\n className,\n )}\n >\n <img src={previewSrc} alt={name} className=\"h-full w-full object-cover\" />\n </div>\n );\n }\n\n return (\n <div\n data-slot=\"aui_attachment-chip\"\n style={previewRem != null ? { maxWidth: `${previewRem}rem` } : undefined}\n className={cn(\n \"aui-attachment-chip bg-muted flex max-w-full shrink-0 items-center gap-2 rounded-lg border px-2 py-1.5\",\n className,\n )}\n >\n <div className=\"bg-background flex size-7 shrink-0 items-center justify-center overflow-hidden rounded-md border\">\n {isImage && previewSrc ? (\n <Avatar className=\"size-7 rounded-none\">\n <AvatarImage src={previewSrc} alt={name} className=\"object-cover\" />\n <AvatarFallback>\n <FileTextIcon className=\"text-muted-foreground size-4\" />\n </AvatarFallback>\n </Avatar>\n ) : (\n <FileTextIcon className=\"text-muted-foreground size-4\" />\n )}\n </div>\n <span className=\"text-foreground min-w-0 truncate text-sm\">{name}</span>\n {onRemove && (\n <IconButton\n icon=\"xmark\"\n tooltip=\"Remove file\"\n className=\"size-6 shrink-0 rounded-full\"\n onClick={onRemove}\n />\n )}\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AttachmentCard: typeof AttachmentCard;\n }\n}\n","/** Fixed preview bounds for attachments rendered in user message bubbles. */\nexport const USER_MESSAGE_ATTACHMENT_PREVIEW_REM = 12;\n","import IconButton from \"tfy-web-components/components/atoms/IconButton\";\nimport type { IconButtonProps } from \"tfy-web-components/components/atoms/IconButton\";\n\nexport type AttachmentPickerButtonProps = Omit<IconButtonProps, \"tooltip\" | \"icon\">;\n\nexport function AttachmentPickerButton(props: AttachmentPickerButtonProps) {\n return (\n <IconButton\n icon=\"plus\"\n tooltip=\"Add Attachment\"\n className=\"size-7 rounded-full p-1\"\n {...props}\n />\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AttachmentPickerButton: typeof AttachmentPickerButton;\n }\n}\n","\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport Modal from \"tfy-web-components/components/atoms/Modal\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport type AttachmentPreviewDialogProps = {\n previewSrc?: string;\n children: ReactNode;\n};\n\nexport function AttachmentPreviewDialog({ previewSrc, children }: AttachmentPreviewDialogProps) {\n const IconButton = useSlot(\"IconButton\");\n const [open, setOpen] = useState(false);\n\n if (!previewSrc) return <>{children}</>;\n\n return (\n <>\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => setOpen(true)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n setOpen(true);\n }\n }}\n className=\"contents cursor-pointer\"\n >\n {children}\n </div>\n {/* tfy ModalProps omits MUI `open` in published types; runtime accepts it. */}\n {/* @ts-expect-error MUI Modal `open` is accepted at runtime */}\n <Modal open={open} onClose={() => setOpen(false)}>\n <div className=\"bg-popover fixed top-1/2 left-1/2 z-50 w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 rounded-xl p-2 outline-none sm:max-w-3xl\">\n <span className=\"absolute top-2 right-2 z-10 inline-flex\">\n <IconButton icon=\"xmark\" tooltip=\"Close\" onClick={() => setOpen(false)} />\n </span>\n <div className=\"bg-background relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden\">\n <img\n src={previewSrc}\n alt=\"Attachment preview\"\n className=\"block h-auto max-h-[80vh] w-auto max-w-full object-contain\"\n />\n </div>\n </div>\n </Modal>\n </>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AttachmentPreviewDialog: typeof AttachmentPreviewDialog;\n }\n}\n","import { forwardRef } from \"react\";\nimport IconButton from \"tfy-web-components/components/atoms/IconButton\";\nimport type { IconButtonProps } from \"tfy-web-components/components/atoms/IconButton\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ScrollToBottomButtonProps = Omit<IconButtonProps, \"tooltip\" | \"icon\">;\n\nexport const ScrollToBottomButton = forwardRef<HTMLSpanElement, ScrollToBottomButtonProps>(\n ({ className, disabled, ...rest }, ref) => {\n if (disabled) return null;\n return (\n <span\n ref={ref}\n className={cn(\"absolute -top-14 z-10 inline-flex self-center\")}\n >\n <IconButton\n icon=\"arrow-down\"\n tooltip=\"Scroll to bottom\"\n disabled={disabled}\n className={cn(\n \"aui-thread-scroll-to-bottom dark:border-border dark:bg-background dark:hover:bg-accent rounded-full p-4\",\n className,\n )}\n {...rest}\n />\n </span>\n );\n },\n);\n\nScrollToBottomButton.displayName = \"ScrollToBottomButton\";\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ScrollToBottomButton: typeof ScrollToBottomButton;\n }\n}\n","import IconProvider from \"tfy-web-components/components/atoms/IconProvider\";\nimport IconButton from \"tfy-web-components/components/atoms/IconButton\";\nimport DropdownMenu from \"tfy-web-components/components/molecules/DropdownMenu\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ThreadListRowProps = {\n title: string;\n active: boolean;\n onSelect: () => void;\n onArchive?: () => void;\n onDelete?: () => void;\n className?: string;\n};\n\nexport function ThreadListRow({ title, active, onSelect, onArchive, onDelete, className }: ThreadListRowProps) {\n return (\n <div\n data-slot=\"aui_thread-list-item\"\n data-active={active || undefined}\n className={cn(\n \"group hover:bg-muted data-[active]:bg-muted relative flex min-h-9 items-center rounded-lg transition-colors\",\n className,\n )}\n >\n <button\n type=\"button\"\n onClick={onSelect}\n data-slot=\"aui_thread-list-item-trigger\"\n className=\"flex min-h-9 min-w-0 flex-1 items-center rounded-lg px-2.5 py-2 text-start text-sm outline-none group-hover:pe-9\"\n >\n <span className=\"min-w-0 flex-1 truncate\">{title}</span>\n </button>\n {(onArchive || onDelete) && (\n <div className=\"absolute end-1.5 top-1/2 inline-flex -translate-y-1/2 opacity-0 group-hover:opacity-100\">\n <DropdownMenu\n trigger={\n <IconButton\n icon=\"ellipsis\"\n tooltip=\"More options\"\n className=\"size-6 p-0\"\n />\n }\n side=\"right\"\n align=\"start\"\n >\n {onArchive && (\n <DropdownMenu.Item onClick={onArchive}>\n <IconProvider icon=\"box-archive\" size={0.75} />\n Archive\n </DropdownMenu.Item>\n )}\n {onDelete && (\n <DropdownMenu.Item onClick={onDelete} className=\"text-destructive hover:bg-destructive/10\">\n <IconProvider icon=\"trash\" size={0.75} />\n Delete\n </DropdownMenu.Item>\n )}\n </DropdownMenu>\n </div>\n )}\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ThreadListRow: typeof ThreadListRow;\n }\n}\n","import type { ReactNode } from \"react\";\nimport Button, { type ButtonProps } from \"tfy-web-components/components/atoms/Button\";\nimport Skeleton from \"tfy-web-components/components/atoms/Skeleton\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ThreadListNewButtonProps = Omit<ButtonProps, \"text\" | \"icon\">;\n\nexport function ThreadListNewButton({ className, ...rest }: ThreadListNewButtonProps) {\n return (\n <Button.Ghost\n data-slot=\"aui_thread-list-new\"\n className={cn(\"hover:bg-muted h-8 justify-start gap-2 rounded-md px-2.5 text-sm font-normal\", className)}\n icon=\"plus\"\n text=\"New Thread\"\n {...rest}\n />\n );\n}\n\nexport type ThreadListRowSkeletonProps = {\n count?: number;\n className?: string;\n};\n\nexport function ThreadListRowSkeleton({ count = 5, className }: ThreadListRowSkeletonProps) {\n return (\n <div className={cn(\"flex flex-col gap-1\", className)} role=\"status\" aria-label=\"Loading threads\">\n {Array.from({ length: count }, (_, i) => (\n <div key={i} className=\"flex h-8 items-center px-2.5\">\n <Skeleton className=\"h-3.5 w-full\" />\n </div>\n ))}\n </div>\n );\n}\n\nexport type ThreadListEmptyStateProps = {\n message?: string;\n className?: string;\n};\n\nexport function ThreadListEmptyState({ message = \"No threads yet\", className }: ThreadListEmptyStateProps) {\n return (\n <div className={cn(\"text-muted-foreground flex flex-1 items-center justify-center px-4 text-center text-sm\", className)}>\n {message}\n </div>\n );\n}\n\nexport type ThreadListShellProps = {\n header: ReactNode;\n children: ReactNode;\n className?: string;\n};\n\nexport function ThreadListShell({ header, children, className }: ThreadListShellProps) {\n return (\n <div className={cn(\"font-sans-flex flex min-h-0 flex-1 flex-col gap-1 overflow-hidden p-3\", className)}>\n {header}\n <div className=\"flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto pb-1\">{children}</div>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ThreadListNewButton: typeof ThreadListNewButton;\n ThreadListRowSkeleton: typeof ThreadListRowSkeleton;\n ThreadListEmptyState: typeof ThreadListEmptyState;\n ThreadListShell: typeof ThreadListShell;\n }\n}\n","\"use client\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\n\nexport type MessageActionBarProps = {\n isCopied: boolean;\n onCopy: () => void;\n className?: string;\n};\n\nexport function MessageActionBar({ isCopied, onCopy, className }: MessageActionBarProps) {\n const MessageTimestamp = useSlot(\"MessageTimestamp\");\n const IconButton = useSlot(\"IconButton\");\n\n return (\n <div\n className={cn(\n \"aui-assistant-action-bar-root text-muted-foreground animate-in fade-in flex items-center gap-3 duration-200\",\n className,\n )}\n >\n <MessageTimestamp />\n <IconButton\n icon={isCopied ? \"check\" : [\"far\", \"clone\"]}\n tooltip=\"Copy\"\n onClick={onCopy}\n />\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageActionBar: typeof MessageActionBar;\n }\n}\n","\"use client\";\n\nimport { MarkdownWithOpenUI } from \"tfy-web-components/components/molecules/Markdown\";\n\nimport { useThemeMode } from \"../theme/SlotsProvider.js\";\n\nexport type MarkdownProps = {\n content: string;\n isStreaming?: boolean;\n /** Base URL for resolving sandbox artifact download paths (e.g. gateway file endpoint). */\n fileDownloadBaseUrl?: string;\n /** Custom download handler that receives the original sandbox artifact path. */\n onDownloadArtifact?: (path: string, filename: string) => Promise<void>;\n /** When true, download actions in sandbox artifact blocks are hidden/disabled. */\n readOnly?: boolean;\n className?: string;\n};\n\nexport function Markdown({\n content,\n isStreaming,\n fileDownloadBaseUrl,\n onDownloadArtifact,\n readOnly,\n className,\n}: MarkdownProps) {\n const mode = useThemeMode();\n\n return (\n <MarkdownWithOpenUI\n isStreaming={isStreaming}\n darkTheme={mode === \"dark\"}\n fileDownloadBaseUrl={fileDownloadBaseUrl}\n onDownloadArtifact={onDownloadArtifact}\n readOnly={readOnly}\n className={className}\n >\n {content}\n </MarkdownWithOpenUI>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n Markdown: typeof Markdown;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { AssistantMessage } from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type AssistantMessageBubbleProps = {\n children: ReactNode;\n error?: ReactNode;\n actionBar?: ReactNode;\n className?: string;\n};\n\nexport function AssistantMessageBubble({\n children,\n error,\n actionBar,\n className,\n}: AssistantMessageBubbleProps) {\n return (\n <div\n data-slot=\"aui_assistant-message-root\"\n className={cn(\n \"group/assistant fade-in slide-in-from-bottom-1 animate-in relative duration-150\",\n className,\n )}\n >\n <AssistantMessage error={error} actionBar={actionBar}>\n {children}\n </AssistantMessage>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n AssistantMessageBubble: typeof AssistantMessageBubble;\n }\n}\n","import { forwardRef, type ComponentPropsWithRef } from \"react\";\n\nimport Spinner from \"tfy-web-components/components/atoms/Spinner\";\n\nimport { cn } from \"./lib/cn.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 small />}\n </div>\n ),\n);\nHistoryLoader.displayName = \"HistoryLoader\";\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n HistoryLoader: typeof HistoryLoader;\n }\n}\n","import { cn } from \"./lib/cn.js\";\n\nexport type MessageErrorBannerProps = {\n message: string;\n className?: string;\n};\n\nexport function MessageErrorBanner({ message, className }: MessageErrorBannerProps) {\n return (\n <div\n role=\"alert\"\n className={cn(\n \"aui-message-error-root border-destructive bg-destructive/10 text-destructive dark:bg-destructive/5 mt-2 rounded-md border p-3 text-sm dark:text-red-200\",\n className,\n )}\n >\n <span className=\"aui-message-error-message line-clamp-2\">{message}</span>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageErrorBanner: typeof MessageErrorBanner;\n }\n}\n","import { cn } from \"./lib/cn.js\";\n\nexport type MessageIndicatorProps = {\n className?: string;\n};\n\nexport function MessageIndicator({ className }: MessageIndicatorProps) {\n return (\n <span\n data-slot=\"aui_assistant-message-indicator\"\n className={cn(\"animate-pulse font-sans\", className)}\n aria-label=\"Assistant is working\"\n >\n {\"●\"}\n </span>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageIndicator: typeof MessageIndicator;\n }\n}\n","\"use client\";\n\nimport { useAuiState } from \"@assistant-ui/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\n\nfunction toDate(createdAt: Date | string | undefined): Date | null {\n if (createdAt == null) {\n return null;\n }\n const date = createdAt instanceof Date ? createdAt : new Date(createdAt);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\nfunction formatTime(date: Date): string {\n return new Intl.DateTimeFormat(undefined, {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true,\n }).format(date);\n}\n\nfunction formatFullDate(date: Date): string {\n return new Intl.DateTimeFormat(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: true,\n }).format(date);\n}\n\nexport type MessageTimestampProps = {\n className?: string;\n};\n\nexport function MessageTimestamp({ className }: MessageTimestampProps) {\n const LightTooltip = useSlot(\"LightTooltip\");\n const createdAt = useAuiState((s) => s.message.createdAt);\n const date = toDate(createdAt);\n\n if (date == null) {\n return null;\n }\n\n return (\n <LightTooltip title={formatFullDate(date)} size=\"fit\">\n <span\n className={cn(\n \"text-xs font-medium cursor-pointer leading-normal shrink-0 text-muted-foreground\",\n className,\n )}\n >\n {formatTime(date)}\n </span>\n </LightTooltip>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n MessageTimestamp: typeof MessageTimestamp;\n }\n}\n","\"use client\";\n\nimport { ActionBarPrimitive, useAui } from \"@assistant-ui/react\";\nimport { useActionBarCopy, useActionBarEdit } from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { cn } from \"./lib/cn.js\";\n\nexport type UserMessageActionBarProps = {\n className?: string;\n};\n\nexport function UserMessageActionBar({ className }: UserMessageActionBarProps) {\n const IconButton = useSlot(\"IconButton\");\n const MessageTimestamp = useSlot(\"MessageTimestamp\");\n const aui = useAui();\n const { edit, disabled: editDisabled } = useActionBarEdit();\n const { copy, isCopied } = useActionBarCopy({\n copyToClipboard: (text) => navigator.clipboard.writeText(text),\n });\n\n return (\n <ActionBarPrimitive.Root\n hideWhenRunning\n className={cn(\n \"aui-user-action-bar-root text-muted-foreground animate-in fade-in flex items-center gap-2 duration-200\",\n className,\n )}\n >\n <IconButton\n icon=\"rotate-right\"\n tooltip=\"Try again\"\n onClick={() => {\n // beginEdit copies the message into the edit composer;\n // startRun forces onEdit even when text is unchanged.\n aui.message().composer().beginEdit();\n aui.message().composer().send({ startRun: true });\n }}\n />\n <IconButton\n icon=\"pencil\"\n tooltip=\"Edit\"\n disabled={editDisabled}\n onClick={edit}\n />\n <IconButton\n icon={isCopied ? \"check\" : [\"far\", \"clone\"]}\n tooltip=\"Copy\"\n onClick={copy}\n />\n <MessageTimestamp />\n </ActionBarPrimitive.Root>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n UserMessageActionBar: typeof UserMessageActionBar;\n }\n}\n","import { forwardRef, type ComponentPropsWithRef, type CSSProperties } from \"react\";\n\nimport { cn } from \"./lib/cn.js\";\n\nconst THREAD_CSS_VARS: CSSProperties = {\n [\"--thread-max-width\" as string]: \"44rem\",\n [\"--composer-bg\" as string]: \"color-mix(in oklab, var(--color-muted) 30%, var(--color-background))\",\n [\"--composer-radius\" as string]: \"1.5rem\",\n [\"--composer-padding\" as string]: \"8px\",\n};\n\nexport type ThreadRootShellProps = ComponentPropsWithRef<\"div\">;\n\nexport const ThreadRootShell = forwardRef<HTMLDivElement, ThreadRootShellProps>(\n ({ className, style, ...rest }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"font-sans-flex aui-root aui-thread-root bg-background @container flex h-full min-h-0 flex-col overflow-hidden\",\n className,\n )}\n style={{ ...THREAD_CSS_VARS, ...style }}\n {...rest}\n />\n ),\n);\nThreadRootShell.displayName = \"ThreadRootShell\";\n\nexport type ThreadViewportShellProps = ComponentPropsWithRef<\"div\"> & {\n isEmpty?: boolean;\n};\n\nexport const ThreadViewportShell = forwardRef<HTMLDivElement, ThreadViewportShellProps>(\n ({ className, isEmpty, children, ...rest }, ref) => (\n <div\n ref={ref}\n data-slot=\"aui_thread-viewport\"\n className={cn(\"relative flex min-h-0 flex-1 flex-col overflow-x-auto overflow-y-auto scroll-smooth\", className)}\n {...rest}\n >\n <div\n className={cn(\n \"mx-auto flex w-full max-w-(--thread-max-width) flex-col px-4 pt-4 pb-4\",\n isEmpty && \"min-h-full justify-center\",\n )}\n >\n {children}\n </div>\n </div>\n ),\n);\nThreadViewportShell.displayName = \"ThreadViewportShell\";\n\nexport type ThreadComposerAreaShellProps = ComponentPropsWithRef<\"div\"> & {\n isEmpty?: boolean;\n};\n\nexport const ThreadComposerAreaShell = forwardRef<HTMLDivElement, ThreadComposerAreaShellProps>(\n ({ className, isEmpty, ...rest }, ref) => (\n <div\n ref={ref}\n data-slot=\"aui_thread-composer\"\n className={cn(\n \"aui-thread-composer bg-background relative mx-auto flex w-full max-w-(--thread-max-width) shrink-0 flex-col gap-4 px-4 pb-4 md:pb-6\",\n !isEmpty && \"rounded-t-(--composer-radius)\",\n className,\n )}\n {...rest}\n />\n ),\n);\nThreadComposerAreaShell.displayName = \"ThreadComposerAreaShell\";\n\nexport type MessageGroupProps = ComponentPropsWithRef<\"div\">;\n\nexport const MessageGroup = forwardRef<HTMLDivElement, MessageGroupProps>(({ className, ...rest }, ref) => (\n <div\n ref={ref}\n data-slot=\"aui_message-group\"\n className={cn(\"flex flex-col gap-y-6 empty:hidden\", className)}\n {...rest}\n />\n));\nMessageGroup.displayName = \"MessageGroup\";\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n ThreadRootShell: typeof ThreadRootShell;\n ThreadViewportShell: typeof ThreadViewportShell;\n ThreadComposerAreaShell: typeof ThreadComposerAreaShell;\n MessageGroup: typeof MessageGroup;\n }\n}\n","import { cn } from \"./lib/cn.js\";\n\nexport type WelcomeScreenProps = {\n heading?: string;\n className?: string;\n};\n\nexport function WelcomeScreen({ heading = \"How can I help you today?\", className }: WelcomeScreenProps) {\n return (\n <div className={cn(\"aui-thread-welcome-root mb-6 flex flex-col items-center px-4 text-center\", className)}>\n <h1 className=\"aui-thread-welcome-message-inner fade-in slide-in-from-bottom-1 animate-in fill-mode-both text-2xl font-semibold duration-200\">\n {heading}\n </h1>\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n WelcomeScreen: typeof WelcomeScreen;\n }\n}\n","import type { ReactNode } from \"react\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"./lib/cn.js\";\n\nexport type ToastProps = {\n title: string;\n description: string;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n className?: string;\n};\n\nexport function Toast({ title, description, open, onOpenChange, className }: ToastProps) {\n if (!open) return null;\n\n return (\n <div\n className={cn(\n \"font-sans-flex border-destructive bg-background text-destructive dark:bg-card pointer-events-auto relative flex max-h-[min(70vh,32rem)] w-full items-start gap-3 rounded-xl border p-4 shadow-lg dark:text-red-200\",\n \"animate-in fade-in-0 slide-in-from-bottom-4\",\n className,\n )}\n >\n <div className=\"grid min-h-0 min-w-0 flex-1 gap-1 overflow-y-auto pe-6\">\n <div className=\"text-sm leading-none font-semibold\">{title}</div>\n <div className=\"font-mono text-sm break-words whitespace-pre-wrap\">\n {description}\n </div>\n </div>\n <button\n onClick={() => onOpenChange(false)}\n className=\"text-destructive hover:bg-muted focus-visible:ring-ring absolute top-3 right-3 rounded-md p-1 transition-colors focus:outline-none focus-visible:ring-2\"\n >\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </button>\n </div>\n );\n}\n\nexport type ToastStackProps = {\n children: ReactNode;\n duration?: number;\n};\n\nexport function ToastStack({ children, duration = Number.POSITIVE_INFINITY }: ToastStackProps) {\n return (\n <div className=\"pointer-events-none fixed bottom-4 left-1/2 z-50 flex h-full max-h-screen w-full max-w-2xl -translate-x-1/2 flex-col-reverse gap-2 px-4\">\n {children}\n </div>\n );\n}\n\ndeclare module \"../theme/SlotsProvider.js\" {\n interface AtomSlots {\n Toast: typeof Toast;\n ToastStack: typeof ToastStack;\n }\n}\n","import { createContext, createElement, useContext, type ReactNode } from \"react\";\n\n/**\n * Semantic color roles. Atoms reference these instead of raw hex/HSL values so a\n * future design-system swap only has to repoint the token values, not the atoms.\n */\nexport type ColorToken =\n | \"background\"\n | \"foreground\"\n | \"muted\"\n | \"mutedForeground\"\n | \"border\"\n | \"primary\"\n | \"primaryForeground\"\n | \"destructive\"\n | \"destructiveForeground\"\n | \"accent\"\n | \"accentForeground\";\n\nexport type RadiusToken = \"none\" | \"sm\" | \"md\" | \"lg\" | \"full\";\n\nexport type SpacingToken = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport type TypeRoleToken = \"body\" | \"bodySmall\" | \"label\" | \"heading\" | \"code\" | \"caption\";\n\nexport interface TypeRoleValue {\n fontSize: string;\n lineHeight: string;\n fontWeight: string | number;\n}\n\nexport interface DesignTokens {\n colors: Record<ColorToken, string>;\n radii: Record<RadiusToken, string>;\n spacing: Record<SpacingToken, string>;\n typography: Record<TypeRoleToken, TypeRoleValue>;\n}\n\n/**\n * Values reference the CSS custom properties already emitted by the shadcn/Tailwind\n * theme in the ported reference app, so default atoms render identically to today\n * without requiring every atom to be rewritten to consume tokens in this pass.\n */\nexport const defaultTokens: DesignTokens = {\n colors: {\n background: \"var(--background)\",\n foreground: \"var(--foreground)\",\n muted: \"var(--muted)\",\n mutedForeground: \"var(--muted-foreground)\",\n border: \"var(--border)\",\n primary: \"var(--primary)\",\n primaryForeground: \"var(--primary-foreground)\",\n destructive: \"var(--destructive)\",\n destructiveForeground: \"var(--destructive-foreground)\",\n accent: \"var(--accent)\",\n accentForeground: \"var(--accent-foreground)\",\n },\n radii: {\n none: \"0px\",\n sm: \"calc(var(--radius) - 4px)\",\n md: \"calc(var(--radius) - 2px)\",\n lg: \"var(--radius)\",\n full: \"9999px\",\n },\n spacing: {\n none: \"0px\",\n xs: \"0.25rem\",\n sm: \"0.5rem\",\n md: \"0.75rem\",\n lg: \"1rem\",\n xl: \"1.5rem\",\n },\n typography: {\n body: { fontSize: \"0.875rem\", lineHeight: \"1.5rem\", fontWeight: 400 },\n bodySmall: { fontSize: \"0.75rem\", lineHeight: \"1.25rem\", fontWeight: 400 },\n label: { fontSize: \"0.75rem\", lineHeight: \"1rem\", fontWeight: 500 },\n heading: { fontSize: \"1.25rem\", lineHeight: \"1.75rem\", fontWeight: 600 },\n code: { fontSize: \"0.8125rem\", lineHeight: \"1.25rem\", fontWeight: 400 },\n caption: { fontSize: \"0.6875rem\", lineHeight: \"1rem\", fontWeight: 400 },\n },\n};\n\nconst TokensContext = createContext<DesignTokens>(defaultTokens);\n\nexport function TokensProvider({\n tokens,\n children,\n}: {\n tokens: DesignTokens;\n children: ReactNode;\n}) {\n return createElement(TokensContext.Provider, { value: tokens }, children);\n}\n\n/** Atoms may call this for theme-driven values; it is not an assistant-ui/runtime hook. */\nexport function useTokens(): DesignTokens {\n return useContext(TokensContext);\n}\n","\"use client\";\n\nimport \"./icons/fontawesome.js\";\nimport \"./icons/registerAgentIcons.js\";\n\nexport { SlotsProvider, useSlot, useThemeMode } from \"./theme/SlotsProvider.js\";\nexport type { AtomSlots, SlotOverrides, ThemeMode } from \"./theme/SlotsProvider.js\";\nexport { defaultSlots } from \"./theme/defaultSlots.js\";\nexport { TokensProvider, useTokens, defaultTokens } from \"./theme/tokens.js\";\nexport type {\n ColorToken,\n RadiusToken,\n SpacingToken,\n TypeRoleToken,\n TypeRoleValue,\n DesignTokens,\n} from \"./theme/tokens.js\";\n\nexport {\n Button,\n DestructiveButton,\n GhostButton,\n PrimaryButton,\n SecondaryButton,\n TertiaryButton,\n} from \"tfy-web-components/components/atoms/Button\";\nexport type {\n ButtonProps,\n ButtonSize,\n} from \"tfy-web-components/components/atoms/Button\";\nexport { default as IconButton } from \"tfy-web-components/components/atoms/IconButton\";\nexport type { IconButtonProps } from \"tfy-web-components/components/atoms/IconButton\";\nexport {\n default as IconProvider,\n registerIcons,\n registerImgIcons,\n} from \"tfy-web-components/components/atoms/IconProvider\";\nexport type { IconProp } from \"tfy-web-components/components/atoms/IconProvider\";\nexport {\n Avatar,\n AvatarImage,\n AvatarFallback,\n} from \"./atoms/primitives/Avatar.js\";\nexport type {\n AvatarProps,\n AvatarImageProps,\n AvatarFallbackProps,\n} from \"./atoms/primitives/Avatar.js\";\nexport { LightTooltip } from \"tfy-web-components/components/atoms/Tooltip\";\nexport type { TooltipProps } from \"tfy-web-components/components/atoms/Tooltip\";\nexport { default as Modal } from \"tfy-web-components/components/atoms/Modal\";\nexport type { ModalProps } from \"tfy-web-components/components/atoms/Modal\";\nexport { default as Dialog } from \"tfy-web-components/components/molecules/Dialog\";\nexport {\n Accordion,\n AccordionSummary,\n AccordionDetails,\n} from \"tfy-web-components/components/atoms/Accordion\";\nexport type { AccordionSummaryProps } from \"tfy-web-components/components/atoms/Accordion\";\nexport { default as Skeleton } from \"tfy-web-components/components/atoms/Skeleton\";\n\nexport { Markdown } from \"./atoms/Markdown.js\";\nexport type { MarkdownProps } from \"./atoms/Markdown.js\";\nexport { UserMessageBubble } from \"./atoms/UserMessageBubble.js\";\nexport type { UserMessageBubbleProps } from \"./atoms/UserMessageBubble.js\";\nexport { UserMessageEdit } from \"./atoms/UserMessageEdit.js\";\nexport type { UserMessageEditProps } from \"./atoms/UserMessageEdit.js\";\nexport { AssistantMessageBubble } from \"./atoms/AssistantMessageBubble.js\";\nexport type { AssistantMessageBubbleProps } from \"./atoms/AssistantMessageBubble.js\";\nexport { MessageErrorBanner } from \"./atoms/MessageErrorBanner.js\";\nexport type { MessageErrorBannerProps } from \"./atoms/MessageErrorBanner.js\";\nexport { MessageActionBar } from \"./atoms/MessageActionBar.js\";\nexport type { MessageActionBarProps } from \"./atoms/MessageActionBar.js\";\nexport { MessageTimestamp } from \"./atoms/MessageTimestamp.js\";\nexport type { MessageTimestampProps } from \"./atoms/MessageTimestamp.js\";\nexport { UserMessageActionBar } from \"./atoms/UserMessageActionBar.js\";\nexport type { UserMessageActionBarProps } from \"./atoms/UserMessageActionBar.js\";\nexport { MessageIndicator } from \"./atoms/MessageIndicator.js\";\nexport type { MessageIndicatorProps } from \"./atoms/MessageIndicator.js\";\nexport { WelcomeScreen } from \"./atoms/WelcomeScreen.js\";\nexport type { WelcomeScreenProps } from \"./atoms/WelcomeScreen.js\";\nexport { MessageListSkeleton } from \"./atoms/Skeletons.js\";\nexport type { MessageListSkeletonProps } from \"./atoms/Skeletons.js\";\nexport { ScrollToBottomButton } from \"./atoms/ScrollToBottomButton.js\";\nexport type { ScrollToBottomButtonProps } from \"./atoms/ScrollToBottomButton.js\";\nexport { HistoryLoader } from \"./atoms/HistoryLoader.js\";\nexport type { HistoryLoaderProps } from \"./atoms/HistoryLoader.js\";\nexport {\n ThreadRootShell,\n ThreadViewportShell,\n ThreadComposerAreaShell,\n MessageGroup,\n} from \"./atoms/ThreadShell.js\";\nexport type {\n ThreadRootShellProps,\n ThreadViewportShellProps,\n ThreadComposerAreaShellProps,\n MessageGroupProps,\n} from \"./atoms/ThreadShell.js\";\n\nexport { ToolCallCard } from \"./atoms/ToolCallCard.js\";\nexport type {\n ToolCallStatus,\n ToolCallCardProps,\n} from \"./atoms/ToolCallCard.js\";\nexport { ToolCallContentBlock } from \"./atoms/ToolCallContentBlock.js\";\nexport type { ToolCallContentBlockProps } from \"./atoms/ToolCallContentBlock.js\";\nexport { SubAgentCard } from \"./atoms/SubAgentCard.js\";\nexport type { SubAgentCardProps } from \"./atoms/SubAgentCard.js\";\nexport { SandboxToolCallCard } from \"./atoms/SandboxToolCallCard.js\";\nexport type { SandboxToolCallCardProps } from \"./atoms/SandboxToolCallCard.js\";\nexport { ToolApprovalBar } from \"./atoms/ToolApprovalBar.js\";\nexport type { ToolApprovalBarProps } from \"./atoms/ToolApprovalBar.js\";\nexport { ToolGroupCard } from \"./atoms/ToolGroupCard.js\";\nexport type { ToolGroupCardProps } from \"./atoms/ToolGroupCard.js\";\nexport { AgentStepsCard } from \"./atoms/adapters/AgentStepsCardAdapter.js\";\nexport type { AgentStepsCardProps } from \"./atoms/adapters/AgentStepsCardAdapter.js\";\nexport type { ReasoningCardProps } from \"./atoms/adapters/ReasoningCardAdapter.js\";\nexport { ComposerShell } from \"./atoms/ComposerShell.js\";\nexport type { ComposerShellProps } from \"./atoms/ComposerShell.js\";\nexport {\n ComposerLeftSection,\n ComposerRightSection,\n ComposerSendButton,\n} from \"./atoms/ComposerSections.js\";\nexport type {\n ComposerLeftSectionProps,\n ComposerRightSectionProps,\n ComposerSendButtonProps,\n} from \"./atoms/ComposerSections.js\";\nexport type {\n AskUserPromptProps,\n AskUserPromptProps as AskUserQuestionCardProps,\n AskUserAnswerDraft,\n AnsweredQuestion as AskUserAnsweredQuestion,\n Question as AskUserQuestion,\n} from \"./atoms/adapters/AskUserPromptAdapter.js\";\nexport type {\n McpAuthPromptProps,\n McpAuthPromptProps as McpAuthCardProps,\n McpServer as McpAuthServer,\n} from \"./atoms/adapters/McpAuthPromptAdapter.js\";\nexport {\n AttachmentCard,\n USER_MESSAGE_ATTACHMENT_PREVIEW_REM,\n} from \"./atoms/AttachmentCard.js\";\nexport type {\n AttachmentCardProps,\n AttachmentCardSize,\n} from \"./atoms/AttachmentCard.js\";\nexport { AttachmentPreviewDialog } from \"./atoms/AttachmentPreviewDialog.js\";\nexport type { AttachmentPreviewDialogProps } from \"./atoms/AttachmentPreviewDialog.js\";\nexport { AttachmentPickerButton } from \"./atoms/AttachmentPickerButton.js\";\nexport type { AttachmentPickerButtonProps } from \"./atoms/AttachmentPickerButton.js\";\nexport { ThreadListRow } from \"./atoms/ThreadListRow.js\";\nexport type { ThreadListRowProps } from \"./atoms/ThreadListRow.js\";\nexport {\n ThreadListNewButton,\n ThreadListRowSkeleton,\n ThreadListEmptyState,\n ThreadListShell,\n} from \"./atoms/ThreadListMisc.js\";\nexport type {\n ThreadListNewButtonProps,\n ThreadListRowSkeletonProps,\n ThreadListEmptyStateProps,\n ThreadListShellProps,\n} from \"./atoms/ThreadListMisc.js\";\nexport { Toast, ToastStack } from \"./atoms/Toast.js\";\nexport type { ToastProps, ToastStackProps } from \"./atoms/Toast.js\";\nexport { ThreadContainer } from \"./containers/ThreadContainer.js\";\nexport type { ThreadContainerProps } from \"./containers/ThreadContainer.js\";\nexport { HistoryLoaderContainer } from \"./containers/HistoryLoaderContainer.js\";\nexport { AssistantMessageContainer } from \"./containers/AssistantMessageContainer.js\";\nexport { UserMessageContainer } from \"./containers/UserMessageContainer.js\";\nexport { UserEditComposerContainer } from \"./containers/UserEditComposerContainer.js\";\nexport { AssistantTextContainer } from \"./containers/AssistantTextContainer.js\";\nexport { ToolCallContainer } from \"./containers/ToolCallContainer.js\";\nexport { ToolCallContentBlockContainer } from \"./containers/ToolCallContentBlockContainer.js\";\nexport { ToolApprovalContainer } from \"./containers/ToolApprovalContainer.js\";\nexport type { ToolApprovalOption } from \"./containers/ToolApprovalContainer.js\";\nexport { ToolGroupContainer } from \"./containers/ToolGroupContainer.js\";\nexport type { ThreadGroupPart } from \"./containers/ToolGroupContainer.js\";\nexport { AgentStepsContainer } from \"./containers/AgentStepsContainer.js\";\nexport type { AgentStepsContainerProps } from \"./containers/AgentStepsContainer.js\";\nexport { ReasoningContainer } from \"./containers/ReasoningContainer.js\";\nexport { ComposerContainer } from \"./containers/ComposerContainer.js\";\nexport type { ComposerContainerProps } from \"./containers/ComposerContainer.js\";\nexport {\n ComposerBusyProvider,\n useComposerBusyState,\n} from \"./hooks/useComposerBusyState.js\";\nexport type { ComposerBusyState } from \"./hooks/useComposerBusyState.js\";\nexport {\n threadHasPendingMcpAuth,\n useComposerPauseView,\n} from \"./hooks/useComposerPauseView.js\";\nexport type {\n ComposerPauseView,\n ThreadPauseState,\n} from \"./hooks/useComposerPauseView.js\";\nexport { AskUserContainer } from \"./containers/AskUserContainer.js\";\nexport { McpAuthContainer } from \"./containers/McpAuthContainer.js\";\nexport {\n ComposerAttachmentsContainer,\n ComposerAttachmentPickerContainer,\n MessageAttachmentsContainer,\n} from \"./containers/AttachmentsContainer.js\";\nexport { ThreadListContainer } from \"./containers/ThreadListContainer.js\";\nexport {\n ErrorToasterProvider,\n useErrorToaster,\n useErrorToasterOptional,\n} from \"./containers/ErrorToasterContainer.js\";\nexport { Thread } from \"./containers/Thread.js\";\n\n// Utils\nexport { computeAgentStepsSplit } from \"./utils/computeAgentStepsSplit.js\";\nexport type { AgentStepsSplitResult } from \"./utils/computeAgentStepsSplit.js\";\n","\"use client\";\n\nimport { useEffect, type ReactNode } from \"react\";\nimport { preloadMarkdownOpenUI } from \"tfy-web-components/components/molecules/Markdown\";\nimport { ThreadPrimitive, useAuiState, type AssistantState } from \"@assistant-ui/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { ComposerBusyProvider } from \"../hooks/useComposerBusyState.js\";\nimport { AssistantMessageContainer } from \"./AssistantMessageContainer.js\";\nimport { HistoryLoaderContainer } from \"./HistoryLoaderContainer.js\";\nimport { UserEditComposerContainer } from \"./UserEditComposerContainer.js\";\nimport { UserMessageContainer } from \"./UserMessageContainer.js\";\n\n// Startup exposes a loading placeholder thread; treat it as a new chat so the\n// composer mounts centered. Loads after startup keep the docked layout.\nconst isNewChatView = (s: AssistantState) =>\n s.thread.messages.length === 0 && (!s.thread.isLoading || s.threads.isLoading);\n\nfunction ThreadMessage({ isEditing }: { isEditing: boolean }) {\n const role = useAuiState((s) => s.message.role);\n if (role === \"user\") {\n if (isEditing) {\n return <UserEditComposerContainer />;\n }\n return <UserMessageContainer />;\n }\n return <AssistantMessageContainer />;\n}\n\nexport type ThreadContainerProps = {\n /**\n * Rendered in the bottom composer area. Left undefined until\n * `ComposerContainer` exists (milestone 6); the public `<Thread/>` export\n * wires the two together once it does.\n */\n composer?: ReactNode;\n};\n\nexport function ThreadContainer({ composer }: ThreadContainerProps) {\n useEffect(() => {\n void preloadMarkdownOpenUI();\n }, []);\n\n const ThreadRootShell = useSlot(\"ThreadRootShell\");\n const ThreadViewportShell = useSlot(\"ThreadViewportShell\");\n const ThreadComposerAreaShell = useSlot(\"ThreadComposerAreaShell\");\n const MessageGroup = useSlot(\"MessageGroup\");\n const WelcomeScreen = useSlot(\"WelcomeScreen\");\n const MessageListSkeleton = useSlot(\"MessageListSkeleton\");\n const ScrollToBottomButton = useSlot(\"ScrollToBottomButton\");\n\n const isEmpty = useAuiState(isNewChatView);\n const isLoading = useAuiState((s) => s.thread.isLoading);\n\n return (\n <ComposerBusyProvider>\n <ThreadPrimitive.Root asChild>\n <ThreadRootShell>\n <ThreadPrimitive.Viewport asChild turnAnchor=\"top\" autoScroll>\n <ThreadViewportShell isEmpty={isEmpty}>\n {isEmpty && <WelcomeScreen />}\n {isLoading ? (\n <MessageListSkeleton />\n ) : (\n <>\n <HistoryLoaderContainer />\n <MessageGroup>\n <ThreadPrimitive.Messages>\n {({ message }) => (\n <ThreadMessage\n isEditing={\n message.role === \"user\" &&\n message.composer.isEditing\n }\n />\n )}\n </ThreadPrimitive.Messages>\n </MessageGroup>\n </>\n )}\n </ThreadViewportShell>\n </ThreadPrimitive.Viewport>\n\n {!isLoading && (\n <ThreadComposerAreaShell isEmpty={isEmpty}>\n {!isEmpty && (\n <ThreadPrimitive.ScrollToBottom asChild>\n <ScrollToBottomButton />\n </ThreadPrimitive.ScrollToBottom>\n )}\n {composer}\n </ThreadComposerAreaShell>\n )}\n </ThreadRootShell>\n </ThreadPrimitive.Root>\n </ComposerBusyProvider>\n );\n}\n","\"use client\";\n\nimport { useThreadIsRunning } from \"@assistant-ui/core/react\";\nimport { createContext, createElement, useCallback, useContext, useEffect, useState, type ReactNode } from \"react\";\n\nexport type ComposerBusyState = {\n /** True while submitting or while the turn stream is active. */\n isBusy: boolean;\n isRunning: boolean;\n isSubmitting: boolean;\n send: (sendFn: () => void | Promise<void>) => void;\n resetBusy: () => void;\n};\n\nconst ComposerBusyContext = createContext<ComposerBusyState | null>(null);\n\nfunction useComposerBusyStateValue(): ComposerBusyState {\n const isRunning = useThreadIsRunning();\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n useEffect(() => {\n if (!isRunning) {\n setIsSubmitting(false);\n }\n }, [isRunning]);\n\n const isBusy = isRunning || isSubmitting;\n\n const resetBusy = useCallback(() => {\n setIsSubmitting(false);\n }, []);\n\n const send = useCallback((sendFn: () => void | Promise<void>) => {\n setIsSubmitting(true);\n try {\n const result = sendFn();\n if (result != null && typeof result.then === \"function\") {\n void result.catch(() => {\n setIsSubmitting(false);\n });\n }\n } catch {\n setIsSubmitting(false);\n }\n }, []);\n\n return { isBusy, isRunning, isSubmitting, send, resetBusy };\n}\n\nexport function ComposerBusyProvider({ children }: { children: ReactNode }) {\n const value = useComposerBusyStateValue();\n return createElement(ComposerBusyContext.Provider, { value }, children);\n}\n\n/**\n * Optimistic composer busy state shared across the thread. `useThreadIsRunning()`\n * only becomes true once the turn stream starts; this hook flips to busy\n * immediately on submit so the send button shows loading before session setup /\n * turn API work finishes.\n *\n * Must be used within `<ComposerBusyProvider>` (wired by default in `<Thread />`).\n */\nexport function useComposerBusyState(): ComposerBusyState {\n const value = useContext(ComposerBusyContext);\n if (value == null) {\n throw new Error(\"useComposerBusyState must be used within ComposerBusyProvider\");\n }\n return value;\n}\n","\"use client\";\n\nimport { MessagePrimitive, type EnrichedPartState, useAuiState, type GroupByContext } from \"@assistant-ui/react\";\nimport { useActionBarCopy, useMessageError, useThreadIsRunning, type PartState } from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { computeAgentStepsSplit } from \"../utils/computeAgentStepsSplit.js\";\nimport { AssistantTextContainer } from \"./AssistantTextContainer.js\";\nimport { MessageImageContainer } from \"./MessageImageContainer.js\";\nimport { ReasoningContainer } from \"./ReasoningContainer.js\";\nimport { ToolCallContainer } from \"./ToolCallContainer.js\";\nimport { AgentStepsContainer } from \"./AgentStepsContainer.js\";\nimport type { ThreadGroupPart } from \"./ToolGroupContainer.js\";\n\n/**\n * Dispatches a leaf message part to its renderer. \"data\" parts (generative\n * UI) are out of scope for this SDK entirely.\n */\nfunction AssistantLeafPartContainer({ part }: { part: EnrichedPartState }) {\n switch (part.type) {\n case \"text\":\n case \"reasoning\":\n return <AssistantTextContainer />;\n case \"image\":\n return <MessageImageContainer />;\n case \"tool-call\":\n return <ToolCallContainer {...part} />;\n default:\n return null;\n }\n}\n\nexport function AssistantMessageContainer() {\n const AssistantMessageBubble = useSlot(\"AssistantMessageBubble\");\n const MessageIndicator = useSlot(\"MessageIndicator\");\n const MessageErrorBanner = useSlot(\"MessageErrorBanner\");\n const MessageActionBar = useSlot(\"MessageActionBar\");\n\n const isRunning = useThreadIsRunning();\n const error = useMessageError();\n const { copy, isCopied } = useActionBarCopy({\n copyToClipboard: (text) => navigator.clipboard.writeText(text),\n });\n\n const parts = useAuiState((s) => s.message.parts);\n \n const { cutIndex, hasFinal, toolCount, thinkingCount } = computeAgentStepsSplit(parts, isRunning);\n\n const groupBy = (part: PartState, _context: GroupByContext): readonly `group-${string}`[] | null => {\n const index = parts.findIndex((p) => p === part);\n if (index === -1) return null;\n\n if (part.type === \"text\" && index >= cutIndex) {\n return null;\n }\n\n if (index < cutIndex) {\n if (part.type === \"reasoning\") {\n return [\"group-agentSteps\", \"group-reasoning\"];\n }\n return [\"group-agentSteps\"];\n }\n\n return null;\n };\n\n const agentStepsActive = isRunning && !hasFinal;\n\n return (\n <MessagePrimitive.Root data-role=\"assistant\">\n <AssistantMessageBubble\n error={error !== undefined ? <MessageErrorBanner message={String(error)} /> : undefined}\n actionBar={\n !isRunning ? (\n <MessageActionBar isCopied={isCopied} onCopy={copy} />\n ) : undefined\n }\n >\n <MessagePrimitive.GroupedParts groupBy={groupBy}>\n {({ part, children }) => {\n switch (part.type) {\n case \"group-agentSteps\":\n return (\n <AgentStepsContainer\n toolCount={toolCount}\n thinkingCount={thinkingCount}\n hasFinal={hasFinal}\n active={agentStepsActive}\n >\n {children}\n </AgentStepsContainer>\n );\n case \"group-reasoning\":\n return (\n <ReasoningContainer group={part as ThreadGroupPart} />\n );\n case \"text\":\n case \"reasoning\":\n case \"tool-call\":\n case \"image\":\n case \"data\":\n return <AssistantLeafPartContainer part={part} />;\n case \"indicator\":\n return <MessageIndicator />;\n default:\n return null;\n }\n }}\n </MessagePrimitive.GroupedParts>\n </AssistantMessageBubble>\n </MessagePrimitive.Root>\n );\n}\n","import type { PartState } from \"@assistant-ui/core/react\";\n\nexport interface AgentStepsSplitResult {\n cutIndex: number;\n hasFinal: boolean;\n toolCount: number;\n thinkingCount: number;\n}\n\nexport function computeAgentStepsSplit(\n parts: readonly PartState[],\n isRunning: boolean,\n): AgentStepsSplitResult {\n const finalTexts: Array<{ index: number; content: string }> = [];\n let cutIdx = parts.length;\n\n for (let i = parts.length - 1; i >= 0; i--) {\n const part = parts[i];\n if (!part) continue;\n\n if (part.type === \"text\") {\n const text = (part as { text?: string }).text ?? \"\";\n const trimmed = text.trim();\n \n if (trimmed) {\n finalTexts.unshift({ index: i, content: text });\n cutIdx = i;\n } else {\n cutIdx = i;\n }\n } else {\n break;\n }\n }\n\n const trailingChars = finalTexts.reduce((sum, t) => sum + t.content.length, 0);\n\n const finalConfirmed = finalTexts.length > 0 && (!isRunning || trailingChars >= 500);\n\n const actualCutIndex = finalConfirmed ? cutIdx : parts.length;\n\n let toolCount = 0;\n let thinkingCount = 0;\n for (let i = 0; i < actualCutIndex; i++) {\n const part = parts[i];\n if (!part) continue;\n \n if (part.type === \"tool-call\") {\n toolCount++;\n } else if (part.type === \"reasoning\") {\n thinkingCount++;\n }\n }\n\n return {\n cutIndex: actualCutIndex,\n hasFinal: finalConfirmed,\n toolCount,\n thinkingCount,\n };\n}\n","\"use client\";\n\nimport { useCallback } from \"react\";\nimport { useAuiState } from \"@assistant-ui/react\";\nimport { useTrueFoundryDownloadSandboxFile } from \"@truefoundry/assistant-ui-runtime\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { useErrorToasterOptional } from \"./ErrorToasterContainer.js\";\n\nfunction filenameFromPath(path: string): string {\n return path.split(\"/\").pop() || \"download\";\n}\n\nfunction triggerBrowserDownload(blob: Blob, filename: string) {\n if (typeof document === \"undefined\") return;\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = filename;\n anchor.click();\n URL.revokeObjectURL(url);\n}\n\nexport function AssistantTextContainer() {\n const Markdown = useSlot(\"Markdown\");\n const downloadSandboxFile = useTrueFoundryDownloadSandboxFile();\n const errorToaster = useErrorToasterOptional();\n const text = useAuiState((s) =>\n s.part.type === \"text\" || s.part.type === \"reasoning\" ? s.part.text : \"\",\n );\n const isStreaming = useAuiState((s) => {\n if (s.message.status?.type !== \"running\") return false;\n const lastIndex = s.message.parts.length - 1;\n if (lastIndex < 0) return false;\n if (s.part.type !== \"text\" && s.part.type !== \"reasoning\") return false;\n return s.message.parts[lastIndex] === s.part;\n });\n const handleDownloadArtifact = useCallback(\n (path: string) =>\n downloadSandboxFile(path)\n .then((blob) => triggerBrowserDownload(blob, filenameFromPath(path)))\n .catch((error) => {\n if (errorToaster != null) {\n errorToaster.showError(error);\n } else {\n console.error(\"Failed to download sandbox artifact\", error);\n }\n }),\n [downloadSandboxFile, errorToaster],\n );\n\n return <Markdown content={text} isStreaming={isStreaming} onDownloadArtifact={handleDownloadArtifact} />;\n}\n","\"use client\";\n\nimport { createContext, useCallback, useContext, useMemo, useState, type ReactNode } from \"react\";\nimport { TrueFoundryGatewayError } from \"truefoundry-gateway-sdk\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\ntype ErrorToastContent = { title: string; description: string };\n\ntype ErrorToasterContextValue = { showError: (error: unknown) => void };\n\nconst ErrorToasterContext = createContext<ErrorToasterContextValue | null>(null);\n\nfunction formatErrorBody(body: unknown): string | undefined {\n if (body == null) return undefined;\n if (typeof body === \"string\") return body;\n try {\n return JSON.stringify(body, null, 2);\n } catch {\n return String(body);\n }\n}\n\nfunction normalizeError(error: unknown): ErrorToastContent {\n if (error instanceof TrueFoundryGatewayError) {\n const statusCode = error.statusCode;\n const title = statusCode != null ? `Request failed (${statusCode})` : \"Request failed\";\n const description = formatErrorBody(error.body) ?? (error.message || \"The gateway returned an error.\");\n return { title, description };\n }\n\n if (error instanceof Error) {\n return { title: \"Something went wrong\", description: error.message || \"An unexpected error occurred.\" };\n }\n\n return { title: \"Something went wrong\", description: String(error) };\n}\n\nexport function ErrorToasterProvider({ children }: { children: ReactNode }) {\n const ToastStack = useSlot(\"ToastStack\");\n const Toast = useSlot(\"Toast\");\n\n const [toast, setToast] = useState<ErrorToastContent | null>(null);\n const [open, setOpen] = useState(false);\n\n const showError = useCallback((error: unknown) => {\n setToast(normalizeError(error));\n setOpen(true);\n }, []);\n\n const value = useMemo(() => ({ showError }), [showError]);\n\n return (\n <ErrorToasterContext.Provider value={value}>\n {children}\n <ToastStack>\n {toast != null && (\n <Toast title={toast.title} description={toast.description} open={open} onOpenChange={setOpen} />\n )}\n </ToastStack>\n </ErrorToasterContext.Provider>\n );\n}\n\nexport function useErrorToaster(): ErrorToasterContextValue {\n const context = useContext(ErrorToasterContext);\n if (context == null) {\n throw new Error(\"useErrorToaster must be used within ErrorToasterProvider\");\n }\n return context;\n}\n\n/** Same as `useErrorToaster`, but returns `null` instead of throwing outside `ErrorToasterProvider`. */\nexport function useErrorToasterOptional(): ErrorToasterContextValue | null {\n return useContext(ErrorToasterContext);\n}\n","\"use client\";\n\nimport { useAuiState } from \"@assistant-ui/react\";\n\nimport { USER_MESSAGE_ATTACHMENT_PREVIEW_REM } from \"../constants/attachments.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport function MessageImageContainer() {\n const AttachmentCard = useSlot(\"AttachmentCard\");\n const AttachmentPreviewDialog = useSlot(\"AttachmentPreviewDialog\");\n const image = useAuiState((s) => (s.part.type === \"image\" ? s.part.image : \"\"));\n const filename = useAuiState((s) =>\n s.part.type === \"image\" ? s.part.filename : undefined,\n );\n\n if (!image) {\n return null;\n }\n\n const card = (\n <AttachmentCard\n name={filename ?? \"image\"}\n previewSrc={image}\n isImage\n size=\"preview\"\n previewRem={USER_MESSAGE_ATTACHMENT_PREVIEW_REM}\n />\n );\n\n return (\n <AttachmentPreviewDialog previewSrc={image}>\n <div className=\"aui-message-image\">{card}</div>\n </AttachmentPreviewDialog>\n );\n}\n","\"use client\";\n\nimport { useCallback, useRef, useState } from \"react\";\nimport { useAuiState } from \"@assistant-ui/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport type { ThreadGroupPart } from \"./ToolGroupContainer.js\";\n\nexport function ReasoningContainer({ group }: { group: ThreadGroupPart }) {\n const ReasoningCard = useSlot(\"ReasoningCard\");\n\n const content = useAuiState((s) =>\n group.indices\n .map((i) => s.message.parts[i])\n .filter((p): p is NonNullable<typeof p> => p != null && p.type === \"reasoning\")\n .map((p) => ((p as { text?: string }).text ?? \"\"))\n .join(\"\"),\n );\n\n const streaming = useAuiState((s) => {\n if (s.message.status?.type !== \"running\") return false;\n const lastIndex = s.message.parts.length - 1;\n if (lastIndex < 0) return false;\n if (s.message.parts[lastIndex]?.type !== \"reasoning\") return false;\n const lastGroupIndex = group.indices[group.indices.length - 1];\n return lastGroupIndex !== undefined && lastIndex >= group.indices[0]! && lastIndex <= lastGroupIndex;\n });\n\n const [expanded, setExpanded] = useState(streaming);\n const [prevStreaming, setPrevStreaming] = useState(streaming);\n const [isMultiLine, setIsMultiLine] = useState(false);\n const observerRef = useRef<ResizeObserver | null>(null);\n if (streaming !== prevStreaming) {\n setPrevStreaming(streaming);\n if (streaming) setExpanded(true);\n }\n\n const contentRef = useCallback(\n (node: HTMLDivElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n if (node == null || streaming) return;\n\n const check = () => {\n const lineHeight = Number.parseFloat(getComputedStyle(node).lineHeight) || 24;\n setIsMultiLine(node.scrollHeight > lineHeight * 1.5);\n };\n\n check();\n observerRef.current = new ResizeObserver(check);\n observerRef.current.observe(node);\n },\n [streaming],\n );\n const reasoningTimeText = null;\n const previewText = content.replace(/\\s+/g, \" \").trim();\n const isShortText = !streaming && content.length > 0 && !isMultiLine;\n const headingText =\"Reasoning\"\n\n return (\n <ReasoningCard\n content={content}\n isStreaming={streaming}\n expanded={expanded}\n isMultiLine={isMultiLine}\n reasoningTimeText={reasoningTimeText}\n previewText={previewText}\n headingText={headingText}\n contentRef={isShortText ? contentRef : undefined}\n onToggle={() => setExpanded((prev) => !prev)}\n />\n );\n}\n","\"use client\";\n\nimport { useState } from \"react\";\nimport {\n MessagePartPrimitive,\n MessagePrimitive,\n useToolCallElapsed,\n type ToolApprovalOption as AuiToolApprovalOption,\n type ToolApprovalResponse,\n type ToolCallMessagePartComponent,\n type ToolCallMessagePartProps,\n} from \"@assistant-ui/react\";\nimport { useTrueFoundryRespondToToolApproval } from \"@truefoundry/assistant-ui-runtime\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport type { ToolCallStatus } from \"../atoms/ToolCallCard.js\";\nimport { AssistantTextContainer } from \"./AssistantTextContainer.js\";\nimport {\n NestedApprovalBridgeContext,\n useNestedApprovalBridge,\n} from \"./nestedApprovalBridge.js\";\nimport { SandboxToolCallContainer } from \"./SandboxToolCallContainer.js\";\nimport {\n ToolApprovalContainer,\n type ToolApprovalOption,\n} from \"./ToolApprovalContainer.js\";\nimport { ToolCallContentBlockContainer } from \"./ToolCallContentBlockContainer.js\";\n\nconst SUB_AGENT_TOOL_NAME = \"create_sub_agent\";\nconst ASK_USER_TOOL_NAME = \"ask_user_question\";\n\nfunction NestedSubAgentAssistantMessage() {\n const AssistantMessageBubble = useSlot(\"AssistantMessageBubble\");\n\n return (\n <div className=\"mb-3 min-w-0\">\n <MessagePrimitive.Root data-role=\"assistant\">\n <AssistantMessageBubble>\n <MessagePrimitive.Parts\n components={{\n Text: AssistantTextContainer,\n Reasoning: AssistantTextContainer,\n tools: { Fallback: ToolCallContainer },\n }}\n />\n </AssistantMessageBubble>\n </MessagePrimitive.Root>\n </div>\n );\n}\n\nfunction parseAskUserQuestionArgs(argsText: string | undefined): {\n question?: string;\n options?: string[];\n} {\n if (!argsText) return {};\n try {\n const parsed: unknown = JSON.parse(argsText);\n if (parsed == null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return {};\n }\n const record = parsed as Record<string, unknown>;\n const question =\n typeof record.question === \"string\" ? record.question : undefined;\n const options = Array.isArray(record.options)\n ? record.options.filter(\n (item): item is string => typeof item === \"string\",\n )\n : undefined;\n return { question, options };\n } catch {\n return {};\n }\n}\n\nfunction getAskUserAnswerResult(result: unknown): string | undefined {\n if (result === undefined || result === null) return undefined;\n if (typeof result === \"string\") {\n const trimmed = result.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n if (typeof result === \"object\" && \"content\" in result) {\n const content = (result as { content?: unknown }).content;\n if (typeof content === \"string\" && content.trim()) {\n return content.trim();\n }\n }\n return undefined;\n}\n\nfunction hasPendingAskUserResponse(\n part: Pick<ToolCallMessagePartProps, \"interrupt\" | \"result\">,\n): boolean {\n return part.interrupt != null && part.result === undefined;\n}\n\n/** Tool names that should be rendered as a sandbox execution card. */\nconst SANDBOX_TOOL_NAMES = new Set([\"exec\", \"sandbox_exec\"]);\n\n/** MCP meta-tools that wrap actual tool calls. */\nconst MCP_META_TOOLS = new Set([\"call_tool\", \"list_tools\", \"get_tool_info\"]);\n\nconst APPROVAL_OPTION_DEFAULT_LABELS: Record<string, string> = {\n \"allow-once\": \"Allow\",\n \"allow-always\": \"Always allow\",\n \"reject-once\": \"Deny\",\n \"reject-always\": \"Always deny\",\n};\n\nconst isAllowKind = (kind: string) =>\n kind === \"allow-once\" || kind === \"allow-always\";\n\nfunction hasPendingToolApproval(\n approval:\n { approved?: boolean; resolution?: \"cancelled\" | \"expired\" } | undefined,\n) {\n return (\n approval != null &&\n approval.approved === undefined &&\n approval.resolution === undefined\n );\n}\n\nfunction buildApprovalOptions(\n options: readonly AuiToolApprovalOption[] | undefined,\n): ToolApprovalOption[] {\n const declared = options?.filter((o) =>\n Object.hasOwn(APPROVAL_OPTION_DEFAULT_LABELS, o.kind),\n );\n if (declared && declared.length > 0) {\n const allow = declared.filter((o) => isAllowKind(o.kind));\n const reject = declared.filter((o) => !isAllowKind(o.kind));\n const mapped: ToolApprovalOption[] = [...allow, ...reject].map((o) => ({\n id: o.id,\n label: o.label ?? APPROVAL_OPTION_DEFAULT_LABELS[o.kind] ?? o.id,\n isAllow: isAllowKind(o.kind),\n grants: o.grants,\n confirm:\n o.confirm != null\n ? typeof o.confirm === \"object\"\n ? o.confirm\n : {}\n : undefined,\n }));\n if (reject.length === 0) {\n mapped.push({ id: \"__deny\", label: \"Deny\", isAllow: false, confirm: {} });\n }\n return mapped;\n }\n return [\n { id: \"__allow\", label: \"Allow\", isAllow: true },\n { id: \"__deny\", label: \"Deny\", isAllow: false, confirm: {} },\n ];\n}\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) return \"<1s\";\n const seconds = ms / 1000;\n if (seconds < 10) return `${(Math.floor(seconds * 10) / 10).toFixed(1)}s`;\n if (seconds < 60) return `${Math.floor(seconds)}s`;\n return `${Math.floor(seconds / 60)}m ${Math.floor(seconds % 60)}s`;\n}\n\nfunction toStatus(statusType: string | undefined): ToolCallStatus {\n if (statusType === \"complete\") return \"success\";\n if (statusType === \"incomplete\") return \"error\";\n return \"running\";\n}\n\nfunction parseSandboxArgs(argsText: string | undefined): {\n command?: string;\n intent?: string;\n argsJson?: string;\n} {\n if (!argsText) return {};\n try {\n const parsed = JSON.parse(argsText) as {\n command?: string;\n intent?: string;\n };\n return {\n command: parsed.command,\n intent: parsed.intent,\n argsJson: JSON.stringify(parsed, null, 2),\n };\n } catch {\n return { argsJson: argsText };\n }\n}\n\nfunction parseSandboxResult(result: string | undefined): {\n exitCode?: number | null;\n resultText?: string;\n resultJson?: string;\n} {\n if (result === undefined) return {};\n try {\n const parsed = JSON.parse(result) as {\n response?: { exitCode?: number; result?: string };\n };\n const exitCode = parsed.response?.exitCode ?? null;\n const resultText = parsed.response?.result;\n return {\n exitCode,\n resultText,\n resultJson: JSON.stringify(parsed, null, 2),\n };\n } catch {\n return { resultText: result };\n }\n}\n\nfunction parseMcpToolArgs(argsText: string | undefined): {\n mcpServer?: string;\n innerToolName?: string;\n input?: unknown;\n} {\n if (!argsText) return {};\n try {\n const parsed = JSON.parse(argsText) as {\n mcp_server?: string;\n tool_name?: string;\n input?: unknown;\n };\n return {\n mcpServer: parsed.mcp_server,\n innerToolName: parsed.tool_name,\n input: parsed.input,\n };\n } catch {\n return {};\n }\n}\n\nfunction getJsonDisplayValue(content: string | undefined): {\n value: string;\n isJson: boolean;\n} {\n if (!content?.trim()) return { value: \"\", isJson: false };\n const trimmed = content.trim();\n if (trimmed[0] !== \"{\" && trimmed[0] !== \"[\") {\n return { value: content, isJson: false };\n }\n try {\n const parsed = JSON.parse(content);\n return { value: JSON.stringify(parsed, null, 2), isJson: true };\n } catch {\n return { value: content, isJson: false };\n }\n}\n\nfunction getToolResultContent(content: unknown): {\n data: string;\n isJson: boolean;\n} {\n try {\n if (!content) return { isJson: false, data: \"\" };\n\n const parsedResult =\n typeof content === \"string\" && content.trim().startsWith(\"{\")\n ? JSON.parse(content)\n : content;\n\n if (Array.isArray(parsedResult.content)) {\n const text = parsedResult.content[0]?.text || \"\";\n const display = getJsonDisplayValue(\n typeof text === \"string\" ? text : JSON.stringify(text),\n );\n return { data: display.value, isJson: display.isJson };\n }\n const display = getJsonDisplayValue(\n typeof parsedResult === \"string\"\n ? parsedResult\n : JSON.stringify(parsedResult),\n );\n return { data: display.value, isJson: display.isJson };\n } catch (error) {\n return { data: String(content), isJson: false };\n }\n}\n\nfunction ToolApprovalSlot({ part }: { part: ToolCallMessagePartProps }) {\n const nestedBridge = useNestedApprovalBridge();\n\n const respond = (response: ToolApprovalResponse) => {\n if (nestedBridge) {\n nestedBridge(response);\n return;\n }\n part.respondToApproval(response);\n };\n\n const onSelectOption = (optionId: string, reason?: string) => {\n if (optionId === \"__allow\") return respond({ approved: true });\n if (optionId === \"__deny\") return respond({ approved: false, reason });\n return respond({ optionId, reason });\n };\n\n return (\n <ToolApprovalContainer\n toolName={part.toolName}\n options={buildApprovalOptions(part.approval?.options)}\n onSelectOption={onSelectOption}\n />\n );\n}\n\nexport const ToolCallContainer: ToolCallMessagePartComponent = (part) => {\n const ToolCallCard = useSlot(\"ToolCallCard\");\n const SubAgentCard = useSlot(\"SubAgentCard\");\n const AskUserPrompt = useSlot(\"AskUserPrompt\");\n const respondToNestedApproval = useTrueFoundryRespondToToolApproval();\n const elapsedMs = useToolCallElapsed();\n const isRequiresAction = part.status?.type === \"requires-action\";\n const isSubAgent = part.toolName === SUB_AGENT_TOOL_NAME;\n const isSandbox = SANDBOX_TOOL_NAMES.has(part.toolName);\n const [expanded, setExpanded] = useState(isRequiresAction);\n const [prevRequiresAction, setPrevRequiresAction] =\n useState(isRequiresAction);\n if (isRequiresAction !== prevRequiresAction) {\n setPrevRequiresAction(isRequiresAction);\n if (isRequiresAction) setExpanded(true);\n }\n\n const showApproval =\n isRequiresAction && hasPendingToolApproval(part.approval);\n\n const durationText =\n elapsedMs === undefined ? undefined : formatDuration(elapsedMs);\n const status = toStatus(part.status?.type);\n\n if (part.toolName === ASK_USER_TOOL_NAME) {\n if (hasPendingAskUserResponse(part)) {\n return null;\n }\n const answer = getAskUserAnswerResult(part.result);\n if (answer == null) {\n return null;\n }\n const { question, options = [] } = parseAskUserQuestionArgs(part.argsText);\n const isCustom = options.length > 0 && !options.includes(answer);\n return (\n <AskUserPrompt\n questions={[]}\n answeredQuestions={[\n {\n id: part.toolCallId,\n question: question ?? \"Question\",\n options,\n answer,\n isCustom,\n },\n ]}\n onSubmit={() => {}}\n readOnly\n />\n );\n }\n\n if (isSubAgent) {\n const artifactSubAgent = (\n part as {\n artifact?: {\n subAgents?: Array<{\n title?: string;\n agentInfo?: { name?: string; input?: string };\n }>;\n };\n }\n ).artifact?.subAgents?.[0];\n const firstNested = part.messages?.[0];\n const subAgent = (\n firstNested?.metadata?.custom as\n | { subAgent?: { title?: string; name?: string; input?: string } }\n | undefined\n )?.subAgent;\n const agentName =\n subAgent?.title ??\n subAgent?.name ??\n artifactSubAgent?.title ??\n artifactSubAgent?.agentInfo?.name ??\n part.toolName;\n const instruction =\n subAgent?.input ?? artifactSubAgent?.agentInfo?.input ?? \"\";\n const stepCount = part.messages?.length ?? 0;\n\n const bridge = (response: ToolApprovalResponse) => {\n if (part.approval == null) return;\n const approved = \"approved\" in response ? response.approved : undefined;\n if (approved === undefined) return;\n respondToNestedApproval({ approvalId: part.approval.id, approved });\n };\n\n return (\n <div\n data-slot=\"tool-call-card\"\n data-variant=\"sub-agent\"\n className=\"w-full\"\n >\n <SubAgentCard\n status={status}\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n durationText={durationText}\n agentName={agentName}\n instruction={instruction}\n stepCount={stepCount}\n >\n <NestedApprovalBridgeContext.Provider value={bridge}>\n <MessagePartPrimitive.Messages\n components={{\n AssistantMessage: NestedSubAgentAssistantMessage,\n UserMessage: () => null,\n }}\n />\n </NestedApprovalBridgeContext.Provider>\n </SubAgentCard>\n </div>\n );\n }\n\n const resultString =\n part.result === undefined\n ? undefined\n : typeof part.result === \"string\"\n ? part.result\n : JSON.stringify(part.result, null, 2);\n\n if (isSandbox) {\n const { command, intent, argsJson } = parseSandboxArgs(part.argsText);\n const { exitCode, resultText, resultJson } =\n parseSandboxResult(resultString);\n return (\n <SandboxToolCallContainer\n name={part.toolName}\n intent={intent}\n status={status}\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n durationText={durationText}\n command={command}\n exitCode={exitCode}\n argsJson={argsJson}\n resultText={resultText}\n resultJson={resultJson}\n />\n );\n }\n\n const isMcpMetaTool = MCP_META_TOOLS.has(part.toolName);\n if (isMcpMetaTool) {\n const { mcpServer, innerToolName, input } = parseMcpToolArgs(part.argsText);\n const argsDisplay = getJsonDisplayValue(part.argsText);\n const resultDisplay = getToolResultContent(part.result);\n\n if (part.toolName === \"list_tools\" && mcpServer) {\n return (\n <ToolCallCard\n toolName={`Listing tools · ${mcpServer}`}\n icon=\"mcp-server\"\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n awaiting={status === \"running\"}\n awaitingText={durationText ?? \"Awaiting Response…\"}\n showResponseLine={status !== \"running\" && !!resultDisplay.data}\n mcpServerName={mcpServer}\n requestSlot={\n argsDisplay.value ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content={argsDisplay.value}\n isJson={argsDisplay.isJson}\n maxHeight=\"10.5rem\"\n />\n ) : resultDisplay.data ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content=\"{}\"\n isJson\n maxHeight=\"10.5rem\"\n />\n ) : undefined\n }\n responseSlot={\n resultDisplay.data ? (\n <ToolCallContentBlockContainer\n title=\"Response\"\n content={resultDisplay.data}\n isJson={resultDisplay.isJson}\n resizable\n />\n ) : undefined\n }\n />\n );\n }\n\n let displayName = part.toolName;\n if (part.toolName === \"call_tool\" && innerToolName) {\n displayName = mcpServer\n ? `call_tool: ${innerToolName} (${mcpServer})`\n : `call_tool: ${innerToolName}`;\n } else if (\n part.toolName === \"get_tool_info\" &&\n innerToolName &&\n mcpServer\n ) {\n displayName = `get_tool_info: ${innerToolName} (${mcpServer})`;\n }\n\n const inputDisplay =\n input !== undefined\n ? getJsonDisplayValue(JSON.stringify(input, null, 2))\n : argsDisplay;\n\n return (\n <ToolCallCard\n toolName={displayName}\n icon=\"mcp-server\"\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n awaiting={status === \"running\"}\n awaitingText={durationText ?? \"Awaiting Response…\"}\n showResponseLine={\n status !== \"running\" && resultDisplay.data !== undefined\n }\n mcpServerName={mcpServer}\n requestSlot={\n inputDisplay.value ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content={inputDisplay.value}\n isJson={inputDisplay.isJson}\n maxHeight=\"10.5rem\"\n />\n ) : resultDisplay.data !== undefined ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content=\"{}\"\n isJson\n maxHeight=\"10.5rem\"\n />\n ) : undefined\n }\n responseSlot={\n resultDisplay.data !== undefined ? (\n <ToolCallContentBlockContainer\n title=\"Response\"\n content={resultDisplay.data}\n isJson={resultDisplay.isJson}\n resizable\n />\n ) : undefined\n }\n approvalSlot={\n showApproval ? <ToolApprovalSlot part={part} /> : undefined\n }\n />\n );\n }\n\n const argsDisplay = getJsonDisplayValue(part.argsText);\n const resultDisplay = getToolResultContent(part.result);\n\n return (\n <ToolCallCard\n toolName={part.toolName}\n expanded={expanded}\n onToggle={() => setExpanded((prev) => !prev)}\n awaiting={status === \"running\"}\n awaitingText={durationText ?? \"Awaiting Response…\"}\n showResponseLine={\n status !== \"running\" && resultDisplay.data !== undefined\n }\n requestSlot={\n argsDisplay.value ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content={argsDisplay.value}\n isJson={argsDisplay.isJson}\n maxHeight=\"10.5rem\"\n />\n ) : resultDisplay.data !== undefined ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content=\"{}\"\n isJson\n maxHeight=\"10.5rem\"\n />\n ) : undefined\n }\n responseSlot={\n resultDisplay.data !== undefined ? (\n <ToolCallContentBlockContainer\n title=\"Response\"\n content={resultDisplay.data}\n isJson={resultDisplay.isJson}\n resizable\n />\n ) : undefined\n }\n approvalSlot={showApproval ? <ToolApprovalSlot part={part} /> : undefined}\n />\n );\n};\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\nimport type { ToolApprovalResponse } from \"@assistant-ui/react\";\n\n/**\n * Sub-agent tool calls render inside a read-only nested thread context\n * (`MessagePartPrimitive.Messages`), so the standard `respondToApproval` prop\n * on their parts doesn't route back to the gateway. `ToolCallContainer` uses\n * this bridge instead when rendering nested calls, translating the response\n * through `useTrueFoundryRespondToToolApproval()` -- mirrors the reference's\n * `nestedToolCallMessageComponents` override.\n */\nexport const NestedApprovalBridgeContext = createContext<((response: ToolApprovalResponse) => void) | null>(\n null,\n);\n\nexport function useNestedApprovalBridge(): ((response: ToolApprovalResponse) => void) | null {\n return useContext(NestedApprovalBridgeContext);\n}\n","\"use client\";\n\nimport { useMemo, useState } from \"react\";\n\nimport type { SandboxToolCallCardProps } from \"../atoms/SandboxToolCallCard.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport function SandboxToolCallContainer(\n props: Omit<\n SandboxToolCallCardProps,\n \"viewMode\" | \"hasContent\" | \"onViewModeChange\"\n >,\n) {\n const SandboxToolCallCard = useSlot(\"SandboxToolCallCard\");\n const [viewMode, setViewMode] = useState<\"terminal\" | \"code\">(\"terminal\");\n const hasContent = useMemo(() => {\n if (viewMode === \"code\") return Boolean(props.argsJson || props.resultJson);\n return Boolean(props.command || props.resultText || props.resultJson);\n }, [\n props.argsJson,\n props.command,\n props.resultJson,\n props.resultText,\n viewMode,\n ]);\n\n return (\n <SandboxToolCallCard\n {...props}\n viewMode={viewMode}\n hasContent={hasContent}\n onViewModeChange={setViewMode}\n />\n );\n}\n","\"use client\";\n\nimport { useCallback, useMemo, useState } from \"react\";\n\nimport type { ApprovalOption } from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport type ToolApprovalOption = {\n id: string;\n label: string;\n isAllow: boolean;\n grants?: readonly string[];\n confirm?: {\n title?: string;\n description?: string;\n };\n};\n\ntype ToolApprovalContainerProps = {\n toolName?: string;\n options: ToolApprovalOption[];\n onSelectOption: (optionId: string, reason?: string) => void;\n};\n\nexport function ToolApprovalContainer({\n toolName = \"\",\n options,\n onSelectOption,\n}: ToolApprovalContainerProps) {\n const ToolApprovalBar = useSlot(\"ToolApprovalBar\");\n const [selectedDenyOptionId, setSelectedDenyOptionId] = useState<\n string | null\n >(null);\n const [denialReason, setDenialReason] = useState(\"\");\n const [showReasonError, setShowReasonError] = useState(false);\n const approveOptions = useMemo<ApprovalOption[]>(\n () =>\n options\n .filter((option) => option.isAllow)\n .map((option, index) => ({\n ...option,\n variant: index === 0 ? \"primary\" : \"secondary\",\n requiresReason: false,\n })),\n [options],\n );\n const denyOptions = useMemo<ApprovalOption[]>(\n () =>\n options\n .filter((option) => !option.isAllow)\n .map((option) => ({\n ...option,\n variant: \"secondary\",\n requiresReason: option.confirm != null,\n })),\n [options],\n );\n const selectedDenyOption = denyOptions.find(\n (option) => option.id === selectedDenyOptionId,\n );\n\n const onDenyOptionChange = useCallback((optionId: string | null) => {\n setSelectedDenyOptionId(optionId);\n setDenialReason(\"\");\n setShowReasonError(false);\n }, []);\n const onDenialReasonChange = useCallback((reason: string) => {\n setDenialReason(reason);\n setShowReasonError(false);\n }, []);\n const onReasonSubmit = useCallback(() => {\n const reason = denialReason.trim();\n if (!reason) {\n setShowReasonError(true);\n return;\n }\n if (selectedDenyOptionId) {\n onSelectOption(selectedDenyOptionId, reason);\n onDenyOptionChange(null);\n }\n }, [denialReason, onDenyOptionChange, onSelectOption, selectedDenyOptionId]);\n\n return (\n <ToolApprovalBar\n toolName={toolName}\n approveOptions={approveOptions.length > 0 ? approveOptions : undefined}\n denyOptions={denyOptions.length > 0 ? denyOptions : undefined}\n selectedDenyOption={selectedDenyOption}\n denialReason={denialReason}\n showReasonError={showReasonError}\n onSelect={onSelectOption}\n onDenyOptionChange={onDenyOptionChange}\n onDenialReasonChange={onDenialReasonChange}\n onReasonSubmit={onReasonSubmit}\n />\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport type { ToolCallContentBlockProps } from \"../atoms/ToolCallContentBlock.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport function ToolCallContentBlockContainer(\n props: ToolCallContentBlockProps,\n) {\n const ToolCallContentBlock = useSlot(\"ToolCallContentBlock\");\n const [fullscreen, setFullscreen] = useState(false);\n const [contentHeightRem, setContentHeightRem] = useState(1.5);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const contentRef = useCallback(\n (node: HTMLDivElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n if (!props.resizable || node == null) return;\n\n const updateHeight = () => setContentHeightRem(node.scrollHeight / 16);\n updateHeight();\n observerRef.current = new ResizeObserver(updateHeight);\n observerRef.current.observe(node);\n },\n [props.resizable],\n );\n\n useEffect(\n () => () => {\n observerRef.current?.disconnect();\n },\n [],\n );\n\n return (\n <ToolCallContentBlock\n {...props}\n fullscreen={fullscreen}\n onFullscreenChange={setFullscreen}\n contentHeightRem={contentHeightRem}\n contentRef={contentRef}\n />\n );\n}\n","\"use client\";\n\nimport { useState, useEffect, useRef, type PropsWithChildren, type ReactNode } from \"react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport interface AgentStepsContainerProps {\n toolCount: number;\n thinkingCount: number;\n hasFinal: boolean;\n active: boolean;\n}\n\n/**\n * Container for \"Agent steps\" section — groups reasoning, intermediate text, and tools\n * in a collapsible accordion that auto-collapses once final answer is confirmed.\n */\nexport function AgentStepsContainer({\n children,\n toolCount,\n thinkingCount,\n hasFinal,\n active,\n}: PropsWithChildren<AgentStepsContainerProps>) {\n const AgentStepsCard = useSlot(\"AgentStepsCard\");\n\n const [expanded, setExpanded] = useState(true);\n const collapsedByFinal = useRef(false);\n\n // Auto-collapse once when hasFinal becomes true (matches AgentTimeline behavior)\n useEffect(() => {\n if (hasFinal && !collapsedByFinal.current) {\n collapsedByFinal.current = true;\n setExpanded(false);\n }\n }, [hasFinal]);\n\n return (\n <AgentStepsCard\n toolCount={toolCount}\n thinkingCount={thinkingCount}\n expanded={expanded}\n active={active}\n onToggle={() => setExpanded((prev) => !prev)}\n >\n {children as ReactNode}\n </AgentStepsCard>\n );\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useTrueFoundryHistoryPagination } from \"@truefoundry/assistant-ui-runtime\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\n/** How close to the viewport top (px) before the next older page is fetched. */\nconst TOP_THRESHOLD_PX = 200;\n\nconst VIEWPORT_SELECTOR = '[data-slot=\"aui_thread-viewport\"]';\n\n/**\n * Renders the `HistoryLoader` slot at the top of the message list and fetches\n * the next older history page when the user scrolls near it. Scroll position\n * is preserved across the prepend so the list doesn't jump.\n *\n * Must be rendered inside `ThreadViewportShell` (it locates the scroll root\n * via the `aui_thread-viewport` data-slot on its nearest scrollable ancestor).\n */\nexport function HistoryLoaderContainer() {\n const HistoryLoader = useSlot(\"HistoryLoader\");\n const { hasOlderHistory, isLoadingOlderHistory, loadOlderHistory } =\n useTrueFoundryHistoryPagination();\n\n const [sentinel, setSentinel] = useState<HTMLDivElement | null>(null);\n const inflightRef = useRef(false);\n\n const maybeLoadOlder = useCallback(async () => {\n if (inflightRef.current) return;\n inflightRef.current = true;\n\n const viewport = sentinel?.closest<HTMLElement>(VIEWPORT_SELECTOR) ?? null;\n const prevScrollHeight = viewport?.scrollHeight ?? 0;\n const prevScrollTop = viewport?.scrollTop ?? 0;\n\n try {\n await loadOlderHistory();\n // Wait for React to commit the prepended messages, then restore the\n // user's anchor so the list doesn't jump to the oldest message.\n requestAnimationFrame(() => {\n if (viewport == null) return;\n const delta = viewport.scrollHeight - prevScrollHeight;\n if (delta > 0) {\n viewport.scrollTo({ top: prevScrollTop + delta, behavior: \"instant\" });\n }\n });\n } catch {\n // Runtime surfaces the error via onError; the sentinel stays retryable.\n } finally {\n inflightRef.current = false;\n }\n }, [sentinel, loadOlderHistory]);\n\n useEffect(() => {\n if (sentinel == null || !hasOlderHistory) return;\n\n const viewport = sentinel.closest<HTMLElement>(VIEWPORT_SELECTOR);\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n void maybeLoadOlder();\n }\n },\n { root: viewport, rootMargin: `${TOP_THRESHOLD_PX}px 0px 0px 0px` },\n );\n observer.observe(sentinel);\n return () => observer.disconnect();\n }, [sentinel, hasOlderHistory, maybeLoadOlder]);\n\n if (!hasOlderHistory) return null;\n\n return <HistoryLoader ref={setSentinel} isLoading={isLoadingOlderHistory} />;\n}\n","\"use client\";\n\nimport {\n ComposerPrimitive,\n MessagePrimitive,\n useAuiState,\n} from \"@assistant-ui/react\";\nimport { useComposerCancel, useComposerSend, useThreadIsRunning } from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { MessageAttachmentsContainer } from \"./AttachmentsContainer.js\";\n\nfunction ReadOnlyMessageAttachments() {\n const hasAttachments = useAuiState(\n (s) => (s.message.attachments?.length ?? 0) > 0,\n );\n if (!hasAttachments) {\n return null;\n }\n return (\n <div className=\"pointer-events-none mb-2 opacity-90\">\n <MessageAttachmentsContainer />\n </div>\n );\n}\n\nexport function UserEditComposerContainer() {\n const Button = useSlot(\"Button\");\n const MessageTimestamp = useSlot(\"MessageTimestamp\");\n const UserMessageEdit = useSlot(\"UserMessageEdit\");\n const isRunning = useThreadIsRunning();\n const { cancel, disabled: cancelDisabled } = useComposerCancel();\n const { send, disabled: sendDisabled } = useComposerSend();\n\n return (\n <MessagePrimitive.Root data-role=\"user\">\n <div\n data-slot=\"aui_user-edit-composer-root\"\n className=\"fade-in slide-in-from-bottom-1 animate-in flex w-full justify-end px-2 duration-150\"\n >\n <ComposerPrimitive.Root asChild>\n <UserMessageEdit\n timestamp={\n <MessageTimestamp className=\"text-gray-500\" />\n }\n attachments={<ReadOnlyMessageAttachments />}\n input={\n <div className=\"mt-1 rounded border border-gray-250 bg-gray-100 p-2 text-gray-750 dark:border-gray-275 dark:bg-gray-275\">\n <ComposerPrimitive.Input\n disabled={isRunning}\n className=\"max-h-32 min-h-10 w-full resize-none border-none bg-transparent p-0 text-base leading-[1.34] outline-none focus:shadow-none\"\n />\n </div>\n }\n footer={\n <div className=\"flex items-center justify-end gap-2\">\n <Button.Secondary\n type=\"button\"\n disabled={cancelDisabled}\n onClick={cancel}\n text=\"Cancel\"\n />\n <Button.Primary\n type=\"button\"\n disabled={sendDisabled || isRunning}\n onClick={() => send()}\n text=\"Save & Rerun\"\n />\n </div>\n }\n />\n </ComposerPrimitive.Root>\n </div>\n </MessagePrimitive.Root>\n );\n}\n","\"use client\";\n\nimport { ComposerPrimitive, MessagePrimitive, useAui, useAuiState } from \"@assistant-ui/react\";\n\nimport { USER_MESSAGE_ATTACHMENT_PREVIEW_REM } from \"../constants/attachments.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { isImageAttachment, useAttachmentPreviewSrc } from \"./useAttachmentPreviewSrc.js\";\n\nfunction ComposerAttachmentItem() {\n const AttachmentCard = useSlot(\"AttachmentCard\");\n const AttachmentPreviewDialog = useSlot(\"AttachmentPreviewDialog\");\n const aui = useAui();\n const name = useAuiState((s) => s.attachment.name);\n const contentType = useAuiState((s) => s.attachment.contentType);\n const type = useAuiState((s) => s.attachment.type);\n const isImage = isImageAttachment(type, contentType);\n const previewSrc = useAttachmentPreviewSrc();\n\n return (\n <AttachmentPreviewDialog previewSrc={previewSrc}>\n <AttachmentCard\n name={name}\n contentType={contentType}\n previewSrc={previewSrc}\n isImage={isImage}\n size=\"chip\"\n onRemove={() => void aui.attachment().remove()}\n />\n </AttachmentPreviewDialog>\n );\n}\n\nfunction MessageAttachmentItem() {\n const AttachmentCard = useSlot(\"AttachmentCard\");\n const AttachmentPreviewDialog = useSlot(\"AttachmentPreviewDialog\");\n const name = useAuiState((s) => s.attachment.name);\n const contentType = useAuiState((s) => s.attachment.contentType);\n const type = useAuiState((s) => s.attachment.type);\n const isImage = isImageAttachment(type, contentType);\n const previewSrc = useAttachmentPreviewSrc();\n\n const card = (\n <AttachmentCard\n name={name}\n contentType={contentType}\n previewSrc={previewSrc}\n isImage={isImage}\n size={isImage ? \"preview\" : \"chip\"}\n previewRem={USER_MESSAGE_ATTACHMENT_PREVIEW_REM}\n />\n );\n\n if (isImage && previewSrc) {\n return <AttachmentPreviewDialog previewSrc={previewSrc}>{card}</AttachmentPreviewDialog>;\n }\n\n return card;\n}\n\nexport function ComposerAttachmentsContainer() {\n return (\n <div className=\"aui-composer-attachments flex w-full flex-row flex-wrap items-center gap-2 empty:hidden\">\n <ComposerPrimitive.Attachments>{() => <ComposerAttachmentItem />}</ComposerPrimitive.Attachments>\n </div>\n );\n}\n\nexport function MessageAttachmentsContainer() {\n return (\n <div className=\"aui-user-message-attachments-end col-span-full col-start-1 row-start-1 flex w-full flex-row justify-end gap-2\">\n <MessagePrimitive.Attachments>{() => <MessageAttachmentItem />}</MessagePrimitive.Attachments>\n </div>\n );\n}\n\nexport function ComposerAttachmentPickerContainer() {\n const AttachmentPickerButton = useSlot(\"AttachmentPickerButton\");\n return (\n <ComposerPrimitive.AddAttachment asChild>\n <AttachmentPickerButton />\n </ComposerPrimitive.AddAttachment>\n );\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useAuiState } from \"@assistant-ui/react\";\n\nexport function isImageAttachment(type: string, contentType?: string): boolean {\n return type === \"image\" || (contentType?.startsWith(\"image/\") ?? false);\n}\n\nfunction useFileObjectUrl(file: File | undefined): string | undefined {\n const [src, setSrc] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!file) {\n setSrc(undefined);\n return;\n }\n const objectUrl = URL.createObjectURL(file);\n setSrc(objectUrl);\n return () => URL.revokeObjectURL(objectUrl);\n }, [file]);\n\n return src;\n}\n\n/** Preview URL for staged composer files (object URL) or sent message attachments (data URI). */\nexport function useAttachmentPreviewSrc(): string | undefined {\n const type = useAuiState((s) => s.attachment.type);\n const contentType = useAuiState((s) => s.attachment.contentType);\n const file = useAuiState((s) => (\"file\" in s.attachment ? s.attachment.file : undefined));\n const contentSrc = useAuiState((s) => {\n if (!isImageAttachment(s.attachment.type, s.attachment.contentType)) return undefined;\n const imagePart = s.attachment.content?.find((part) => part.type === \"image\");\n if (imagePart?.type === \"image\" && imagePart.image) return imagePart.image;\n return undefined;\n });\n\n const image = isImageAttachment(type, contentType);\n const fileSrc = useFileObjectUrl(image ? file : undefined);\n if (!image) return undefined;\n return fileSrc ?? contentSrc;\n}\n","\"use client\";\n\nimport { MessagePrimitive, useAuiState } from \"@assistant-ui/react\";\nimport { useThreadIsRunning } from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { MessageAttachmentsContainer } from \"./AttachmentsContainer.js\";\n\nexport function UserMessageContainer() {\n const UserMessageBubble = useSlot(\"UserMessageBubble\");\n const UserMessageActionBar = useSlot(\"UserMessageActionBar\");\n const isRunning = useThreadIsRunning();\n const text = useAuiState((s) =>\n s.message.content\n .filter((part): part is { type: \"text\"; text: string } => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\\n\"),\n );\n\n return (\n <MessagePrimitive.Root data-role=\"user\">\n <UserMessageBubble\n text={text}\n attachments={<MessageAttachmentsContainer />}\n editAction={!isRunning ? <UserMessageActionBar /> : undefined}\n />\n </MessagePrimitive.Root>\n );\n}\n","\"use client\";\n\nimport { useState, type PropsWithChildren, type ReactNode } from \"react\";\nimport { useAuiState, type MessagePrimitive } from \"@assistant-ui/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport type ThreadGroupPart = MessagePrimitive.GroupedParts.GroupPart;\n\nexport function ToolGroupContainer({\n children,\n group,\n}: PropsWithChildren<{ group: ThreadGroupPart }>) {\n const ToolGroupCard = useSlot(\"ToolGroupCard\");\n\n const toolCallCount = group.indices.length;\n\n const active = useAuiState((s) => {\n if (s.message.status?.type !== \"running\") return false;\n const lastIndex = s.message.parts.length - 1;\n if (lastIndex < 0) return false;\n if (s.message.parts[lastIndex]?.type !== \"tool-call\") return false;\n const lastGroupIndex = group.indices[group.indices.length - 1];\n return lastGroupIndex !== undefined && lastIndex >= group.indices[0]! && lastIndex <= lastGroupIndex;\n });\n\n const [expanded, setExpanded] = useState(true);\n const [prevActive, setPrevActive] = useState(active);\n if (active !== prevActive) {\n setPrevActive(active);\n if (active) setExpanded(true);\n }\n\n return (\n <ToolGroupCard\n toolCallCount={toolCallCount}\n expanded={expanded}\n active={active}\n onToggle={() => setExpanded((prev) => !prev)}\n >\n {children as ReactNode}\n </ToolGroupCard>\n );\n}\n","\"use client\";\n\nimport { useRef } from \"react\";\nimport { useAui, useAuiState } from \"@assistant-ui/react\";\nimport { useTrueFoundryCancel } from \"@truefoundry/assistant-ui-runtime\";\n\nimport { useComposerBusyState } from \"../hooks/useComposerBusyState.js\";\nimport { useComposerPauseView } from \"../hooks/useComposerPauseView.js\";\nimport { useSlot } from \"../theme/SlotsProvider.js\";\nimport { ComposerAttachmentsContainer } from \"./AttachmentsContainer.js\";\nimport { AskUserContainer } from \"./AskUserContainer.js\";\nimport { McpAuthContainer } from \"./McpAuthContainer.js\";\n\nexport type ComposerContainerProps = {\n placeholder?: string;\n};\n\nexport function ComposerContainer({\n placeholder = \"Ask anything... (Shift+Enter for new line)\",\n}: ComposerContainerProps) {\n const ComposerShell = useSlot(\"ComposerShell\");\n const aui = useAui();\n const text = useAuiState((s) => s.composer.text);\n const { isBusy, send, resetBusy } = useComposerBusyState();\n const pauseView = useComposerPauseView();\n const cancel = useTrueFoundryCancel();\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n if (pauseView.kind === \"mcp\") {\n return <McpAuthContainer />;\n }\n if (pauseView.kind === \"ask-user\") {\n return <AskUserContainer />;\n }\n\n return (\n <>\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n hidden\n onChange={(event) => {\n const files = event.target.files;\n if (files) {\n for (const file of files) {\n void aui.composer().addAttachment(file);\n }\n }\n event.target.value = \"\";\n }}\n />\n <ComposerShell\n attachments={<ComposerAttachmentsContainer />}\n value={text}\n placeholder={placeholder}\n disabled={isBusy}\n isRunning={isBusy}\n onValueChange={(value) => aui.composer().setText(value)}\n onSubmit={() => send(() => aui.composer().send())}\n onCancel={() => {\n resetBusy();\n void cancel();\n }}\n onAttach={() => fileInputRef.current?.click()}\n />\n </>\n );\n}\n","\"use client\";\n\nimport { useAuiState } from \"@assistant-ui/react\";\nimport { useTrueFoundryToolResponses } from \"@truefoundry/assistant-ui-runtime\";\n\nexport type ThreadPauseState = {\n thread: {\n messages: readonly {\n role: string;\n status?: { type: string };\n metadata?: { custom?: unknown };\n }[];\n };\n};\n\n/** Returns true when the latest assistant message is paused for MCP authorization. */\nexport function threadHasPendingMcpAuth(s: ThreadPauseState): boolean {\n const messages = s.thread.messages;\n const last = messages[messages.length - 1];\n if (last?.role !== \"assistant\") return false;\n if (last.status?.type !== \"requires-action\") return false;\n return (last.metadata?.custom as { pendingMcpAuth?: boolean } | undefined)?.pendingMcpAuth === true;\n}\n\nexport type ComposerPauseView =\n | { kind: \"mcp\" }\n | { kind: \"ask-user\" }\n | { kind: \"compose\" };\n\n/** Shared composer pause detection for default and custom composer containers. */\nexport function useComposerPauseView(): ComposerPauseView {\n const mcpPending = useAuiState(threadHasPendingMcpAuth);\n const { pending: toolResponsesPending } = useTrueFoundryToolResponses();\n\n if (mcpPending) {\n return { kind: \"mcp\" };\n }\n if (toolResponsesPending.length > 0) {\n return { kind: \"ask-user\" };\n }\n return { kind: \"compose\" };\n}\n","\"use client\";\n\nimport { useTrueFoundryToolResponses } from \"@truefoundry/assistant-ui-runtime\";\nimport { useThreadIsRunning } from \"@assistant-ui/core/react\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n ASK_USER_CUSTOM_OPTION,\n type AskUserAnswerDraft,\n type Question,\n} from \"tfy-web-components/components/molecules/agent-chat\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nconst EMPTY_ANSWER: AskUserAnswerDraft = { radioValue: \"\", custom: \"\" };\n\nexport function AskUserContainer() {\n const AskUserPrompt = useSlot(\"AskUserPrompt\");\n const { pending, respond } = useTrueFoundryToolResponses();\n const isRunning = useThreadIsRunning();\n const item = pending[0];\n\n const questions = useMemo<Question[]>(\n () =>\n item == null\n ? []\n : [\n {\n id: item.toolCallId,\n question: item.question ?? \"Answer required\",\n options: item.options ?? [],\n },\n ],\n [item],\n );\n const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0);\n const [answers, setAnswers] = useState<Record<string, AskUserAnswerDraft>>(\n {},\n );\n\n useEffect(() => {\n setCurrentQuestionIndex(0);\n setAnswers({});\n }, [item?.toolCallId]);\n\n const safeIndex = Math.min(\n currentQuestionIndex,\n Math.max(questions.length - 1, 0),\n );\n const currentQuestion = questions[safeIndex];\n const currentAnswer =\n currentQuestion == null\n ? EMPTY_ANSWER\n : answers[currentQuestion.id] ?? EMPTY_ANSWER;\n const getResponseForQuestion = useCallback(\n (questionId: string) => {\n const answer = answers[questionId] ?? EMPTY_ANSWER;\n return answer.radioValue === ASK_USER_CUSTOM_OPTION\n ? answer.custom.trim()\n : answer.radioValue.trim();\n },\n [answers],\n );\n const allQuestionsAnswered = useMemo(\n () => questions.every((question) => getResponseForQuestion(question.id)),\n [getResponseForQuestion, questions],\n );\n const selectedResponse =\n currentAnswer.radioValue === ASK_USER_CUSTOM_OPTION\n ? currentAnswer.custom.trim()\n : currentAnswer.radioValue.trim();\n const isSubmitDisabled =\n isRunning || currentQuestion == null || selectedResponse.length === 0;\n const isSubmitAllDisabled = isSubmitDisabled || !allQuestionsAnswered;\n\n const onCurrentAnswerChange = useCallback(\n (questionId: string, update: Partial<AskUserAnswerDraft>) => {\n setAnswers((previous) => ({\n ...previous,\n [questionId]: {\n ...(previous[questionId] ?? EMPTY_ANSWER),\n ...update,\n },\n }));\n },\n [],\n );\n\n const onSubmit = useCallback(() => {\n if (item == null || !allQuestionsAnswered) return;\n const content = getResponseForQuestion(item.toolCallId);\n if (!content) return;\n respond({ toolCallId: item.toolCallId, content });\n }, [allQuestionsAnswered, getResponseForQuestion, item, respond]);\n\n if (item == null || currentQuestion == null) return null;\n\n return (\n <AskUserPrompt\n questions={questions}\n readOnly={isRunning}\n currentQuestion={currentQuestion}\n currentQuestionIndex={safeIndex}\n currentAnswer={currentAnswer}\n totalQuestions={questions.length}\n isMultiQuestion={questions.length > 1}\n isLastQuestion={safeIndex === questions.length - 1}\n allQuestionsAnswered={allQuestionsAnswered}\n isSubmitDisabled={isSubmitDisabled}\n isSubmitAllDisabled={isSubmitAllDisabled}\n onCurrentQuestionIndexChange={setCurrentQuestionIndex}\n onCurrentAnswerChange={onCurrentAnswerChange}\n onSubmit={onSubmit}\n />\n );\n}\n","\"use client\";\n\nimport { useTrueFoundryMcpAuth } from \"@truefoundry/assistant-ui-runtime\";\nimport { useThreadIsRunning } from \"@assistant-ui/core/react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\nexport function McpAuthContainer() {\n const McpAuthPrompt = useSlot(\"McpAuthPrompt\");\n const { pending, resume } = useTrueFoundryMcpAuth();\n const isRunning = useThreadIsRunning();\n\n if (!pending) return null;\n\n const handleConnect = (serverId: string) => {\n const server = pending.mcpServers.find((s) => s.id === serverId);\n if (server?.authUrl) {\n window.open(server.authUrl, \"_blank\", \"noopener,noreferrer\");\n }\n };\n\n return (\n <McpAuthPrompt\n servers={pending.mcpServers}\n onConnect={handleConnect}\n onContinue={() => void resume()}\n readOnly={isRunning}\n />\n );\n}\n","\"use client\";\n\nimport { useAui, useAuiState } from \"@assistant-ui/react\";\nimport { useEffect, useRef } from \"react\";\n\nimport { useSlot } from \"../theme/SlotsProvider.js\";\n\n/**\n * Simplified relative to the reference: renders threads in a single flat list\n * rather than grouping them by Today/Yesterday/Earlier. Archive/Delete are\n * wired but no-op against the current thread-list adapter (documented in the\n * runtime README's unsupported-features table).\n */\nexport function ThreadListContainer() {\n const ThreadListShell = useSlot(\"ThreadListShell\");\n const ThreadListNewButton = useSlot(\"ThreadListNewButton\");\n const ThreadListRow = useSlot(\"ThreadListRow\");\n const ThreadListRowSkeleton = useSlot(\"ThreadListRowSkeleton\");\n const ThreadListEmptyState = useSlot(\"ThreadListEmptyState\");\n\n const aui = useAui();\n const isLoading = useAuiState((s) => s.threads.isLoading);\n const isLoadingMore = useAuiState((s) => s.threads.isLoadingMore);\n const hasMore = useAuiState((s) => s.threads.hasMore);\n const threadIds = useAuiState((s) => s.threads.threadIds);\n const threadItems = useAuiState((s) => s.threads.threadItems);\n const mainThreadId = useAuiState((s) => s.threads.mainThreadId);\n\n const sentinelRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const node = sentinelRef.current;\n if (!node || !hasMore) return;\n\n const observer = new IntersectionObserver((entries) => {\n if (entries.some((e) => e.isIntersecting) && hasMore && !isLoadingMore) {\n void aui.threads().loadMore();\n }\n });\n observer.observe(node);\n return () => observer.disconnect();\n }, [aui, hasMore, isLoadingMore]);\n\n const itemsById = new Map(threadItems.map((item) => [item.id, item]));\n\n return (\n <ThreadListShell header={<ThreadListNewButton onClick={() => aui.threads().switchToNewThread()} />}>\n {isLoading ? (\n <ThreadListRowSkeleton />\n ) : threadIds.length === 0 ? (\n <ThreadListEmptyState />\n ) : (\n threadIds.map((id) => {\n const item = itemsById.get(id);\n return (\n <ThreadListRow\n key={id}\n title={item?.title ?? \"New Chat\"}\n active={id === mainThreadId}\n onSelect={() => aui.threads().switchToThread(id)}\n onArchive={() => aui.threads().item({ id }).archive()}\n onDelete={() => aui.threads().item({ id }).delete()}\n />\n );\n })\n )}\n {!isLoading && hasMore && (\n <>\n {isLoadingMore && <ThreadListRowSkeleton count={1} />}\n <div ref={sentinelRef} aria-hidden />\n </>\n )}\n </ThreadListShell>\n );\n}\n","\"use client\";\n\nimport { ThreadContainer } from \"./ThreadContainer.js\";\nimport { ComposerContainer } from \"./ComposerContainer.js\";\n\n/** The full assembled thread view: message list + composer. */\nexport function Thread() {\n return <ThreadContainer composer={<ComposerContainer />} />;\n}\n"],"mappings":"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","names":["React","jsx","React","jsx","React","jsx","React","jsx","jsxs","React","jsx","Accordion","AccordionDetails","AccordionSummary","Button","IconButton","Modal","Skeleton","jsx","jsx","jsx","jsx","jsx","jsx","jsxs","jsx","UserMessageEdit","jsx","jsx","jsx","Markdown","TfyToolCallCard","jsx","TfyToolCallCard","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","ComposerLeftSection","ComposerRightSection","ComposerSendButton","jsx","jsxs","IconButton","Button","jsx","jsxs","IconButton","Avatar","AvatarImage","AvatarFallback","jsx","jsxs","jsx","Fragment","jsx","jsxs","IconButton","forwardRef","IconButton","jsx","forwardRef","IconButton","IconButton","jsx","jsxs","IconButton","Skeleton","jsx","jsxs","Skeleton","jsx","jsxs","MessageTimestamp","IconButton","jsx","jsx","forwardRef","Spinner","jsx","forwardRef","Spinner","jsx","jsx","jsx","LightTooltip","jsx","jsxs","IconButton","MessageTimestamp","forwardRef","jsx","forwardRef","jsx","jsx","jsxs","Button","IconButton","Modal","Accordion","AccordionSummary","AccordionDetails","Skeleton","jsx","createContext","useContext","Button","default","registerIcons","LightTooltip","Accordion","AccordionSummary","AccordionDetails","useEffect","useAuiState","createContext","createElement","useContext","useState","MessagePrimitive","useAuiState","useActionBarCopy","useThreadIsRunning","useCallback","useAuiState","createContext","useCallback","useContext","useMemo","useState","jsx","jsxs","createContext","ToastStack","Toast","useState","useCallback","useMemo","useContext","jsx","Markdown","useAuiState","useCallback","useAuiState","jsx","AttachmentCard","AttachmentPreviewDialog","useAuiState","useCallback","useState","useAuiState","jsx","ReasoningCard","useAuiState","useState","useCallback","useState","createContext","useContext","useMemo","useState","jsx","SandboxToolCallCard","useState","useMemo","useCallback","useMemo","useState","jsx","ToolApprovalBar","useState","useMemo","useCallback","useCallback","useEffect","useRef","useState","jsx","ToolCallContentBlock","useState","useRef","useCallback","useEffect","jsx","AssistantMessageBubble","display","ToolCallCard","SubAgentCard","AskUserPrompt","useState","argsDisplay","resultDisplay","useState","useEffect","useRef","jsx","AgentStepsCard","useState","useRef","useEffect","jsx","AssistantMessageBubble","MessageIndicator","MessageErrorBanner","MessageActionBar","useThreadIsRunning","useActionBarCopy","useAuiState","MessagePrimitive","useCallback","useEffect","useRef","useState","jsx","HistoryLoader","useState","useRef","useCallback","useEffect","ComposerPrimitive","MessagePrimitive","useAuiState","useThreadIsRunning","MessagePrimitive","useAui","useAuiState","useEffect","useState","useAuiState","jsx","AttachmentCard","AttachmentPreviewDialog","useAui","useAuiState","MessagePrimitive","AttachmentPickerButton","jsx","jsxs","useAuiState","Button","MessageTimestamp","UserMessageEdit","useThreadIsRunning","MessagePrimitive","ComposerPrimitive","MessagePrimitive","useAuiState","useThreadIsRunning","jsx","UserMessageBubble","UserMessageActionBar","useThreadIsRunning","useAuiState","MessagePrimitive","Fragment","jsx","jsxs","useAuiState","useEffect","ThreadRootShell","ThreadViewportShell","ThreadComposerAreaShell","MessageGroup","WelcomeScreen","MessageListSkeleton","ScrollToBottomButton","useState","useAuiState","jsx","ToolGroupCard","useAuiState","useState","useRef","useAui","useAuiState","useAuiState","useTrueFoundryToolResponses","useThreadIsRunning","useCallback","useEffect","useMemo","useState","jsx","AskUserPrompt","useTrueFoundryToolResponses","useThreadIsRunning","useMemo","useState","useEffect","useCallback","useThreadIsRunning","jsx","McpAuthPrompt","useThreadIsRunning","Fragment","jsx","jsxs","ComposerShell","useAui","useAuiState","useRef","useAui","useAuiState","useEffect","useRef","Fragment","jsx","jsxs","ThreadListShell","ThreadListNewButton","ThreadListRow","ThreadListRowSkeleton","ThreadListEmptyState","useAui","useAuiState","useRef","useEffect","jsx"]}
|