@truefoundry/trueforge-ui 0.3.0-rc.2 → 0.3.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/README.md +18 -10
- package/dist/{AgentCodeSnippets-637HQUXD.js → AgentCodeSnippets-U6KQWVBJ.js} +38 -23
- package/dist/AgentCodeSnippets-U6KQWVBJ.js.map +1 -0
- package/dist/AgentMetricChart-3D6FUFO6.js +15 -0
- package/dist/{AgentOverview-3FJ5EE6N.js → AgentOverview-RLJ6HZCN.js} +7 -7
- package/dist/{AgentSessionEventTimeline-VELWUYPR.js → AgentSessionEventTimeline-CDXRRUZQ.js} +8 -8
- package/dist/{AgentSessionEventTimeline-VELWUYPR.js.map → AgentSessionEventTimeline-CDXRRUZQ.js.map} +1 -1
- package/dist/{AgentSessionEventTimelineChart-CUKETHWM.js → AgentSessionEventTimelineChart-S2WX6ZEA.js} +12 -12
- package/dist/AgentSessionEventTimelineChart-S2WX6ZEA.js.map +1 -0
- package/dist/{AgentSessions-T7MOGOTZ.js → AgentSessions-UI3L7XY2.js} +72 -24
- package/dist/AgentSessions-UI3L7XY2.js.map +1 -0
- package/dist/{ConnectorSettings-ESZ2RSRG.js → ConnectorSettings-OIGAC2HU.js} +156 -116
- package/dist/ConnectorSettings-OIGAC2HU.js.map +1 -0
- package/dist/{DockLayout-NLFNU6F2.js → DockLayout-J5BRKMJZ.js} +10 -10
- package/dist/{DrawerLayout-PR3SMKA6.js → DrawerLayout-65YHGHIF.js} +13 -11
- package/dist/DrawerLayout-65YHGHIF.js.map +1 -0
- package/dist/{ModelSettings-LYW64IRR.js → ModelSettings-VP6WCMGT.js} +10 -10
- package/dist/{ModelSettings-LYW64IRR.js.map → ModelSettings-VP6WCMGT.js.map} +1 -1
- package/dist/OpenUiFenceBlock-UTDCTNTM.js +9 -0
- package/dist/{SandboxSettings-DF64LHYI.js → SandboxSettings-GTZT7LD6.js} +9 -9
- package/dist/SchedulesPage-ARWU7BZF.js +15 -0
- package/dist/{SettingsBuilder-LSXK2VN4.js → SettingsBuilder-A4BPYIFZ.js} +8 -8
- package/dist/{ShellRouteSync-B22IAV2W.js → ShellRouteSync-SSLGM35F.js} +157 -22
- package/dist/ShellRouteSync-SSLGM35F.js.map +1 -0
- package/dist/{SidebarLayout-XW6LXB7R.js → SidebarLayout-MFDOGAVJ.js} +74 -53
- package/dist/SidebarLayout-MFDOGAVJ.js.map +1 -0
- package/dist/{SkillSettings-64VXUO6J.js → SkillSettings-WQPUQ5TE.js} +18 -13
- package/dist/SkillSettings-WQPUQ5TE.js.map +1 -0
- package/dist/{TrueForgeUIWithRouter-3TSLV22Q.js → TrueForgeUIWithRouter-5CDICMCE.js} +9 -9
- package/dist/{WidgetLayout-Q5P7PYSJ.js → WidgetLayout-HE7E4UL5.js} +10 -10
- package/dist/{chunk-SQGT43Z3.js → chunk-2BDTG544.js} +21 -4
- package/dist/chunk-2BDTG544.js.map +1 -0
- package/dist/{chunk-YQO2NMJ3.js → chunk-2OKGEU6X.js} +4425 -2982
- package/dist/chunk-2OKGEU6X.js.map +1 -0
- package/dist/{chunk-FQK2XVVE.js → chunk-6CFZHEYH.js} +225 -72
- package/dist/chunk-6CFZHEYH.js.map +1 -0
- package/dist/{chunk-QC42MLAK.js → chunk-7AAO4UDQ.js} +4 -3
- package/dist/chunk-7AAO4UDQ.js.map +1 -0
- package/dist/chunk-E4GVP6PM.js +195 -0
- package/dist/chunk-E4GVP6PM.js.map +1 -0
- package/dist/{chunk-LGRHHFHN.js → chunk-F7ZAQIRE.js} +166 -45
- package/dist/chunk-F7ZAQIRE.js.map +1 -0
- package/dist/{chunk-VJ7BZGAF.js → chunk-GTTMLDCI.js} +2 -2
- package/dist/{chunk-5I2COQNL.js → chunk-IOPHQEUY.js} +13 -11
- package/dist/chunk-IOPHQEUY.js.map +1 -0
- package/dist/{chunk-G2TUAD65.js → chunk-KCYBMKQL.js} +235 -108
- package/dist/chunk-KCYBMKQL.js.map +1 -0
- package/dist/{chunk-H6WTY5PM.js → chunk-MAA7U4RF.js} +17 -227
- package/dist/chunk-MAA7U4RF.js.map +1 -0
- package/dist/{chunk-GXYAOAK5.js → chunk-MJULWIPI.js} +224 -162
- package/dist/chunk-MJULWIPI.js.map +1 -0
- package/dist/chunk-P7J2ABEP.js +587 -0
- package/dist/chunk-P7J2ABEP.js.map +1 -0
- package/dist/{chunk-VUMGMGKZ.js → chunk-TGKQRK3S.js} +52 -8
- package/dist/chunk-TGKQRK3S.js.map +1 -0
- package/dist/{chunk-I3AL54MA.js → chunk-VXKNS7FH.js} +28 -24
- package/dist/chunk-VXKNS7FH.js.map +1 -0
- package/dist/chunk-XO3FYN2W.js +517 -0
- package/dist/chunk-XO3FYN2W.js.map +1 -0
- package/dist/{createTrueFoundryServer-CmZnBh_l.d.ts → createTrueFoundryServer-B_FYhSdn.d.ts} +8 -5
- package/dist/index.d.ts +300 -89
- package/dist/index.js +65 -488
- package/dist/index.js.map +1 -1
- package/dist/plugins/trueforge-agent-server-adapter/index.d.ts +44 -13
- package/dist/plugins/trueforge-agent-server-adapter/index.js +73 -37
- package/dist/plugins/trueforge-agent-server-adapter/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +3 -3
- package/dist/AgentCodeSnippets-637HQUXD.js.map +0 -1
- package/dist/AgentMetricChart-4FYECRIN.js +0 -15
- package/dist/AgentSessionEventTimelineChart-CUKETHWM.js.map +0 -1
- package/dist/AgentSessions-T7MOGOTZ.js.map +0 -1
- package/dist/ConnectorSettings-ESZ2RSRG.js.map +0 -1
- package/dist/DrawerLayout-PR3SMKA6.js.map +0 -1
- package/dist/OpenUiFenceBlock-JEPNPJ7U.js +0 -9
- package/dist/SchedulesPage-WQU4H25F.js +0 -15
- package/dist/ShellRouteSync-B22IAV2W.js.map +0 -1
- package/dist/SidebarLayout-XW6LXB7R.js.map +0 -1
- package/dist/SkillSettings-64VXUO6J.js.map +0 -1
- package/dist/chunk-5I2COQNL.js.map +0 -1
- package/dist/chunk-BWHOZFIV.js +0 -587
- package/dist/chunk-BWHOZFIV.js.map +0 -1
- package/dist/chunk-FQK2XVVE.js.map +0 -1
- package/dist/chunk-G2TUAD65.js.map +0 -1
- package/dist/chunk-GXYAOAK5.js.map +0 -1
- package/dist/chunk-H6WTY5PM.js.map +0 -1
- package/dist/chunk-I3AL54MA.js.map +0 -1
- package/dist/chunk-LGRHHFHN.js.map +0 -1
- package/dist/chunk-NHHSZB5N.js +0 -74
- package/dist/chunk-NHHSZB5N.js.map +0 -1
- package/dist/chunk-QC42MLAK.js.map +0 -1
- package/dist/chunk-SFZNIO6U.js +0 -18
- package/dist/chunk-SFZNIO6U.js.map +0 -1
- package/dist/chunk-SQGT43Z3.js.map +0 -1
- package/dist/chunk-VUMGMGKZ.js.map +0 -1
- package/dist/chunk-YQO2NMJ3.js.map +0 -1
- /package/dist/{AgentMetricChart-4FYECRIN.js.map → AgentMetricChart-3D6FUFO6.js.map} +0 -0
- /package/dist/{AgentOverview-3FJ5EE6N.js.map → AgentOverview-RLJ6HZCN.js.map} +0 -0
- /package/dist/{DockLayout-NLFNU6F2.js.map → DockLayout-J5BRKMJZ.js.map} +0 -0
- /package/dist/{OpenUiFenceBlock-JEPNPJ7U.js.map → OpenUiFenceBlock-UTDCTNTM.js.map} +0 -0
- /package/dist/{SandboxSettings-DF64LHYI.js.map → SandboxSettings-GTZT7LD6.js.map} +0 -0
- /package/dist/{SchedulesPage-WQU4H25F.js.map → SchedulesPage-ARWU7BZF.js.map} +0 -0
- /package/dist/{SettingsBuilder-LSXK2VN4.js.map → SettingsBuilder-A4BPYIFZ.js.map} +0 -0
- /package/dist/{TrueForgeUIWithRouter-3TSLV22Q.js.map → TrueForgeUIWithRouter-5CDICMCE.js.map} +0 -0
- /package/dist/{WidgetLayout-Q5P7PYSJ.js.map → WidgetLayout-HE7E4UL5.js.map} +0 -0
- /package/dist/{chunk-VJ7BZGAF.js.map → chunk-GTTMLDCI.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme/brand.tsx","../src/icons/trueforge-logo-dark.svg","../src/icons/trueforge-logo.svg","../src/atoms/primitives/Accordion.tsx","../src/atoms/adapters/AgentStepsCardAdapter.tsx","../src/atoms/primitives/Button.tsx","../src/theme/SlotsProvider.tsx","../src/theme/defaultSlots.ts","../src/atoms/primitives/IconButton.tsx","../src/atoms/adapters/AskUserPromptAdapter.tsx","../src/atoms/adapters/McpAuthPromptAdapter.tsx","../src/atoms/agent-chat/StatusDot.tsx","../src/atoms/agent-chat/StepIconBox.tsx","../src/atoms/agent-chat/AgentStepRow.tsx","../src/atoms/adapters/ReasoningCardAdapter.tsx","../src/atoms/ResumeUnavailable.tsx","../src/atoms/agent-details/AgentCodeBlock.tsx","../src/atoms/AgentOverflowMenu.tsx","../src/containers/ToasterContainer.tsx","../src/atoms/primitives/Dialog.tsx","../src/atoms/primitives/DropdownMenu.tsx","../src/atoms/lib/themePortalRoot.ts","../src/atoms/agent-details/AgentDetailsHeader.tsx","../src/atoms/agent-details/AgentDetailsPage.tsx","../src/hooks/useSessionShareSearch.ts","../src/atoms/primitives/Skeleton.tsx","../src/atoms/agent-details/AgentDetailsTabs.tsx","../src/atoms/agent-details/AgentDetailsUnavailable.tsx","../src/utils/sessionDisplayFormat.ts","../src/atoms/agent-details/AgentMetricCard.tsx","../src/atoms/agent-details/AgentMetricsTimeRangeFilter.tsx","../src/atoms/agent-details/AgentMetricsView.tsx","../src/atoms/agent-details/AgentOverviewCard.tsx","../src/atoms/agent-details/AgentSessionDetailHeader.tsx","../src/atoms/primitives/Tooltip.tsx","../src/atoms/lib/threadListMeta.ts","../src/atoms/agent-details/AgentSessionListRow.tsx","../src/utils/sessionEventTimeline.ts","../src/atoms/agent-details/AgentSessionMetricCharts.tsx","../src/atoms/agent-details/AgentSessionMetricsStrip.tsx","../src/atoms/agent-details/AgentSessionsFilters.tsx","../src/utils/sessionTimePresets.ts","../src/atoms/lib/inputClasses.ts","../src/atoms/lib/selectClasses.ts","../src/atoms/lib/useSearchAgentsList.ts","../src/atoms/lib/useDebouncedValue.ts","../src/atoms/primitives/PopoverSelect.tsx","../src/atoms/agent-details/AgentSessionTurnHeader.tsx","../src/atoms/agent-details/SessionsPage.tsx","../src/atoms/AgentsLibrary.tsx","../src/atoms/EmptyScreen.tsx","../src/atoms/lib/mountName.ts","../src/atoms/primitives/SearchInput.tsx","../src/atoms/primitives/Table.tsx","../src/atoms/AgentsLibraryButton.tsx","../src/atoms/AssistantMessageBubble.tsx","../src/constants/attachments.ts","../src/atoms/primitives/Avatar.tsx","../src/atoms/AttachmentCard.tsx","../src/atoms/AttachmentPickerButton.tsx","../src/atoms/AttachmentPreviewDialog.tsx","../src/atoms/ChatFileDownload.tsx","../src/hooks/useChatChromeActionsVisible.ts","../src/utils/isNewChatView.ts","../src/atoms/ClearChatButton.tsx","../src/atoms/CodeEditor.tsx","../src/atoms/ComposerSections.tsx","../src/atoms/ComposerShell.tsx","../src/atoms/draft/AgentConfigEditors.tsx","../src/atoms/draft/agentConfigMessages.ts","../src/atoms/draft/agentConfigMounts.ts","../src/atoms/draft/mcpConnectorStubs.ts","../src/atoms/primitives/CatalogLogo.tsx","../src/utils/catalogLogo.ts","../src/atoms/draft/DraftCatalogEmptyState.tsx","../src/atoms/draft/DraftModelCatalogPanel.tsx","../src/atoms/draft/modelParamsSummary.ts","../src/atoms/draft/runtimeConfigSummary.ts","../src/atoms/draft/AgentConfigPanel.tsx","../src/atoms/draft/AgentInstructionsDrawer.tsx","../src/atoms/primitives/SideDrawer.tsx","../src/atoms/lib/useCompactOverlayStyle.ts","../src/atoms/draft/AgentMcpEditorContent.tsx","../src/hooks/useMcpAuth.ts","../src/atoms/lib/useInfiniteScrollSentinel.ts","../src/atoms/primitives/Switch.tsx","../src/atoms/primitives/CenteredModal.tsx","../src/atoms/draft/AgentModelConfigModal.tsx","../src/atoms/draft/AgentModelEditorContent.tsx","../src/atoms/draft/reasoningEffort.ts","../src/atoms/draft/AgentModelSettingsContent.tsx","../src/atoms/draft/AgentResourceConfigModal.tsx","../src/atoms/draft/AgentResourceEditorContent.tsx","../src/atoms/draft/AgentRuntimeConfigFields.tsx","../src/atoms/draft/AgentRuntimeConfigModal.tsx","../src/atoms/draft/AgentRuntimeEditorContent.tsx","../src/atoms/draft/AgentSkillsEditorContent.tsx","../src/atoms/draft/DraftAgentConfigTrigger.tsx","../src/atoms/draft/DraftCapabilitiesPanel.tsx","../src/atoms/lib/useIsMobile.ts","../src/atoms/draft/DraftReasoningEffortSelector.tsx","../src/atoms/primitives/BottomSheet.tsx","../src/atoms/draft/DraftComposerSections.tsx","../src/atoms/draft/DraftCompositeSelector.tsx","../src/atoms/draft/DraftModelSelector.tsx","../src/atoms/HistoryLoader.tsx","../src/atoms/Markdown.tsx","../src/atoms/MessageActionBar.tsx","../src/atoms/MessageErrorBanner.tsx","../src/atoms/MessageIndicator.tsx","../src/atoms/MessageTimestamp.tsx","../src/atoms/MonacoEditorCore.tsx","../src/atoms/SandboxArtifactDownload.tsx","../src/atoms/SandboxToolCallCard.tsx","../src/atoms/SaveAgentButton.tsx","../src/atoms/draft/AgentConfigInstructionsContext.tsx","../src/hooks/useDebouncedAgentInstructions.ts","../src/atoms/SaveAgentForm.tsx","../src/atoms/SaveAgentFormFields.tsx","../src/atoms/SchedulesButton.tsx","../src/atoms/ScrollToBottomButton.tsx","../src/atoms/SelectAgentEmptyState.tsx","../src/atoms/SessionsBrowserButton.tsx","../src/atoms/ShellActionsActionSlot.tsx","../src/atoms/Skeletons.tsx","../src/atoms/SubAgentCard.tsx","../src/atoms/SyntaxHighlighter.tsx","../../../node_modules/.pnpm/react-syntax-highlighter@16.1.1_react@19.2.8/node_modules/react-syntax-highlighter/dist/esm/styles/prism/one-dark.js","../../../node_modules/.pnpm/react-syntax-highlighter@16.1.1_react@19.2.8/node_modules/react-syntax-highlighter/dist/esm/styles/prism/one-light.js","../src/atoms/ThreadListMisc.tsx","../src/atoms/ThreadListRow.tsx","../src/atoms/ThreadShell.tsx","../src/atoms/Toast.tsx","../src/atoms/ToolApprovalBar.tsx","../src/atoms/ToolCallCard.tsx","../src/atoms/ToolCallContentBlock.tsx","../src/atoms/ToolGroupCard.tsx","../src/atoms/UserMessageActionBar.tsx","../src/atoms/UserMessageBubble.tsx","../src/atoms/UserMessageEdit.tsx","../src/atoms/WelcomeScreen.tsx","../src/containers/AgentMetricsContainer.tsx","../src/containers/AgentSessionTimelineContainer.tsx","../src/utils/buildSessionMetrics.ts","../src/utils/sessionEventTimelineChart.ts","../src/utils/toolCallParsing.ts","../src/utils/sessionTimelineEvents.ts","../src/utils/buildSessionTimelineSegments.ts","../src/utils/cachedListEventsBridge.ts","../src/utils/sessionTurnViews.ts","../src/containers/AssistantMessageContainer.tsx","../src/utils/computeAgentStepsSplit.ts","../src/containers/AgentStepsContainer.tsx","../src/containers/AssistantTextContainer.tsx","../src/hooks/useThrottledMarkdownText.ts","../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/ReadOnlySessionTurnRuntime.tsx","../src/containers/UserMessageContainer.tsx","../src/containers/AttachmentsContainer.tsx","../src/containers/useAttachmentPreviewSrc.ts"],"sourcesContent":["'use client';\n\nimport { useContext } from 'react';\n\nimport { cn } from '../atoms/lib/cn.js';\nimport { Icon } from '../icons/Icon.js';\nimport TrueForgeLogoDark from '../icons/trueforge-logo-dark.svg';\nimport TrueForgeLogoLight from '../icons/trueforge-logo.svg';\nimport { ThemeContext } from './ThemeProvider.js';\nimport type { BrandConfig, BrandLogoConfig } from './types.js';\n\nconst DEFAULT_BRAND_NAME = 'TrueForge';\n\n/** Expanded / collapsed chrome choices derived from `theme.brand.mode`. */\nexport type BrandChrome = {\n expandedVariant: 'icon' | 'logo';\n collapsedVariant: 'icon';\n /** Whether to render `name` as visible text beside the mark in expanded chrome. */\n showTitle: boolean;\n};\n\n/**\n * Maps `brand.mode` to layout chrome. Layouts should not re-derive field combinations.\n */\nexport function resolveBrandChrome(brand: Partial<BrandConfig> | undefined): BrandChrome {\n switch (brand?.mode) {\n case 'logo':\n return { expandedVariant: 'logo', collapsedVariant: 'icon', showTitle: false };\n case 'icon-only':\n return { expandedVariant: 'icon', collapsedVariant: 'icon', showTitle: false };\n case 'icon-title':\n return { expandedVariant: 'icon', collapsedVariant: 'icon', showTitle: true };\n default:\n // Omit `brand` (or incomplete Partial) → default TrueForge wordmark.\n return { expandedVariant: 'logo', collapsedVariant: 'icon', showTitle: false };\n }\n}\n\n/** Mode-matched source, falling back to the other mode then the mode-agnostic `src`. */\nfunction resolveImageSrc({\n image,\n mode,\n}: {\n image: string | BrandLogoConfig;\n mode: 'light' | 'dark';\n}): string | undefined {\n if (typeof image === 'string') return image;\n const preferred = mode === 'dark' ? image.dark : image.light;\n return preferred ?? image.light ?? image.dark ?? image.src;\n}\n\n/** Configured display name, or the SDK default when no custom brand is set. */\nexport function useBrandName(): string | undefined {\n const brand = useContext(ThemeContext)?.brand;\n if (brand?.name != null) return brand.name;\n return brand?.mode == null ? DEFAULT_BRAND_NAME : undefined;\n}\n\n/**\n * The product mark resolved against the active theme mode. Compact surfaces use\n * `icon`; expanded surfaces use `logo` and fall back to `icon`.\n */\nexport function BrandLogo({ className, variant = 'icon' }: { className?: string; variant?: 'icon' | 'logo' }) {\n const theme = useContext(ThemeContext);\n const brand = theme?.brand;\n const name = useBrandName();\n const label = name ?? DEFAULT_BRAND_NAME;\n const mode = theme?.mode ?? 'light';\n const preferredImage = variant === 'logo' ? brand?.logo : brand?.icon;\n const preferredSrc = preferredImage == null ? undefined : resolveImageSrc({ image: preferredImage, mode });\n const icon = brand?.icon;\n const src = preferredSrc ?? (variant === 'logo' && icon != null ? resolveImageSrc({ image: icon, mode }) : undefined);\n\n if (src == null) {\n if (variant === 'logo') {\n const Wordmark = mode === 'dark' ? TrueForgeLogoDark : TrueForgeLogoLight;\n // svgr pins width/height to 1em; clearing both lets the viewBox aspect\n // ratio widen the wordmark to match the caller's height.\n return (\n <Wordmark\n className={cn('w-auto', className)}\n width={undefined}\n height={undefined}\n role=\"img\"\n aria-label={label}\n />\n );\n }\n return (\n <Icon name={mode === 'dark' ? 'trueforge-logomark-dark' : 'trueforge-logomark-light'} className={className} />\n );\n }\n\n const image = <img src={src} alt={label} className={className} />;\n const href = brand?.href;\n if (href == null) return image;\n\n return (\n <a href={href} aria-label={label} className=\"inline-flex items-center\">\n {image}\n </a>\n );\n}\n\ndeclare module './SlotsProvider.js' {\n interface AtomSlots {\n BrandLogo: typeof BrandLogo;\n }\n}\n","import * as React from \"react\";\nconst SvgTrueforgeLogoDark = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 737 120\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><g clipPath=\"url(#clip0_10580_645)\"><path d=\"M0 0.015625L40 20.0156V40L20 40V80.0156H40V100.016L0 120.016V0.015625Z\" fill=\"white\" /><path d=\"M120 0L80 20V40H100V80H80V100L120 120V0Z\" fill=\"white\" /><path d=\"M59.9971 39.8193C61.0556 45.6178 63.1951 50.1614 66.5771 53.5215C69.9455 56.868 74.4738 58.9678 80.2051 60.0088C74.4712 61.0714 69.9429 63.2075 66.5752 66.5752C63.1954 69.955 61.0558 74.5036 59.9971 80.2666C58.933 74.5031 56.7854 69.9547 53.4004 66.5752C50.0276 63.2078 45.4981 61.0704 39.7725 60.0078C45.4953 58.9668 50.0251 56.8676 53.3984 53.5215C56.7857 50.1616 58.9332 45.6182 59.9971 39.8193Z\" fill=\"white\" stroke=\"white\" strokeWidth={1.6} strokeLinejoin=\"round\" /></g><path d=\"M622.099 24.752C631.17 24.752 637.822 27.7322 642.056 33.6934V27.084H659.938V90.4531C659.938 99.87 656.785 107.127 650.479 112.225C644.172 117.408 636.008 120 625.986 120C614.669 120 603.784 116.76 593.33 110.28L602.66 96.1553C611.559 101.252 619.248 103.801 625.728 103.801C635.835 103.801 640.89 98.7473 640.89 88.6396V84.752C636.57 89.8491 630.306 92.3975 622.099 92.3975C613.632 92.3974 606.548 89.2442 600.846 82.9375C595.23 76.6308 592.423 68.5094 592.423 58.5742C592.423 48.6393 595.23 40.5185 600.846 34.2119C606.548 27.9052 613.632 24.752 622.099 24.752ZM292.13 69.46C292.13 76.285 295.456 79.6982 302.108 79.6982C310.229 79.6982 314.29 75.421 314.29 66.8682V27.084H333.729V94.4707H315.975V87.3438C311.914 93.564 305.391 96.6738 296.406 96.6738C288.458 96.6738 282.497 94.773 278.522 90.9717C274.635 87.1704 272.691 81.7275 272.691 74.6436V27.084H292.13V69.46ZM378.339 24.752C388.62 24.752 396.525 27.7322 402.054 33.6934C407.669 39.6545 410.478 48.0349 410.478 58.834C410.478 61.2528 410.391 63.758 410.218 66.3496H362.658C364.732 75.5937 370.693 80.2158 380.542 80.2158C384.084 80.2158 387.237 79.6109 390.002 78.4014C392.766 77.1055 396.049 74.8595 399.851 71.6631L410.478 83.8447C401.579 92.3976 391.427 96.6738 380.023 96.6738C368.965 96.6738 360.153 93.4345 353.587 86.9551C347.108 80.4757 343.868 71.836 343.868 61.0371C343.868 50.4108 346.978 41.7279 353.198 34.9893C359.419 28.1642 367.799 24.752 378.339 24.752ZM499.098 24.752C509.465 24.752 517.974 28.121 524.626 34.8594C531.278 41.5116 534.604 50.1077 534.604 60.6475C534.604 71.2738 531.278 79.9566 524.626 86.6953C517.974 93.3474 509.465 96.6738 499.098 96.6738C488.644 96.6738 480.091 93.3476 473.438 86.6953C466.786 79.9567 463.46 71.2738 463.46 60.6475C463.46 50.1077 466.786 41.5116 473.438 34.8594C480.091 28.1207 488.644 24.752 499.098 24.752ZM704.464 24.752C714.745 24.752 722.65 27.7322 728.179 33.6934C733.794 39.6545 736.603 48.0349 736.603 58.834C736.603 61.2528 736.516 63.758 736.343 66.3496H688.783C690.857 75.5937 696.818 80.2158 706.667 80.2158C710.209 80.2158 713.362 79.6109 716.127 78.4014C718.891 77.1055 722.174 74.8595 725.976 71.6631L736.603 83.8447C727.704 92.3976 717.552 96.6738 706.148 96.6738C695.09 96.6738 686.278 93.4345 679.712 86.9551C673.233 80.4757 669.993 71.836 669.993 61.0371C669.993 50.4108 673.103 41.7279 679.323 34.9893C685.544 28.1642 693.924 24.752 704.464 24.752ZM194.087 27.085H209.249V41.5996H194.087V73.0898C194.087 75.3359 194.605 76.9345 195.642 77.8848C196.678 78.7486 198.277 79.1797 200.437 79.1797C202.078 79.1797 204.626 78.8347 208.082 78.1436L210.285 93.6943C204.842 95.3358 199.702 96.1562 194.864 96.1562C187.694 96.1562 182.51 94.6013 179.313 91.4912C176.203 88.3811 174.649 83.4137 174.648 76.5889V41.5996H162.855V27.085H174.648V7.3877H194.087V27.085ZM254.532 25.9189C257.21 25.9189 260.883 26.6959 265.548 28.251L261.919 45.3574C257.858 44.4071 254.921 43.9316 253.106 43.9316C248.787 43.9317 245.374 45.6162 242.869 48.9854C240.364 52.2683 239.111 56.8044 239.111 62.5928V94.4717H219.673V27.085H237.686V36.6748C241.314 29.5042 246.93 25.919 254.532 25.9189ZM579.519 25.9189C582.197 25.9189 585.869 26.6959 590.534 28.251L586.905 45.3574C582.845 44.4072 579.908 43.9317 578.094 43.9316C573.774 43.9316 570.361 45.616 567.855 48.9854C565.35 52.2683 564.098 56.8044 564.098 62.5928V94.4717H544.659V27.085H562.672V36.6748C566.3 29.5043 571.916 25.9191 579.519 25.9189ZM449.276 0C453.942 0 458.866 0.77795 464.05 2.33301L460.681 16.7168C458.175 16.1121 455.627 15.8096 453.035 15.8096C450.53 15.8096 448.758 16.3712 447.722 17.4941C446.685 18.5309 446.167 20.3892 446.167 23.0674V27.084H460.292V41.5986H446.167V94.4707H426.729V41.5986H415.454V27.084H426.729V22.2891C426.729 7.42983 434.244 0.000142379 449.276 0ZM499.098 41.209C494.346 41.209 490.501 42.9803 487.563 46.5225C484.626 50.0645 483.158 54.773 483.158 60.6475C483.158 66.6084 484.626 71.3603 487.563 74.9023C490.501 78.4445 494.346 80.2158 499.098 80.2158C503.849 80.2157 507.65 78.4444 510.501 74.9023C513.438 71.3602 514.907 66.6085 514.907 60.6475C514.907 54.7729 513.438 50.0645 510.501 46.5225C507.564 42.9806 503.763 41.2091 499.098 41.209ZM626.764 41.3389C622.358 41.3389 618.772 42.9373 616.008 46.1338C613.33 49.2439 611.99 53.3908 611.99 58.5742C611.99 63.7578 613.373 67.948 616.138 71.1445C618.902 74.341 622.444 75.9394 626.764 75.9395C631.17 75.9395 634.755 74.341 637.52 71.1445C640.284 67.948 641.667 63.7578 641.667 58.5742C641.667 53.3907 640.284 49.2439 637.52 46.1338C634.755 42.9374 631.17 41.3389 626.764 41.3389ZM378.08 39.9131C370.218 39.9131 365.207 44.1902 363.047 52.7432H391.945C390.995 44.1904 386.374 39.9132 378.08 39.9131ZM704.205 39.9131C696.343 39.9131 691.332 44.1902 689.172 52.7432H718.07C717.12 44.1904 712.499 39.9132 704.205 39.9131Z\" fill=\"white\" /><defs><clipPath id=\"clip0_10580_645\"><rect width={120} height={120} fill=\"white\" /></clipPath></defs></svg>;\nexport default SvgTrueforgeLogoDark;","import * as React from \"react\";\nconst SvgTrueforgeLogo = props => <svg width=\"1em\" height=\"1em\" viewBox=\"0 0 614 100\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}><g clipPath=\"url(#clip0_10581_1412)\"><path d=\"M-0.00195312 0.0136719L33.3314 16.6803V33.334L16.6647 33.334V66.6803H33.3314V83.347L-0.00195312 100.014V0.0136719Z\" fill=\"#05090E\" /><path d=\"M99.998 0L66.6647 16.6667V33.3333H83.3314V66.6667H66.6647V83.3333L99.998 100V0Z\" fill=\"#05090E\" /><path d=\"M49.9961 33.1826C50.8782 38.0147 52.6612 41.8005 55.4795 44.6006C58.2863 47.3892 62.0592 49.1393 66.835 50.0068C62.057 50.8924 58.2839 52.6732 55.4775 55.4795C52.6611 58.2959 50.8784 62.0863 49.9961 66.8887C49.1093 62.0858 47.3189 58.2958 44.498 55.4795C41.6875 52.6735 37.9135 50.8924 33.1426 50.0068C37.9113 49.1393 41.6861 47.3898 44.4971 44.6016C47.3198 41.8016 49.1095 38.0151 49.9961 33.1826Z\" fill=\"#6D58FB\" stroke=\"#6D58FB\" strokeWidth={1.33333} strokeLinejoin=\"round\" /></g><path d=\"M518.559 20.627C526.12 20.627 531.665 23.1106 535.193 28.0781V22.5703H550.1V75.3789C550.1 83.2261 547.47 89.2739 542.214 93.5215C536.957 97.8409 530.153 100.001 521.8 100.001C512.367 100.001 503.293 97.3008 494.58 91.9014L502.356 80.1299C509.773 84.3774 516.182 86.5019 521.583 86.502C530.008 86.502 534.221 82.2902 534.221 73.8672V70.627C530.62 74.8745 525.399 76.998 518.559 76.998C511.502 76.998 505.597 74.3706 500.845 69.1152C496.164 63.8597 493.823 57.0918 493.823 48.8125C493.823 40.5333 496.164 33.7663 500.845 28.5107C505.597 23.2553 511.502 20.627 518.559 20.627ZM315.383 20.627C323.952 20.627 330.541 23.1106 335.149 28.0781C339.83 33.0457 342.17 40.0293 342.17 49.0283C342.17 51.0441 342.098 53.1322 341.954 55.292H302.312C304.041 62.9954 309.01 66.8477 317.219 66.8477C320.171 66.8476 322.799 66.3429 325.104 65.335C327.408 64.2551 330.144 62.3835 333.312 59.7197L342.17 69.8711C334.753 76.9984 326.292 80.5624 316.787 80.5625C307.57 80.5625 300.225 77.8624 294.752 72.4629C289.351 67.0633 286.65 59.8635 286.65 50.8643C286.65 42.0091 289.243 34.7737 294.428 29.1582C299.612 23.4707 306.598 20.627 315.383 20.627ZM416.036 20.627C424.677 20.627 431.77 23.4346 437.314 29.0498C442.859 34.5934 445.632 41.7577 445.632 50.541C445.632 59.3961 442.859 66.6316 437.314 72.2471C431.77 77.7904 424.677 80.5625 416.036 80.5625C407.323 80.5625 400.194 77.7905 394.649 72.2471C389.105 66.6316 386.332 59.3961 386.332 50.541C386.332 41.7577 389.105 34.5934 394.649 29.0498C400.194 23.4345 407.323 20.627 416.036 20.627ZM587.211 20.627C595.78 20.627 602.369 23.1106 606.978 28.0781C611.658 33.0457 613.998 40.0292 613.998 49.0283C613.998 51.0441 613.926 53.1322 613.782 55.292H574.141C575.869 62.9953 580.838 66.8476 589.047 66.8477C591.999 66.8477 594.627 66.3428 596.932 65.335C599.236 64.2551 601.972 62.3834 605.141 59.7197L613.998 69.8711C606.581 76.9984 598.12 80.5624 588.615 80.5625C579.398 80.5625 572.053 77.8624 566.58 72.4629C561.179 67.0633 558.479 59.8635 558.479 50.8643C558.479 42.0091 561.071 34.7737 566.256 29.1582C571.441 23.4707 578.426 20.627 587.211 20.627ZM243.526 57.8838C243.526 63.5711 246.299 66.415 251.844 66.415C258.612 66.4149 261.997 62.8509 261.997 55.7236V22.5703H278.199V78.7256H263.4V72.7861C260.016 77.9696 254.58 80.5615 247.091 80.5615C240.466 80.5615 235.497 78.9782 232.185 75.8105C228.944 72.6428 227.324 68.1067 227.324 62.2031V22.5703H243.526V57.8838ZM161.807 22.5713H174.444V34.666H161.807V60.9082C161.807 62.7799 162.239 64.1114 163.104 64.9033C163.968 65.6232 165.299 65.9834 167.1 65.9834C168.468 65.9834 170.592 65.6951 173.473 65.1191L175.309 78.0781C170.772 79.446 166.488 80.1299 162.455 80.1299C156.478 80.1299 152.158 78.834 149.493 76.2422C146.901 73.6504 145.604 69.5106 145.604 63.8232V34.666H135.775V22.5713H145.604V6.15625H161.807V22.5713ZM212.189 21.5977C214.422 21.5977 217.482 22.2453 221.37 23.541L218.346 37.7959C214.962 37.004 212.513 36.6084 211.001 36.6084C207.401 36.6085 204.556 38.0126 202.468 40.8203C200.38 43.5561 199.336 47.3357 199.336 52.1592V78.7256H183.134V22.5693H198.147V30.5605C201.172 24.5852 205.853 21.5977 212.189 21.5977ZM374.509 0C378.397 0 382.502 0.647547 386.822 1.94336L384.015 13.9307C381.926 13.4267 379.802 13.1748 377.642 13.1748C375.553 13.1748 374.077 13.6432 373.213 14.5791C372.349 15.4431 371.917 16.9909 371.917 19.2227V22.5703H383.69V34.665H371.917V78.7256H355.715V34.665H346.317V22.5703H355.715V18.5742C355.715 6.19146 361.979 5.23399e-05 374.509 0ZM483.068 21.5977C485.301 21.5977 488.361 22.2453 492.249 23.541L489.225 37.7959C485.84 37.004 483.392 36.6084 481.88 36.6084C478.279 36.6084 475.435 38.0125 473.347 40.8203C471.258 43.5561 470.214 47.3357 470.214 52.1592V78.7256H454.012V22.5693H469.026V30.5605C472.051 24.5853 476.732 21.5977 483.068 21.5977ZM416.036 34.3418C412.076 34.3418 408.871 35.8178 406.423 38.7695C403.975 41.7213 402.75 45.6454 402.75 50.541C402.75 55.5084 403.975 59.4682 406.423 62.4199C408.871 65.3715 412.076 66.8477 416.036 66.8477C419.996 66.8476 423.165 65.3715 425.541 62.4199C427.989 59.4682 429.214 55.5084 429.214 50.541C429.214 45.6454 427.989 41.7213 425.541 38.7695C423.093 35.8179 419.925 34.3418 416.036 34.3418ZM522.447 34.4502C518.775 34.4502 515.787 35.7817 513.482 38.4453C511.25 41.0371 510.134 44.4929 510.134 48.8125C510.134 53.1321 511.286 56.6243 513.59 59.2881C515.894 61.9518 518.847 63.2831 522.447 63.2832C526.12 63.2832 529.109 61.9519 531.413 59.2881C533.717 56.6243 534.869 53.1321 534.869 48.8125C534.869 44.493 533.717 41.0371 531.413 38.4453C529.109 35.7815 526.12 34.4502 522.447 34.4502ZM315.166 33.2617C308.613 33.2619 304.437 36.8258 302.637 43.9531H326.724C325.932 36.8257 322.079 33.2617 315.166 33.2617ZM586.995 33.2617C580.442 33.2617 576.265 36.8257 574.465 43.9531H598.552C597.76 36.8258 593.908 33.2619 586.995 33.2617Z\" fill=\"black\" /><defs><clipPath id=\"clip0_10581_1412\"><rect width={100} height={100} fill=\"white\" /></clipPath></defs></svg>;\nexport default SvgTrueforgeLogo;","import React, { createContext, useContext, useId, useState, type ReactNode } from 'react';\n\nimport { cn } from '../lib/cn.js';\n\n/**\n * Controlled accordion compatible with prior tfy `expanded` / `onChange` slot usage.\n */\nexport type AccordionProps = {\n expanded?: boolean;\n onChange?: (event: unknown, expanded: boolean) => void;\n children?: ReactNode;\n className?: string;\n background?: string;\n sx?: unknown;\n} & Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>;\n\nexport function Accordion({\n expanded,\n onChange,\n children,\n className,\n background: _background,\n sx: _sx,\n ...rest\n}: AccordionProps) {\n const panelId = useId();\n\n return (\n <div className={cn('w-full', className)} data-expanded={expanded || undefined} {...rest}>\n {React.Children.map(children, child => {\n if (!React.isValidElement(child)) return child;\n return React.cloneElement(child as React.ReactElement<Record<string, unknown>>, {\n expanded,\n onChange,\n panelId,\n });\n })}\n </div>\n );\n}\n\nexport type AccordionSummaryProps = {\n children?: ReactNode;\n className?: string;\n expanded?: boolean;\n onChange?: (event: unknown, expanded: boolean) => void;\n panelId?: string;\n hideIcon?: boolean;\n disableRipple?: boolean;\n sx?: unknown;\n};\n\nexport function AccordionSummary({ children, className, expanded, onChange, panelId }: AccordionSummaryProps) {\n return (\n <button\n type=\"button\"\n aria-expanded={expanded}\n aria-controls={panelId}\n className={cn('flex w-full cursor-pointer items-center text-left', className)}\n onClick={event => onChange?.(event, !expanded)}\n >\n {children}\n </button>\n );\n}\n\nexport type AccordionDetailsProps = {\n children?: ReactNode;\n className?: string;\n expanded?: boolean;\n panelId?: string;\n sx?: unknown;\n};\n\nexport function AccordionDetails({ children, className, expanded, panelId }: AccordionDetailsProps) {\n if (!expanded) return null;\n return (\n <div id={panelId} role=\"region\" className={cn(className)}>\n {children}\n </div>\n );\n}\n\ntype AccordionCtx = {\n openItems: Set<string>;\n toggle: (id: string) => void;\n};\n\nconst Ctx = createContext<AccordionCtx>({ openItems: new Set(), toggle: () => {} });\n\nexport function AccordionRoot({\n type = 'single',\n defaultValue,\n className,\n children,\n}: {\n type?: 'single' | 'multiple';\n defaultValue?: string;\n className?: string;\n children?: ReactNode;\n}) {\n const [openItems, setOpenItems] = useState<Set<string>>(() => new Set(defaultValue ? [defaultValue] : []));\n const toggle = (id: string) => {\n setOpenItems(prev => {\n const next = new Set(type === 'single' ? [] : prev);\n if (prev.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n return (\n <Ctx.Provider value={{ openItems, toggle }}>\n <div className={cn('divide-y divide-border', className)}>{children}</div>\n </Ctx.Provider>\n );\n}\n\nexport function AccordionItem({\n value,\n className,\n children,\n}: {\n value: string;\n className?: string;\n children?: ReactNode;\n}) {\n const { openItems } = useContext(Ctx);\n return (\n <div className={className} data-open={openItems.has(value) || undefined}>\n {React.Children.map(children, child =>\n React.isValidElement(child)\n ? React.cloneElement(child as React.ReactElement<{ itemId?: string; isOpen?: boolean }>, {\n itemId: value,\n isOpen: openItems.has(value),\n })\n : child,\n )}\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n Accordion: typeof Accordion;\n AccordionSummary: typeof AccordionSummary;\n AccordionDetails: typeof AccordionDetails;\n }\n}\n\nexport function AccordionTrigger({\n className,\n children,\n itemId,\n isOpen,\n ...rest\n}: React.ButtonHTMLAttributes<HTMLButtonElement> & { itemId?: string; isOpen?: boolean }) {\n const { toggle } = useContext(Ctx);\n const panelId = itemId ? `aui-accordion-panel-${itemId}` : undefined;\n return (\n <button\n type=\"button\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n className={cn('flex w-full cursor-pointer items-center justify-between py-3 text-sm font-medium', className)}\n onClick={() => itemId && toggle(itemId)}\n {...rest}\n >\n {children}\n </button>\n );\n}\n\nexport function AccordionContent({\n className,\n children,\n isOpen,\n itemId,\n}: {\n className?: string;\n children?: ReactNode;\n isOpen?: boolean;\n itemId?: string;\n}) {\n if (!isOpen) return null;\n return (\n <div\n id={itemId ? `aui-accordion-panel-${itemId}` : undefined}\n role=\"region\"\n className={cn('pb-4 text-sm', className)}\n >\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { cn } from '../lib/cn.js';\nimport { Accordion, AccordionDetails, AccordionSummary } from '../primitives/Accordion.js';\nimport { Spinner } from '../primitives/Spinner.js';\n\nexport type AgentStepsCardProps = {\n toolCount: number;\n thinkingCount: number;\n expanded: boolean;\n active?: boolean;\n onToggle: () => void;\n children: ReactNode;\n borderColor?: string;\n background?: string;\n dataTestPrefix?: string;\n className?: string;\n};\n\nexport function AgentStepsCard({\n toolCount,\n thinkingCount,\n expanded,\n active = false,\n onToggle,\n children,\n borderColor,\n background,\n dataTestPrefix,\n className,\n}: AgentStepsCardProps) {\n const toolLabel = `${toolCount} tool ${toolCount === 1 ? 'call' : 'calls'}`;\n const thinkingLabel = thinkingCount > 0 ? ` · ${thinkingCount} thought${thinkingCount === 1 ? '' : 's'}` : '';\n\n return (\n <Accordion\n expanded={expanded}\n onChange={() => onToggle()}\n className={cn(\n 'aui-agent-steps-card mb-3 rounded-lg border border-border bg-card-bg text-text-primary',\n className,\n )}\n style={{\n ...(background !== undefined ? { background } : {}),\n ...(borderColor !== undefined ? { borderColor } : {}),\n }}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-agent-steps-card` : undefined}\n >\n <AccordionSummary className=\"p-0\">\n <div className=\"flex w-full items-center gap-2 px-2 py-2 text-left text-xs\">\n <Icon\n name={expanded ? 'chevron-down' : 'chevron-right'}\n size=\"0.75em\"\n className=\"shrink-0 text-text-secondary\"\n />\n <span className=\"font-semibold text-text-primary\">Agent steps</span>\n <span className=\"text-text-secondary\">\n · {toolLabel}\n {thinkingLabel}\n </span>\n {active && (\n <div className=\"ml-auto\">\n <Spinner size={12} className=\"text-primary-button-bg\" />\n </div>\n )}\n </div>\n </AccordionSummary>\n <AccordionDetails>\n <div\n className=\"space-y-3 border-t border-border p-3\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-content` : undefined}\n >\n {children}\n </div>\n </AccordionDetails>\n </Accordion>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentStepsCard: typeof AgentStepsCard;\n }\n}\n","import React from 'react';\n\nimport { auiButtonClass, type AuiButtonSize, type AuiButtonVariant } from '../lib/buttonClasses.js';\n\nexport type ButtonVariant = AuiButtonVariant;\nexport type ButtonSize = AuiButtonSize;\n\nexport type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n variant?: ButtonVariant;\n size?: ButtonSize;\n asChild?: never;\n};\n\nexport type FixedVariantButtonProps = Omit<ButtonProps, 'variant'>;\n\nconst ButtonRoot = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'primary', size = 'large', ...props }, ref) => {\n return <button ref={ref} className={auiButtonClass({ variant, size, className })} {...props} />;\n },\n);\n\nButtonRoot.displayName = 'Button';\n\nfunction fixedVariant(variant: ButtonVariant, displayName: string) {\n const Fixed = React.forwardRef<HTMLButtonElement, FixedVariantButtonProps>((props, ref) => (\n <ButtonRoot ref={ref} variant={variant} {...props} />\n ));\n Fixed.displayName = displayName;\n return Fixed;\n}\n\nexport const Button = Object.assign(ButtonRoot, {\n Primary: fixedVariant('primary', 'Button.Primary'),\n Secondary: fixedVariant('secondary', 'Button.Secondary'),\n Ghost: fixedVariant('ghost', 'Button.Ghost'),\n Destructive: fixedVariant('destructive', 'Button.Destructive'),\n});\n","import { createContext, useContext, useMemo, type ReactNode } from 'react';\n\nimport { defaultSlots } from './defaultSlots.js';\nimport type { PublicAtomSlots, SlotOverrides } from './publicSlots.js';\nimport { ThemeProvider, useOptionalThemeMode } from './ThemeProvider.js';\nimport type { ThemeConfig } from './types.js';\n\nexport type { ThemeConfig, ThemeMode } from './types.js';\n\n/**\n * Internal completeness contract augmented by each slotted atom.\n * `defaultSlots` satisfies this interface and owns the public slot keys.\n */\nexport interface AtomSlots {}\n\nexport type { SlotOverrides } from './publicSlots.js';\n\nconst SlotsContext = createContext<PublicAtomSlots>(defaultSlots);\nconst ThemeModeContext = createContext<'light' | 'dark' | undefined>(undefined);\n\n/** Merges `overrides` over parent/default slots. Containers resolve atoms via `useSlot`. */\nexport function SlotsProvider({\n overrides,\n theme,\n children,\n}: {\n overrides?: SlotOverrides;\n /** Theme config. Pass `mode` for controlled light/dark/system; omit `mode` for uncontrolled. */\n theme?: ThemeConfig;\n children: ReactNode;\n}) {\n const parentSlots = useContext(SlotsContext);\n const inheritedTheme = useContext(ThemeModeContext);\n const resolved = useMemo(() => ({ ...parentSlots, ...overrides }), [parentSlots, overrides]);\n\n const slotsTree = (\n <SlotsProviderContents slots={resolved} inheritedTheme={inheritedTheme} theme={theme}>\n {children}\n </SlotsProviderContents>\n );\n\n // Nest ThemeProvider only when this SlotsProvider owns a theme config, or when\n // there is no parent theme yet (outermost provider).\n const hasParentTheme = inheritedTheme !== undefined;\n if (theme !== undefined || !hasParentTheme) {\n return <ThemeProvider theme={theme}>{slotsTree}</ThemeProvider>;\n }\n\n return slotsTree;\n}\n\nfunction SlotsProviderContents({\n slots,\n children,\n inheritedTheme,\n theme,\n}: {\n slots: PublicAtomSlots;\n children: ReactNode;\n inheritedTheme: 'light' | 'dark' | undefined;\n theme?: ThemeConfig;\n}) {\n const modeFromProvider = useOptionalThemeMode();\n const controlledMode = theme?.mode === 'light' || theme?.mode === 'dark' ? theme.mode : undefined;\n const resolvedTheme = controlledMode ?? inheritedTheme ?? modeFromProvider;\n\n return (\n <ThemeModeContext.Provider value={resolvedTheme}>\n <SlotsContext.Provider value={slots}>{children}</SlotsContext.Provider>\n </ThemeModeContext.Provider>\n );\n}\n\n/** Resolves the atom implementation registered for `name` -- default unless overridden. */\nexport function useSlot<K extends keyof PublicAtomSlots>(name: K): PublicAtomSlots[K] {\n const slots = useContext(SlotsContext);\n return slots[name];\n}\n\n/** Whether the currently resolved slot is the SDK's stock implementation. */\nexport function useSlotIsDefault<K extends keyof PublicAtomSlots>(name: K): boolean {\n const slots = useContext(SlotsContext);\n return slots[name] === defaultSlots[name];\n}\n\n/** Resolves the light or dark theme mode supplied by the SDK consumer. */\nexport function useThemeMode(): 'light' | 'dark' {\n return useContext(ThemeModeContext) ?? 'light';\n}\n","import { lazy, type ComponentType } from 'react';\nimport { Accordion, AccordionDetails, AccordionSummary } from '../atoms/primitives/Accordion.js';\n\nimport { AgentStepsCard } from '../atoms/adapters/AgentStepsCardAdapter.js';\nimport { AskUserPrompt } from '../atoms/adapters/AskUserPromptAdapter.js';\nimport { McpAuthPrompt } from '../atoms/adapters/McpAuthPromptAdapter.js';\nimport { ReasoningCard } from '../atoms/adapters/ReasoningCardAdapter.js';\nimport { ResumeUnavailable } from '../atoms/ResumeUnavailable.js';\n\nimport { AgentCodeBlock } from '../atoms/agent-details/AgentCodeBlock.js';\nimport { AgentDetailsHeader } from '../atoms/agent-details/AgentDetailsHeader.js';\nimport { AgentDetailsPage } from '../atoms/agent-details/AgentDetailsPage.js';\nimport { AgentDetailsTabs } from '../atoms/agent-details/AgentDetailsTabs.js';\nimport { AgentDetailsUnavailable } from '../atoms/agent-details/AgentDetailsUnavailable.js';\nimport { AgentMetricCard } from '../atoms/agent-details/AgentMetricCard.js';\nimport { AgentMetricsTimeRangeFilter } from '../atoms/agent-details/AgentMetricsTimeRangeFilter.js';\nimport { AgentMetricsView } from '../atoms/agent-details/AgentMetricsView.js';\nimport { AgentOverviewCard } from '../atoms/agent-details/AgentOverviewCard.js';\nimport { AgentSessionDetailHeader } from '../atoms/agent-details/AgentSessionDetailHeader.js';\nimport { AgentSessionListRow } from '../atoms/agent-details/AgentSessionListRow.js';\nimport { AgentSessionMetricsStrip } from '../atoms/agent-details/AgentSessionMetricsStrip.js';\nimport { AgentSessionsFilters } from '../atoms/agent-details/AgentSessionsFilters.js';\nimport { AgentSessionTurnHeader } from '../atoms/agent-details/AgentSessionTurnHeader.js';\nimport { SessionsPage } from '../atoms/agent-details/SessionsPage.js';\nimport type {\n AgentCodeSnippetsProps,\n AgentMetricChartProps,\n AgentOverviewProps,\n AgentSessionEventTimelineChartProps,\n AgentSessionEventTimelineProps,\n AgentSessionsProps,\n} from '../atoms/agent-details/types.js';\nimport { AgentLibraryRow, AgentsLibrary } from '../atoms/AgentsLibrary.js';\nimport { AgentsLibraryButton } from '../atoms/AgentsLibraryButton.js';\nimport { AssistantMessageBubble } from '../atoms/AssistantMessageBubble.js';\nimport { AttachmentCard } from '../atoms/AttachmentCard.js';\nimport { AttachmentPickerButton } from '../atoms/AttachmentPickerButton.js';\nimport { AttachmentPreviewDialog } from '../atoms/AttachmentPreviewDialog.js';\nimport { ChatFileDownload } from '../atoms/ChatFileDownload.js';\nimport { ClearChatButton } from '../atoms/ClearChatButton.js';\nimport { CodeEditor } from '../atoms/CodeEditor.js';\nimport { ComposerLeftSection, ComposerRightSection, ComposerSendButton } from '../atoms/ComposerSections.js';\nimport { ComposerShell } from '../atoms/ComposerShell.js';\nimport { AgentConfigEditors } from '../atoms/draft/AgentConfigEditors.js';\nimport { AgentConfigPanel, AgentConfigSection } from '../atoms/draft/AgentConfigPanel.js';\nimport { AgentInstructionsDrawer } from '../atoms/draft/AgentInstructionsDrawer.js';\nimport { AgentMcpEditorContent } from '../atoms/draft/AgentMcpEditorContent.js';\nimport { AgentModelConfigModal } from '../atoms/draft/AgentModelConfigModal.js';\nimport { AgentModelEditorContent } from '../atoms/draft/AgentModelEditorContent.js';\nimport { AgentModelSettingsContent } from '../atoms/draft/AgentModelSettingsContent.js';\nimport { AgentResourceConfigModal } from '../atoms/draft/AgentResourceConfigModal.js';\nimport { AgentResourceEditorContent } from '../atoms/draft/AgentResourceEditorContent.js';\nimport { AgentRuntimeConfigFields } from '../atoms/draft/AgentRuntimeConfigFields.js';\nimport { AgentRuntimeConfigModal } from '../atoms/draft/AgentRuntimeConfigModal.js';\nimport { AgentRuntimeEditorContent } from '../atoms/draft/AgentRuntimeEditorContent.js';\nimport { AgentSkillsEditorContent } from '../atoms/draft/AgentSkillsEditorContent.js';\nimport { DraftAgentConfigTrigger } from '../atoms/draft/DraftAgentConfigTrigger.js';\nimport { DraftCapabilitiesPanel } from '../atoms/draft/DraftCapabilitiesPanel.js';\nimport { DraftComposerLeftSection, DraftComposerRightSection } from '../atoms/draft/DraftComposerSections.js';\nimport { CatalogRow, ConnectorConnectButton, DraftCompositeSelector } from '../atoms/draft/DraftCompositeSelector.js';\nimport { DraftModelSelector } from '../atoms/draft/DraftModelSelector.js';\nimport { HistoryLoader } from '../atoms/HistoryLoader.js';\nimport { Markdown } from '../atoms/Markdown.js';\nimport { MessageActionBar } from '../atoms/MessageActionBar.js';\nimport { MessageErrorBanner } from '../atoms/MessageErrorBanner.js';\nimport { MessageIndicator } from '../atoms/MessageIndicator.js';\nimport { MessageTimestamp } from '../atoms/MessageTimestamp.js';\nimport { MonacoEditorCore } from '../atoms/MonacoEditorCore.js';\nimport { OpenUiFenceBlock } from '../atoms/OpenUiFenceBlock.js';\nimport { SandboxArtifactDownload } from '../atoms/SandboxArtifactDownload.js';\nimport { SandboxToolCallCard } from '../atoms/SandboxToolCallCard.js';\nimport { SaveAgentButton } from '../atoms/SaveAgentButton.js';\nimport { SaveAgentForm } from '../atoms/SaveAgentForm.js';\nimport { SaveAgentFormFields } from '../atoms/SaveAgentFormFields.js';\nimport { SchedulesButton } from '../atoms/SchedulesButton.js';\nimport { ScrollToBottomButton } from '../atoms/ScrollToBottomButton.js';\nimport { SelectAgentEmptyState } from '../atoms/SelectAgentEmptyState.js';\nimport { SessionsBrowserButton } from '../atoms/SessionsBrowserButton.js';\nimport { ShellActionsActionSlot } from '../atoms/ShellActionsActionSlot.js';\nimport { MessageListSkeleton } from '../atoms/Skeletons.js';\nimport { SubAgentCard } from '../atoms/SubAgentCard.js';\nimport { SyntaxHighlighter } from '../atoms/SyntaxHighlighter.js';\nimport {\n ThreadListEmptyState,\n ThreadListNewButton,\n ThreadListRowSkeleton,\n ThreadListShell,\n} from '../atoms/ThreadListMisc.js';\nimport { ThreadListRow } from '../atoms/ThreadListRow.js';\nimport { MessageGroup, ThreadComposerAreaShell, ThreadRootShell, ThreadViewportShell } from '../atoms/ThreadShell.js';\nimport { Toast, ToastStack } from '../atoms/Toast.js';\nimport { ToolApprovalBar } from '../atoms/ToolApprovalBar.js';\nimport { ToolCallCard } from '../atoms/ToolCallCard.js';\nimport { ToolCallContentBlock } from '../atoms/ToolCallContentBlock.js';\nimport { ToolGroupCard } from '../atoms/ToolGroupCard.js';\nimport { UserMessageActionBar } from '../atoms/UserMessageActionBar.js';\nimport { UserMessageBubble } from '../atoms/UserMessageBubble.js';\nimport { UserMessageEdit } from '../atoms/UserMessageEdit.js';\nimport { WelcomeScreen } from '../atoms/WelcomeScreen.js';\nimport { AgentMetricsContainer } from '../containers/AgentMetricsContainer.js';\nimport { AgentSessionTimelineContainer } from '../containers/AgentSessionTimelineContainer.js';\nimport { BrandLogo } from './brand.js';\nimport type { AtomSlots } from './SlotsProvider.js';\n\nconst AgentOverview: ComponentType<AgentOverviewProps> = lazy(() => import('../atoms/agent-details/AgentOverview.js'));\nconst AgentSessions: ComponentType<AgentSessionsProps> = lazy(async () => {\n const mod = await import('../atoms/agent-details/AgentSessions.js');\n return { default: mod.AgentSessions };\n});\nconst AgentCodeSnippets: ComponentType<AgentCodeSnippetsProps> = lazy(\n () => import('../atoms/agent-details/AgentCodeSnippets.js'),\n);\nconst AgentSessionEventTimeline: ComponentType<AgentSessionEventTimelineProps> = lazy(async () => {\n const mod = await import('../atoms/agent-details/AgentSessionEventTimeline.js');\n return { default: mod.AgentSessionEventTimeline };\n});\nconst AgentSessionEventTimelineChart: ComponentType<AgentSessionEventTimelineChartProps> = lazy(async () => {\n const mod = await import('../atoms/agent-details/AgentSessionEventTimelineChart.js');\n return { default: mod.AgentSessionEventTimelineChart };\n});\nconst AgentMetricChart: ComponentType<AgentMetricChartProps> = lazy(async () => {\n const mod = await import('../atoms/agent-details/AgentMetricChart.js');\n return { default: mod.AgentMetricChart };\n});\n\n// ponytail: primitives stay CSS/token-styled (not slots) — see docs/customization.md.\n// import { Button } from \"../atoms/primitives/Button.js\";\n// import { Dialog, Modal } from \"../atoms/primitives/Dialog.js\";\n// import { IconButton } from \"../atoms/primitives/IconButton.js\";\n// import { Skeleton } from \"../atoms/primitives/Skeleton.js\";\n// import { LightTooltip } from \"../atoms/primitives/Tooltip.js\";\n// import { Avatar, AvatarFallback, AvatarImage } from \"../atoms/primitives/Avatar.js\";\n\n/** Default slot implementations. Feature atoms + chrome; primitives via theme/CSS. */\nexport const defaultSlots = {\n Accordion,\n AccordionSummary,\n AccordionDetails,\n BrandLogo,\n ComposerShell,\n ComposerLeftSection,\n ComposerRightSection,\n ComposerSendButton,\n DraftComposerLeftSection,\n DraftComposerRightSection,\n DraftAgentConfigTrigger,\n DraftCapabilitiesPanel,\n AgentConfigEditors,\n AgentInstructionsDrawer,\n AgentModelEditorContent,\n AgentModelSettingsContent,\n AgentMcpEditorContent,\n AgentModelConfigModal,\n AgentResourceEditorContent,\n AgentResourceConfigModal,\n AgentSkillsEditorContent,\n AgentConfigPanel,\n AgentConfigSection,\n AgentRuntimeConfigFields,\n AgentRuntimeConfigModal,\n AgentRuntimeEditorContent,\n DraftCompositeSelector,\n CatalogRow,\n ConnectorConnectButton,\n DraftModelSelector,\n AssistantMessageBubble,\n UserMessageBubble,\n UserMessageEdit,\n UserMessageActionBar,\n MessageActionBar,\n MessageErrorBanner,\n MessageIndicator,\n MessageTimestamp,\n Markdown,\n SyntaxHighlighter,\n OpenUiFenceBlock,\n SandboxArtifactDownload,\n ChatFileDownload,\n MonacoEditorCore,\n CodeEditor,\n WelcomeScreen,\n ToolCallCard,\n ToolCallContentBlock,\n ToolApprovalBar,\n ToolGroupCard,\n SubAgentCard,\n SandboxToolCallCard,\n AgentStepsCard,\n ReasoningCard,\n AskUserPrompt,\n McpAuthPrompt,\n ResumeUnavailable,\n AttachmentCard,\n AttachmentPreviewDialog,\n AttachmentPickerButton,\n ScrollToBottomButton,\n ThreadListRow,\n ThreadListNewButton,\n AgentsLibrary,\n AgentLibraryRow,\n AgentsLibraryButton,\n SessionsBrowserButton,\n AgentDetailsPage,\n AgentDetailsHeader,\n AgentDetailsTabs,\n AgentDetailsUnavailable,\n AgentOverview,\n AgentOverviewCard,\n AgentMetrics: AgentMetricsContainer,\n AgentMetricsView,\n AgentMetricsTimeRangeFilter,\n AgentMetricCard,\n AgentMetricChart,\n AgentSessionDetailHeader,\n AgentSessionsFilters,\n SessionsPage,\n AgentSessionEventTimeline,\n AgentSessionEventTimelineChart,\n AgentSessionListRow,\n AgentSessionMetricsStrip,\n AgentSessionTimelineContainer,\n AgentSessionTurnHeader,\n AgentSessions,\n AgentCodeSnippets,\n AgentCodeBlock,\n SchedulesButton,\n SaveAgentButton,\n SaveAgentForm,\n SaveAgentFormFields,\n SelectAgentEmptyState,\n ClearChatButton,\n ThreadListRowSkeleton,\n ThreadListEmptyState,\n ThreadListShell,\n HistoryLoader,\n MessageListSkeleton,\n ThreadRootShell,\n ThreadViewportShell,\n ThreadComposerAreaShell,\n MessageGroup,\n Toast,\n ToastStack,\n ShellActionsActionSlot,\n} satisfies AtomSlots;\n","import React from 'react';\n\nimport { Button, type ButtonProps } from './Button.js';\n\nexport type IconButtonProps = Omit<ButtonProps, 'size' | 'children'> & {\n 'aria-label': string;\n tooltip?: string;\n children: React.ReactNode;\n};\n\nexport const IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(\n ({ tooltip, children, ...props }, ref) => {\n return (\n <Button ref={ref} size=\"icon\" title={tooltip} {...props}>\n {children}\n </Button>\n );\n },\n);\n\nIconButton.displayName = 'IconButton';\n","import type { KeyboardEvent } from 'react';\nimport { Icon } from '../../icons/Icon.js';\nimport { cn } from '../lib/cn.js';\nimport { Button } from '../primitives/Button.js';\nimport { IconButton } from '../primitives/IconButton.js';\n\nexport type Question = {\n id: string;\n question: string;\n options: string[];\n};\n\nexport type AnsweredQuestion = Question & {\n answer: string;\n isCustom: boolean;\n};\n\nexport type AskUserAnswerDraft = {\n radioValue: string;\n custom: string;\n};\n\nexport const ASK_USER_CUSTOM_OPTION = '__tfy_ask_user_question_custom__';\n\nexport type AskUserPromptProps = {\n questions: Question[];\n answeredQuestions?: AnsweredQuestion[];\n onSubmit: () => void;\n currentQuestion?: Question;\n currentQuestionIndex?: number;\n currentAnswer?: AskUserAnswerDraft;\n totalQuestions?: number;\n isMultiQuestion?: boolean;\n isLastQuestion?: boolean;\n allQuestionsAnswered?: boolean;\n isSubmitDisabled?: boolean;\n isSubmitAllDisabled?: boolean;\n onCurrentQuestionIndexChange?: (index: number) => void;\n onCurrentAnswerChange?: (questionId: string, update: Partial<AskUserAnswerDraft>) => void;\n readOnly?: boolean;\n dataTestPrefix?: string;\n className?: string;\n};\n\nexport function AskUserPrompt({\n questions,\n answeredQuestions = [],\n onSubmit,\n currentQuestion,\n currentQuestionIndex = 0,\n currentAnswer = { radioValue: '', custom: '' },\n totalQuestions = questions.length,\n isMultiQuestion: isMultiQuestionProp,\n isLastQuestion: isLastQuestionProp,\n allQuestionsAnswered = false,\n isSubmitDisabled = true,\n isSubmitAllDisabled = true,\n onCurrentQuestionIndexChange,\n onCurrentAnswerChange,\n readOnly = false,\n dataTestPrefix,\n className,\n}: AskUserPromptProps) {\n const isMultiQuestion = isMultiQuestionProp ?? totalQuestions > 1;\n const isLastQuestion = isLastQuestionProp ?? currentQuestionIndex === totalQuestions - 1;\n\n if (questions.length === 0) {\n if (answeredQuestions.length === 0) return null;\n return (\n <div className={cn('aui-ask-user-prompt mt-2 flex flex-col gap-3', className)}>\n {answeredQuestions.map(q => (\n <div key={q.id} data-testid={dataTestPrefix ? `${dataTestPrefix}-answered-${q.id}` : undefined}>\n <div className=\"flex items-center justify-between rounded-t-lg border border-primary-button-bg/30 bg-primary-button-bg/10 px-4 py-2\">\n <div className=\"font-sans text-xs font-medium text-primary-button-bg\">{q.question}</div>\n <div className=\"flex h-fit shrink-0 items-center gap-1 rounded border border-primary-button-bg/40 bg-primary-bg px-2 py-0.5 text-[0.6875rem] font-medium text-text-secondary\">\n <span className=\"leading-tight\">Answered</span>\n </div>\n </div>\n <div className=\"flex items-center gap-2 rounded-b-lg border border-t-0 border-border px-4 py-3\">\n <Icon name=\"circle-check\" size=\"0.875em\" className=\"shrink-0 text-primary-button-bg\" />\n <span className=\"font-sans text-[0.8125rem] font-medium text-text-primary\">\n {q.isCustom ? `Other: ${q.answer}` : q.answer}\n </span>\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n if (!currentQuestion) return null;\n\n const isCustomSelected = currentAnswer.radioValue === ASK_USER_CUSTOM_OPTION;\n const hasOptions = currentQuestion.options.length > 0;\n\n const handleOptionSelect = (value: string) => {\n if (readOnly) return;\n onCurrentAnswerChange?.(currentQuestion.id, { radioValue: value });\n };\n\n const goToNextQuestion = () => onCurrentQuestionIndexChange?.(currentQuestionIndex + 1);\n const isNextStep = isMultiQuestion && !isLastQuestion;\n\n const handleAnswerKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Enter' || event.shiftKey || readOnly) return;\n event.preventDefault();\n if (isNextStep) {\n if (!isSubmitDisabled) goToNextQuestion();\n return;\n }\n if (!isSubmitAllDisabled) onSubmit();\n };\n\n const answerInput = (\n <textarea\n rows={1}\n value={currentAnswer.custom}\n disabled={readOnly || !currentQuestion.id}\n onFocus={() =>\n onCurrentAnswerChange?.(currentQuestion.id, {\n radioValue: ASK_USER_CUSTOM_OPTION,\n })\n }\n onChange={e => {\n onCurrentAnswerChange?.(currentQuestion.id, {\n custom: e.target.value,\n radioValue: ASK_USER_CUSTOM_OPTION,\n });\n }}\n placeholder={hasOptions ? 'Other' : 'Type your answer'}\n aria-label={hasOptions ? 'Other (custom answer)' : 'Your answer'}\n className={cn(\n 'field-sizing-content min-h-6 max-h-[3lh] w-full resize-none overflow-y-auto rounded border border-input-border bg-primary-bg px-2 py-0.5 text-[0.8125rem] leading-snug text-text-primary',\n 'placeholder:text-[0.8125rem] focus:outline-none focus:ring-1 focus:ring-focus-ring',\n )}\n />\n );\n\n return (\n <div\n className={cn('aui-ask-user-prompt', className)}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-question-card` : undefined}\n >\n <div className=\"flex items-center justify-between rounded-t-lg border border-primary-button-bg/30 bg-primary-button-bg/10 px-4 py-2\">\n <div className=\"font-sans text-sm font-medium text-primary-button-bg\">\n {totalQuestions > 1 ? 'Questions' : currentQuestion.question}\n </div>\n {readOnly ? (\n <div className=\"flex h-fit shrink-0 items-center gap-1 rounded border border-primary-button-bg/40 bg-primary-bg px-2 py-0.5 text-[0.6875rem] font-medium text-text-secondary\">\n <span className=\"leading-tight\">Unanswered</span>\n </div>\n ) : null}\n {!readOnly && isMultiQuestion && (\n <div className=\"flex items-center gap-1\">\n <IconButton\n aria-label=\"Previous question\"\n variant=\"ghost\"\n onClick={() => onCurrentQuestionIndexChange?.(Math.max(0, currentQuestionIndex - 1))}\n disabled={currentQuestionIndex === 0}\n className=\"text-text-primary\"\n >\n <Icon name=\"chevron-left\" size=\"0.75em\" />\n </IconButton>\n <IconButton\n aria-label=\"Next question\"\n variant=\"ghost\"\n onClick={() => onCurrentQuestionIndexChange?.(Math.min(totalQuestions - 1, currentQuestionIndex + 1))}\n disabled={currentQuestionIndex === totalQuestions - 1}\n className=\"text-text-primary\"\n >\n <Icon name=\"chevron-right\" size=\"0.75em\" />\n </IconButton>\n <div className=\"ml-1 rounded bg-primary-button-bg/20 px-2 py-1 font-sans text-xs font-medium text-text-primary\">\n <span> {currentQuestionIndex + 1} </span> <span> of </span> <span> {totalQuestions} </span>\n </div>\n </div>\n )}\n </div>\n\n <div className=\"flex flex-col gap-4 rounded-b-lg border border-t-0 border-border px-4 py-3\">\n <div className=\"flex flex-col gap-3\">\n {isMultiQuestion && (\n <div className=\"font-sans text-xs font-medium text-text-primary\">\n {currentQuestion.question || 'What would you like to do?'}\n </div>\n )}\n <div\n className=\"flex flex-col gap-3 overflow-visible\"\n role={hasOptions ? 'radiogroup' : undefined}\n aria-label={hasOptions ? currentQuestion.question || 'Answer options' : undefined}\n onKeyDown={handleAnswerKeyDown}\n >\n {currentQuestion.options.map((opt, index) => {\n const isSelected = currentAnswer.radioValue === opt;\n return (\n <label\n key={`${index}:${opt}`}\n className={cn(\n 'flex w-fit items-start gap-x-2 overflow-visible',\n readOnly ? 'cursor-default' : 'cursor-pointer',\n )}\n >\n <input\n type=\"radio\"\n value={opt}\n disabled={readOnly || !currentQuestion.id}\n name={`ask-user-question-option-${currentQuestion.id}`}\n checked={isSelected}\n onChange={() => handleOptionSelect(opt)}\n className=\"mt-0.5 accent-primary-button-bg\"\n />\n <span className=\"min-w-0 font-sans text-[0.8125rem] font-medium leading-snug text-text-primary\">\n {opt}\n </span>\n </label>\n );\n })}\n\n {hasOptions ? (\n <label\n className={cn(\n 'flex items-start gap-x-2 overflow-visible',\n readOnly ? 'cursor-default' : 'cursor-pointer',\n )}\n >\n <input\n type=\"radio\"\n disabled={readOnly || !currentQuestion.id}\n value={ASK_USER_CUSTOM_OPTION}\n name={`ask-user-question-option-${currentQuestion.id}`}\n checked={isCustomSelected}\n onChange={() => handleOptionSelect(ASK_USER_CUSTOM_OPTION)}\n className=\"mt-1 accent-primary-button-bg\"\n />\n <div className=\"min-w-0 flex-1\">{answerInput}</div>\n </label>\n ) : (\n answerInput\n )}\n </div>\n </div>\n\n {!readOnly && (\n <div\n className={cn('flex items-center', {\n 'justify-between': isMultiQuestion,\n 'justify-start': !isMultiQuestion,\n })}\n >\n {isMultiQuestion && isLastQuestion && !allQuestionsAnswered ? (\n <span className=\"text-xs font-medium text-failure-bg\">Answer all questions to submit</span>\n ) : (\n <span />\n )}\n {isNextStep ? (\n <Button.Primary type=\"button\" size=\"small\" onClick={goToNextQuestion} disabled={isSubmitDisabled}>\n Next\n </Button.Primary>\n ) : (\n <Button.Primary type=\"button\" size=\"small\" onClick={onSubmit} disabled={isSubmitAllDisabled}>\n Submit\n </Button.Primary>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AskUserPrompt: typeof AskUserPrompt;\n }\n}\n","import { Icon } from '../../icons/Icon.js';\nimport { cn } from '../lib/cn.js';\nimport { Button } from '../primitives/Button.js';\n\nexport type McpServer = {\n id: string;\n name: string;\n};\n\nexport type McpAuthPromptProps = {\n servers: McpServer[];\n onConnect: (serverId: string) => void;\n onContinue?: () => void;\n readOnly?: boolean;\n title?: string;\n dataTestPrefix?: string;\n className?: string;\n};\n\nconst DEFAULT_TITLE = 'MCP Authentication Required';\n\nexport function McpAuthPrompt({\n servers,\n onConnect,\n onContinue,\n readOnly = false,\n title = DEFAULT_TITLE,\n dataTestPrefix,\n className,\n}: McpAuthPromptProps) {\n if (servers.length === 0) return null;\n\n return (\n <div\n className={cn('aui-mcp-auth-prompt mt-2 overflow-hidden rounded-lg border border-border', className)}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-mcp-auth-card` : undefined}\n >\n <div className=\"border-b border-primary-button-bg/30 bg-primary-button-bg/10 px-4 py-2\">\n <div className=\"font-sans text-sm font-medium text-primary-button-bg\">{title}</div>\n </div>\n <div className=\"flex flex-col gap-3 bg-primary-bg px-4 py-3\">\n {servers.map(server => (\n <div key={server.id} className=\"flex items-center justify-between gap-4\">\n <div className=\"flex min-w-0 items-center gap-1.5 text-sm\">\n <span className=\"shrink-0 font-medium text-text-secondary\">MCP Server Name</span>\n <span className=\"shrink-0 text-xs font-semibold text-text-secondary\">:</span>\n <span className=\"truncate font-sans font-medium text-text-primary\">{server.name}</span>\n </div>\n <Button.Primary size=\"small\" disabled={readOnly} onClick={() => onConnect(server.id)} className=\"shrink-0\">\n Connect\n <Icon name=\"external-link\" size=\"0.75em\" className=\"ml-1\" />\n </Button.Primary>\n </div>\n ))}\n {onContinue && (\n <div className=\"flex justify-end border-t border-border pt-2\">\n <Button.Primary size=\"small\" disabled={readOnly} onClick={onContinue}>\n Continue\n </Button.Primary>\n </div>\n )}\n </div>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n McpAuthPrompt: typeof McpAuthPrompt;\n }\n}\n","import { cn } from '../lib/cn.js';\n\nexport type StatusDotProps = {\n className?: string;\n colorClassName?: string;\n};\n\nexport function StatusDot({ className, colorClassName = 'bg-warning-bg' }: StatusDotProps) {\n return (\n <span aria-hidden className={cn('relative inline-flex h-2 w-2 shrink-0', className)}>\n <span\n className={cn(\n 'pointer-events-none absolute inline-flex h-full w-full rounded-full opacity-75 motion-safe:animate-ping motion-reduce:animate-none',\n colorClassName,\n )}\n />\n <span className={cn('relative inline-flex h-2 w-2 rounded-full', colorClassName)} />\n </span>\n );\n}\n","import { Icon } from '../../icons/Icon.js';\nimport { cn } from '../lib/cn.js';\n\nexport type StepIconBoxProps = {\n icon: string;\n iconSize?: string | number;\n variant?: 'primary' | 'muted';\n className?: string;\n iconClassName?: string;\n};\n\nexport function StepIconBox({\n icon,\n iconSize = '0.75em',\n variant = 'primary',\n className,\n iconClassName,\n}: StepIconBoxProps) {\n return (\n <div className={cn('flex size-5 shrink-0 items-center justify-center', className)}>\n <Icon\n name={icon}\n size={iconSize}\n className={cn(variant === 'primary' ? 'text-primary-button-bg' : 'text-text-secondary', iconClassName)}\n />\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { cn } from '../lib/cn.js';\nimport { Spinner } from '../primitives/Spinner.js';\nimport { StatusDot } from './StatusDot.js';\nimport { StepIconBox } from './StepIconBox.js';\n\nexport type AgentStepStatus = 'idle' | 'running' | 'success' | 'error';\n\nexport type AgentStepRowProps = {\n icon: string;\n iconVariant?: 'primary' | 'muted';\n iconClassName?: string;\n iconSize?: string | number;\n title?: ReactNode;\n label?: string;\n body?: ReactNode;\n expandable?: boolean;\n expanded?: boolean;\n onToggle?: () => void;\n status?: AgentStepStatus;\n statusText?: string;\n showSpinner?: boolean;\n showConnector?: boolean;\n showContentConnector?: boolean;\n showPersistentContentConnector?: boolean;\n showChevronColumn?: boolean;\n children?: ReactNode;\n persistentChildren?: ReactNode;\n dataTestPrefix?: string;\n className?: string;\n titleClassName?: string;\n align?: 'center' | 'start';\n};\n\nexport function AgentStepRow({\n icon,\n iconVariant = 'primary',\n iconClassName,\n iconSize,\n title,\n label,\n body,\n expandable = false,\n expanded = false,\n onToggle,\n status = 'idle',\n statusText,\n showSpinner = false,\n showConnector = false,\n showContentConnector = true,\n showPersistentContentConnector = true,\n showChevronColumn = true,\n children,\n persistentChildren,\n dataTestPrefix,\n className,\n titleClassName,\n align = 'center',\n}: AgentStepRowProps) {\n const hasChildren = !!children;\n const hasPersistentChildren = !!persistentChildren;\n const showExpandChevron = expandable && onToggle != null;\n const isRunning = status === 'running';\n const isSuccess = status === 'success';\n const isError = status === 'error';\n const alignStart = align === 'start';\n\n return (\n <div\n className={cn('flex min-w-0 flex-col', className)}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-step-row` : undefined}\n >\n <div className={cn('flex gap-2', alignStart ? 'items-start' : 'items-center')}>\n {showChevronColumn &&\n (showExpandChevron ? (\n <button\n type=\"button\"\n className=\"flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center\"\n onClick={onToggle}\n aria-expanded={expanded}\n aria-label={expanded ? 'Collapse step' : 'Expand step'}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-chevron` : undefined}\n >\n <Icon\n name=\"chevron-right\"\n size=\"0.625rem\"\n className={cn(\n 'shrink-0 text-text-secondary transition-transform duration-300',\n expanded && 'rotate-90',\n )}\n />\n </button>\n ) : (\n <div className=\"w-5 shrink-0\" />\n ))}\n\n <div className={cn('relative flex shrink-0 flex-col items-center', alignStart ? 'self-start' : 'self-center')}>\n <StepIconBox icon={icon} variant={iconVariant} iconClassName={iconClassName} iconSize={iconSize} />\n </div>\n\n <div\n className={cn('flex min-w-0 flex-1 flex-col justify-center', {\n 'cursor-pointer': showExpandChevron,\n })}\n onClick={showExpandChevron ? onToggle : undefined}\n >\n {label && <span className=\"text-xs font-medium leading-none text-text-secondary\">{label}</span>}\n {title && (\n <div className=\"flex min-w-0 items-center gap-2\">\n <span\n className={cn(\n 'min-w-0 truncate font-sans text-[0.75rem] font-medium leading-5 text-text-primary',\n titleClassName,\n )}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-title` : undefined}\n >\n {title}\n </span>\n {isSuccess && (\n <Icon\n name=\"circle-check\"\n size=\"0.875rem\"\n className=\"shrink-0 text-success-bg\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-success-icon` : undefined}\n />\n )}\n </div>\n )}\n {body && (\n <div\n className=\"mt-1 font-sans text-sm text-text-secondary\"\n onClick={e => {\n if (expanded && showExpandChevron) e.stopPropagation();\n }}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-body` : undefined}\n >\n {body}\n </div>\n )}\n </div>\n\n <div className={cn('flex shrink-0 items-center gap-2', alignStart ? 'self-start' : 'self-center')}>\n {statusText && (\n <span className=\"flex items-center gap-1\">\n {isRunning && <StatusDot />}\n <span className=\"font-sans text-xs font-medium leading-4 text-text-secondary\">{statusText}</span>\n </span>\n )}\n {!statusText && isRunning && (\n <>\n {showSpinner ? (\n <div className=\"ml-1\">\n <Spinner size={12} />\n </div>\n ) : (\n <StatusDot />\n )}\n </>\n )}\n {isError && (\n <Icon\n name=\"circle-xmark\"\n size=\"0.875rem\"\n className=\"text-failure-bg\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-error-icon` : undefined}\n />\n )}\n </div>\n </div>\n\n {expanded && hasChildren && (\n <div\n className=\"mt-2 flex min-w-0 gap-3\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-expanded-content` : undefined}\n >\n {showChevronColumn && <div className=\"w-5 shrink-0\" />}\n {showContentConnector && showConnector && (\n <div className=\"flex w-3 shrink-0 justify-center\">\n <div className=\"w-px bg-border\" />\n </div>\n )}\n <div className=\"min-w-0 flex-1\">{children}</div>\n </div>\n )}\n\n {hasPersistentChildren && (\n <div\n className={cn('flex min-w-0', showPersistentContentConnector ? 'gap-3' : 'gap-2')}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-persistent-content` : undefined}\n >\n {showChevronColumn && <div className=\"w-5 shrink-0\" />}\n {showPersistentContentConnector && showConnector && (\n <div className=\"flex w-3 shrink-0 justify-center\">\n <div className=\"w-px bg-border\" />\n </div>\n )}\n <div className=\"min-w-0 flex-1\">{persistentChildren}</div>\n </div>\n )}\n </div>\n );\n}\n","import { useSlot } from '../../theme/SlotsProvider.js';\nimport { AgentStepRow } from '../agent-chat/AgentStepRow.js';\nimport { cn } from '../lib/cn.js';\n\nexport type ReasoningCardProps = {\n content: string;\n isStreaming?: boolean;\n expanded?: boolean;\n onToggle?: () => void;\n isMultiLine?: boolean;\n reasoningTimeText?: string | null;\n previewText?: string;\n headingText?: string;\n contentRef?: (node: HTMLDivElement | null) => void;\n dataTestPrefix?: string;\n className?: string;\n};\n\nexport function ReasoningCard({\n content,\n isStreaming = false,\n expanded = false,\n onToggle,\n isMultiLine = false,\n reasoningTimeText,\n headingText = 'Reasoning',\n contentRef,\n dataTestPrefix,\n className,\n}: ReasoningCardProps) {\n const Markdown = useSlot('Markdown');\n const isShortText = !isStreaming && content.length > 0 && !isMultiLine;\n const isExpandable = isShortText || isMultiLine || isStreaming;\n const status = isStreaming ? 'running' : content.length > 0 ? 'success' : 'idle';\n const title = isStreaming ? headingText : (reasoningTimeText ?? headingText);\n const showContent = expanded && content.length > 0;\n\n return (\n <div\n className={cn('aui-reasoning-card mt-2 flex min-w-0 flex-col', className)}\n data-testid={\n dataTestPrefix ? `${dataTestPrefix}-${isShortText ? 'reasoning-inline' : 'reasoning-accordion'}` : undefined\n }\n >\n <AgentStepRow\n icon={isStreaming ? 'brain' : 'brain-regular'}\n iconVariant=\"primary\"\n title={title}\n expandable={isExpandable}\n expanded={expanded}\n onToggle={onToggle}\n status={status}\n dataTestPrefix={dataTestPrefix}\n >\n {showContent && (\n <div\n ref={contentRef}\n className=\"py-2 pt-0 font-sans text-sm font-normal text-text-secondary\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-content` : undefined}\n >\n <Markdown content={content} className=\"font-sans text-sm text-text-secondary\" />\n </div>\n )}\n </AgentStepRow>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n ReasoningCard: typeof ReasoningCard;\n }\n}\n","'use client';\n\nimport { cn } from './lib/cn.js';\n\nexport type ResumeUnavailableProps = {\n className?: string;\n};\n\n/**\n * Inline waiting notice when a response is still generating but this backend\n * cannot stream it live.\n */\nexport function ResumeUnavailable({ className }: ResumeUnavailableProps) {\n return (\n <p\n role=\"status\"\n aria-live=\"polite\"\n className={cn('text-text-secondary flex items-center gap-2 py-2 text-sm leading-snug', className)}\n >\n <span className=\"animate-pulse font-sans\" aria-hidden>\n {'●'}\n </span>\n Still generating a response. It'll appear here when ready.\n </p>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ResumeUnavailable: typeof ResumeUnavailable;\n }\n}\n","'use client';\n\nimport { useSlot, useThemeMode } from '../../theme/SlotsProvider.js';\nimport type { AgentCodeBlockProps } from './types.js';\n\nexport function AgentCodeBlock({ code, language }: AgentCodeBlockProps) {\n const SyntaxHighlighter = useSlot('SyntaxHighlighter');\n const mode = useThemeMode();\n return (\n <SyntaxHighlighter\n code={code}\n language={language}\n showLineNumbers\n darkTheme={mode === 'dark'}\n // Stretch the highlighted `pre` past the code so its theme background fills the panel.\n className=\"m-0 flex min-h-full flex-col rounded-none [&>pre]:flex-1\"\n />\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentCodeBlock: typeof AgentCodeBlock;\n }\n}\n","'use client';\n\nimport { useState } from 'react';\n\nimport { useToasterOptional } from '../containers/ToasterContainer.js';\nimport { Icon } from '../icons/Icon.js';\nimport { useOptionalServer } from '../server/ServerContext.js';\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\nimport type { AgentSpec } from '../server/types.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { Button } from './primitives/Button.js';\nimport { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from './primitives/Dialog.js';\nimport { DropdownMenu, DropdownMenuItem, DropdownMenuSeparator } from './primitives/DropdownMenu.js';\n\n/** Immutable clone name for a library agent (`{name}-copy`). */\nexport function cloneAgentName(agentName: string): string {\n return `${agentName}-copy`;\n}\n\nexport type AgentOverflowMenuProps = {\n agentName: string;\n agentSpec?: AgentSpec;\n /** Edit / Clone / Delete when composer is enabled. */\n canMutate: boolean;\n canManageSchedules: boolean;\n onEdit: () => void;\n onManageSchedules?: () => void;\n /** After successful delete (e.g. leave agent details). */\n onDeleted?: () => void;\n};\n\ntype PendingAction = 'clone' | 'delete' | null;\n\nexport function AgentOverflowMenu({\n agentName,\n agentSpec,\n canMutate,\n canManageSchedules,\n onEdit,\n onManageSchedules,\n onDeleted,\n}: AgentOverflowMenuProps) {\n const builder = useOptionalServer();\n const shell = useOptionalShellMode();\n const toaster = useToasterOptional();\n const [pending, setPending] = useState<PendingAction>(null);\n const [busy, setBusy] = useState(false);\n\n const canEditOrClone = canMutate && agentSpec != null;\n const showManageSchedules = canManageSchedules && onManageSchedules != null;\n const showMenu = canEditOrClone || showManageSchedules || canMutate;\n if (!showMenu) return null;\n\n const clonedName = cloneAgentName(agentName);\n\n const closePending = () => {\n if (busy) return;\n setPending(null);\n };\n\n const handleClone = async () => {\n if (builder == null || agentSpec == null) return;\n setBusy(true);\n try {\n await builder.saveAgent({\n agentName: clonedName,\n agentSpec,\n intent: 'create',\n });\n shell?.invalidateAgentsList();\n toaster?.showSuccess({\n title: 'Agent cloned',\n description: `Created “${clonedName}”.`,\n });\n setPending(null);\n } catch (caught) {\n toaster?.showError(caught);\n } finally {\n setBusy(false);\n }\n };\n\n const handleDelete = async () => {\n if (builder == null || typeof builder.deleteAgent !== 'function') return;\n setBusy(true);\n try {\n await builder.deleteAgent({ agentName });\n shell?.invalidateAgentsList();\n toaster?.showSuccess({\n title: 'Agent deleted',\n description: `“${agentName}” was deleted.`,\n });\n setPending(null);\n onDeleted?.();\n } catch (caught) {\n toaster?.showError(caught);\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <>\n <DropdownMenu\n align=\"end\"\n className=\"min-w-48\"\n trigger={\n <button\n type=\"button\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n aria-label={`Actions for ${agentName}`}\n >\n <Icon name=\"ellipsis-vertical\" />\n </button>\n }\n >\n {canEditOrClone ? (\n <DropdownMenuItem className=\"whitespace-nowrap\" onClick={onEdit}>\n <Icon name=\"pencil\" className=\"size-3.5\" />\n Edit\n </DropdownMenuItem>\n ) : null}\n {canEditOrClone ? (\n <DropdownMenuItem className=\"whitespace-nowrap\" onClick={() => setPending('clone')}>\n <Icon name=\"clone\" className=\"size-3.5\" />\n Clone\n </DropdownMenuItem>\n ) : null}\n {showManageSchedules ? (\n <DropdownMenuItem className=\"whitespace-nowrap\" onClick={onManageSchedules}>\n <Icon name=\"calendar-clock\" className=\"size-3.5\" />\n Manage Schedules\n </DropdownMenuItem>\n ) : null}\n {canMutate ? (\n <>\n {canEditOrClone || showManageSchedules ? <DropdownMenuSeparator /> : null}\n <DropdownMenuItem\n className=\"whitespace-nowrap text-failure-bg focus-visible:text-failure-bg\"\n onClick={() => setPending('delete')}\n >\n <Icon name=\"trash\" className=\"size-3.5\" />\n Delete\n </DropdownMenuItem>\n </>\n ) : null}\n </DropdownMenu>\n\n {pending === 'clone' ? (\n <Dialog open onOpenChange={open => !open && closePending()} aria-label=\"Clone agent\" className=\"max-w-md\">\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Clone agent?</DialogTitle>\n <p className=\"text-text-secondary text-sm\">\n This will create “{clonedName}” with the same configuration as “{agentName}”.\n </p>\n </DialogHeader>\n </DialogContent>\n <DialogFooter>\n <Button.Secondary type=\"button\" disabled={busy} onClick={closePending}>\n Cancel\n </Button.Secondary>\n <Button.Primary type=\"button\" disabled={busy || builder == null} onClick={() => void handleClone()}>\n Clone\n </Button.Primary>\n </DialogFooter>\n </Dialog>\n ) : null}\n\n {pending === 'delete' ? (\n <Dialog open onOpenChange={open => !open && closePending()} aria-label=\"Delete agent\" className=\"max-w-md\">\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Delete agent?</DialogTitle>\n <p className=\"text-text-secondary text-sm\">\n “{agentName}” will be permanently deleted. This cannot be undone.\n </p>\n </DialogHeader>\n </DialogContent>\n <DialogFooter>\n <Button.Secondary type=\"button\" disabled={busy} onClick={closePending}>\n Cancel\n </Button.Secondary>\n <Button.Destructive\n type=\"button\"\n disabled={busy || builder == null || typeof builder.deleteAgent !== 'function'}\n onClick={() => void handleDelete()}\n >\n Delete\n </Button.Destructive>\n </DialogFooter>\n </Dialog>\n ) : null}\n </>\n );\n}\n","'use client';\n\nimport { createContext, useCallback, useContext, useMemo, useState, type ReactNode } from 'react';\n\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { getErrorMessage } from '../utils/getErrorMessage.js';\n\nconst MAX_TOAST_DESCRIPTION_CHARS = 480;\nconst MAX_VISIBLE_TOASTS = 5;\nconst SUCCESS_TOAST_TTL_MS = 3000;\n\ntype ToastContent = { title: string; description?: string };\n\ntype ToastItem = ToastContent & { id: string; variant: 'error' | 'success' };\n\ntype ToasterContextValue = {\n showError: (error: unknown) => void;\n showSuccess: (content: ToastContent) => void;\n};\n\nconst ToasterContext = createContext<ToasterContextValue | null>(null);\n\nlet toastId = 0;\nfunction nextToastId(): string {\n toastId += 1;\n return `toast-${toastId}`;\n}\n\nfunction truncateDescription(text: string): string {\n if (text.length <= MAX_TOAST_DESCRIPTION_CHARS) return text;\n return `${text.slice(0, MAX_TOAST_DESCRIPTION_CHARS - 1)}…`;\n}\n\nfunction isHttpLikeError(error: unknown): error is Error & { statusCode?: number; body?: unknown } {\n return error instanceof Error && ('statusCode' in error || 'body' in error);\n}\n\nfunction normalizeError(error: unknown): ToastContent {\n if (isHttpLikeError(error)) {\n const statusCode = error.statusCode;\n if (statusCode != null || error.body != null) {\n const title = statusCode != null ? `Request failed (${statusCode})` : 'Request failed';\n const raw = getErrorMessage(error, 'The server returned an error.');\n return { title, description: truncateDescription(raw) };\n }\n }\n\n return {\n title: 'Something went wrong',\n description: truncateDescription(getErrorMessage(error, 'An unexpected error occurred.')),\n };\n}\n\nexport function ToasterProvider({ children }: { children: ReactNode }) {\n const Toast = useSlot('Toast');\n const ToastStack = useSlot('ToastStack');\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n\n const dismiss = useCallback((id: string) => {\n setToasts(prev => prev.filter(t => t.id !== id));\n }, []);\n\n const showError = useCallback((error: unknown) => {\n console.error('[trueforge-ui]', error);\n const item: ToastItem = { id: nextToastId(), variant: 'error', ...normalizeError(error) };\n setToasts(prev => [...prev, item].slice(-MAX_VISIBLE_TOASTS));\n }, []);\n\n const showSuccess = useCallback(\n (content: ToastContent) => {\n const id = nextToastId();\n const item: ToastItem = { id, variant: 'success', ...content };\n setToasts(prev => [...prev, item].slice(-MAX_VISIBLE_TOASTS));\n // Success is a transient confirmation — auto-dismiss so it doesn't linger. Errors persist\n // (a dev may need to read or copy them).\n if (typeof window !== 'undefined') {\n window.setTimeout(() => dismiss(id), SUCCESS_TOAST_TTL_MS);\n }\n },\n [dismiss],\n );\n\n const value = useMemo(() => ({ showError, showSuccess }), [showError, showSuccess]);\n\n return (\n <ToasterContext.Provider value={value}>\n {children}\n <ToastStack>\n {toasts.map(toast => (\n <Toast\n key={toast.id}\n title={toast.title}\n description={toast.description ?? ''}\n variant={toast.variant}\n open\n onOpenChange={open => {\n if (!open) dismiss(toast.id);\n }}\n />\n ))}\n </ToastStack>\n </ToasterContext.Provider>\n );\n}\n\nexport function useToaster(): ToasterContextValue {\n const context = useContext(ToasterContext);\n if (context == null) {\n throw new Error('useToaster must be used within ToasterProvider');\n }\n return context;\n}\n\n/** Same as `useToaster`, but returns `null` instead of throwing outside `ToasterProvider`. */\nexport function useToasterOptional(): ToasterContextValue | null {\n return useContext(ToasterContext);\n}\n","import React from 'react';\n\nimport { cn } from '../lib/cn.js';\n\nexport type DialogProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: React.ReactNode;\n className?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n};\n\nexport function Dialog({\n open,\n onOpenChange,\n children,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n}: DialogProps) {\n const ref = React.useRef<HTMLDialogElement>(null);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n if (open && !el.open) {\n el.showModal();\n } else if (!open && el.open) {\n el.close();\n }\n }, [open]);\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const handler = () => onOpenChange(false);\n el.addEventListener('close', handler);\n return () => el.removeEventListener('close', handler);\n }, [onOpenChange]);\n\n const handleBackdropClick = (e: React.MouseEvent<HTMLDialogElement>) => {\n if (e.target === ref.current) onOpenChange(false);\n };\n\n return (\n <dialog\n ref={ref}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n onClick={handleBackdropClick}\n className={cn(\n 'm-auto max-h-[90dvh] w-full max-w-lg rounded-lg bg-card-bg p-0 text-text-primary shadow-lg',\n 'backdrop:bg-[var(--overlay)]',\n 'open:flex open:flex-col',\n className,\n )}\n >\n {children}\n </dialog>\n );\n}\n\nexport type DialogContentProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function DialogContent({ className, children, ...props }: DialogContentProps) {\n return (\n <div className={cn('flex flex-col gap-4 p-6', className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport type DialogHeaderProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function DialogHeader({ className, ...props }: DialogHeaderProps) {\n return <div className={cn('flex flex-col gap-1.5', className)} {...props} />;\n}\n\nexport type DialogTitleProps = React.HTMLAttributes<HTMLHeadingElement>;\n\nexport function DialogTitle({ className, ...props }: DialogTitleProps) {\n return <h2 className={cn('text-lg font-semibold leading-none tracking-tight', className)} {...props} />;\n}\n\nexport type DialogFooterProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function DialogFooter({ className, ...props }: DialogFooterProps) {\n return (\n <div className={cn('flex flex-col-reverse gap-2 px-6 pb-6 sm:flex-row sm:justify-end', className)} {...props} />\n );\n}\n\n/**\n * Accessible backdrop modal (Escape, focus restore, labelled dialog).\n * Prefer {@link Dialog} (native `<dialog>`) for new call sites.\n */\nexport function Modal({\n open,\n onClose,\n children,\n 'aria-label': ariaLabel = 'Dialog',\n}: {\n open?: boolean;\n onClose?: () => void;\n children?: React.ReactNode;\n 'aria-label'?: string;\n}) {\n const dialogRef = React.useRef<HTMLDivElement>(null);\n const previousFocusRef = React.useRef<HTMLElement | null>(null);\n\n React.useEffect(() => {\n if (!open) return;\n previousFocusRef.current = document.activeElement as HTMLElement | null;\n const dialog = dialogRef.current;\n const focusable = dialog?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n focusable?.focus();\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n onClose?.();\n return;\n }\n if (e.key !== 'Tab' || !dialog) return;\n const nodes = Array.from(\n dialog.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n ),\n ).filter(el => !el.hasAttribute('disabled') && el.tabIndex !== -1);\n if (nodes.length === 0) return;\n const first = nodes[0]!;\n const last = nodes[nodes.length - 1]!;\n if (e.shiftKey && document.activeElement === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && document.activeElement === last) {\n e.preventDefault();\n first.focus();\n }\n };\n\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n previousFocusRef.current?.focus?.();\n };\n }, [open, onClose]);\n\n if (!open) return null;\n\n return (\n <div\n role=\"presentation\"\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-[var(--overlay)] p-4\"\n onClick={onClose}\n >\n <div ref={dialogRef} role=\"dialog\" aria-modal=\"true\" aria-label={ariaLabel} onClick={e => e.stopPropagation()}>\n {children}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport React, { useEffect, useId, useLayoutEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { cn } from '../lib/cn.js';\nimport { themePortalRoot } from '../lib/themePortalRoot.js';\n\nexport type DropdownMenuProps = {\n trigger: React.ReactNode;\n children: React.ReactNode;\n align?: 'start' | 'end';\n className?: string;\n};\n\nexport function DropdownMenu({ trigger, children, align = 'end', className }: DropdownMenuProps) {\n const [open, setOpen] = useState(false);\n const [pos, setPos] = useState<{ top: number; left: number } | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const focusedOpenRef = useRef(false);\n const menuId = useId();\n\n useLayoutEffect(() => {\n if (!open) {\n setPos(null);\n return;\n }\n\n const update = () => {\n const el = containerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setPos({\n top: rect.bottom + 4,\n left: align === 'end' ? rect.right : rect.left,\n });\n };\n\n update();\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n return () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }, [open, align]);\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n const target = e.target;\n if (!(target instanceof Node)) return;\n if (containerRef.current?.contains(target)) return;\n if (menuRef.current?.contains(target)) return;\n setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n // Menu mounts only after `pos` is set; focus once per open, not on every scroll/resize pos rewrite.\n useEffect(() => {\n if (!open) {\n focusedOpenRef.current = false;\n return;\n }\n if (pos == null || focusedOpenRef.current) return;\n const first = menuRef.current?.querySelector<HTMLElement>('[role=\"menuitem\"]:not([disabled])');\n first?.focus();\n focusedOpenRef.current = true;\n }, [open, pos]);\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n setOpen(false);\n const triggerBtn = containerRef.current?.querySelector<HTMLElement>(\"[aria-haspopup='menu']\");\n triggerBtn?.focus();\n return;\n }\n\n if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp' && e.key !== 'Home' && e.key !== 'End') {\n return;\n }\n\n const items = Array.from(\n menuRef.current?.querySelectorAll<HTMLElement>('[role=\"menuitem\"]:not([disabled])') ?? [],\n );\n if (items.length === 0) return;\n\n e.preventDefault();\n const currentIndex = items.indexOf(document.activeElement as HTMLElement);\n let nextIndex = currentIndex;\n if (e.key === 'ArrowDown') nextIndex = (currentIndex + 1) % items.length;\n else if (e.key === 'ArrowUp') nextIndex = (currentIndex - 1 + items.length) % items.length;\n else if (e.key === 'Home') nextIndex = 0;\n else if (e.key === 'End') nextIndex = items.length - 1;\n items[nextIndex]?.focus();\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [open]);\n\n const triggerEl = React.isValidElement(trigger)\n ? React.cloneElement(trigger as React.ReactElement<Record<string, unknown>>, {\n 'aria-haspopup': 'menu',\n 'aria-expanded': open,\n 'aria-controls': open ? menuId : undefined,\n onKeyDown: (e: React.KeyboardEvent) => {\n const existing = (trigger as React.ReactElement<{ onKeyDown?: (ev: React.KeyboardEvent) => void }>).props\n .onKeyDown;\n existing?.(e);\n if (e.key === 'ArrowDown' || e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setOpen(true);\n }\n },\n })\n : trigger;\n\n const menu =\n open && pos != null\n ? createPortal(\n <div\n ref={menuRef}\n id={menuId}\n role=\"menu\"\n style={{\n top: pos.top,\n left: pos.left,\n transform: align === 'end' ? 'translateX(-100%)' : undefined,\n }}\n className={cn(\n 'fixed z-[200] min-w-[8rem] rounded-md border border-border bg-card-bg p-1',\n 'text-text-primary shadow-md',\n className,\n )}\n onClick={() => setOpen(false)}\n >\n {children}\n </div>,\n themePortalRoot(containerRef.current),\n )\n : null;\n\n return (\n <div ref={containerRef} className=\"relative inline-flex\">\n <div onClick={() => setOpen(v => !v)}>{triggerEl}</div>\n {menu}\n </div>\n );\n}\n\nexport type DropdownMenuItemProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport function DropdownMenuItem({ className, ...props }: DropdownMenuItemProps) {\n return (\n <button\n role=\"menuitem\"\n type=\"button\"\n className={cn(\n 'flex w-full cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none',\n // focus-visible only: open-menu auto-focus must not look like a stuck hover/selected row.\n 'transition-colors hover:bg-ghost-button-hover',\n 'focus-visible:bg-dropdown-selected-item-bg focus-visible:text-dropdown-selected-item-text',\n 'aria-selected:bg-dropdown-selected-item-bg aria-selected:text-dropdown-selected-item-text',\n 'disabled:pointer-events-none disabled:opacity-50',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport type DropdownMenuSeparatorProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function DropdownMenuSeparator({ className, ...props }: DropdownMenuSeparatorProps) {\n return <div role=\"separator\" className={cn('-mx-1 my-1 h-px bg-border', className)} {...props} />;\n}\n","/** Keep portaled chrome inside the active dialog/theme boundary. */\nexport function themePortalRoot(from: HTMLElement | null): HTMLElement {\n const dialog = from?.closest('dialog');\n if (dialog instanceof HTMLElement) return dialog;\n return from?.closest('.aui-theme-root') ?? document.body;\n}\n","'use client';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { isSchedulesChromeEnabled } from '../../server/serverChrome.js';\nimport { useOptionalScheduleServer, useOptionalServer } from '../../server/ServerContext.js';\nimport { useShellMode } from '../../server/ShellModeContext.js';\nimport { writeOpenSchedulesForAgentSearch } from '../../utils/scheduleShareUrl.js';\nimport { AgentOverflowMenu } from '../AgentOverflowMenu.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { cn } from '../lib/cn.js';\nimport { PageHeader, pageHeaderTitleClassName } from '../PageHeader.js';\nimport { Button } from '../primitives/Button.js';\nimport type { AgentDetailsHeaderProps } from './types.js';\n\nexport function AgentDetailsHeader({ agentId, detail, onBack }: AgentDetailsHeaderProps) {\n const shell = useShellMode();\n const scheduleServer = useOptionalScheduleServer();\n const builder = useOptionalServer();\n const canMutate = shell.isComposerEnabled && detail != null && builder != null;\n const canManageSchedules = isSchedulesChromeEnabled({ schedules: scheduleServer }) && detail != null;\n\n const handleTry = () => {\n if (detail == null) return;\n shell.selectLibraryAgent({\n isMutable: false,\n agentId: detail.agentId,\n agentName: detail.name,\n });\n };\n\n const handleEdit = () => {\n if (detail == null) return;\n shell.selectLibraryAgent({\n isMutable: true,\n isCreateAgent: true,\n agentId: detail.agentId,\n agentName: detail.name,\n agentSpec: detail.agentSpec,\n });\n };\n\n const handleManageSchedules = () => {\n writeOpenSchedulesForAgentSearch({ agentId });\n shell.setSchedulesOpen(true);\n };\n\n return (\n <PageHeader\n className=\"bg-primary-bg\"\n start={\n <button\n type=\"button\"\n aria-label=\"Back to Agents\"\n title=\"Back to Agents\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={onBack}\n >\n <Icon name=\"arrow-left\" />\n </button>\n }\n title={\n <div className={cn('flex min-w-0 items-center gap-1', pageHeaderTitleClassName)}>\n <button type=\"button\" className=\"cursor-pointer truncate hover:text-text-primary\" onClick={onBack}>\n Agents\n </button>\n <Icon name=\"chevron-right\" className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{detail?.name ?? agentId}</span>\n </div>\n }\n end={\n <>\n <Button.Primary\n type=\"button\"\n aria-label=\"Try agent\"\n size=\"large\"\n disabled={detail == null}\n onClick={handleTry}\n >\n <Icon name=\"play\" className=\"size-3.5\" />\n Try\n </Button.Primary>\n {detail != null ? (\n <AgentOverflowMenu\n agentName={detail.name}\n agentSpec={detail.agentSpec}\n canMutate={canMutate}\n canManageSchedules={canManageSchedules}\n onEdit={handleEdit}\n {...(canManageSchedules ? { onManageSchedules: handleManageSchedules } : {})}\n onDeleted={onBack}\n />\n ) : null}\n </>\n }\n />\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentDetailsHeader: typeof AgentDetailsHeader;\n }\n}\n","'use client';\n\nimport { Suspense, useCallback, useEffect, useState } from 'react';\nimport { useSessionShareSearch } from '../../hooks/useSessionShareSearch.js';\nimport { useOptionalAgentMetricsServer, useOptionalAgentSessionsServer } from '../../server/ServerContext.js';\nimport { useShellMode } from '../../server/ShellModeContext.js';\nimport { isMetricsChromeEnabled } from '../../server/serverChrome.js';\nimport type { AgentDetail, CodeSnippet } from '../../server/types.js';\nimport { useSlot } from '../../theme/SlotsProvider.js';\nimport { libraryAgentTabFromSearch } from '../../utils/sessionShareUrl.js';\nimport { Skeleton } from '../primitives/Skeleton.js';\nimport type { AgentDetailsPageProps } from './types.js';\n\nexport function AgentDetailsPage({ agentId }: AgentDetailsPageProps) {\n const sessionsServer = useOptionalAgentSessionsServer();\n const metricsServer = useOptionalAgentMetricsServer();\n const shell = useShellMode();\n const share = useSessionShareSearch();\n const { updateShareSearch } = share;\n const requestedTab = libraryAgentTabFromSearch(share, agentId);\n const showMetrics = isMetricsChromeEnabled({ metrics: metricsServer });\n const activeTab = requestedTab === 'metrics' && !showMetrics ? 'overview' : requestedTab;\n const AgentDetailsHeader = useSlot('AgentDetailsHeader');\n const AgentDetailsTabs = useSlot('AgentDetailsTabs');\n const AgentDetailsUnavailable = useSlot('AgentDetailsUnavailable');\n const AgentOverview = useSlot('AgentOverview');\n const AgentSessions = useSlot('AgentSessions');\n const AgentMetrics = useSlot('AgentMetrics');\n const AgentCodeSnippets = useSlot('AgentCodeSnippets');\n const [detail, setDetail] = useState<AgentDetail>();\n const [detailFailed, setDetailFailed] = useState(false);\n const [snippets, setSnippets] = useState<CodeSnippet[]>();\n const [snippetsFailed, setSnippetsFailed] = useState(false);\n\n const goBack = useCallback(() => {\n updateShareSearch({\n sessionId: null,\n agentId: null,\n tab: null,\n view: null,\n timeRange: null,\n });\n shell.closeLibraryAgent();\n }, [shell, updateShareSearch]);\n\n useEffect(() => {\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') return;\n event.stopImmediatePropagation();\n goBack();\n };\n window.addEventListener('keydown', onKeyDown, true);\n return () => window.removeEventListener('keydown', onKeyDown, true);\n }, [goBack]);\n\n useEffect(() => {\n if (sessionsServer == null) return;\n let cancelled = false;\n void sessionsServer.getAgent({ agentId }).then(\n result => {\n if (!cancelled) setDetail(result);\n },\n () => {\n if (!cancelled) setDetailFailed(true);\n },\n );\n return () => {\n cancelled = true;\n };\n }, [agentId, sessionsServer]);\n\n useEffect(() => {\n if (activeTab !== 'code' || sessionsServer == null || snippets !== undefined || snippetsFailed) return;\n let cancelled = false;\n void sessionsServer.getCodeSnippets({ agentId }).then(\n result => {\n if (!cancelled) setSnippets(result);\n },\n () => {\n if (!cancelled) setSnippetsFailed(true);\n },\n );\n return () => {\n cancelled = true;\n };\n }, [activeTab, agentId, sessionsServer, snippets, snippetsFailed]);\n\n let content;\n if (sessionsServer == null) {\n content = (\n <AgentDetailsUnavailable\n onBack={goBack}\n reason=\"This host does not provide agent details. Return to the library to choose an agent.\"\n />\n );\n } else if (detailFailed) {\n content = <AgentDetailsUnavailable onBack={goBack} />;\n } else if (detail == null) {\n content = (\n <div\n className=\"grid min-h-0 gap-3 overflow-auto p-4 md:grid-cols-[minmax(0,1fr)_18rem]\"\n role=\"status\"\n aria-label=\"Loading agent details\"\n >\n <Skeleton className=\"min-h-80 rounded-lg\" />\n <div className=\"space-y-3\">\n {['mcp', 'skills', 'model', 'execution'].map(item => (\n <Skeleton key={item} className=\"h-24 rounded-lg\" />\n ))}\n </div>\n </div>\n );\n } else if (activeTab === 'overview') {\n content = <AgentOverview detail={detail} />;\n } else if (activeTab === 'sessions') {\n content = <AgentSessions agentId={agentId} />;\n } else if (activeTab === 'metrics') {\n content = <AgentMetrics agentId={agentId} />;\n } else if (snippetsFailed) {\n content = <AgentDetailsUnavailable onBack={goBack} reason=\"Code samples for this agent could not be loaded.\" />;\n } else if (snippets === undefined) {\n content = (\n <div className=\"flex min-h-64 gap-3 p-3\" role=\"status\" aria-label=\"Loading code samples\">\n <Skeleton className=\"hidden w-44 shrink-0 rounded-lg md:block\" />\n <Skeleton className=\"min-h-64 min-w-0 flex-1 rounded-lg\" />\n </div>\n );\n } else {\n content = <AgentCodeSnippets snippets={snippets} />;\n }\n\n return (\n <div className=\"flex h-full min-h-0 w-full flex-col bg-primary-bg\">\n <AgentDetailsHeader agentId={agentId} detail={detail} onBack={goBack} />\n {sessionsServer != null && !detailFailed ? (\n <AgentDetailsTabs\n activeTab={activeTab}\n showMetrics={showMetrics}\n onTabChange={tab =>\n updateShareSearch({\n agentId,\n tab,\n view: null,\n timeRange: null,\n ...(tab === 'sessions' ? {} : { sessionId: null }),\n })\n }\n />\n ) : null}\n {/* Tabs own their scrolling so long instructions / code samples stay inside their card. */}\n <main className=\"flex min-h-0 flex-1 flex-col overflow-hidden\" role=\"tabpanel\">\n <Suspense\n fallback={\n <div className=\"p-4\" role=\"status\" aria-label=\"Loading\">\n <Skeleton className=\"min-h-64 rounded-lg\" />\n </div>\n }\n >\n {content}\n </Suspense>\n </main>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentDetailsPage: typeof AgentDetailsPage;\n }\n}\n","'use client';\n\nimport { useCallback, useSyncExternalStore } from 'react';\n\nimport {\n readSessionShareSearch,\n replaceSessionShareSearch,\n SESSION_SHARE_CHANGE_EVENT,\n type SessionShareSearch,\n type SessionShareWrite,\n} from '../utils/sessionShareUrl.js';\n\nfunction subscribeShareSearch(onStoreChange: () => void): () => void {\n window.addEventListener('popstate', onStoreChange);\n window.addEventListener(SESSION_SHARE_CHANGE_EVENT, onStoreChange);\n return () => {\n window.removeEventListener('popstate', onStoreChange);\n window.removeEventListener(SESSION_SHARE_CHANGE_EVENT, onStoreChange);\n };\n}\n\nfunction getShareSearchSnapshot(): string {\n return window.location.search;\n}\n\nfunction getServerShareSearchSnapshot(): string {\n return '';\n}\n\n/**\n * Session share query on `window.location`.\n * Does not use react-router, so it works with `withRouter` on or off.\n */\nexport function useSessionShareSearch(): SessionShareSearch & {\n updateShareSearch: (next: SessionShareWrite) => void;\n} {\n const search = useSyncExternalStore(subscribeShareSearch, getShareSearchSnapshot, getServerShareSearchSnapshot);\n const updateShareSearch = useCallback((next: SessionShareWrite) => {\n replaceSessionShareSearch(next);\n }, []);\n\n return { ...readSessionShareSearch(search), updateShareSearch };\n}\n","import React from 'react';\n\nimport { cn } from '../lib/cn.js';\n\nexport type SkeletonProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function Skeleton({ className, ...props }: SkeletonProps) {\n return <div className={cn('animate-pulse rounded-md bg-secondary-bg', className)} {...props} />;\n}\n","'use client';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { cn } from '../lib/cn.js';\nimport type { AgentDetailsTab, AgentDetailsTabsProps } from './types.js';\n\nconst tabs: Array<{ id: AgentDetailsTab; label: string; icon: string }> = [\n { id: 'overview', label: 'Overview', icon: 'info' },\n { id: 'sessions', label: 'Sessions', icon: 'message-square-text' },\n { id: 'code', label: 'Use In Code', icon: 'code' },\n { id: 'metrics', label: 'Metrics', icon: 'chart' },\n];\n\nexport function AgentDetailsTabs({ activeTab, onTabChange, showMetrics = false }: AgentDetailsTabsProps) {\n return (\n <div\n role=\"tablist\"\n aria-label=\"Agent details\"\n className=\"flex shrink-0 gap-1 overflow-x-auto border-b border-border bg-primary-bg px-3\"\n >\n {tabs\n .filter(tab => tab.id !== 'metrics' || showMetrics)\n .map(tab => (\n <button\n key={tab.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={activeTab === tab.id}\n aria-current={activeTab === tab.id ? 'page' : undefined}\n className={cn(\n 'relative flex h-10 shrink-0 cursor-pointer items-center gap-1.5 px-2 text-xs font-medium text-text-secondary',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-focus-ring',\n activeTab === tab.id &&\n 'text-primary-button-bg after:absolute after:inset-x-0 after:bottom-0 after:h-0.5 after:bg-primary-button-bg',\n )}\n onClick={() => onTabChange(tab.id)}\n >\n <Icon name={tab.icon} className=\"size-3.5\" />\n {tab.label}\n </button>\n ))}\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentDetailsTabs: typeof AgentDetailsTabs;\n }\n}\n","import { Icon } from '../../icons/Icon.js';\nimport { Button } from '../primitives/Button.js';\nimport type { AgentDetailsUnavailableProps } from './types.js';\n\nexport function AgentDetailsUnavailable({ onBack, reason }: AgentDetailsUnavailableProps) {\n return (\n <div className=\"flex h-full min-h-64 flex-col items-center justify-center gap-3 px-6 text-center\">\n <span className=\"flex size-11 items-center justify-center rounded-full bg-secondary-bg text-text-secondary\">\n <Icon name=\"circle-exclamation\" />\n </span>\n <div>\n <h2 className=\"text-base font-semibold text-text-primary\">Agent details unavailable</h2>\n <p className=\"mt-1 max-w-md text-sm text-text-secondary\">\n {reason ?? 'The agent details could not be loaded. Please try again later.'}\n </p>\n </div>\n <Button.Secondary type=\"button\" size=\"small\" onClick={onBack}>\n <Icon name=\"arrow-left\" className=\"size-3.5\" />\n Back to Agents\n </Button.Secondary>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentDetailsUnavailable: typeof AgentDetailsUnavailable;\n }\n}\n","/** Compact token count for session/turn headers (e.g. 122K). */\nexport function formatTokenCount(tokens: number): string {\n if (tokens >= 1_000_000) {\n return `${(tokens / 1_000_000).toFixed(tokens >= 10_000_000 ? 0 : 1)}M`;\n }\n if (tokens >= 1_000) {\n return `${(tokens / 1_000).toFixed(0)}K`;\n }\n return String(tokens);\n}\n\n/** USD cost with four decimal places (e.g. $0.1615). */\nexport function formatCostUsd(costInUsd: number): string {\n return `$${costInUsd.toFixed(4)}`;\n}\n\n/** Duration from milliseconds (e.g. 41.38s, 1.92m). */\nexport function formatDurationMs(durationMs: number): string {\n if (durationMs < 60_000) {\n return `${(durationMs / 1_000).toFixed(2)}s`;\n }\n if (durationMs < 3_600_000) {\n return `${(durationMs / 60_000).toFixed(2)}m`;\n }\n return `${(durationMs / 3_600_000).toFixed(2)}h`;\n}\n\nexport function roundDurationMsToSecond(durationMs: number): number {\n return Math.max(0, Math.round(durationMs / 1_000) * 1_000);\n}\n\n/** Whole-unit duration for prominent summary UI (e.g. 3m 8s). */\nexport function formatReadableDurationMs(durationMs: number): string {\n const totalSeconds = roundDurationMsToSecond(durationMs) / 1_000;\n const hours = Math.floor(totalSeconds / 3_600);\n const minutes = Math.floor((totalSeconds % 3_600) / 60);\n const seconds = totalSeconds % 60;\n return [\n ...(hours > 0 ? [`${hours}h`] : []),\n ...(minutes > 0 ? [`${minutes}m`] : []),\n ...(seconds > 0 || totalSeconds === 0 ? [`${seconds}s`] : []),\n ].join(' ');\n}\n\nexport function formatSessionListMetrics(metrics: {\n totalTurns: number;\n totalCostInUsd?: number;\n totalDurationMs: number;\n}): string {\n return [\n `${metrics.totalTurns} turns`,\n ...(metrics.totalCostInUsd == null ? [] : [formatCostUsd(metrics.totalCostInUsd)]),\n formatReadableDurationMs(metrics.totalDurationMs),\n ].join(' | ');\n}\n","import type { ComponentType } from 'react';\n\nimport { formatCostUsd, formatDurationMs } from '../../utils/sessionDisplayFormat.js';\nimport type { AgentMetricCardProps } from './types.js';\n\nconst numberFormatter = new Intl.NumberFormat(undefined, { maximumFractionDigits: 4 });\n\nfunction formatMeterValue(value: number, unit: string): string {\n if (unit === '$') return formatCostUsd(value);\n if (unit === 'ms') return formatDurationMs(value);\n return `${numberFormatter.format(value)}${unit === 'count' || unit.length === 0 ? '' : ` ${unit}`}`;\n}\n\nexport function AgentMetricCard({ meter }: AgentMetricCardProps) {\n return (\n <section className=\"min-w-0 rounded-lg border border-border bg-card-bg p-3\" data-slot=\"agent-metric-card\">\n <h3 className=\"truncate text-xs font-medium text-text-secondary\" title={meter.description}>\n {meter.description}\n </h3>\n <p className=\"mt-2 text-xl font-semibold tabular-nums text-text-primary\">\n {formatMeterValue(meter.aggregateValue, meter.unit)}\n </p>\n </section>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentMetricCard: ComponentType<AgentMetricCardProps>;\n }\n}\n","import type { ComponentType } from 'react';\n\nimport { useSlot } from '../../theme/SlotsProvider.js';\nimport type { AgentMetricsTimeRangeFilterProps } from './types.js';\n\nexport function AgentMetricsTimeRangeFilter({ timeRange, onTimeRangeChange }: AgentMetricsTimeRangeFilterProps) {\n const AgentSessionsFilters = useSlot('AgentSessionsFilters');\n\n return (\n <AgentSessionsFilters\n agentId={null}\n timeRange={timeRange}\n onAgentChange={() => undefined}\n onTimeRangeChange={onTimeRangeChange}\n showAgentFilter={false}\n showCustomTimeRange={false}\n />\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentMetricsTimeRangeFilter: ComponentType<AgentMetricsTimeRangeFilterProps>;\n }\n}\n","'use client';\n\nimport type { ComponentType } from 'react';\n\nimport { useSlot } from '../../theme/SlotsProvider.js';\nimport { Skeleton } from '../primitives/Skeleton.js';\nimport type { AgentMetricsViewProps } from './types.js';\n\nexport function AgentMetricsView({\n meters,\n meterError,\n charts,\n chartsLoading,\n chartsError,\n timeRange,\n onTimeRangeChange,\n}: AgentMetricsViewProps) {\n const AgentMetricCard = useSlot('AgentMetricCard');\n const AgentMetricChart = useSlot('AgentMetricChart');\n const AgentMetricsTimeRangeFilter = useSlot('AgentMetricsTimeRangeFilter');\n\n return (\n <div className=\"min-h-0 flex-1 overflow-auto p-4\" data-slot=\"agent-metrics-view\">\n <div className=\"mb-4 flex justify-end\">\n <AgentMetricsTimeRangeFilter timeRange={timeRange} onTimeRangeChange={onTimeRangeChange} />\n </div>\n\n {meterError != null ? (\n <div className=\"mb-4 rounded-lg border border-failure-bg/30 bg-failure-bg/10 p-3 text-sm text-failure-bg\">\n {meterError}\n </div>\n ) : meters == null ? (\n <div className=\"mb-4 grid grid-cols-2 gap-3 md:grid-cols-3 xl:grid-cols-4\" aria-label=\"Loading metrics\">\n {Array.from({ length: 4 }, (_, index) => (\n <Skeleton key={index} className=\"h-20 rounded-lg\" />\n ))}\n </div>\n ) : meters.length === 0 ? (\n <div className=\"mb-4 rounded-lg border border-border bg-card-bg p-6 text-center text-sm text-text-secondary\">\n No aggregate metrics\n </div>\n ) : (\n <div className=\"mb-4 grid grid-cols-2 gap-3 md:grid-cols-3 xl:grid-cols-4\">\n {meters.map(meter => (\n <AgentMetricCard key={meter.name} meter={meter} />\n ))}\n </div>\n )}\n\n {chartsError != null ? (\n <div className=\"rounded-lg border border-failure-bg/30 bg-failure-bg/10 p-3 text-sm text-failure-bg\">\n {chartsError}\n </div>\n ) : chartsLoading && charts.length === 0 ? (\n <div className=\"grid gap-4 lg:grid-cols-2\" aria-label=\"Loading metric charts\">\n {Array.from({ length: 2 }, (_, index) => (\n <Skeleton key={index} className=\"h-80 rounded-lg\" />\n ))}\n </div>\n ) : charts.length === 0 ? (\n <div className=\"rounded-lg border border-border bg-card-bg p-6 text-center text-sm text-text-secondary\">\n No charts available\n </div>\n ) : (\n <div className=\"grid gap-4 lg:grid-cols-2\">\n {charts.flatMap(chart =>\n chart.graphs != null && chart.graphs.length > 0\n ? chart.graphs.map(graph => (\n <AgentMetricChart\n key={`${chart.definition.name}:${graph.name}`}\n definition={chart.definition}\n graph={graph}\n error={chart.error}\n />\n ))\n : [<AgentMetricChart key={chart.definition.name} definition={chart.definition} error={chart.error} />],\n )}\n </div>\n )}\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentMetricsView: ComponentType<AgentMetricsViewProps>;\n }\n}\n","import { Icon } from '../../icons/Icon.js';\nimport type { AgentOverviewCardProps } from './types.js';\n\nexport function AgentOverviewCard({ title, icon, count, children }: AgentOverviewCardProps) {\n return (\n <section className=\"rounded-lg border border-border bg-card-bg p-3 text-text-primary\">\n <h2 className=\"mb-2 flex items-center gap-1.5 text-xs font-semibold\">\n <Icon name={icon} className=\"size-3.5 text-text-secondary\" />\n {title}\n {count !== undefined ? <span className=\"text-text-secondary\">({count})</span> : null}\n </h2>\n {children}\n </section>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentOverviewCard: typeof AgentOverviewCard;\n }\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { buildAgentSessionShareUrl } from '../../utils/sessionShareUrl.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { cn } from '../lib/cn.js';\nimport { Button } from '../primitives/Button.js';\nimport { LightTooltip } from '../primitives/Tooltip.js';\nimport type { AgentSessionDetailHeaderProps } from './types.js';\n\nexport { buildAgentSessionShareUrl } from '../../utils/sessionShareUrl.js';\n\nexport function AgentSessionDetailHeader({\n title,\n sessionId,\n agentId,\n createdAt,\n view,\n onClose,\n resumeHref,\n onResume,\n resumeLabel,\n}: AgentSessionDetailHeaderProps) {\n const [copied, setCopied] = useState(false);\n\n useEffect(() => {\n if (!copied) return undefined;\n const timer = window.setTimeout(() => setCopied(false), 2000);\n return () => window.clearTimeout(timer);\n }, [copied]);\n\n const copySessionLink = async () => {\n try {\n await navigator.clipboard.writeText(buildAgentSessionShareUrl({ sessionId, agentId, createdAt, view }));\n setCopied(true);\n } catch {\n // Clipboard may be unavailable; ignore.\n }\n };\n\n return (\n <div className=\"flex shrink-0 items-center gap-3 border-b border-border px-4 py-3\">\n <div className=\"flex min-w-0 flex-1 items-center gap-1.5\">\n <h2 className=\"min-w-0 truncate text-sm font-semibold text-text-primary\">{title}</h2>\n <code className=\"min-w-0 truncate font-mono text-xs text-text-secondary\">{sessionId}</code>\n <LightTooltip title={copied ? 'Copied' : 'Copy session link'} dismissOnClick={false}>\n <button\n type=\"button\"\n aria-label=\"Copy session link\"\n className={cn(\n 'inline-flex size-6 shrink-0 items-center justify-center rounded-md text-text-secondary',\n 'hover:bg-ghost-button-hover hover:text-text-primary',\n )}\n onClick={() => void copySessionLink()}\n >\n <Icon name=\"link\" className=\"size-3.5\" />\n </button>\n </LightTooltip>\n </div>\n {resumeLabel != null && resumeHref != null ? (\n <a\n href={resumeHref}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={auiButtonClass({ variant: 'secondary', size: 'large' })}\n >\n {resumeLabel}\n <Icon name=\"square-arrow-out-up-right\" className=\"shrink-0\" />\n </a>\n ) : resumeLabel != null && onResume != null ? (\n <Button.Secondary type=\"button\" size=\"large\" onClick={onResume}>\n {resumeLabel}\n </Button.Secondary>\n ) : null}\n <button\n type=\"button\"\n aria-label=\"Close session details\"\n className={cn(\n 'inline-flex size-8 shrink-0 items-center justify-center rounded-md text-text-secondary',\n 'hover:bg-ghost-button-hover hover:text-text-primary',\n )}\n onClick={onClose}\n >\n <Icon name=\"xmark\" className=\"size-4\" />\n </button>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentSessionDetailHeader: typeof AgentSessionDetailHeader;\n }\n}\n","'use client';\n\nimport React, { cloneElement, isValidElement, useLayoutEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { cn } from '../lib/cn.js';\nimport { themePortalRoot } from '../lib/themePortalRoot.js';\n\nconst TOOLTIP_VIEWPORT_PAD = 8;\n\n/** `left`/`top` are the desired center and top-edge (bottom) or bottom-edge (top). */\nexport function clampCenteredTooltip({\n left,\n top,\n width,\n height,\n side,\n viewportWidth,\n viewportHeight,\n pad = TOOLTIP_VIEWPORT_PAD,\n}: {\n left: number;\n top: number;\n width: number;\n height: number;\n side: 'top' | 'bottom';\n viewportWidth: number;\n viewportHeight: number;\n pad?: number;\n}): { top: number; left: number } {\n let nextLeft = left;\n if (width > 0) {\n const half = width / 2;\n const minCenter = pad + half;\n const maxCenter = viewportWidth - pad - half;\n nextLeft = maxCenter < minCenter ? viewportWidth / 2 : Math.min(maxCenter, Math.max(minCenter, left));\n }\n\n let nextTop = top;\n if (height > 0) {\n if (side === 'bottom') {\n const overflow = top + height - (viewportHeight - pad);\n if (overflow > 0) nextTop = Math.max(pad, top - overflow);\n } else if (top - height < pad) {\n nextTop = pad + height;\n }\n }\n return { top: nextTop, left: nextLeft };\n}\n\nfunction hasTooltipContent(content: React.ReactNode): boolean {\n if (content == null || content === false) return false;\n if (typeof content === 'string') return content.trim().length > 0;\n return true;\n}\n\nexport type TooltipAnchor = {\n left: number;\n top: number;\n};\n\nexport type TooltipProps = {\n content: React.ReactNode;\n children: React.ReactElement;\n className?: string;\n triggerClassName?: string;\n side?: 'top' | 'bottom';\n dismissOnClick?: boolean;\n followCursor?: boolean;\n /** When set, tooltip is pinned to these viewport coords instead of the trigger. */\n anchor?: TooltipAnchor | null;\n /** Controls visibility when provided; otherwise hover/focus owns it. */\n open?: boolean;\n};\n\nexport function Tooltip({\n content,\n children,\n className,\n triggerClassName,\n side = 'top',\n dismissOnClick = true,\n followCursor = false,\n anchor = null,\n open,\n}: TooltipProps) {\n const [uncontrolledVisible, setUncontrolledVisible] = useState(false);\n const visible = open ?? uncontrolledVisible;\n const setVisible = (next: boolean) => {\n if (open === undefined) setUncontrolledVisible(next);\n };\n const [pos, setPos] = useState<{ top: number; left: number } | null>(null);\n const triggerWrapRef = useRef<HTMLSpanElement>(null);\n const tooltipRef = useRef<HTMLSpanElement>(null);\n const cursorXRef = useRef<number | null>(null);\n const placeRef = useRef<() => void>(() => {});\n\n placeRef.current = () => {\n const trigger = triggerWrapRef.current;\n let next: { top: number; left: number } | null = null;\n if (anchor != null) {\n next = { top: side === 'bottom' ? anchor.top + 6 : anchor.top - 6, left: anchor.left };\n } else if (trigger) {\n const rect = trigger.getBoundingClientRect();\n next = {\n top: side === 'bottom' ? rect.bottom + 6 : rect.top - 6,\n left: followCursor && cursorXRef.current != null ? cursorXRef.current : rect.left + rect.width / 2,\n };\n }\n if (next == null) return;\n const tooltipEl = tooltipRef.current;\n setPos(\n tooltipEl\n ? clampCenteredTooltip({\n ...next,\n width: tooltipEl.offsetWidth,\n height: tooltipEl.offsetHeight,\n side,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n })\n : next,\n );\n };\n\n useLayoutEffect(() => {\n if (!visible) {\n setPos(null);\n return;\n }\n\n const update = () => placeRef.current();\n update();\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n return () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }, [anchor, followCursor, visible, side, content]);\n\n if (!isValidElement(children)) return children;\n\n type AnyProps = React.HTMLAttributes<Element>;\n const p = children.props as AnyProps;\n const child = cloneElement(children as React.ReactElement<AnyProps>, {\n onMouseEnter(e: React.MouseEvent<Element>) {\n if (followCursor) cursorXRef.current = e.clientX;\n setVisible(true);\n (p.onMouseEnter as ((e: React.MouseEvent<Element>) => void) | undefined)?.(e);\n },\n onMouseMove(e: React.MouseEvent<Element>) {\n if (followCursor && anchor == null) {\n cursorXRef.current = e.clientX;\n placeRef.current();\n }\n (p.onMouseMove as ((e: React.MouseEvent<Element>) => void) | undefined)?.(e);\n },\n onMouseLeave(e: React.MouseEvent<Element>) {\n cursorXRef.current = null;\n setVisible(false);\n (p.onMouseLeave as ((e: React.MouseEvent<Element>) => void) | undefined)?.(e);\n },\n onFocus(e: React.FocusEvent<Element>) {\n setVisible(true);\n (p.onFocus as ((e: React.FocusEvent<Element>) => void) | undefined)?.(e);\n },\n onBlur(e: React.FocusEvent<Element>) {\n setVisible(false);\n (p.onBlur as ((e: React.FocusEvent<Element>) => void) | undefined)?.(e);\n },\n onClick(e: React.MouseEvent<Element>) {\n if (dismissOnClick) setVisible(false);\n (p.onClick as ((e: React.MouseEvent<Element>) => void) | undefined)?.(e);\n },\n });\n\n const tooltip =\n visible && hasTooltipContent(content)\n ? createPortal(\n <span\n ref={tooltipRef}\n role=\"tooltip\"\n style={{\n top: pos?.top ?? 0,\n left: pos?.left ?? 0,\n transform: side === 'bottom' ? 'translate(-50%, 0)' : 'translate(-50%, -100%)',\n visibility: pos == null ? 'hidden' : undefined,\n }}\n className={cn(\n 'pointer-events-none fixed z-[200] max-w-[calc(100vw-1rem)]',\n 'whitespace-nowrap rounded bg-card-bg px-2 py-1 text-xs text-text-primary shadow-md',\n className,\n )}\n >\n {content}\n </span>,\n themePortalRoot(triggerWrapRef.current),\n )\n : null;\n\n return (\n <span ref={triggerWrapRef} className={cn('relative inline-flex', triggerClassName)}>\n {child}\n {tooltip}\n </span>\n );\n}\n\nexport type LightTooltipProps = {\n title: React.ReactNode;\n children: React.ReactElement;\n className?: string;\n triggerClassName?: string;\n size?: string;\n side?: 'top' | 'bottom';\n dismissOnClick?: boolean;\n followCursor?: boolean;\n anchor?: TooltipAnchor | null;\n open?: boolean;\n};\n\nexport function LightTooltip({\n title,\n children,\n className,\n triggerClassName,\n size: _size,\n side,\n dismissOnClick,\n followCursor,\n anchor,\n open,\n}: LightTooltipProps) {\n return (\n <Tooltip\n content={title}\n className={className}\n triggerClassName={triggerClassName}\n side={side}\n dismissOnClick={dismissOnClick}\n followCursor={followCursor}\n anchor={anchor}\n open={open}\n >\n {children}\n </Tooltip>\n );\n}\n","/** Compact relative age for sidebar session rows (e.g. 30m, 22h, 1d). */\nexport function formatRelativeShort(date: Date, now: Date = new Date()): string {\n const diffMs = Math.max(0, now.getTime() - date.getTime());\n const minutes = Math.floor(diffMs / 60_000);\n if (minutes < 60) return `${Math.max(1, minutes)}m`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h`;\n const days = Math.floor(hours / 24);\n if (days < 7) return `${days}d`;\n const weeks = Math.floor(days / 7);\n if (weeks < 5) return `${weeks}w`;\n const months = Math.floor(days / 30);\n if (months < 12) return `${months}mo`;\n return `${Math.floor(days / 365)}y`;\n}\n\n/**\n * Indices into `threadIds` ordered newest-first by `lastMessageAt`.\n * Stabilizes UI when assistant-ui appends a switched-to thread at the end.\n * Missing `lastMessageAt` (empty local \"New Chat\") sorts as newest so it stays on top.\n */\nexport function threadListIndicesByRecency({\n threadIds,\n threadItems,\n}: {\n threadIds: readonly string[];\n threadItems: readonly { id: string; remoteId?: string | null; lastMessageAt?: Date | null }[];\n}): number[] {\n const timeByKey = new Map<string, number>();\n for (const item of threadItems) {\n // Empty / not-yet-messaged threads have no timestamp; treat as newest.\n const t = item.lastMessageAt?.getTime() ?? Number.POSITIVE_INFINITY;\n timeByKey.set(item.id, t);\n if (item.remoteId != null) timeByKey.set(item.remoteId, t);\n }\n return threadIds\n .map((id, index) => ({ index, t: timeByKey.get(id) ?? 0 }))\n .sort((a, b) => b.t - a.t || a.index - b.index)\n .map(row => row.index);\n}\n\nexport function readThreadAgentName(custom: unknown): string | undefined {\n if (custom == null || typeof custom !== 'object') return undefined;\n if (!('agentName' in custom)) return undefined;\n const value = Reflect.get(custom, 'agentName');\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\n/** Session mutability from thread-list custom (runtime ≥ isMutable stamp). */\nexport function readThreadIsMutable(custom: unknown): boolean | undefined {\n if (custom == null || typeof custom !== 'object') return undefined;\n if (!('isMutable' in custom)) return undefined;\n const value = Reflect.get(custom, 'isMutable');\n return typeof value === 'boolean' ? value : undefined;\n}\n\n/**\n * Prefer `custom.isMutable`; fall back to agentName presence for older runtimes\n * that only stamped `agentName` on named rows.\n */\nexport function threadListItemIsMutable(custom: unknown): boolean {\n return readThreadIsMutable(custom) ?? readThreadAgentName(custom) == null;\n}\n\n/**\n * Fast-path `switchToThread` for mutable history rows only when Edit chrome is\n * safe to keep. Blank drafts (no agentName/agentId) may share one shell; an\n * Edit-bound shell must remount via `openHistorySession` when leaving its\n * pending session so Update does not keep the previous agentName over another\n * draft's runtime spec.\n */\nexport function canReuseMutableShell({\n sessionMutable,\n shellMutable,\n shellAgentName,\n shellAgentId,\n remoteId,\n pendingSessionId,\n}: {\n sessionMutable: boolean;\n shellMutable: boolean;\n shellAgentName?: string;\n shellAgentId?: string;\n remoteId?: string | null;\n pendingSessionId?: string;\n}): boolean {\n if (!sessionMutable || !shellMutable) return false;\n const editBound = (shellAgentName != null && shellAgentName !== '') || (shellAgentId != null && shellAgentId !== '');\n if (!editBound) return true;\n return remoteId != null && remoteId === pendingSessionId;\n}\n","'use client';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { formatSessionListMetrics } from '../../utils/sessionDisplayFormat.js';\nimport { cn } from '../lib/cn.js';\nimport { formatRelativeShort } from '../lib/threadListMeta.js';\nimport type { AgentSessionListRowProps } from './types.js';\n\nexport function AgentSessionListRow({\n title,\n agentName,\n lastActivityAt,\n metrics,\n active,\n onSelect,\n}: AgentSessionListRowProps) {\n const relative = formatRelativeShort(new Date(lastActivityAt));\n\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n data-active={active || undefined}\n className={cn(\n 'flex w-full flex-col gap-2 border-b border-border px-3 py-3 text-left transition-colors',\n active ? 'bg-dropdown-selected-item-bg' : 'hover:bg-ghost-button-hover',\n )}\n >\n <span className=\"line-clamp-2 text-sm font-medium text-text-primary\">{title}</span>\n <span className=\"flex items-end justify-between gap-2 text-xs text-text-secondary\">\n <span className=\"flex min-w-0 items-center gap-1\">\n {agentName != null ? (\n <>\n <Icon name=\"agent-2\" className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{agentName}</span>\n <span aria-hidden=\"true\">·</span>\n </>\n ) : null}\n <span>{relative}</span>\n </span>\n <span className=\"shrink-0 tabular-nums\">{formatSessionListMetrics(metrics)}</span>\n </span>\n </button>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentSessionListRow: typeof AgentSessionListRow;\n }\n}\n","/**\n * Shared presentation model for the Sessions timeline.\n *\n * Raw server events are intentionally converted to this small, stable shape\n * before they reach Chart.js. That keeps transport compatibility and event\n * correlation out of the chart component and makes atoms easy to override.\n */\n\n/** Events without a thread id belong to the root agent conversation. */\nexport const MAIN_THREAD_ID = 'main';\n\nexport type SessionEventType =\n 'system' | 'user' | 'model' | 'tool_call' | 'approval' | 'sub_agent' | 'waiting_on_human' | 'error';\n\nexport type SessionEventTypeDefinition = {\n id: SessionEventType;\n label: string;\n color: string;\n darkColor?: string;\n};\n\n/**\n * One drawable interval on the timeline.\n *\n * Times are milliseconds relative to the session origin, not wall-clock\n * timestamps. Equal start/end times are rendered as markers; intervals become\n * horizontal bars. `turnIndex` groups intervals into turn backgrounds and\n * `threadId` assigns sub-agent work to its lane.\n */\nexport type SessionEventTimelineSegment = {\n id: string;\n type: SessionEventType;\n title: string;\n description: string;\n startMs: number;\n endMs: number;\n turnIndex: number;\n threadId: string;\n isMarker?: boolean;\n};\n\n/** Canonical legend order, labels, and base colours for timeline event types. */\nexport const SESSION_EVENT_TYPES: SessionEventTypeDefinition[] = [\n { id: 'system', label: 'System', color: '#94a3b8' },\n { id: 'user', label: 'User', color: '#34d399' },\n { id: 'model', label: 'Model', color: '#3b82f6', darkColor: '#6366f1' },\n { id: 'tool_call', label: 'Tool call', color: '#f59e0b' },\n { id: 'approval', label: 'Approval / HITL', color: '#f472b6' },\n { id: 'sub_agent', label: 'Sub-agent', color: '#e2e8f0', darkColor: '#3f3f46' },\n { id: 'waiting_on_human', label: 'Waiting on human', color: '#22d3ee' },\n { id: 'error', label: 'Error', color: '#f87171' },\n];\n\n/** Marker-like events have no meaningful elapsed duration in their tooltip. */\nexport const SESSION_EVENT_TOOLTIP_HIDE_DURATION = new Set<SessionEventType>(['system', 'user', 'error']);\n\nconst TOOLTIP_HEADINGS: Partial<Record<SessionEventType, string>> = {\n user: 'User Message',\n model: 'Model Response',\n};\n\n/** Format an axis/tooltip duration compactly while retaining roughly three significant digits. */\nexport function formatTimelineDuration(durationMs: number): string {\n if (durationMs <= 0) return '0ms';\n if (durationMs < 1_000) return `${Math.round(durationMs)}ms`;\n if (durationMs < 60_000) return `${Number((durationMs / 1_000).toPrecision(3))}s`;\n if (durationMs < 3_600_000) return `${Number((durationMs / 60_000).toPrecision(3))}m`;\n return `${Number((durationMs / 3_600_000).toPrecision(3))}h`;\n}\n\n/** Resolve a segment's color from the same registry used to build the legend. */\nexport function getSessionEventColor(type: SessionEventType, isDarkMode = false): string {\n const eventType = SESSION_EVENT_TYPES.find(eventType => eventType.id === type);\n return (isDarkMode ? eventType?.darkColor : undefined) ?? eventType?.color ?? '#94a3b8';\n}\n\n/** Darken the base color by 10% so hover remains recognizable in either theme. */\nexport function getSessionEventHoverColor(type: SessionEventType, isDarkMode = false): string {\n const color = getSessionEventColor(type, isDarkMode);\n const hex = color.replace('#', '');\n const normalized =\n hex.length === 3\n ? hex\n .split('')\n .map(char => `${char}${char}`)\n .join('')\n : hex;\n if (normalized.length !== 6) return color;\n const value = Number.parseInt(normalized, 16);\n const channel = (shift: number) =>\n Math.max(0, Math.round(((value >> shift) & 255) * 0.9))\n .toString(16)\n .padStart(2, '0');\n return `#${channel(16)}${channel(8)}${channel(0)}`;\n}\n\n/** Return the contributor-facing label shown in the event-type filter and dataset metadata. */\nexport function getSessionEventLabel(type: SessionEventType): string {\n return SESSION_EVENT_TYPES.find(eventType => eventType.id === type)?.label ?? type;\n}\n\n/** Use message-specific tooltip headings while falling back to the legend label. */\nexport function getSessionEventTooltipHeading(type: SessionEventType): string {\n return TOOLTIP_HEADINGS[type] ?? getSessionEventLabel(type);\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport type { SessionMetricBarDatum } from '../../utils/buildSessionMetrics.js';\nimport { LightTooltip } from '../primitives/Tooltip.js';\n\nconst MIN_VERTICAL_BAR_HEIGHT_PERCENT = 6;\n\nexport function SessionMetricTooltipContent({\n title,\n children,\n fitWidth = false,\n}: {\n title: string;\n children: ReactNode;\n fitWidth?: boolean;\n}) {\n return (\n <div\n className={\n fitWidth ? 'min-w-40 w-fit px-2 py-2 text-xs text-text-primary' : 'w-72 px-2 py-2 text-xs text-text-primary'\n }\n >\n <div className=\"mb-3 text-xs font-medium capitalize tracking-wider text-text-secondary\">{title}</div>\n {children}\n </div>\n );\n}\n\nexport function StackedProportionBar({\n data,\n formatValue,\n}: {\n data: SessionMetricBarDatum[];\n formatValue: (value: number) => string;\n}) {\n const visibleData = data.filter(item => item.value > 0);\n const total = visibleData.reduce((sum, item) => sum + item.value, 0);\n if (visibleData.length === 0) return null;\n\n return (\n <div>\n <div className=\"mb-3 flex h-3 w-full overflow-hidden rounded-full bg-secondary-bg\">\n {visibleData.map(item => (\n <span\n key={item.label}\n className=\"h-full\"\n style={{ width: `${(item.value / total) * 100}%`, backgroundColor: item.color }}\n />\n ))}\n </div>\n <div className=\"space-y-2\">\n {visibleData.map(item => (\n <div key={item.label} className=\"flex items-center gap-2\">\n <span className=\"size-2 shrink-0 rounded-sm\" style={{ backgroundColor: item.color }} />\n <span className=\"min-w-0 flex-1 truncate text-text-secondary\">{item.label}</span>\n <span className=\"font-semibold text-text-primary\">{formatValue(item.value)}</span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nexport function HorizontalBarRows({\n data,\n formatValue,\n}: {\n data: SessionMetricBarDatum[];\n formatValue: (value: number) => string;\n}) {\n const maxValue = Math.max(0, ...data.map(item => item.value)) || 1;\n return (\n <div className=\"grid grid-cols-[max-content_minmax(0,1fr)_max-content] items-center gap-x-2 gap-y-2\">\n {data.map(item => (\n <div key={item.label} className=\"contents\">\n <span className=\"max-w-28 truncate text-text-secondary\">{item.label}</span>\n <div className=\"h-1.5 min-w-0 overflow-hidden rounded-full bg-secondary-bg\">\n <div\n className=\"h-full rounded-full\"\n style={{ width: `${(item.value / maxValue) * 100}%`, backgroundColor: item.color }}\n />\n </div>\n <span className=\"text-right font-semibold text-text-primary\">{formatValue(item.value)}</span>\n </div>\n ))}\n </div>\n );\n}\n\nexport function VerticalBarColumns({\n data,\n formatValue,\n}: {\n data: SessionMetricBarDatum[];\n formatValue: (value: number) => string;\n}) {\n const maxValue = Math.max(0, ...data.map(item => item.value)) || 1;\n return (\n <div className=\"h-24 overflow-x-auto\">\n <div className=\"mx-auto flex h-full w-fit items-end\">\n {data.map(item => (\n <LightTooltip key={item.label} title={formatValue(item.value)} side=\"top\">\n <div className=\"flex h-full w-10 shrink-0 flex-col items-center justify-end gap-1\">\n <div className=\"flex h-[4.5rem] items-end\">\n <div\n className=\"w-6 rounded-t-sm\"\n style={{\n height: `${Math.max(MIN_VERTICAL_BAR_HEIGHT_PERCENT, (item.value / maxValue) * 100)}%`,\n backgroundColor: item.color,\n }}\n />\n </div>\n <span className=\"text-[0.625rem] leading-4 text-text-secondary\">{item.label}</span>\n </div>\n </LightTooltip>\n ))}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport type { ComponentType, ReactNode } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { formatCostUsd, formatReadableDurationMs, formatTokenCount } from '../../utils/sessionDisplayFormat.js';\nimport { formatTimelineDuration } from '../../utils/sessionEventTimeline.js';\nimport { LightTooltip } from '../primitives/Tooltip.js';\nimport {\n HorizontalBarRows,\n SessionMetricTooltipContent,\n StackedProportionBar,\n VerticalBarColumns,\n} from './AgentSessionMetricCharts.js';\nimport type { AgentSessionMetricsStripProps } from './types.js';\n\nfunction SessionMetricTile({\n id,\n label,\n value,\n tooltip,\n}: {\n id: string;\n label: string;\n value: string | number;\n tooltip?: ReactNode;\n}) {\n const content = (\n <div\n className=\"h-full w-full border-b border-r border-border bg-primary-bg px-3 py-2\"\n data-slot={`session-metric-${id}`}\n >\n <div className=\"mb-0.5 flex items-center gap-1 text-[0.625rem] font-medium uppercase tracking-wider text-text-secondary\">\n {label}\n {tooltip != null ? <Icon name=\"info\" className=\"size-2.5 text-text-secondary\" /> : null}\n </div>\n <div className=\"pt-1 text-base font-medium leading-none text-text-primary\">{value}</div>\n </div>\n );\n if (tooltip == null) return content;\n return (\n <LightTooltip title={tooltip} side=\"bottom\" triggerClassName=\"block w-full\">\n {content}\n </LightTooltip>\n );\n}\n\nexport function AgentSessionMetricsStrip({ metrics }: AgentSessionMetricsStripProps) {\n return (\n <div className=\"@container overflow-hidden border-b border-border\" data-slot=\"agent-session-metrics-strip\">\n <div className=\"-mb-px -mr-px grid grid-cols-3 @min-[24rem]:grid-cols-4 @min-[48rem]:grid-cols-8\">\n <SessionMetricTile id=\"turns\" label=\"Turns\" value={metrics.totalTurns} />\n <SessionMetricTile\n id=\"wall-time\"\n label=\"Duration\"\n value={formatReadableDurationMs(metrics.wallTimeMs)}\n tooltip={\n <SessionMetricTooltipContent title=\"Where the time went\">\n <StackedProportionBar data={metrics.timeBreakdown} formatValue={formatTimelineDuration} />\n </SessionMetricTooltipContent>\n }\n />\n {metrics.totalCostUsd != null ? (\n <SessionMetricTile\n id=\"cost\"\n label=\"Cost\"\n value={formatCostUsd(metrics.totalCostUsd)}\n tooltip={\n metrics.costPerTurn.length > 1 && metrics.totalCostUsd > 0 ? (\n <SessionMetricTooltipContent title=\"Cost per turn\" fitWidth>\n <VerticalBarColumns data={metrics.costPerTurn} formatValue={formatCostUsd} />\n </SessionMetricTooltipContent>\n ) : null\n }\n />\n ) : null}\n <SessionMetricTile\n id=\"tokens\"\n label=\"Tokens\"\n value={formatTokenCount(metrics.totalTokens)}\n tooltip={\n metrics.totalTokens > 0 ? (\n <SessionMetricTooltipContent title=\"Tokens\">\n <StackedProportionBar data={metrics.tokenBreakdown} formatValue={formatTokenCount} />\n </SessionMetricTooltipContent>\n ) : null\n }\n />\n <SessionMetricTile\n id=\"context\"\n label=\"Context\"\n value={formatTokenCount(metrics.contextTokens)}\n tooltip={\n metrics.contextByTurn.length > 1 && metrics.contextTokens > 0 ? (\n <SessionMetricTooltipContent title=\"Context length at end of turn\">\n <HorizontalBarRows data={metrics.contextByTurn} formatValue={formatTokenCount} />\n </SessionMetricTooltipContent>\n ) : null\n }\n />\n <SessionMetricTile\n id=\"tool-calls\"\n label=\"Tool calls\"\n value={metrics.toolCalls}\n tooltip={\n metrics.toolCalls > 1 ? (\n <SessionMetricTooltipContent title=\"Tool call frequency\">\n <HorizontalBarRows data={metrics.toolCallFrequency} formatValue={String} />\n </SessionMetricTooltipContent>\n ) : null\n }\n />\n <SessionMetricTile id=\"sub-agents\" label=\"Sub-agents\" value={metrics.subAgents} />\n <SessionMetricTile id=\"errors\" label=\"Errors\" value={metrics.errors} />\n </div>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentSessionMetricsStrip: ComponentType<AgentSessionMetricsStripProps>;\n }\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { useOptionalServer } from '../../server/ServerContext.js';\nimport { useOptionalShellMode } from '../../server/ShellModeContext.js';\nimport type { AgentLibraryEntry } from '../../server/types.js';\nimport { SESSION_CUSTOM_RANGE_MAX_DAYS, type SessionTimeRange } from '../../utils/sessionShareUrl.js';\nimport {\n formatSessionTimePresetLabel,\n formatTimezoneOffsetLabel,\n fromDateTimeLocalValue,\n SESSION_TIME_PRESETS,\n toDateTimeLocalValue,\n} from '../../utils/sessionTimePresets.js';\nimport { cn } from '../lib/cn.js';\nimport { auiInputClass } from '../lib/inputClasses.js';\nimport { auiSelectMenuClass, auiSelectOptionClass, auiSelectTriggerClass } from '../lib/selectClasses.js';\nimport { searchAllAgents } from '../lib/useSearchAgentsList.js';\nimport { Button } from '../primitives/Button.js';\nimport { PopoverSelect } from '../primitives/PopoverSelect.js';\n\nexport type AgentSessionsFiltersProps = {\n agentId: string | null;\n timeRange: SessionTimeRange;\n onAgentChange: (agentId: string | null) => void;\n onTimeRangeChange: (range: SessionTimeRange) => void;\n showAgentFilter?: boolean;\n showCustomTimeRange?: boolean;\n};\n\nexport function AgentSessionsFilters({\n agentId,\n timeRange,\n onAgentChange,\n onTimeRangeChange,\n showAgentFilter = true,\n showCustomTimeRange = true,\n}: AgentSessionsFiltersProps) {\n const server = useOptionalServer();\n const shell = useOptionalShellMode();\n const [agents, setAgents] = useState<AgentLibraryEntry[]>([]);\n const [menuOpen, setMenuOpen] = useState(false);\n const [customPickerOpen, setCustomPickerOpen] = useState(false);\n const [fromValue, setFromValue] = useState(() => toDateTimeLocalValue(timeRange.startTs));\n const [toValue, setToValue] = useState(() => toDateTimeLocalValue(timeRange.endTs));\n const popoverRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!showAgentFilter || server == null) return undefined;\n let cancelled = false;\n void searchAllAgents(server).then(\n rows => {\n if (!cancelled) setAgents(rows);\n },\n () => undefined,\n );\n return () => {\n cancelled = true;\n };\n }, [server, shell?.agentsListEpoch, showAgentFilter]);\n\n useEffect(() => {\n setFromValue(toDateTimeLocalValue(timeRange.startTs));\n setToValue(toDateTimeLocalValue(timeRange.endTs));\n }, [timeRange.endTs, timeRange.startTs]);\n\n useEffect(() => {\n if (!menuOpen) return undefined;\n const onPointerDown = (event: PointerEvent) => {\n if (popoverRef.current?.contains(event.target as Node) !== true) {\n setMenuOpen(false);\n setCustomPickerOpen(false);\n }\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') return;\n setMenuOpen(false);\n setCustomPickerOpen(false);\n };\n document.addEventListener('pointerdown', onPointerDown);\n document.addEventListener('keydown', onKeyDown);\n return () => {\n document.removeEventListener('pointerdown', onPointerDown);\n document.removeEventListener('keydown', onKeyDown);\n };\n }, [menuOpen]);\n\n const timeLabel =\n timeRange.timeWindowMs != null\n ? (formatSessionTimePresetLabel(timeRange.timeWindowMs) ?? 'Custom Time Range')\n : 'Custom Time Range';\n\n const applyCustom = () => {\n const startTs = fromDateTimeLocalValue(fromValue);\n const endTs = fromDateTimeLocalValue(toValue);\n if (startTs == null || endTs == null || startTs >= endTs) return;\n const minStart = Date.now() - SESSION_CUSTOM_RANGE_MAX_DAYS * 24 * 60 * 60 * 1000;\n const clampedStartTs = Math.max(startTs, minStart);\n if (clampedStartTs >= endTs) return;\n onTimeRangeChange({ startTs: clampedStartTs, endTs });\n setMenuOpen(false);\n setCustomPickerOpen(false);\n };\n\n return (\n <div className=\"flex min-w-0 items-center gap-2\">\n {showAgentFilter ? (\n <PopoverSelect\n aria-label=\"Filter sessions by agent\"\n prefix=\"Agents\"\n className=\"min-w-[12rem]\"\n value={agentId ?? ''}\n options={[\n { value: '', label: 'All' },\n ...agents.map(agent => ({ value: agent.agentId ?? agent.name, label: agent.name })),\n ]}\n onValueChange={value => onAgentChange(value.length === 0 ? null : value)}\n />\n ) : null}\n <div className=\"relative\" ref={popoverRef}>\n <button\n type=\"button\"\n aria-expanded={menuOpen}\n aria-haspopup=\"listbox\"\n className={auiSelectTriggerClass('min-w-36')}\n onClick={() => {\n setMenuOpen(open => {\n if (open) setCustomPickerOpen(false);\n return !open;\n });\n }}\n >\n <span className=\"truncate\">{timeLabel}</span>\n <Icon name=\"chevron-down\" className=\"size-4 shrink-0\" />\n </button>\n {menuOpen ? (\n <div className={auiSelectMenuClass('right-0 flex max-h-none overflow-y-visible p-0')}>\n {customPickerOpen ? (\n <div className=\"flex w-64 min-w-0 flex-col gap-2 border-r border-border p-3\">\n <div className=\"text-sm font-medium text-text-primary\">Select Time Range</div>\n <p className=\"text-xs text-text-secondary\">{`You can select time for last ${String(SESSION_CUSTOM_RANGE_MAX_DAYS)} days`}</p>\n <label className=\"flex flex-col gap-1 text-xs text-text-secondary\">\n From\n <input\n type=\"datetime-local\"\n step=\"1\"\n className={auiInputClass('h-8')}\n value={fromValue}\n onChange={event => setFromValue(event.target.value)}\n />\n </label>\n <label className=\"flex flex-col gap-1 text-xs text-text-secondary\">\n To\n <input\n type=\"datetime-local\"\n step=\"1\"\n className={auiInputClass('h-8')}\n value={toValue}\n onChange={event => setToValue(event.target.value)}\n />\n </label>\n <p className=\"text-xs text-text-secondary\">\n Timezone: <span className=\"font-medium text-text-primary\">{formatTimezoneOffsetLabel()}</span>\n </p>\n <Button.Primary type=\"button\" className=\"mt-auto\" onClick={applyCustom}>\n Apply\n </Button.Primary>\n </div>\n ) : null}\n <div className=\"flex max-h-80 w-44 shrink-0 flex-col overflow-y-auto p-1\" role=\"listbox\">\n {showCustomTimeRange ? (\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={timeRange.timeWindowMs == null}\n className={auiSelectOptionClass()}\n onClick={() => setCustomPickerOpen(true)}\n >\n <span className=\"min-w-0 flex-1 truncate\">Custom Time Range</span>\n <Icon\n name=\"check\"\n className={cn(\n 'ml-auto size-4 shrink-0',\n timeRange.timeWindowMs == null ? 'opacity-100' : 'opacity-0',\n )}\n />\n </button>\n ) : null}\n {SESSION_TIME_PRESETS.map(preset => {\n const selected = timeRange.timeWindowMs === preset.windowMs;\n return (\n <button\n key={preset.windowMs}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n className={auiSelectOptionClass()}\n onClick={() => {\n const endTs = Date.now();\n onTimeRangeChange({\n startTs: endTs - preset.windowMs,\n endTs,\n timeWindowMs: preset.windowMs,\n });\n setMenuOpen(false);\n setCustomPickerOpen(false);\n }}\n >\n <span className=\"min-w-0 flex-1 truncate\">{preset.label}</span>\n <Icon\n name=\"check\"\n className={cn('ml-auto size-4 shrink-0', selected ? 'opacity-100' : 'opacity-0')}\n />\n </button>\n );\n })}\n </div>\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentSessionsFilters: typeof AgentSessionsFilters;\n }\n}\n","export const SESSION_TIME_PRESETS = [\n { label: 'Last 30 minutes', windowMs: 30 * 60 * 1000 },\n { label: 'Last 1 hour', windowMs: 60 * 60 * 1000 },\n { label: 'Last 3 hours', windowMs: 3 * 60 * 60 * 1000 },\n { label: 'Last 6 hours', windowMs: 6 * 60 * 60 * 1000 },\n { label: 'Last 12 hours', windowMs: 12 * 60 * 60 * 1000 },\n { label: 'Last 24 hours', windowMs: 24 * 60 * 60 * 1000 },\n { label: 'Last 2 days', windowMs: 2 * 24 * 60 * 60 * 1000 },\n { label: 'Last 7 days', windowMs: 7 * 24 * 60 * 60 * 1000 },\n { label: 'Last 30 days', windowMs: 30 * 24 * 60 * 60 * 1000 },\n] as const;\n\nexport function formatSessionTimePresetLabel(windowMs: number): string | null {\n return SESSION_TIME_PRESETS.find(preset => preset.windowMs === windowMs)?.label ?? null;\n}\n\nexport function formatTimezoneOffsetLabel(date = new Date()): string {\n const offsetMin = -date.getTimezoneOffset();\n const sign = offsetMin >= 0 ? '+' : '-';\n const abs = Math.abs(offsetMin);\n const hours = String(Math.floor(abs / 60)).padStart(2, '0');\n const minutes = String(abs % 60).padStart(2, '0');\n return `UTC${sign}${hours}:${minutes}`;\n}\n\nexport function toDateTimeLocalValue(ts: number): string {\n const date = new Date(ts);\n const pad = (value: number) => String(value).padStart(2, '0');\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`;\n}\n\nexport function fromDateTimeLocalValue(value: string): number | null {\n const parsed = new Date(value).getTime();\n return Number.isNaN(parsed) ? null : parsed;\n}\n","import { cn } from './cn.js';\n\nconst baseClasses =\n 'w-full cursor-text rounded-md border border-input-border bg-input-box-bg px-3 text-sm text-text-primary outline-none placeholder:text-text-secondary/70 focus-visible:ring-2 focus-visible:ring-focus-ring/40 disabled:cursor-not-allowed';\n\n/**\n * Shared text-input / textarea className helper. Callers add height, shadow, or\n * layout via `className` (e.g. `auiInputClass('h-11 shadow-sm')`) so the token\n * surface, border, and focus ring stay identical across every settings form.\n */\nexport function auiInputClass(className?: string): string {\n return cn(baseClasses, className);\n}\n","import { cn } from './cn.js';\nimport { auiInputClass } from './inputClasses.js';\n\n/**\n * Shared dropdown chrome. Every select-like surface (PopoverSelect, the session\n * time-range popover) composes these so triggers, menus, and option rows stay\n * visually identical; callers pass `className` for width and placement only.\n */\nexport function auiSelectTriggerClass(className?: string): string {\n return auiInputClass(cn('flex h-8 cursor-pointer items-center justify-between gap-2 pr-2 text-left', className));\n}\n\n/** Prefixed chip trigger: static label | selected chip + chevron. */\nexport function auiSelectPrefixTriggerClass(className?: string): string {\n return cn(\n 'inline-flex h-8 w-full cursor-pointer items-center rounded-md border border-border bg-input-box-bg text-left text-sm text-text-primary outline-none',\n 'focus-visible:ring-2 focus-visible:ring-focus-ring/40 disabled:cursor-not-allowed disabled:opacity-50',\n className,\n );\n}\n\nexport function auiSelectMenuClass(className?: string): string {\n return cn(\n 'bg-card-bg text-text-primary absolute top-full z-50 mt-1 max-h-64 overflow-y-auto rounded-md border border-border p-1 shadow-md',\n className,\n );\n}\n\nexport function auiSelectOptionClass(className?: string): string {\n return cn(\n 'text-text-primary flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-left text-sm outline-none transition-colors',\n 'hover:bg-ghost-button-hover focus:bg-dropdown-selected-item-bg focus:text-dropdown-selected-item-text',\n 'disabled:pointer-events-none disabled:opacity-50',\n className,\n );\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useOptionalServer } from '../../server/ServerContext.js';\nimport type { AgentBuilderServer, AgentLibraryEntry } from '../../server/types.js';\nimport { getErrorMessage } from '../../utils/getErrorMessage.js';\nimport { useDebouncedValue } from './useDebouncedValue.js';\n\nexport const SEARCH_AGENTS_PAGE_SIZE = 50;\nconst DEFAULT_DEBOUNCE_MS = 300;\nconst LOAD_MORE_ROOT_MARGIN = '48px';\n\n/** Drain every `searchAgents` page (offset pagination). */\nexport async function searchAllAgents(\n server: Pick<AgentBuilderServer, 'searchAgents'>,\n offset = 0,\n): Promise<AgentLibraryEntry[]> {\n const rows = await server.searchAgents({ limit: SEARCH_AGENTS_PAGE_SIZE, offset });\n if (rows.length < SEARCH_AGENTS_PAGE_SIZE) return rows;\n return [...rows, ...(await searchAllAgents(server, offset + rows.length))];\n}\n\nexport type UseSearchAgentsListOptions = {\n /** When false, no fetches run. */\n enabled: boolean;\n query: string;\n /** Bump to force a replace fetch (e.g. agentsListEpoch). */\n refreshKey?: number;\n limit?: number;\n debounceMs?: number;\n};\n\nexport type UseSearchAgentsListResult = {\n agents: AgentLibraryEntry[];\n /** True while the replace fetch is in flight and the list is still empty. */\n isInitialLoading: boolean;\n /** True while replacing results that are already on screen (softer than a skeleton wipe). */\n isSearching: boolean;\n loadingMore: boolean;\n error: string | null;\n hasMore: boolean;\n listRef: (node: HTMLElement | null) => void;\n sentinelRef: (node: HTMLElement | null) => void;\n};\n\n/**\n * Debounced `searchAgents` with offset pagination and an IntersectionObserver sentinel.\n * Attach `listRef` to the scroll container and `sentinelRef` to a footer element.\n */\nexport function useSearchAgentsList({\n enabled,\n query,\n refreshKey = 0,\n limit = SEARCH_AGENTS_PAGE_SIZE,\n debounceMs = DEFAULT_DEBOUNCE_MS,\n}: UseSearchAgentsListOptions): UseSearchAgentsListResult {\n const server = useOptionalServer();\n // While closed, sync immediately so reopen never fetches a stale query.\n const debouncedQuery = useDebouncedValue(query, enabled ? debounceMs : 0);\n\n const [agents, setAgents] = useState<AgentLibraryEntry[]>([]);\n const [loading, setLoading] = useState(false);\n const [loadingMore, setLoadingMore] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [hasMore, setHasMore] = useState(false);\n\n const genRef = useRef(0);\n const loadMoreInflightRef = useRef(false);\n const hasMoreRef = useRef(false);\n const agentsLenRef = useRef(0);\n const listElRef = useRef<HTMLElement | null>(null);\n const sentinelElRef = useRef<HTMLElement | null>(null);\n const [listEl, setListEl] = useState<HTMLElement | null>(null);\n const [sentinelEl, setSentinelEl] = useState<HTMLElement | null>(null);\n\n hasMoreRef.current = hasMore;\n agentsLenRef.current = agents.length;\n\n const listRef = useCallback((node: HTMLElement | null) => {\n listElRef.current = node;\n setListEl(node);\n }, []);\n\n const sentinelRef = useCallback((node: HTMLElement | null) => {\n sentinelElRef.current = node;\n setSentinelEl(node);\n }, []);\n\n const searchQuery = debouncedQuery.trim() || undefined;\n\n useEffect(() => {\n if (!enabled || server == null) return;\n\n const gen = ++genRef.current;\n loadMoreInflightRef.current = false;\n setLoading(true);\n setError(null);\n\n void server\n .searchAgents({ query: searchQuery, limit, offset: 0 })\n .then(rows => {\n if (gen !== genRef.current) return;\n setAgents(rows);\n setHasMore(rows.length >= limit);\n })\n .catch((err: unknown) => {\n if (gen !== genRef.current) return;\n setAgents([]);\n setHasMore(false);\n setError(getErrorMessage(err, 'Failed to load agents.'));\n })\n .finally(() => {\n if (gen === genRef.current) setLoading(false);\n });\n\n return () => {\n genRef.current += 1;\n };\n }, [enabled, server, searchQuery, limit, refreshKey]);\n\n const loadMore = useCallback(() => {\n if (!enabled || server == null || !hasMoreRef.current || loadMoreInflightRef.current || loading) {\n return;\n }\n\n const gen = genRef.current;\n const offset = agentsLenRef.current;\n loadMoreInflightRef.current = true;\n setLoadingMore(true);\n\n void server\n .searchAgents({ query: searchQuery, limit, offset })\n .then(rows => {\n if (gen !== genRef.current) return;\n setAgents(prev => [...prev, ...rows]);\n setHasMore(rows.length >= limit);\n })\n .catch(() => {\n if (gen !== genRef.current) return;\n setHasMore(false);\n })\n .finally(() => {\n loadMoreInflightRef.current = false;\n if (gen === genRef.current) setLoadingMore(false);\n });\n }, [enabled, server, searchQuery, limit, loading]);\n\n useEffect(() => {\n if (!enabled || !hasMore || listEl == null || sentinelEl == null) return;\n\n const observer = new IntersectionObserver(\n entries => {\n if (entries.some(entry => entry.isIntersecting)) {\n loadMore();\n }\n },\n { root: listEl, rootMargin: LOAD_MORE_ROOT_MARGIN },\n );\n observer.observe(sentinelEl);\n return () => observer.disconnect();\n }, [enabled, hasMore, listEl, sentinelEl, loadMore, agents.length]);\n\n return {\n agents,\n isInitialLoading: loading && agents.length === 0,\n isSearching: loading && agents.length > 0,\n loadingMore,\n error,\n hasMore,\n listRef,\n sentinelRef,\n };\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\n\n/** Returns `value` immediately on first render; subsequent changes apply after `delayMs`. */\nexport function useDebouncedValue<T>(value: T, delayMs: number): T {\n const [debounced, setDebounced] = useState(value);\n\n useEffect(() => {\n const id = window.setTimeout(() => setDebounced(value), delayMs);\n return () => window.clearTimeout(id);\n }, [value, delayMs]);\n\n return debounced;\n}\n","'use client';\n\nimport { useEffect, useId, useRef, useState } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { cn } from '../lib/cn.js';\nimport {\n auiSelectMenuClass,\n auiSelectOptionClass,\n auiSelectPrefixTriggerClass,\n auiSelectTriggerClass,\n} from '../lib/selectClasses.js';\n\nexport type PopoverSelectOption<T extends string> = {\n value: T;\n label: string;\n disabled?: boolean;\n};\n\ntype CommonPopoverSelectProps<T extends string> = {\n options: readonly PopoverSelectOption<T>[];\n placeholder?: string;\n disabled?: boolean;\n className?: string;\n /** Which edge of the trigger the menu opens toward. Default `bottom`. */\n menuPlacement?: 'top' | 'bottom';\n /** When set, renders a labeled chip trigger (label | value chip + chevron). */\n prefix?: string;\n 'aria-label': string;\n};\n\nexport type PopoverSelectProps<T extends string> = CommonPopoverSelectProps<T> &\n (\n | {\n multiple?: false;\n value: T;\n onValueChange: (value: T) => void;\n }\n | {\n multiple: true;\n value: readonly T[];\n onValueChange: (value: T[]) => void;\n }\n );\n\nexport function PopoverSelect<T extends string>(props: PopoverSelectProps<T>) {\n const [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const listboxRef = useRef<HTMLDivElement>(null);\n const listboxId = useId();\n\n useEffect(() => {\n if (!open) return;\n\n const handlePointerDown = (event: MouseEvent) => {\n if (event.target instanceof Node && !rootRef.current?.contains(event.target)) setOpen(false);\n };\n document.addEventListener('mousedown', handlePointerDown);\n return () => document.removeEventListener('mousedown', handlePointerDown);\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n const selected = listboxRef.current?.querySelector<HTMLElement>('[role=\"option\"][aria-selected=\"true\"]');\n const first = listboxRef.current?.querySelector<HTMLElement>('[role=\"option\"]:not([aria-disabled=\"true\"])');\n (selected ?? first)?.focus();\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n setOpen(false);\n triggerRef.current?.focus();\n return;\n }\n if (!['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) return;\n\n const items = Array.from(\n listboxRef.current?.querySelectorAll<HTMLElement>('[role=\"option\"]:not([aria-disabled=\"true\"])') ?? [],\n );\n if (items.length === 0) return;\n\n event.preventDefault();\n const currentIndex = items.findIndex(item => item === document.activeElement);\n const nextIndex =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? items.length - 1\n : event.key === 'ArrowDown'\n ? (currentIndex + 1) % items.length\n : (currentIndex - 1 + items.length) % items.length;\n items[nextIndex]?.focus();\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [open]);\n\n const isSelected = (value: T) => (props.multiple ? props.value.includes(value) : props.value === value);\n\n const selectedLabels = props.options.filter(option => isSelected(option.value)).map(option => option.label);\n const triggerLabel =\n selectedLabels.length === 0\n ? (props.placeholder ?? 'Select')\n : props.multiple && selectedLabels.length > 1\n ? `${selectedLabels.length} selected`\n : selectedLabels[0];\n\n const select = (option: PopoverSelectOption<T>) => {\n if (option.disabled) return;\n if (props.multiple) {\n props.onValueChange(\n props.value.includes(option.value)\n ? props.value.filter(value => value !== option.value)\n : [...props.value, option.value],\n );\n return;\n }\n props.onValueChange(option.value);\n setOpen(false);\n triggerRef.current?.focus();\n };\n\n const menuPlacement = props.menuPlacement ?? 'bottom';\n\n return (\n <div ref={rootRef} className={cn('relative', props.className)}>\n <button\n ref={triggerRef}\n type=\"button\"\n disabled={props.disabled}\n aria-label={props['aria-label']}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? listboxId : undefined}\n className={props.prefix != null ? auiSelectPrefixTriggerClass() : auiSelectTriggerClass()}\n onClick={() => setOpen(value => !value)}\n onKeyDown={event => {\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n setOpen(true);\n }\n }}\n >\n {props.prefix != null ? (\n <>\n <span className=\"text-text-primary shrink-0 border-r border-border px-3 font-semibold\">{props.prefix}</span>\n <span className=\"flex min-w-0 flex-1 items-center justify-between gap-2 px-2\">\n <span className=\"bg-primary-button-bg/10 text-text-primary truncate rounded px-2 py-0.5 text-sm\">\n {triggerLabel}\n </span>\n <Icon name=\"chevron-down\" className=\"text-text-secondary size-4 shrink-0\" />\n </span>\n </>\n ) : (\n <>\n <span className=\"truncate\">{triggerLabel}</span>\n <Icon name=\"chevron-down\" className=\"size-4 shrink-0\" />\n </>\n )}\n </button>\n\n {open ? (\n <div\n ref={listboxRef}\n id={listboxId}\n role=\"listbox\"\n aria-label={props['aria-label']}\n aria-multiselectable={props.multiple || undefined}\n className={cn(\n auiSelectMenuClass('left-0 min-w-full'),\n menuPlacement === 'top' && 'top-auto bottom-full mt-0 mb-1',\n )}\n >\n {props.options.map(option => {\n const selected = isSelected(option.value);\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n aria-disabled={option.disabled || undefined}\n disabled={option.disabled}\n className={auiSelectOptionClass()}\n onClick={() => select(option)}\n >\n <span className=\"min-w-0 flex-1 whitespace-nowrap\">{option.label}</span>\n <Icon name=\"check\" className={cn('ml-auto size-4 shrink-0', selected ? 'opacity-100' : 'opacity-0')} />\n </button>\n );\n })}\n </div>\n ) : null}\n </div>\n );\n}\n","'use client';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { formatCostUsd, formatDurationMs, formatTokenCount } from '../../utils/sessionDisplayFormat.js';\nimport { LightTooltip } from '../primitives/Tooltip.js';\nimport type { AgentSessionTurnHeaderProps } from './types.js';\n\nfunction TurnTokenBreakdownTooltip({\n inputTokens,\n outputTokens,\n cachedTokens,\n}: {\n inputTokens: number;\n outputTokens: number;\n cachedTokens: number;\n}) {\n const rows = [\n { label: 'Input', value: inputTokens },\n { label: 'Output', value: outputTokens },\n { label: 'Cached', value: cachedTokens },\n ] as const;\n return (\n <div className=\"min-w-28 px-2 py-1.5 text-xs text-text-primary\">\n <div className=\"flex flex-col gap-1\">\n {rows.map(row => (\n <div key={row.label} className=\"flex items-center justify-between gap-4\">\n <span className=\"text-text-secondary\">{row.label}</span>\n <span className=\"tabular-nums font-medium text-text-primary\">{formatTokenCount(row.value)}</span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nexport function AgentSessionTurnHeader({\n turnNumber,\n totalTokens,\n inputTokens,\n outputTokens,\n cachedTokens,\n durationMs,\n totalCostInUsd,\n}: AgentSessionTurnHeaderProps) {\n const hasMetrics = totalTokens != null || durationMs != null || totalCostInUsd != null;\n const hasTokenBreakdown = inputTokens != null || outputTokens != null || cachedTokens != null;\n const breakdownInput = inputTokens ?? 0;\n const breakdownOutput = outputTokens ?? 0;\n const breakdownCached = cachedTokens ?? 0;\n\n const tokensTrigger =\n totalTokens != null ? (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 rounded-sm text-inherit\"\n aria-label={\n hasTokenBreakdown\n ? `Tokens ${formatTokenCount(totalTokens)}. Input ${formatTokenCount(breakdownInput)}, Output ${formatTokenCount(breakdownOutput)}, Cached ${formatTokenCount(breakdownCached)}`\n : `Tokens ${formatTokenCount(totalTokens)}`\n }\n >\n <Icon name=\"link\" className=\"size-3.5 shrink-0\" aria-hidden />\n {`Tokens ${formatTokenCount(totalTokens)}`}\n </button>\n ) : null;\n\n return (\n <div className=\"flex items-center gap-3 py-1 text-xs text-text-secondary\">\n <span className=\"shrink-0 font-semibold text-text-primary\">{`Turn ${turnNumber}`}</span>\n <div className=\"h-px min-w-4 flex-1 bg-border\" aria-hidden=\"true\" />\n {hasMetrics ? (\n <div className=\"flex shrink-0 items-center gap-3 tabular-nums\">\n {tokensTrigger != null ? (\n hasTokenBreakdown ? (\n <LightTooltip\n title={\n <TurnTokenBreakdownTooltip\n inputTokens={breakdownInput}\n outputTokens={breakdownOutput}\n cachedTokens={breakdownCached}\n />\n }\n side=\"bottom\"\n >\n {tokensTrigger}\n </LightTooltip>\n ) : (\n tokensTrigger\n )\n ) : null}\n {durationMs != null ? (\n <span className=\"inline-flex items-center gap-1\">\n <Icon name=\"clock\" className=\"size-3.5 shrink-0\" />\n {`Duration ${formatDurationMs(durationMs)}`}\n </span>\n ) : null}\n {totalCostInUsd != null ? <span>{`Cost ${formatCostUsd(totalCostInUsd)}`}</span> : null}\n </div>\n ) : null}\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentSessionTurnHeader: typeof AgentSessionTurnHeader;\n }\n}\n","'use client';\n\nimport { Suspense, useEffect, useMemo, useState } from 'react';\n\nimport { useSessionShareSearch } from '../../hooks/useSessionShareSearch.js';\nimport { useOptionalAgentSessionsServer } from '../../server/ServerContext.js';\nimport { useSlot } from '../../theme/SlotsProvider.js';\nimport {\n defaultSessionTimeRange,\n readSessionShareSearch,\n resolveSessionTimeRange,\n type SessionTimeRange,\n} from '../../utils/sessionShareUrl.js';\nimport { PageHeader } from '../PageHeader.js';\nimport { Skeleton } from '../primitives/Skeleton.js';\n\nexport function SessionsPage() {\n const sessionsServer = useOptionalAgentSessionsServer();\n const { updateShareSearch } = useSessionShareSearch();\n const AgentSessions = useSlot('AgentSessions');\n const AgentSessionsFilters = useSlot('AgentSessionsFilters');\n\n const [agentFilter, setAgentFilter] = useState<string | null>(\n () => readSessionShareSearch(window.location.search).agentId,\n );\n const [timeRange, setTimeRange] = useState<SessionTimeRange>(\n () => readSessionShareSearch(window.location.search).timeRange ?? defaultSessionTimeRange(),\n );\n\n useEffect(() => {\n const share = readSessionShareSearch(window.location.search);\n updateShareSearch({\n view: 'sessions',\n ...(share.timeRange == null ? { timeRange } : {}),\n });\n // Seed `view=sessions` and the default window once; later writes come from the filters.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const syncFilters = () => {\n const share = readSessionShareSearch(window.location.search);\n setAgentFilter(share.agentId);\n setTimeRange(share.timeRange ?? defaultSessionTimeRange());\n };\n window.addEventListener('popstate', syncFilters);\n return () => window.removeEventListener('popstate', syncFilters);\n }, []);\n\n // Resolve relative presets only when the filter changes. Unrelated query\n // updates (such as selecting a session) must not shift/refetch the list.\n const resolved = useMemo(() => resolveSessionTimeRange(timeRange), [timeRange]);\n\n return (\n <div className=\"flex h-full min-h-0 w-full flex-col bg-primary-bg\">\n <PageHeader\n title=\"Agent Sessions\"\n end={\n <AgentSessionsFilters\n agentId={agentFilter}\n timeRange={timeRange}\n onAgentChange={nextAgentId => {\n setAgentFilter(nextAgentId);\n updateShareSearch({ agentId: nextAgentId, sessionId: null, view: 'sessions' });\n }}\n onTimeRangeChange={nextRange => {\n setTimeRange(nextRange);\n updateShareSearch({ timeRange: nextRange, sessionId: null, view: 'sessions' });\n }}\n />\n }\n />\n <div className=\"min-h-0 flex-1\">\n {sessionsServer == null ? (\n <p className=\"px-6 py-12 text-center text-sm text-text-secondary\">Session history is not available.</p>\n ) : (\n <Suspense\n fallback={\n <div className=\"p-4\" role=\"status\" aria-label=\"Loading sessions\">\n <Skeleton className=\"min-h-64 rounded-lg\" />\n </div>\n }\n >\n <AgentSessions\n agentId={agentFilter ?? undefined}\n startTimestamp={new Date(resolved.startTs).toISOString()}\n endTimestamp={new Date(resolved.endTs).toISOString()}\n shareView=\"sessions\"\n />\n </Suspense>\n )}\n </div>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n SessionsPage: typeof SessionsPage;\n }\n}\n","'use client';\n\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { useSessionShareSearch } from '../hooks/useSessionShareSearch.js';\nimport { Icon } from '../icons/Icon.js';\nimport { isSchedulesChromeEnabled, isSessionsChromeEnabled } from '../server/serverChrome.js';\nimport { useOptionalAgentSessionsServer, useOptionalScheduleServer } from '../server/ServerContext.js';\nimport { libraryAgentId, useShellMode } from '../server/ShellModeContext.js';\nimport type { AgentLibraryEntry, AgentSpec, Schedule } from '../server/types.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { writeOpenSchedulesForAgentSearch } from '../utils/scheduleShareUrl.js';\nimport { AgentOverflowMenu } from './AgentOverflowMenu.js';\nimport { EmptyScreen, EmptyScreenQueryHighlight } from './EmptyScreen.js';\nimport { cn } from './lib/cn.js';\nimport { mountName } from './lib/mountName.js';\nimport { useSearchAgentsList } from './lib/useSearchAgentsList.js';\nimport { PageHeader } from './PageHeader.js';\nimport { Button } from './primitives/Button.js';\nimport SearchInput from './primitives/SearchInput.js';\nimport { Skeleton } from './primitives/Skeleton.js';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './primitives/Table.js';\nimport { Tooltip } from './primitives/Tooltip.js';\n\nexport type AgentsLibraryProps = {\n onSelectAgent?: (agentName: string) => void;\n};\n\nexport type AgentScheduleSummary = {\n count: number;\n hasPaused: boolean;\n};\n\nexport type AgentLibraryRowProps = {\n agent: AgentLibraryEntry;\n canMutate: boolean;\n canManageSchedules: boolean;\n scheduleSummary?: AgentScheduleSummary | null;\n onOpenSchedules?: () => void;\n onCreateSchedule?: () => void;\n onOpen?: () => void;\n onTry: () => void;\n onEdit: () => void;\n onManageSchedules?: () => void;\n};\n\n/** Short label for model fqns like `provider/gpt-4.1` → `gpt-4.1`. */\nfunction displayModelLabel(modelName: string): string {\n const slash = modelName.lastIndexOf('/');\n return slash >= 0 ? modelName.slice(slash + 1) : modelName;\n}\n\nfunction AgentSchedulesEmptyState({ agentName, onOpen }: { agentName: string; onOpen?: () => void }) {\n return (\n <button\n type=\"button\"\n aria-label={`Add schedule for ${agentName}`}\n className=\"text-text-secondary hover:text-primary-button-bg cursor-pointer text-sm font-medium\"\n onClick={onOpen}\n >\n <span aria-hidden className=\"md:group-hover:hidden\">\n -\n </span>\n <span aria-hidden className=\"hidden items-center gap-1 md:group-hover:inline-flex\">\n <Icon name=\"plus\" className=\"size-3.5 shrink-0\" />\n Schedule\n </span>\n </button>\n );\n}\n\nfunction AgentSchedulesBadge({\n summary,\n agentName,\n onOpen,\n}: {\n summary: AgentScheduleSummary;\n agentName: string;\n onOpen?: () => void;\n}) {\n const warning = summary.hasPaused;\n return (\n <button\n type=\"button\"\n aria-label={`${String(summary.count)} schedules for ${agentName}${warning ? ' (has paused)' : ''}`}\n className={cn(\n 'inline-flex cursor-pointer items-center gap-1 rounded-md border px-2 py-0.5 text-xs font-medium',\n warning\n ? 'border-amber-600/30 bg-amber-500/10 text-amber-800 dark:text-amber-300'\n : 'border-border bg-secondary-bg text-text-secondary',\n )}\n onClick={onOpen}\n >\n <Icon name=\"calendar-clock\" className=\"size-3.5 shrink-0\" />\n <span>{summary.count}</span>\n {warning ? <Icon name=\"triangle-exclamation\" className=\"size-3.5 shrink-0\" /> : null}\n </button>\n );\n}\n\nexport function AgentLibraryRow({\n agent,\n canMutate,\n canManageSchedules,\n scheduleSummary,\n onOpenSchedules,\n onCreateSchedule,\n onOpen,\n onTry,\n onEdit,\n onManageSchedules,\n}: AgentLibraryRowProps) {\n const spec = agent.agentSpec;\n const modelName = spec?.model.name;\n const skillsCount = spec?.skills?.length ?? 0;\n const mcpCount = spec?.mcpServers?.length ?? 0;\n const skillNames = (spec?.skills ?? []).map(mountName).filter((name: string | null): name is string => name != null);\n const mcpNames = (spec?.mcpServers ?? [])\n .map(mountName)\n .filter((name: string | null): name is string => name != null);\n const modelLabel = modelName != null ? displayModelLabel(modelName) : null;\n const modelTitle = modelName ?? '';\n const connectorsTitle = mcpNames.length ? mcpNames.join(', ') : `${mcpCount} connectors`;\n const skillsTitle = skillNames.length ? skillNames.join(', ') : `${skillsCount} skills`;\n const hasConfiguration = modelLabel != null || skillsCount > 0 || mcpCount > 0;\n\n const hasNoSchedules = scheduleSummary != null && scheduleSummary.count === 0;\n\n return (\n <TableRow className={hasNoSchedules ? 'group' : undefined}>\n <TableCell className=\"text-text-primary font-medium\">\n <div className=\"flex min-w-0 items-center gap-2.5\">\n <span className=\"bg-primary-bg text-text-secondary inline-flex size-8 shrink-0 items-center justify-center rounded-md border border-border\">\n <Icon name=\"agent-2\" className=\"size-4\" />\n </span>\n <div className=\"min-w-0\">\n {onOpen == null ? (\n <span className=\"block truncate\">{agent.name}</span>\n ) : (\n <button\n type=\"button\"\n className=\"block max-w-full cursor-pointer text-left\"\n aria-label={`Open ${agent.name}`}\n onClick={onOpen}\n >\n <span className=\"block truncate\">{agent.name}</span>\n </button>\n )}\n </div>\n </div>\n </TableCell>\n <TableCell>\n {hasConfiguration ? (\n <div className=\"text-text-secondary flex min-w-0 items-center gap-2\">\n {modelLabel != null ? (\n <Tooltip content={modelTitle}>\n <span\n className=\"bg-secondary-bg text-text-secondary inline-flex max-w-[10rem] items-center gap-1 truncate rounded-full px-2 py-0.5 text-xs font-medium\"\n aria-label={modelTitle}\n >\n <Icon name=\"cpu\" className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">{modelLabel}</span>\n </span>\n </Tooltip>\n ) : null}\n {skillsCount > 0 ? (\n <Tooltip content={skillsTitle}>\n <span className=\"inline-flex items-center gap-1 text-xs\" aria-label={`Skills: ${skillsTitle}`}>\n <Icon name=\"lightbulb\" className=\"size-3.5 shrink-0\" />\n {skillsCount}\n </span>\n </Tooltip>\n ) : null}\n {mcpCount > 0 ? (\n <Tooltip content={connectorsTitle}>\n <span className=\"inline-flex items-center gap-1 text-xs\" aria-label={`Connectors: ${connectorsTitle}`}>\n <Icon name=\"plug\" className=\"size-3.5 shrink-0\" />\n {mcpCount}\n </span>\n </Tooltip>\n ) : null}\n </div>\n ) : (\n <span className=\"text-text-secondary text-sm\" aria-label={`Configuration unavailable for ${agent.name}`}>\n —\n </span>\n )}\n </TableCell>\n {scheduleSummary !== undefined ? (\n <TableCell>\n {scheduleSummary != null && scheduleSummary.count > 0 ? (\n <AgentSchedulesBadge summary={scheduleSummary} agentName={agent.name} onOpen={onOpenSchedules} />\n ) : scheduleSummary != null ? (\n <AgentSchedulesEmptyState agentName={agent.name} onOpen={onCreateSchedule} />\n ) : (\n <span className=\"text-text-secondary text-sm\" aria-label={`Schedule count unavailable for ${agent.name}`}>\n —\n </span>\n )}\n </TableCell>\n ) : null}\n <TableCell className=\"w-px\">\n <div className=\"flex items-center justify-end gap-1.5\">\n <Button.Secondary type=\"button\" aria-label={`Try agent ${agent.name}`} size=\"large\" onClick={onTry}>\n <Icon name=\"play\" className=\"size-3.5\" />\n Try\n </Button.Secondary>\n <AgentOverflowMenu\n agentName={agent.name}\n {...(spec != null ? { agentSpec: spec } : {})}\n canMutate={canMutate}\n canManageSchedules={canManageSchedules}\n onEdit={onEdit}\n {...(onManageSchedules != null ? { onManageSchedules } : {})}\n />\n </div>\n </TableCell>\n </TableRow>\n );\n}\n\nfunction summarizeSchedulesByAgent(schedules: readonly Schedule[]): Map<string, AgentScheduleSummary> {\n const map = new Map<string, AgentScheduleSummary>();\n for (const schedule of schedules) {\n const id = schedule.agentId;\n const prev = map.get(id) ?? { count: 0, hasPaused: false };\n const next = {\n count: prev.count + 1,\n hasPaused: prev.hasPaused || schedule.status === 'paused',\n };\n map.set(id, next);\n if (schedule.agentName != null && schedule.agentName !== '' && schedule.agentName !== id) {\n map.set(schedule.agentName, next);\n }\n }\n return map;\n}\n\nasync function listAllSchedulesForAgents({\n listSchedules,\n agentIds,\n}: {\n listSchedules: NonNullable<ReturnType<typeof useOptionalScheduleServer>>['listSchedules'];\n agentIds: string[];\n}): Promise<Schedule[]> {\n if (agentIds.length === 0) return [];\n const rows: Schedule[] = [];\n let pageToken: string | undefined;\n do {\n const page = await listSchedules({\n agentIds,\n limit: 25,\n ...(pageToken === undefined ? {} : { pageToken }),\n });\n rows.push(...page.data);\n pageToken = page.nextPageToken;\n } while (pageToken != null && pageToken !== '');\n return rows;\n}\n\nexport function AgentsLibrary({ onSelectAgent }: AgentsLibraryProps) {\n const shell = useShellMode();\n const { updateShareSearch } = useSessionShareSearch();\n const sessionsServer = useOptionalAgentSessionsServer();\n const scheduleServer = useOptionalScheduleServer();\n const SlottedAgentLibraryRow = useSlot('AgentLibraryRow');\n const [query, setQuery] = useState('');\n const [scheduleByAgent, setScheduleByAgent] = useState<Map<string, AgentScheduleSummary> | null>(null);\n const open = shell.libraryOpen;\n\n const canMutate = shell.isComposerEnabled === true;\n const agentsListEpoch = shell.agentsListEpoch;\n const showSchedulesColumn = isSchedulesChromeEnabled({ schedules: scheduleServer });\n const canManageSchedules = showSchedulesColumn;\n const canOpenAgentDetails = isSessionsChromeEnabled({ sessions: sessionsServer });\n\n useEffect(() => {\n if (!open) setQuery('');\n }, [open]);\n\n const closeLibrary = useCallback(() => {\n shell.setLibraryOpen(false);\n setQuery('');\n }, [shell]);\n\n useEffect(() => {\n if (!open) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape') return;\n event.stopImmediatePropagation();\n closeLibrary();\n };\n window.addEventListener('keydown', onKeyDown, true);\n return () => window.removeEventListener('keydown', onKeyDown, true);\n }, [closeLibrary, open]);\n\n const { agents, isInitialLoading, isSearching, loadingMore, error, hasMore, listRef, sentinelRef } =\n useSearchAgentsList({\n enabled: open,\n query,\n refreshKey: agentsListEpoch,\n });\n\n useEffect(() => {\n if (!open || scheduleServer == null || agents.length === 0) {\n setScheduleByAgent(null);\n return;\n }\n let cancelled = false;\n setScheduleByAgent(null);\n const agentIds = agents.map(libraryAgentId);\n void listAllSchedulesForAgents({ listSchedules: scheduleServer.listSchedules, agentIds })\n .then(rows => {\n if (!cancelled) setScheduleByAgent(summarizeSchedulesByAgent(rows));\n })\n .catch(() => {\n if (!cancelled) setScheduleByAgent(null);\n });\n return () => {\n cancelled = true;\n };\n }, [agents, open, scheduleServer, agentsListEpoch]);\n\n const openSchedulesForAgent = ({ agentId, isNew }: { agentId: string; isNew?: boolean }) => {\n writeOpenSchedulesForAgentSearch({ agentId, ...(isNew === true ? { isNew: true } : {}) });\n shell.setSchedulesOpen(true);\n };\n\n const handleTry = (agent: AgentLibraryEntry) => {\n closeLibrary();\n onSelectAgent?.(agent.name);\n shell.selectLibraryAgent({\n isMutable: false,\n agentId: libraryAgentId(agent),\n agentName: agent.name,\n });\n };\n\n const handleEdit = (agent: AgentLibraryEntry, agentSpec: AgentSpec) => {\n closeLibrary();\n onSelectAgent?.(agent.name);\n shell.selectLibraryAgent({\n isMutable: true,\n isCreateAgent: true,\n agentId: libraryAgentId(agent),\n agentName: agent.name,\n agentSpec,\n });\n };\n\n if (!open) return null;\n\n return (\n <div className=\"flex h-full min-h-0 w-full flex-col bg-primary-bg\">\n <PageHeader\n title=\"Agents\"\n end={\n <div className=\"w-56 shrink-0\">\n <SearchInput query={query} setQuery={setQuery} placeholder=\"Search agents\" />\n {isSearching ? (\n <p className=\"sr-only\" role=\"status\">\n Searching…\n </p>\n ) : null}\n </div>\n }\n />\n\n <div className=\"bg-secondary-bg/40 flex min-h-0 flex-1 flex-col\">\n <div ref={listRef} className=\"flex min-h-0 flex-1 flex-col overflow-y-auto p-4\" aria-label=\"Agents\">\n {isInitialLoading ? (\n <div className=\"flex flex-col gap-2 p-1\" role=\"status\" aria-label=\"Loading agents\">\n {Array.from({ length: 6 }, (_, i) => (\n <Skeleton key={i} className=\"h-11 w-full rounded-md\" />\n ))}\n </div>\n ) : error ? (\n <p className=\"text-failure-bg px-3 py-8 text-center text-sm\">{error}</p>\n ) : agents.length === 0 ? (\n <EmptyScreen\n title=\"No Agents Found\"\n description={\n query.trim() ? (\n <>\n No search results found for <EmptyScreenQueryHighlight>{query.trim()}</EmptyScreenQueryHighlight>\n </>\n ) : (\n 'Build one in a chat, then save it as an agent.'\n )\n }\n />\n ) : (\n <>\n <div className=\"overflow-hidden rounded-lg border border-border\">\n <Table>\n <TableHeader>\n <TableRow className=\"hover:bg-transparent\">\n <TableHead>Agent name</TableHead>\n <TableHead>Configuration</TableHead>\n {showSchedulesColumn ? <TableHead className=\"w-[8rem]\">Schedules</TableHead> : null}\n <TableHead className=\"w-px\">\n <span className=\"sr-only\">Actions</span>\n </TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {agents.map(agent => {\n const agentSpec = agent.agentSpec;\n const agentId = agent.agentId;\n const id = libraryAgentId(agent);\n const summary = showSchedulesColumn\n ? (scheduleByAgent?.get(id) ??\n scheduleByAgent?.get(agent.name) ??\n (scheduleByAgent == null ? null : { count: 0, hasPaused: false }))\n : undefined;\n return (\n <SlottedAgentLibraryRow\n key={id}\n agent={agent}\n canMutate={canMutate}\n canManageSchedules={canManageSchedules}\n {...(summary !== undefined ? { scheduleSummary: summary } : {})}\n {...(showSchedulesColumn\n ? {\n onOpenSchedules: () => openSchedulesForAgent({ agentId: id }),\n onCreateSchedule: () => openSchedulesForAgent({ agentId: id, isNew: true }),\n onManageSchedules: () => openSchedulesForAgent({ agentId: id }),\n }\n : {})}\n {...(canOpenAgentDetails && agentId != null\n ? {\n onOpen: () => {\n updateShareSearch({\n agentId,\n tab: 'overview',\n sessionId: null,\n view: null,\n timeRange: null,\n });\n shell.openLibraryAgent(agentId);\n },\n }\n : {})}\n onTry={() => handleTry(agent)}\n onEdit={() => {\n if (agentSpec != null) handleEdit(agent, agentSpec);\n }}\n />\n );\n })}\n </TableBody>\n </Table>\n </div>\n {hasMore ? (\n <div ref={sentinelRef} className=\"flex h-8 shrink-0 items-center justify-center\" aria-hidden>\n {loadingMore ? (\n <span className=\"text-text-secondary text-xs\" role=\"status\">\n Loading more…\n </span>\n ) : null}\n </div>\n ) : null}\n </>\n )}\n </div>\n </div>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentsLibrary: typeof AgentsLibrary;\n AgentLibraryRow: typeof AgentLibraryRow;\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { cn } from './lib/cn.js';\n\nexport type EmptyScreenProps = {\n title: string;\n description?: ReactNode;\n className?: string;\n};\n\n/** Centered empty surface: `empty` glyph + title + optional supporting copy. */\nexport function EmptyScreen({ title, description, className }: EmptyScreenProps) {\n return (\n <div\n role=\"status\"\n className={cn(\n 'flex h-full min-h-0 w-full flex-1 flex-col items-center justify-center gap-4 px-6 py-16',\n className,\n )}\n >\n <Icon name=\"empty\" size={48} className=\"shrink-0\" aria-hidden />\n <div className=\"flex max-w-md flex-col items-center gap-1.5 text-center\">\n <h2 className=\"text-base font-semibold text-text-primary\">{title}</h2>\n {description != null ? <p className=\"text-sm text-text-secondary\">{description}</p> : null}\n </div>\n </div>\n );\n}\n\n/** Inline pill for a search/filter query inside empty-state descriptions. */\nexport function EmptyScreenQueryHighlight({ children }: { children: string }) {\n return (\n <span className=\"mx-0.5 inline-flex max-w-full truncate rounded-full bg-secondary-bg px-2 py-0.5 align-middle font-mono text-xs text-text-primary\">\n {children}\n </span>\n );\n}\n","export function mountName(mount: object): string | null {\n return 'name' in mount && typeof mount.name === 'string' ? mount.name : null;\n}\n","import { Icon } from '../../icons/Icon.js';\n\ntype SearchInputProps = {\n query: string;\n setQuery: (query: string) => void;\n placeholder?: string;\n};\n\nconst SearchInput = ({ query, setQuery, placeholder = 'Search' }: SearchInputProps) => {\n return (\n <label className=\"relative block\">\n <Icon\n name=\"search\"\n className=\"text-text-secondary pointer-events-none absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2\"\n />\n <input\n type=\"search\"\n value={query}\n onChange={e => setQuery(e.target.value)}\n placeholder={placeholder}\n className=\"border-input-border bg-input-box-bg text-text-primary placeholder:text-text-secondary/70 h-8 w-full rounded-md border py-1 pr-3 pl-8 text-sm outline-none\"\n autoFocus\n />\n </label>\n );\n};\n\nexport default SearchInput;\n","'use client';\n\nimport React from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { cn } from '../lib/cn.js';\nimport { PopoverSelect } from './PopoverSelect.js';\n\nexport const DEFAULT_TABLE_PAGE_SIZE = 10;\nexport const TABLE_PAGE_SIZE_OPTIONS = [10, 25, 50] as const;\n\nexport type TableProps = React.HTMLAttributes<HTMLTableElement> & {\n /** Extra classes on the horizontal scroll wrapper. */\n containerClassName?: string;\n};\n\nexport function Table({ className, containerClassName, ...props }: TableProps) {\n return (\n <div className={cn('w-full overflow-x-auto', containerClassName)}>\n <table className={cn('w-full min-w-full border-collapse bg-primary-bg text-sm', className)} {...props} />\n </div>\n );\n}\n\nexport type TableHeaderProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\nexport function TableHeader({ className, ...props }: TableHeaderProps) {\n return <thead className={cn('bg-primary-bg', className)} {...props} />;\n}\n\nexport type TableBodyProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\nexport function TableBody({ className, ...props }: TableBodyProps) {\n return <tbody className={cn('[&>tr:not(:last-child)>td]:after:block', className)} {...props} />;\n}\n\nexport type TableRowProps = React.HTMLAttributes<HTMLTableRowElement>;\n\nexport function TableRow({ className, ...props }: TableRowProps) {\n return (\n <tr\n className={cn(\n 'group/table-row hover:bg-ghost-button-hover/40',\n '[&_td:first-child_a]:text-text-primary [&_td:first-child_button]:text-text-primary',\n // `:hover` on the row (not group-hover) so the rule lives on the same element as the target descendants.\n 'hover:[&_td:first-child_a]:underline hover:[&_td:first-child_button]:underline',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport type TableHeadProps = React.ThHTMLAttributes<HTMLTableCellElement>;\n\nexport function TableHead({ className, ...props }: TableHeadProps) {\n return (\n <th\n className={cn('text-text-secondary p-3 text-left text-xs font-normal tracking-wide uppercase', className)}\n {...props}\n />\n );\n}\n\nexport type TableCellProps = React.TdHTMLAttributes<HTMLTableCellElement>;\n\nexport function TableCell({ className, ...props }: TableCellProps) {\n return (\n <td\n className={cn(\n 'text-text-secondary relative px-3 py-3',\n // Inset row divider (aligns with cell padding); shown for non-last body rows via TableBody.\n 'after:bg-border after:pointer-events-none after:absolute after:right-0 after:bottom-0 after:left-0 after:hidden after:h-px',\n 'first:after:left-3 last:after:right-3',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport type TablePaginationProps = {\n page: number;\n pageSize: number;\n total: number;\n onPageChange: (page: number) => void;\n onPageSizeChange: (pageSize: number) => void;\n pageSizeOptions?: readonly number[];\n className?: string;\n};\n\nexport function TablePagination({\n page,\n pageSize,\n total,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions = TABLE_PAGE_SIZE_OPTIONS,\n className,\n}: TablePaginationProps) {\n const pageCount = Math.max(1, Math.ceil(total / pageSize));\n const safePage = Math.min(page, pageCount - 1);\n const from = total === 0 ? 0 : safePage * pageSize + 1;\n const to = Math.min(total, (safePage + 1) * pageSize);\n const canPrev = safePage > 0;\n const canNext = safePage < pageCount - 1;\n\n const sizeOptions = pageSizeOptions.map(size => ({\n value: String(size),\n label: String(size),\n }));\n\n return (\n <div\n className={cn(\n 'text-text-secondary flex flex-wrap items-center justify-between gap-3 px-3 py-2 text-sm',\n className,\n )}\n >\n <p className=\"tabular-nums\" aria-live=\"polite\">\n {total === 0 ? 'Showing 0 of 0' : `Showing ${String(from)}–${String(to)} of ${String(total)}`}\n </p>\n <div className=\"flex flex-wrap items-center gap-2\">\n <label className=\"flex items-center gap-2\">\n <span className=\"whitespace-nowrap\">Rows per page</span>\n <PopoverSelect\n aria-label=\"Rows per page\"\n className=\"w-[4.5rem]\"\n value={String(pageSize)}\n options={sizeOptions}\n onValueChange={value => {\n onPageSizeChange(Number(value));\n }}\n />\n </label>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n aria-label=\"Previous page\"\n disabled={!canPrev}\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={() => onPageChange(safePage - 1)}\n >\n <Icon name=\"chevron-left\" />\n </button>\n <span className=\"min-w-[4.5rem] text-center tabular-nums\">\n {String(safePage + 1)} / {String(pageCount)}\n </span>\n <button\n type=\"button\"\n aria-label=\"Next page\"\n disabled={!canNext}\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={() => onPageChange(safePage + 1)}\n >\n <Icon name=\"chevron-right\" />\n </button>\n </div>\n </div>\n </div>\n );\n}\n\n/** Cursor / token pagination when the API has no total count. */\nexport type TableTokenPaginationProps = {\n pageSize: number;\n rowCount: number;\n canPrev: boolean;\n canNext: boolean;\n onPrev: () => void;\n onNext: () => void;\n onPageSizeChange: (pageSize: number) => void;\n pageSizeOptions?: readonly number[];\n className?: string;\n};\n\nexport function TableTokenPagination({\n pageSize,\n rowCount,\n canPrev,\n canNext,\n onPrev,\n onNext,\n onPageSizeChange,\n pageSizeOptions = TABLE_PAGE_SIZE_OPTIONS,\n className,\n}: TableTokenPaginationProps) {\n const sizeOptions = pageSizeOptions.map(size => ({\n value: String(size),\n label: String(size),\n }));\n\n return (\n <div\n className={cn(\n 'text-text-secondary flex flex-wrap items-center justify-between gap-3 px-3 py-2 text-sm',\n className,\n )}\n >\n <p className=\"tabular-nums\" aria-live=\"polite\">\n {rowCount === 0 ? 'Showing 0' : `Showing ${String(rowCount)}`}\n </p>\n <div className=\"flex flex-wrap items-center gap-2\">\n <label className=\"flex items-center gap-2\">\n <span className=\"whitespace-nowrap\">Rows per page</span>\n <PopoverSelect\n aria-label=\"Rows per page\"\n className=\"w-[4.5rem]\"\n value={String(pageSize)}\n options={sizeOptions}\n onValueChange={value => {\n onPageSizeChange(Number(value));\n }}\n />\n </label>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n aria-label=\"Previous page\"\n disabled={!canPrev}\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={onPrev}\n >\n <Icon name=\"chevron-left\" />\n </button>\n <button\n type=\"button\"\n aria-label=\"Next page\"\n disabled={!canNext}\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={onNext}\n >\n <Icon name=\"chevron-right\" />\n </button>\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useOptionalServer } from '../server/ServerContext.js';\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\nimport { auiButtonClass, sidebarButtonRadiusClassName, sidebarRailButtonClassName } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\nimport { SEARCH_AGENTS_PAGE_SIZE } from './lib/useSearchAgentsList.js';\n\nexport type AgentsLibraryButtonProps = {\n className?: string;\n compact?: boolean;\n};\n\nexport function AgentsLibraryButton({ className, compact = false }: AgentsLibraryButtonProps) {\n const server = useOptionalServer();\n const shell = useOptionalShellMode();\n const [countLabel, setCountLabel] = useState<string | null>(null);\n\n const enabled = shell?.isLibraryEnabled === true && server != null;\n const libraryOpen = shell?.libraryOpen === true;\n const agentsListEpoch = shell?.agentsListEpoch ?? 0;\n\n useEffect(() => {\n // Compact rail has no count badge; skip the catalog request.\n if (!enabled || !server || compact) return;\n let cancelled = false;\n void server\n .searchAgents({ limit: SEARCH_AGENTS_PAGE_SIZE })\n .then(rows => {\n if (cancelled) return;\n // API has no total; a full page means there may be more.\n setCountLabel(rows.length >= SEARCH_AGENTS_PAGE_SIZE ? `${SEARCH_AGENTS_PAGE_SIZE}+` : String(rows.length));\n })\n .catch(() => undefined);\n return () => {\n cancelled = true;\n };\n }, [enabled, server, agentsListEpoch, compact]);\n\n if (!enabled) return null;\n\n return (\n <div className={cn('relative min-w-0', compact ? 'flex justify-center' : 'w-full', className)}>\n <button\n type=\"button\"\n aria-label={compact ? 'Agents' : undefined}\n title={compact ? 'Agents' : undefined}\n aria-current={libraryOpen ? 'page' : undefined}\n className={auiButtonClass({\n variant: 'ghost',\n className: cn(\n sidebarButtonRadiusClassName,\n 'font-normal text-sidebar-text shadow-none hover:bg-secondary-button-hover hover:text-ghost-button-text',\n compact ? sidebarRailButtonClassName : 'h-8 w-full !justify-start px-2.5 text-sm',\n libraryOpen &&\n 'bg-primary-button-bg font-medium text-primary-button-text hover:bg-primary-button-hover hover:text-primary-button-text',\n ),\n })}\n onClick={() => shell?.setLibraryOpen(true)}\n >\n <Icon name=\"library-big\" size={compact ? 14 : undefined} />\n {compact ? (\n <span className=\"text-center\">Agents</span>\n ) : (\n <>\n <span className=\"truncate\">\n Agents\n {countLabel != null ? <span className=\"text-text-secondary\"> ({countLabel})</span> : null}\n </span>\n <Icon name=\"chevron-right\" className=\"ml-auto size-3.5 shrink-0 opacity-60\" />\n </>\n )}\n </button>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentsLibraryButton: typeof AgentsLibraryButton;\n }\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from './lib/cn.js';\n\nexport type AssistantMessageBubbleProps = {\n children: ReactNode;\n error?: ReactNode;\n actionBar?: ReactNode;\n className?: string;\n};\n\nexport function AssistantMessageBubble({ children, error, actionBar, className }: AssistantMessageBubbleProps) {\n return (\n <div\n data-slot=\"aui_assistant-message-root\"\n className={cn(\n 'group/assistant relative min-w-0 max-w-full bg-assistant-message-bg text-assistant-message-text',\n className,\n )}\n >\n <div className=\"min-w-0 max-w-full\">\n {children}\n {error && <div className=\"mt-2 text-sm text-failure-bg\">{error}</div>}\n </div>\n {actionBar && <div className=\"mt-1\">{actionBar}</div>}\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n AssistantMessageBubble: typeof AssistantMessageBubble;\n }\n}\n","/** Fixed preview bounds for attachments rendered in user message bubbles. */\nexport const USER_MESSAGE_ATTACHMENT_PREVIEW_REM = 12;\n","import React, { useState } from 'react';\n\nimport { cn } from '../lib/cn.js';\n\nconst sizeClasses = {\n sm: 'h-6 w-6 text-xs',\n default: 'h-8 w-8 text-sm',\n lg: 'h-10 w-10 text-base',\n};\n\nexport type AvatarProps = React.HTMLAttributes<HTMLDivElement> & {\n size?: 'default' | 'sm' | 'lg';\n};\n\nexport function Avatar({ className, size = 'default', ...props }: AvatarProps) {\n return (\n <div\n data-slot=\"avatar\"\n data-size={size}\n className={cn('relative flex shrink-0 overflow-hidden rounded-full', sizeClasses[size], className)}\n {...props}\n />\n );\n}\n\nexport type AvatarImageProps = React.ImgHTMLAttributes<HTMLImageElement>;\n\nexport function AvatarImage({ className, src, alt = '', onError, ...props }: AvatarImageProps) {\n const [failed, setFailed] = useState(false);\n\n if (failed || !src) return null;\n\n return (\n <img\n data-slot=\"avatar-image\"\n src={src}\n alt={alt}\n className={cn('aspect-square h-full w-full object-cover', className)}\n onError={e => {\n setFailed(true);\n onError?.(e);\n }}\n {...props}\n />\n );\n}\n\nexport type AvatarFallbackProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport function AvatarFallback({ className, ...props }: AvatarFallbackProps) {\n return (\n <div\n data-slot=\"avatar-fallback\"\n className={cn(\n 'flex h-full w-full items-center justify-center rounded-full bg-secondary-bg font-medium text-text-secondary',\n className,\n )}\n {...props}\n />\n );\n}\n\n// declare module \"../../theme/SlotsProvider.js\" {\n// interface AtomSlots {\n// Avatar: typeof Avatar;\n// AvatarImage: typeof AvatarImage;\n// AvatarFallback: typeof AvatarFallback;\n// }\n// }\n","'use client';\n\nimport { USER_MESSAGE_ATTACHMENT_PREVIEW_REM } from '../constants/attachments.js';\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\nimport { Avatar, AvatarFallback, AvatarImage } from './primitives/Avatar.js';\nimport { Tooltip } from './primitives/Tooltip.js';\n\nexport { USER_MESSAGE_ATTACHMENT_PREVIEW_REM };\n\nexport type AttachmentCardSize = 'chip' | 'preview';\n\nexport type AttachmentCardProps = {\n name: string;\n contentType?: string;\n previewSrc?: string;\n isImage?: boolean;\n size?: AttachmentCardSize;\n /** When set, constrains image preview and file chip width to this rem size. */\n previewRem?: number;\n onRemove?: () => void;\n className?: string;\n};\n\nexport function AttachmentCard({\n name,\n previewSrc,\n isImage = false,\n size = 'chip',\n previewRem,\n onRemove,\n className,\n}: AttachmentCardProps) {\n if (size === 'preview' && isImage && previewSrc) {\n const previewSize = previewRem != null ? { width: `${previewRem}rem`, height: `${previewRem}rem` } : undefined;\n\n return (\n <div\n data-slot=\"aui_attachment-preview\"\n style={previewSize}\n className={cn(\n 'aui-attachment-preview relative shrink-0 cursor-pointer overflow-hidden rounded-lg border border-primary-button-bg/20',\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('aui-attachment-chip relative size-14 shrink-0', className)}\n >\n <Tooltip content={name} side=\"top\" triggerClassName=\"size-full\">\n <div className=\"bg-secondary-bg relative size-full overflow-hidden rounded-[calc(var(--composer-radius,1.5rem)-var(--composer-padding,8px))] border border-primary-button-bg/20\">\n <Avatar className=\"size-full rounded-none\">\n <AvatarImage src={isImage ? previewSrc : undefined} alt={name} className=\"object-cover\" />\n <AvatarFallback className=\"rounded-none\">\n <Icon name=\"file\" size=\"1.5rem\" className=\"text-text-secondary\" />\n </AvatarFallback>\n </Avatar>\n </div>\n </Tooltip>\n <span className=\"sr-only\">{name}</span>\n {onRemove && (\n <button\n type=\"button\"\n aria-label=\"Remove file\"\n title=\"Remove file\"\n className={auiButtonClass({\n variant: 'ghost',\n size: 'icon',\n className:\n 'aui-attachment-tile-remove absolute inset-e-1 top-1 z-10 size-5 rounded-full bg-black/50 text-white hover:bg-black/70 hover:text-white',\n })}\n onClick={e => {\n e.stopPropagation();\n onRemove();\n }}\n >\n <Icon name=\"xmark\" size=\"0.75rem\" />\n </button>\n )}\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n AttachmentCard: typeof AttachmentCard;\n }\n}\n","import type { ComponentProps } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\n\nexport type AttachmentPickerButtonProps = Omit<ComponentProps<'button'>, 'children' | 'aria-label'>;\n\nexport function AttachmentPickerButton({ className, ...props }: AttachmentPickerButtonProps) {\n return (\n <button\n type=\"button\"\n aria-label=\"Add Attachment\"\n title=\"Add Attachment\"\n className={auiButtonClass({\n variant: 'ghost',\n size: 'icon',\n className: `size-7 rounded-full p-1 ${className ?? ''}`,\n })}\n {...props}\n >\n <Icon name=\"paperclip\" />\n </button>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n AttachmentPickerButton: typeof AttachmentPickerButton;\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useState } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { Dialog, DialogContent } from './primitives/Dialog.js';\n\nexport type AttachmentPreviewDialogProps = {\n previewSrc?: string;\n children: ReactNode;\n};\n\nexport function AttachmentPreviewDialog({ previewSrc, children }: AttachmentPreviewDialogProps) {\n const [open, setOpen] = useState(false);\n\n if (!previewSrc) return <>{children}</>;\n\n return (\n <>\n <button\n type=\"button\"\n aria-label=\"Open attachment preview\"\n onClick={() => setOpen(true)}\n className=\"block max-w-full cursor-pointer border-0 bg-transparent p-0 text-left\"\n >\n {children}\n </button>\n <Dialog\n open={open}\n onOpenChange={setOpen}\n aria-label=\"Attachment preview\"\n className=\"max-w-[calc(100%-2rem)] sm:max-w-3xl\"\n >\n <DialogContent className=\"relative p-2\">\n <span className=\"absolute top-2 right-2 z-10 inline-flex\">\n <button\n type=\"button\"\n aria-label=\"Close\"\n title=\"Close\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={() => setOpen(false)}\n >\n <Icon name=\"xmark\" />\n </button>\n </span>\n <div className=\"bg-primary-bg relative mx-auto flex max-h-[80dvh] w-full items-center justify-center overflow-hidden\">\n <img\n src={previewSrc}\n alt=\"Attachment preview\"\n className=\"block h-auto max-h-[80vh] w-auto max-w-full object-contain\"\n />\n </div>\n </DialogContent>\n </Dialog>\n </>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n AttachmentPreviewDialog: typeof AttachmentPreviewDialog;\n }\n}\n","'use client';\n\nimport { useState, type MouseEvent } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { cn } from './lib/cn.js';\nimport { Spinner } from './primitives/Spinner.js';\n\nexport type ChatFileDownloadFile = {\n name: string;\n path: string;\n};\n\nexport type ChatFileDownloadProps = {\n files: ChatFileDownloadFile[];\n fileDownloadBaseUrl?: string;\n onDownloadArtifact?: (path: string, filename: string) => Promise<void>;\n readOnly?: boolean;\n};\n\nexport function ChatFileDownload({ files, fileDownloadBaseUrl, onDownloadArtifact, readOnly }: ChatFileDownloadProps) {\n const [downloadingPath, setDownloadingPath] = useState<string | null>(null);\n\n return (\n <details\n open\n className=\"aui-sandbox-artifacts group my-2 overflow-hidden rounded-lg border border-primary-button-bg/20 bg-card-bg\"\n data-testid=\"aui-sandbox-artifacts\"\n >\n <summary className=\"flex min-h-9 cursor-pointer list-none items-center gap-2 bg-primary-button-bg/5 px-3 py-2 text-xs font-medium leading-none text-primary-button-bg [&::-webkit-details-marker]:hidden\">\n <Icon name=\"chevron-down\" size={13} className=\"shrink-0 transition-transform group-open:rotate-180\" />\n <Icon name=\"file\" size={16} className=\"shrink-0\" />\n <span className=\"leading-none\">\n {files.length} {files.length === 1 ? 'file' : 'files'} generated\n </span>\n </summary>\n\n <div className=\"flex flex-wrap items-center gap-y-1 px-3 py-2\">\n {files.map(({ name, path }) => {\n if (readOnly) {\n return (\n <span\n key={path}\n className=\"mr-3 inline-flex min-h-7 items-center gap-1.5 border-r border-border pr-3 text-xs text-text-secondary last:mr-0 last:border-r-0 last:pr-0\"\n >\n <Icon name=\"file\" size={14} className=\"shrink-0\" />\n <span className=\"leading-none\">{name}</span>\n </span>\n );\n }\n\n const href = fileDownloadBaseUrl ? `${fileDownloadBaseUrl}${path}` : undefined;\n const canDownload = Boolean(onDownloadArtifact || href);\n const isDownloading = downloadingPath === path;\n\n const handleClick = (event: MouseEvent) => {\n if (!onDownloadArtifact || isDownloading) {\n event.preventDefault();\n return;\n }\n event.preventDefault();\n setDownloadingPath(path);\n void onDownloadArtifact(path, name).finally(() => {\n setDownloadingPath(current => (current === path ? null : current));\n });\n };\n\n return (\n <a\n key={path}\n href={canDownload ? (href ?? '#') : undefined}\n onClick={onDownloadArtifact ? handleClick : undefined}\n aria-busy={isDownloading || undefined}\n className={cn(\n 'mr-3 inline-flex min-h-7 items-center gap-1.5 border-r border-border pr-3 text-xs text-text-primary last:mr-0 last:border-r-0 last:pr-0',\n canDownload && !isDownloading && 'cursor-pointer hover:text-primary-button-bg',\n (isDownloading || !canDownload) && 'pointer-events-none opacity-60',\n )}\n download={name}\n aria-label={isDownloading ? `Downloading ${name}` : `Download ${name}`}\n >\n <Icon name=\"file\" size={14} className=\"shrink-0 text-text-secondary\" />\n <span className=\"leading-none\">{name}</span>\n {isDownloading ? (\n <Spinner size={14} className=\"shrink-0 text-primary-button-bg\" />\n ) : (\n <Icon name=\"download\" size={14} className=\"shrink-0 text-primary-button-bg\" />\n )}\n </a>\n );\n })}\n </div>\n </details>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ChatFileDownload: typeof ChatFileDownload;\n }\n}\n","'use client';\n\nimport { useTrueFoundryAgentSpec } from '@truefoundry/assistant-ui-runtime';\n\nimport { useAuiState } from '../assistant-ui.js';\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\nimport { isNewChatView } from '../utils/isNewChatView.js';\n\nexport type NamedAgentHeaderState = {\n name: string;\n isEditing: boolean;\n /** When true, prefer a non-empty thread/session title over `name`. */\n allowThreadTitle: boolean;\n};\n\n// Canonical named-agent / draft header state, including mutable edit mode.\nexport function useNamedAgentHeaderState(): NamedAgentHeaderState | null {\n const shell = useOptionalShellMode();\n if (shell == null || shell.mode.status !== 'active') return null;\n\n const identity = shell.mode.agentName ?? shell.mode.agentId;\n if (identity != null && identity.length > 0) {\n return {\n name: identity,\n isEditing: shell.mode.isMutable,\n allowThreadTitle: false,\n };\n }\n\n if (!shell.mode.isMutable) return null;\n\n const isCreateAgent = shell.mode.isCreateAgent;\n return {\n name: isCreateAgent ? 'New Agent' : 'New Chat',\n isEditing: false,\n allowThreadTitle: true,\n };\n}\n\nexport function useNamedAgentHeaderVisible(): boolean {\n const state = useNamedAgentHeaderState();\n return state !== null;\n}\n\n// Mutable New Agent / Edit with a selected model — drives Save Agent + header chrome.\nexport function useSaveAgentVisible(): boolean {\n const shell = useOptionalShellMode();\n const { agentSpec } = useTrueFoundryAgentSpec();\n if (shell == null || shell.mode.status !== 'active' || !shell.mode.isMutable || !shell.mode.isCreateAgent) {\n return false;\n }\n return Boolean(agentSpec?.model?.name?.trim());\n}\n\n// Clear chat: any active session (Try Agent, New Chat, New Agent, Edit) that has\n// something to clear. A fresh thread has nothing, so the control stays hidden.\nexport function useChatChromeActionsVisible(): boolean {\n const shell = useOptionalShellMode();\n const isFresh = useAuiState(isNewChatView);\n return shell != null && shell.mode.status === 'active' && !isFresh;\n}\n\n// True when the thread header has anything to show (title, Save, and/or Clear).\n// Clear alone matters for orphaned immutable history (deleted agent, no name).\nexport function useChatHeaderContentVisible(): boolean {\n const namedVisible = useNamedAgentHeaderVisible();\n const saveVisible = useSaveAgentVisible();\n const clearVisible = useChatChromeActionsVisible();\n return namedVisible || saveVisible || clearVisible;\n}\n","import type { AssistantState } from '@assistant-ui/react';\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.\n//\n// `remoteId == null` keeps welcome off during first-turn edit/retry: the\n// runtime briefly rewinds to an empty snapshot before applying pendingUser,\n// and messages.length===0 alone would flash the welcome screen.\nexport type NewChatViewState = {\n thread: Pick<AssistantState['thread'], 'messages' | 'isLoading'>;\n threads: Pick<AssistantState['threads'], 'isLoading'>;\n threadListItem: Pick<AssistantState['threadListItem'], 'remoteId'>;\n};\n\nexport const isNewChatView = (s: NewChatViewState) =>\n s.thread.messages.length === 0 && (!s.thread.isLoading || s.threads.isLoading) && s.threadListItem.remoteId == null;\n","'use client';\n\nimport { useChatChromeActionsVisible } from '../hooks/useChatChromeActionsVisible.js';\nimport { Icon } from '../icons/Icon.js';\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\n\n// Resets the current chat / draft (Try Agent, New Chat, New Agent, Edit).\n// Hidden while idle and on a fresh chat.\nexport function ClearChatButton() {\n const shell = useOptionalShellMode();\n const visible = useChatChromeActionsVisible();\n\n if (!visible || shell == null) return null;\n\n return (\n <button\n type=\"button\"\n title=\"Clear chat\"\n className={auiButtonClass({ variant: 'ghost', size: 'large' })}\n onClick={() => shell.clearChat()}\n >\n <Icon name=\"broom\" size=\"0.875rem\" />\n Clear chat\n </button>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ClearChatButton: typeof ClearChatButton;\n }\n}\n","'use client';\n\nimport { useCallback, useState } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\nimport type { MonacoEditorCoreProps } from './MonacoEditorCore.js';\n\nexport type CodeEditorProps = Omit<MonacoEditorCoreProps, 'onAutoHeightChange' | 'options'> & {\n filename?: string;\n showToolbar?: boolean;\n};\n\nfunction ToolbarButton({\n onClick,\n tooltip,\n icon,\n active,\n variant = 'ghost',\n}: {\n onClick: () => void;\n tooltip: string;\n icon: string;\n active?: boolean;\n variant?: 'ghost' | 'secondary';\n}) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n title={tooltip}\n className={auiButtonClass({\n variant,\n size: 'icon',\n className: cn(\n 'h-7 w-7 shrink-0',\n variant === 'ghost' && 'text-text-secondary hover:text-text-primary',\n active && 'bg-dropdown-selected-item-bg text-dropdown-selected-item-text',\n ),\n })}\n aria-label={tooltip}\n >\n <Icon name={icon} size=\"0.875em\" />\n </button>\n );\n}\n\nexport function CodeEditor({\n value,\n language,\n theme,\n filename,\n onChange,\n onMount,\n beforeMount,\n className,\n height,\n showToolbar = true,\n}: CodeEditorProps) {\n const MonacoEditorCore = useSlot('MonacoEditorCore');\n const [showLineNumbers, setShowLineNumbers] = useState(false);\n const [expanded, setExpanded] = useState(false);\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(() => {\n void navigator.clipboard.writeText(value).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }, [value]);\n\n const handleDownload = useCallback(() => {\n const blob = new Blob([value], { type: 'text/plain' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename ?? `code.${language ?? 'txt'}`;\n a.click();\n URL.revokeObjectURL(url);\n }, [value, filename, language]);\n\n const editorOptions = {\n lineNumbers: showLineNumbers ? 'on' : ('off' as const),\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n // Avoid a blank numbered line when the buffer ends with `\\n`.\n renderFinalNewline: 'off' as const,\n wordWrap: 'on' as const,\n };\n\n const editorHeight = expanded ? '100%' : (height ?? 320);\n\n return (\n <div\n className={cn(\n 'aui-code-editor flex flex-col overflow-hidden rounded-md border border-border',\n expanded && 'fixed inset-4 z-50 bg-primary-bg shadow-2xl',\n className,\n )}\n >\n {showToolbar && (\n <div className=\"flex items-center justify-between gap-1 border-b border-border px-2 py-1\">\n {filename && <span className=\"truncate text-xs text-text-secondary\">{filename}</span>}\n <div className=\"ml-auto flex items-center gap-0.5\">\n <ToolbarButton\n onClick={() => setShowLineNumbers(v => !v)}\n tooltip={showLineNumbers ? 'Hide line numbers' : 'Show line numbers'}\n icon=\"list-ol\"\n active={showLineNumbers}\n />\n <ToolbarButton\n onClick={handleCopy}\n tooltip={copied ? 'Copied!' : 'Copy'}\n icon={copied ? 'check' : 'copy'}\n variant=\"secondary\"\n />\n <ToolbarButton onClick={handleDownload} tooltip=\"Download\" icon=\"download\" />\n <ToolbarButton\n onClick={() => setExpanded(v => !v)}\n tooltip={expanded ? 'Collapse' : 'Expand'}\n icon={expanded ? 'compress' : 'expand'}\n />\n </div>\n </div>\n )}\n\n <div className=\"flex-1 overflow-hidden\" style={expanded ? undefined : { height: editorHeight }}>\n <MonacoEditorCore\n value={value}\n language={language}\n theme={theme}\n options={editorOptions}\n onChange={onChange}\n onMount={onMount}\n beforeMount={beforeMount}\n height=\"100%\"\n />\n </div>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n CodeEditor: typeof CodeEditor;\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { Spinner } from '../atoms/primitives/Spinner.js';\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { Button } from './primitives/Button.js';\n\nexport type ComposerLeftSectionProps = {\n disabled: boolean;\n isRunning: boolean;\n onAttach?: () => void;\n};\n\nexport type ComposerRightSectionProps = {\n disabled: boolean;\n isRunning: boolean;\n};\n\nexport type ComposerSendButtonProps = {\n disabled: boolean;\n canSubmit: boolean;\n isRunning: boolean;\n onSubmit: () => void;\n onCancel?: () => void;\n};\n\nexport type ComposerLeftSectionSlot = (props: ComposerLeftSectionProps) => ReactNode;\nexport type ComposerRightSectionSlot = (props: ComposerRightSectionProps) => ReactNode;\nexport type ComposerSendButtonSlot = (props: ComposerSendButtonProps) => ReactNode;\n\nexport function ComposerLeftSection({ onAttach }: ComposerLeftSectionProps) {\n if (!onAttach) return null;\n\n return (\n <button\n type=\"button\"\n aria-label=\"Attach\"\n title=\"Attach\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={onAttach}\n >\n <Icon name=\"paperclip\" />\n </button>\n );\n}\n\nexport function ComposerRightSection(_: ComposerRightSectionProps): ReactNode {\n return null;\n}\n\nexport function ComposerSendButton({ canSubmit, isRunning, onSubmit, onCancel }: ComposerSendButtonProps) {\n if (isRunning) {\n return (\n <Button.Primary type=\"button\" size=\"small\" disabled={!onCancel} onClick={onCancel} aria-label=\"Cancel\">\n <Spinner size={14} />\n Cancel\n </Button.Primary>\n );\n }\n\n return (\n <Button.Primary\n type=\"button\"\n size=\"icon\"\n data-slot=\"aui_composer-send\"\n className=\"shadow-none\"\n disabled={!canSubmit}\n onClick={onSubmit}\n title=\"Send message\"\n aria-label=\"Send message\"\n >\n <Icon name=\"arrow-up\" />\n </Button.Primary>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ComposerLeftSection: ComposerLeftSectionSlot;\n ComposerRightSection: ComposerRightSectionSlot;\n ComposerSendButton: ComposerSendButtonSlot;\n }\n}\n","'use client';\n\nimport { type ReactNode } from 'react';\n\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { cn } from './lib/cn.js';\n\nexport type ComposerShellProps = {\n /** Message input node, supplied by the container (e.g. `<ComposerPrimitive.Input />`). */\n input: ReactNode;\n disabled: boolean;\n canSubmit: boolean;\n isRunning?: boolean;\n attachments?: ReactNode;\n modelLabel?: string;\n modelIcon?: ReactNode;\n connectorStatusLabel?: string;\n onSubmit: () => void;\n onCancel?: () => void;\n onAttach?: () => void;\n className?: string;\n};\n\nexport function ComposerShell({\n input,\n disabled,\n canSubmit,\n isRunning = false,\n attachments,\n modelLabel,\n modelIcon,\n connectorStatusLabel,\n onSubmit,\n onCancel,\n onAttach,\n className,\n}: ComposerShellProps) {\n const ComposerLeftSection = useSlot('ComposerLeftSection');\n const ComposerRightSection = useSlot('ComposerRightSection');\n const ComposerSendButton = useSlot('ComposerSendButton');\n\n return (\n <div\n data-slot=\"aui_composer-shell\"\n className={cn(\n 'focus-within:ring-focus-ring/20 flex w-full flex-col gap-2 rounded-[0.75rem] border border-transparent bg-card-bg p-[var(--composer-padding,0.5rem)] shadow-[0_1.25rem_1.875rem_-1.25rem_color-mix(in_oklab,var(--primary-button-bg)_8%,transparent),0_0.75rem_1.25rem_-0.25rem_color-mix(in_oklab,var(--primary-button-bg)_8%,transparent)] transition-colors focus-within:ring-3',\n // Gradient hairline from theme primary (faded at top → solid at bottom).\n // padding-box paints the surface; border-box bleeds the ramp into the transparent border.\n '[background-clip:padding-box,border-box] [background-image:linear-gradient(var(--card-bg),var(--card-bg)),linear-gradient(to_bottom,color-mix(in_oklab,var(--primary-button-bg)_25%,transparent),var(--primary-button-bg))] [background-origin:border-box]',\n // Gradient + glow are light-only; dark falls back to the palette's neutral hairline.\n 'dark:border-border/60 dark:shadow-none dark:[background-clip:border-box] dark:[background-image:none]',\n className,\n )}\n >\n {attachments}\n {input}\n <div className=\"flex min-w-0 flex-wrap items-center justify-between gap-2 px-1\">\n <div className=\"flex min-w-0 max-w-full flex-wrap items-center gap-2\">\n <ComposerLeftSection disabled={disabled} isRunning={isRunning} onAttach={onAttach} />\n {connectorStatusLabel && (\n <span className=\"text-text-secondary max-w-[12rem] truncate text-xs\">{connectorStatusLabel}</span>\n )}\n </div>\n <div className=\"ml-auto flex min-w-0 shrink-0 flex-wrap items-center justify-end gap-2\">\n {modelLabel && (\n <span className=\"bg-secondary-bg text-text-secondary flex max-w-[10rem] items-center gap-1 truncate rounded-full px-2 py-0.5 text-xs\">\n {modelIcon}\n <span className=\"truncate\">{modelLabel}</span>\n </span>\n )}\n <ComposerRightSection disabled={disabled} isRunning={isRunning} />\n <ComposerSendButton\n disabled={disabled}\n canSubmit={canSubmit}\n isRunning={isRunning}\n onSubmit={onSubmit}\n onCancel={onCancel}\n />\n </div>\n </div>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ComposerShell: typeof ComposerShell;\n }\n}\n","'use client';\n\nimport { useEffect, useMemo, useState } from 'react';\n\nimport type { AgentSkill, AgentSpec, ConnectorState, McpToolSelection, ModelSelection } from '../../server/types.js';\nimport { useSlot } from '../../theme/SlotsProvider.js';\nimport type { AgentInstructionsDraft } from './AgentInstructionsDrawer.js';\nimport { initialUserMessagesFromSpec, withInitialUserMessages } from './agentConfigMessages.js';\nimport { editableMountsFromSpec } from './agentConfigMounts.js';\nimport { connectorsWithSelectedStubs } from './mcpConnectorStubs.js';\n\nexport type AgentConfigEditor = 'instructions' | 'model' | 'model-settings' | 'runtime' | 'mcp' | 'skills';\n\nexport type AgentConfigEditorsProps = {\n editor: AgentConfigEditor | null;\n spec: AgentSpec;\n models: ModelSelection[];\n connectors: ConnectorState[];\n skills: AgentSkill[];\n loading: boolean;\n error: string | null;\n skillsDisabled?: boolean;\n sandboxAvailable?: boolean;\n instructions?: string;\n onInstructionsSave?: (draft: AgentInstructionsDraft) => void;\n loadMcpTools?: (connectorId: string) => Promise<McpToolSelection[]>;\n onRefreshConnectors?: () => Promise<void>;\n onChange: (spec: AgentSpec) => void;\n onClose: () => void;\n};\n\nexport function AgentConfigEditors({\n editor,\n spec,\n models,\n connectors,\n skills,\n loading,\n error,\n skillsDisabled = false,\n sandboxAvailable = false,\n instructions,\n onInstructionsSave,\n loadMcpTools,\n onRefreshConnectors,\n onChange,\n onClose,\n}: AgentConfigEditorsProps) {\n const AgentModelConfigModal = useSlot('AgentModelConfigModal');\n const AgentResourceConfigModal = useSlot('AgentResourceConfigModal');\n const AgentRuntimeConfigModal = useSlot('AgentRuntimeConfigModal');\n const AgentInstructionsDrawer = useSlot('AgentInstructionsDrawer');\n const [query, setQuery] = useState('');\n const [activeConnectorId, setActiveConnectorId] = useState<string | null>(null);\n const [tools, setTools] = useState<McpToolSelection[]>([]);\n const [toolsLoading, setToolsLoading] = useState(false);\n const [toolsError, setToolsError] = useState<string | null>(null);\n const [toolsRequestEpoch, setToolsRequestEpoch] = useState(0);\n const mounts = useMemo(() => editableMountsFromSpec(spec.mcpServers), [spec.mcpServers]);\n const catalogConnectors = useMemo(\n () => connectorsWithSelectedStubs({ connectors, selected: mounts }),\n [connectors, mounts],\n );\n const activeConnectorAvailable =\n activeConnectorId !== null && catalogConnectors.some(connector => connector.id === activeConnectorId);\n const firstMountedConnectorId = mounts\n .map(mount => catalogConnectors.find(connector => connector.id === mount.id || connector.name === mount.name)?.id)\n .find((id): id is string => id !== undefined);\n const selectedConnectorId =\n (activeConnectorAvailable ? activeConnectorId : null) ??\n firstMountedConnectorId ??\n catalogConnectors[0]?.id ??\n null;\n\n useEffect(() => {\n if (editor !== 'mcp' || selectedConnectorId === null || loadMcpTools === undefined) return;\n let cancelled = false;\n setTools([]);\n setToolsLoading(true);\n setToolsError(null);\n void loadMcpTools(selectedConnectorId)\n .then(nextTools => {\n if (!cancelled) setTools(nextTools);\n })\n .catch((reason: unknown) => {\n if (!cancelled) setToolsError(reason instanceof Error ? reason.message : 'Failed to load tools.');\n })\n .finally(() => {\n if (!cancelled) setToolsLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [editor, loadMcpTools, selectedConnectorId, toolsRequestEpoch]);\n\n const close = () => {\n setQuery('');\n setActiveConnectorId(null);\n setTools([]);\n setToolsError(null);\n onClose();\n };\n\n const modelEditor = editor === 'model' || editor === 'model-settings' ? editor : null;\n const resourceEditor = editor === 'mcp' || editor === 'skills' ? editor : null;\n const saveInstructions = (draft: AgentInstructionsDraft) => {\n if (onInstructionsSave !== undefined) {\n onInstructionsSave(draft);\n return;\n }\n onChange(\n withInitialUserMessages({\n spec: { ...spec, instructions: draft.instructions || undefined },\n messages: draft.messages,\n }),\n );\n };\n\n return (\n <>\n {editor === 'instructions' ? (\n <AgentInstructionsDrawer\n open\n instructions={instructions ?? spec.instructions ?? ''}\n messages={initialUserMessagesFromSpec(spec)}\n onSave={saveInstructions}\n onClose={close}\n />\n ) : null}\n {modelEditor ? (\n <AgentModelConfigModal\n editor={modelEditor}\n spec={spec}\n models={models}\n loading={loading}\n error={error}\n query={query}\n onQueryChange={setQuery}\n onChange={onChange}\n onClose={close}\n />\n ) : null}\n {editor === 'runtime' ? (\n <AgentRuntimeConfigModal\n open\n spec={spec}\n sandboxAvailable={sandboxAvailable}\n onChange={onChange}\n onClose={close}\n />\n ) : null}\n {resourceEditor ? (\n <AgentResourceConfigModal\n editor={resourceEditor}\n spec={spec}\n connectors={connectors}\n skills={skills}\n skillsDisabled={skillsDisabled}\n query={query}\n activeConnectorId={selectedConnectorId}\n tools={tools}\n toolsLoading={toolsLoading}\n toolsError={toolsError}\n onQueryChange={setQuery}\n onSelectConnector={setActiveConnectorId}\n onRetryTools={() => setToolsRequestEpoch(epoch => epoch + 1)}\n onRefreshConnectors={onRefreshConnectors}\n onChange={onChange}\n onClose={close}\n />\n ) : null}\n </>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentConfigEditors: typeof AgentConfigEditors;\n }\n}\n","import type { TrueForgeApi } from '@truefoundry/trueforge-sdk';\n\nimport type { AgentSpec } from '../../server/types.js';\n\nfunction isInitialUserMessage(value: unknown): value is TrueForgeApi.InitialUserMessage {\n if (typeof value !== 'object' || value === null) return false;\n return Reflect.get(value, 'type') === 'user.message' && typeof Reflect.get(value, 'content') === 'string';\n}\n\n// Adapts the SDK-owned messages field until the UI runtime contract exposes it\nexport function initialUserMessagesFromSpec(spec: AgentSpec): TrueForgeApi.InitialUserMessage[] {\n const value: unknown = Reflect.get(spec, 'messages');\n return Array.isArray(value) ? value.filter(isInitialUserMessage) : [];\n}\n\nexport function withInitialUserMessages({\n spec,\n messages,\n}: {\n spec: AgentSpec;\n messages: TrueForgeApi.InitialUserMessage[];\n}): AgentSpec {\n const next = { ...spec, messages: messages.length > 0 ? messages : undefined };\n return next;\n}\n","export type EditableMount = {\n id: string;\n name: string;\n value: object;\n};\n\nexport function editableMountsFromSpec(value: unknown): EditableMount[] {\n if (!Array.isArray(value)) return [];\n const mounts: EditableMount[] = [];\n for (const item of value) {\n if (typeof item !== 'object' || item === null) continue;\n const name = Reflect.get(item, 'name');\n const fqn = Reflect.get(item, 'fqn');\n const displayName = typeof name === 'string' ? name : typeof fqn === 'string' ? fqn : null;\n if (displayName === null) continue;\n const id = Reflect.get(item, 'id');\n mounts.push({ id: typeof id === 'string' ? id : displayName, name: displayName, value: item });\n }\n return mounts;\n}\n\nexport function enabledToolsFromMount(value: object): string[] | 'all' {\n const enabled = Reflect.get(value, 'enableTools');\n if (!Array.isArray(enabled) || enabled.includes('@all')) return 'all';\n return enabled.filter((tool): tool is string => typeof tool === 'string' && !tool.startsWith('@'));\n}\n\nexport function withEnabledTools(value: object, enabledTools: string[] | 'all'): object {\n return {\n ...value,\n enableTools: enabledTools === 'all' ? ['@all'] : enabledTools,\n };\n}\n\nexport function preloadFromMount(value: object): boolean {\n return Reflect.get(value, 'preload') === true;\n}\n\nexport function withPreload(value: object, preload: boolean): object {\n return { ...value, preload };\n}\n","import type { ConnectorState } from '../../server/types.js';\n\n/** Keep selected mounts visible when they are not yet on a loaded MCP page. */\nexport function connectorsWithSelectedStubs({\n connectors,\n selected,\n}: {\n connectors: ConnectorState[];\n selected: ReadonlyArray<{ id: string; name: string }>;\n}): ConnectorState[] {\n if (selected.length === 0) return connectors;\n const byId = new Map(connectors.map(connector => [connector.id, connector]));\n const stubs: ConnectorState[] = [];\n for (const mount of selected) {\n if (!byId.has(mount.id)) {\n stubs.push({ id: mount.id, name: mount.name });\n }\n }\n return stubs.length === 0 ? connectors : [...stubs, ...connectors];\n}\n","'use client';\n\nimport { useEffect, useState, type ImgHTMLAttributes } from 'react';\n\nimport { useThemeMode } from '../../theme/SlotsProvider.js';\nimport { resolveCatalogLogoSrc } from '../../utils/catalogLogo.js';\n\nexport type CatalogLogoProps = Omit<ImgHTMLAttributes<HTMLImageElement>, 'src'> & {\n src: string;\n};\n\n/**\n * Catalog logo with mode-matched siblings:\n * - `…/icon.png` in dark mode → try `…/icon-dark.png`, else catalog URL\n * - `…/icon-dark.png` in light mode → try `…/icon.png`, else catalog URL\n */\nexport function CatalogLogo({ src, alt = '', onError, ...props }: CatalogLogoProps) {\n const mode = useThemeMode();\n const preferred = resolveCatalogLogoSrc({ src, mode });\n const [failedPreferred, setFailedPreferred] = useState(false);\n\n useEffect(() => {\n setFailedPreferred(false);\n }, [src, mode, preferred]);\n\n const canFallback = preferred !== src;\n const resolved = failedPreferred && canFallback ? src : preferred;\n\n return (\n <img\n {...props}\n key={resolved}\n src={resolved}\n alt={alt}\n onError={event => {\n if (canFallback && !failedPreferred) {\n setFailedPreferred(true);\n return;\n }\n onError?.(event);\n }}\n />\n );\n}\n","function splitCatalogLogoUrl(src: string): { dir: string; base: string; ext: string; suffix: string } | undefined {\n const match = /^(.*\\/)?([^/?#]+?)(\\.[^./?#]+)([?#].*)?$/.exec(src);\n if (match == null) return undefined;\n const dir = match[1] ?? '';\n const base = match[2];\n const ext = match[3];\n const suffix = match[4] ?? '';\n if (base == null || ext == null) return undefined;\n return { dir, base, ext, suffix };\n}\n\n/** Insert `-dark` before the file extension. Undefined when already dark-suffixed or unparseable. */\nexport function toDarkCatalogLogoUrl(src: string): string | undefined {\n const parts = splitCatalogLogoUrl(src);\n if (parts == null || /-dark$/i.test(parts.base)) return undefined;\n return `${parts.dir}${parts.base}-dark${parts.ext}${parts.suffix}`;\n}\n\n/** Strip a trailing `-dark` before the file extension. Undefined when not dark-suffixed or unparseable. */\nexport function toLightCatalogLogoUrl(src: string): string | undefined {\n const parts = splitCatalogLogoUrl(src);\n if (parts == null || !/-dark$/i.test(parts.base)) return undefined;\n return `${parts.dir}${parts.base.replace(/-dark$/i, '')}${parts.ext}${parts.suffix}`;\n}\n\n/**\n * Mode-matched logo URL:\n * - dark → prefer icon-dark.ext (derived from icon.ext, or keep if already dark)\n * - light → prefer icon.ext (derived from icon-dark.ext, or keep if already light)\n */\nexport function resolveCatalogLogoSrc({ src, mode }: { src: string; mode: 'light' | 'dark' }): string {\n if (mode === 'dark') return toDarkCatalogLogoUrl(src) ?? src;\n return toLightCatalogLogoUrl(src) ?? src;\n}\n","'use client';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\n\nexport function DraftCatalogEmptyState({\n loading,\n emptyLabel,\n settingsTarget,\n onOpenSettings,\n}: {\n loading: boolean;\n emptyLabel: string;\n settingsTarget: string;\n onOpenSettings?: () => void;\n}) {\n if (!loading && onOpenSettings) {\n return (\n <button\n type=\"button\"\n className={auiButtonClass({\n variant: 'ghost',\n className: 'text-text-secondary w-full justify-center gap-1 py-4 text-xs',\n })}\n onClick={onOpenSettings}\n >\n Please configure {settingsTarget} in the <span className=\"underline\">settings</span>\n <Icon name=\"chevron-right\" className=\"size-3\" />\n </button>\n );\n }\n\n return <p className=\"text-text-secondary px-2 py-4 text-center text-sm\">{loading ? 'Loading…' : emptyLabel}</p>;\n}\n","'use client';\n\nimport { Icon } from '../../icons/Icon.js';\nimport type { ModelSelection } from '../../server/types.js';\nimport { cn } from '../lib/cn.js';\nimport { auiInputClass } from '../lib/inputClasses.js';\nimport { CatalogLogo } from '../primitives/CatalogLogo.js';\nimport { DraftCatalogEmptyState } from './DraftCatalogEmptyState.js';\n\nfunction monogram(value: string): string {\n const trimmed = value.trim();\n return trimmed ? trimmed.charAt(0).toUpperCase() : '?';\n}\n\nexport function displayModelLabel(modelName: string): string {\n const slash = modelName.lastIndexOf('/');\n return slash >= 0 ? modelName.slice(slash + 1) : modelName;\n}\n\nfunction formatTokens(value: number): string {\n return Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 }).format(value);\n}\n\nexport function ProviderMark({ logo, label, className }: { logo?: string; label: string; className?: string }) {\n if (logo) {\n return <CatalogLogo src={logo} alt=\"\" className={cn('shrink-0 rounded object-contain', className)} aria-hidden />;\n }\n return (\n <span\n className={cn(\n 'bg-secondary-bg text-text-secondary flex shrink-0 items-center justify-center rounded font-semibold',\n className,\n )}\n aria-hidden\n >\n {monogram(label)}\n </span>\n );\n}\n\ntype ProviderSection = { name: string; logo?: string; models: ModelSelection[] };\n\nfunction groupModelsByProvider(models: ModelSelection[]): ProviderSection[] {\n const sections: ProviderSection[] = [];\n const byProvider = new Map<string, ProviderSection>();\n for (const model of models) {\n const name = model.provider.name.trim() || 'Other';\n const existing = byProvider.get(name);\n if (existing) {\n existing.models.push(model);\n if (!existing.logo && model.provider.logo) existing.logo = model.provider.logo;\n } else {\n const section: ProviderSection = { name, logo: model.provider.logo, models: [model] };\n byProvider.set(name, section);\n sections.push(section);\n }\n }\n return sections;\n}\n\nexport function DraftModelCatalogPanel({\n models,\n loading,\n selectedName,\n query,\n onQueryChange,\n onSelect,\n onOpenSettings,\n listboxId,\n showHeading = true,\n}: {\n models: ModelSelection[];\n loading: boolean;\n selectedName: string;\n query: string;\n onQueryChange: (query: string) => void;\n onSelect: (model: ModelSelection) => void;\n onOpenSettings?: () => void;\n listboxId: string;\n showHeading?: boolean;\n}) {\n const needle = query.trim().toLowerCase();\n const filtered = needle\n ? models.filter(\n model =>\n model.name.toLowerCase().includes(needle) ||\n model.id.toLowerCase().includes(needle) ||\n model.provider.name.toLowerCase().includes(needle),\n )\n : models;\n const sections = groupModelsByProvider(filtered);\n const detailedGridClass = 'grid-cols-[minmax(0,1fr)_5rem]';\n\n return (\n <>\n <div className=\"border-b border-border px-3 py-2\">\n {showHeading ? <p className=\"text-text-primary mb-2 text-sm font-normal\">Select model</p> : null}\n <label className=\"relative block\">\n <Icon\n name=\"search\"\n className=\"text-text-secondary pointer-events-none absolute top-1/2 left-2 size-3.5 -translate-y-1/2\"\n />\n <input\n type=\"search\"\n value={query}\n onChange={event => onQueryChange(event.target.value)}\n placeholder=\"Search\"\n className={auiInputClass('h-8 py-1 pr-2 pl-7')}\n autoFocus\n />\n </label>\n </div>\n {!showHeading ? (\n <div\n className={cn(\n 'text-text-secondary grid gap-2 border-b border-border px-3 py-2 text-[10px] font-semibold uppercase',\n detailedGridClass,\n )}\n >\n <span>Model</span>\n <span>Context</span>\n </div>\n ) : null}\n <div\n id={listboxId}\n role=\"listbox\"\n aria-label=\"Select model\"\n className=\"flex min-h-0 flex-1 flex-col overflow-y-auto p-1\"\n >\n {filtered.length === 0 ? (\n <DraftCatalogEmptyState\n loading={loading}\n emptyLabel=\"No models\"\n settingsTarget=\"Models\"\n onOpenSettings={onOpenSettings}\n />\n ) : (\n sections.map((section, sectionIndex) => {\n const headingId = `${listboxId}-provider-${sectionIndex}`;\n return (\n <div\n key={section.name}\n role=\"group\"\n aria-labelledby={headingId}\n className={cn(sectionIndex > 0 && 'mt-2')}\n >\n <div\n id={headingId}\n className=\"text-text-secondary flex items-center gap-1.5 px-2 py-1.5 text-[11px] font-medium tracking-wide uppercase\"\n >\n <ProviderMark logo={section.logo} label={section.name} className=\"size-3.5 text-[9px]\" />\n <span className=\"truncate\">{section.name}</span>\n </div>\n {section.models.map(model => {\n const active = selectedName ? model.name === selectedName : filtered[0] === model;\n return (\n <button\n key={model.id || model.name}\n type=\"button\"\n role=\"option\"\n aria-selected={active}\n className={cn(\n 'w-full items-center rounded-md px-2 py-2 text-left text-sm',\n showHeading ? 'flex' : cn('grid gap-2', detailedGridClass),\n active\n ? 'bg-dropdown-selected-item-bg text-dropdown-selected-item-text'\n : 'hover:bg-ghost-button-hover',\n )}\n onClick={() => onSelect(model)}\n >\n <span className=\"min-w-0\">\n <span className=\"block truncate font-normal\">{displayModelLabel(model.name)}</span>\n {showHeading &&\n (model.properties.contextLength !== undefined ||\n model.properties.maxOutputTokens !== undefined) ? (\n <span className=\"text-text-secondary mt-0.5 block truncate text-[10px]\">\n {[\n model.properties.contextLength === undefined\n ? null\n : `${formatTokens(model.properties.contextLength)} context`,\n model.properties.maxOutputTokens === undefined\n ? null\n : `${formatTokens(model.properties.maxOutputTokens)} output`,\n ]\n .filter(value => value !== null)\n .join(' · ')}\n </span>\n ) : null}\n </span>\n {!showHeading ? (\n <>\n <span className=\"text-text-secondary text-xs\">\n {model.properties.contextLength === undefined\n ? '—'\n : formatTokens(model.properties.contextLength)}\n </span>\n </>\n ) : null}\n {active && showHeading ? <Icon name=\"check\" className=\"ml-auto size-3.5\" /> : null}\n </button>\n );\n })}\n </div>\n );\n })\n )}\n </div>\n </>\n );\n}\n","import type { ModelParams } from '../../server/types.js';\n\nexport type ModelParamSummaryEntry = {\n label: string;\n value: string;\n};\n\nexport function modelParamSummary(params?: ModelParams): ModelParamSummaryEntry[] {\n if (!params) return [];\n const entries: ModelParamSummaryEntry[] = [];\n if (params.maxTokens !== undefined) entries.push({ label: 'max tokens', value: String(params.maxTokens) });\n if (params.reasoningEffort !== undefined) entries.push({ label: 'reasoning effort', value: params.reasoningEffort });\n return entries;\n}\n","import type { AgentRuntimeConfig } from '../../server/types.js';\n\nexport type RuntimeConfigSummaryEntry = {\n label: string;\n value: string;\n};\n\nfunction enabledLabel(value: boolean | undefined, defaultValue: boolean): string {\n return (value ?? defaultValue) ? 'on' : 'off';\n}\n\n/** Primary for on / numeric values; destructive for off. */\nexport function runtimeConfigValueClassName(value: string): string {\n return value === 'off' ? 'text-failure-bg font-medium' : 'text-primary-button-bg font-medium';\n}\n\nexport function runtimeConfigSummary(config?: AgentRuntimeConfig): RuntimeConfigSummaryEntry[] {\n return [\n { label: 'iteration limit', value: String(config?.iterationLimit ?? 100) },\n { label: 'sandbox', value: enabledLabel(config?.sandbox?.enabled, false) },\n { label: 'compaction', value: enabledLabel(config?.contextManagement?.compaction?.enabled, true) },\n {\n label: 'large tool response',\n value: enabledLabel(config?.contextManagement?.largeToolResponse?.enabled, true),\n },\n { label: 'dynamic sub-agents', value: enabledLabel(config?.dynamicSubAgents?.enabled, true) },\n { label: 'generative UI', value: enabledLabel(config?.generativeUi?.enabled, true) },\n { label: 'ask user questions', value: enabledLabel(config?.askUserQuestions?.enabled, true) },\n ];\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport type { AgentSpec, ModelSelection } from '../../server/types.js';\nimport { useSlot } from '../../theme/SlotsProvider.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { cn } from '../lib/cn.js';\nimport { Tooltip } from '../primitives/Tooltip.js';\nimport type { AgentConfigEditor } from './AgentConfigEditors.js';\nimport { initialUserMessagesFromSpec } from './agentConfigMessages.js';\nimport {\n editableMountsFromSpec,\n enabledToolsFromMount,\n preloadFromMount,\n withPreload,\n type EditableMount,\n} from './agentConfigMounts.js';\nimport { displayModelLabel, ProviderMark } from './DraftModelCatalogPanel.js';\nimport { modelParamSummary } from './modelParamsSummary.js';\nimport { runtimeConfigSummary, runtimeConfigValueClassName } from './runtimeConfigSummary.js';\n\nexport type AgentConfigPanelProps = {\n spec: AgentSpec;\n model?: ModelSelection;\n skillsAvailable: boolean;\n instructions: string;\n onOpenEditor: (editor: AgentConfigEditor) => void;\n onChange?: (spec: AgentSpec) => void;\n onClose?: () => void;\n};\n\nfunction formatTokens(value: number): string {\n return Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 }).format(value);\n}\n\nfunction McpServerChip({\n item,\n onRemove,\n onTogglePreload,\n}: {\n item: EditableMount;\n onRemove?: () => void;\n onTogglePreload?: () => void;\n}) {\n const enabled = enabledToolsFromMount(item.value);\n const preload = preloadFromMount(item.value);\n const toolsLabel = enabled === 'all' ? 'All tools' : `${enabled.length} tools`;\n\n return (\n <span className=\"flex items-center overflow-hidden rounded-md border border-border text-xs\">\n {onTogglePreload ? (\n <Tooltip\n side=\"bottom\"\n dismissOnClick={false}\n triggerClassName=\"self-stretch\"\n className=\"w-64 whitespace-normal p-3 text-left shadow-lg\"\n content={\n <span className=\"flex flex-col gap-1.5\">\n <span className=\"flex items-center justify-between gap-3\">\n <span className=\"font-semibold\">Preload tools</span>\n <span className=\"text-primary-button-bg text-[0.625rem] font-semibold tracking-wide uppercase\">\n {preload ? 'ON' : 'OFF'}\n </span>\n </span>\n <span className=\"text-text-secondary text-xs leading-snug\">\n Load MCP tool definitions in the agent context upfront. When off, the agent discovers tools dynamically\n (uses less context upfront).\n </span>\n </span>\n }\n >\n <button\n type=\"button\"\n aria-pressed={preload}\n aria-label={`Preload tools for ${item.name}`}\n className={cn(\n 'flex h-full items-center justify-center border-r border-border px-1.5 transition-colors',\n preload\n ? 'bg-primary-button-bg text-primary-button-text'\n : 'text-text-secondary hover:bg-ghost-button-hover',\n )}\n onClick={event => {\n event.stopPropagation();\n onTogglePreload();\n }}\n >\n <Icon name=\"book-open\" className=\"size-3.5\" />\n </button>\n </Tooltip>\n ) : null}\n <span className=\"py-1 pl-2\">{item.name}</span>\n <span className=\"text-text-secondary ml-1 py-1\">{toolsLabel}</span>\n {onRemove ? (\n <button\n type=\"button\"\n aria-label={`Remove ${item.name}`}\n className={auiButtonClass({\n variant: 'ghost',\n size: 'icon',\n className: 'mx-1 size-5',\n })}\n onClick={event => {\n event.stopPropagation();\n onRemove();\n }}\n >\n <Icon name=\"xmark\" className=\"size-3\" />\n </button>\n ) : (\n <span className=\"pr-2\" />\n )}\n </span>\n );\n}\n\nexport function AgentConfigSection({\n title,\n description,\n icon,\n actionIcon = 'pencil',\n actionLabel,\n onEdit,\n children,\n}: {\n title?: string;\n description?: string;\n icon?: string;\n actionIcon?: string;\n actionLabel?: string;\n onEdit?: () => void;\n children?: ReactNode;\n}) {\n const action = actionLabel ?? `Edit ${title}`;\n\n return (\n <section\n className={cn('group border-b border-border px-4 py-4', onEdit ? 'cursor-pointer' : null)}\n role={onEdit ? 'button' : undefined}\n tabIndex={onEdit ? 0 : undefined}\n onClick={onEdit}\n // Enter/Space activate the block like a native button. Keys aimed at nested\n // controls must pass through, or preventDefault here cancels their activation.\n onKeyDown={\n onEdit\n ? event => {\n if (event.target !== event.currentTarget) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n onEdit();\n }\n : undefined\n }\n >\n {title && (\n <div className={cn('flex items-start justify-between gap-3', children ? 'mb-3' : null)}>\n <div className=\"flex min-w-0 items-start gap-2\">\n {icon ? <Icon name={icon} className=\"text-text-secondary mt-0.5 size-4 shrink-0\" /> : null}\n <div className=\"min-w-0\">\n <h3 className=\"text-text-primary text-sm font-semibold\">{title}</h3>\n {description ? <p className=\"text-text-secondary mt-0.5 text-xs\">{description}</p> : null}\n </div>\n </div>\n {onEdit ? (\n <button\n type=\"button\"\n aria-label={action}\n title={action}\n className={auiButtonClass({\n variant: 'ghost',\n size: 'icon',\n className: 'size-7 opacity-0 transition-opacity group-hover:opacity-100 focus-visible:opacity-100',\n })}\n onClick={event => {\n event.stopPropagation();\n onEdit();\n }}\n >\n <Icon name={actionIcon} className=\"size-3.5\" />\n </button>\n ) : null}\n </div>\n )}\n {children}\n </section>\n );\n}\n\nexport function AgentConfigPanel({\n spec,\n model,\n skillsAvailable,\n instructions,\n onOpenEditor,\n onChange,\n onClose,\n}: AgentConfigPanelProps) {\n const Section = useSlot('AgentConfigSection');\n const mcp = editableMountsFromSpec(spec.mcpServers);\n const skills = editableMountsFromSpec(spec.skills);\n const modelParams = modelParamSummary(spec.model.params);\n const runtimeConfig = runtimeConfigSummary(spec.config);\n const instructionPreview = instructions.trim();\n const userMessageCount = initialUserMessagesFromSpec(spec).length;\n const modelInfo = [\n model?.properties.contextLength === undefined ? null : formatTokens(model.properties.contextLength),\n ].filter((value): value is string => value !== null);\n const modelInfoTitle = [\n model?.properties.contextLength === undefined\n ? null\n : `Context: ${model.properties.contextLength.toLocaleString()} tokens`,\n model?.properties.maxOutputTokens === undefined\n ? null\n : `Maximum output: ${model.properties.maxOutputTokens.toLocaleString()} tokens`,\n ]\n .filter((value): value is string => value !== null)\n .join('\\n');\n\n return (\n <div className=\"bg-card-bg text-text-primary flex h-full min-h-0 flex-col\">\n <header className=\"flex min-h-14 shrink-0 items-center gap-1 border-b border-border bg-topbar-bg px-2 py-1.5\">\n <Icon name=\"sliders\" className=\"size-4\" />\n <h2 className=\"text-sm font-semibold\">Agent Config</h2>\n <span className=\"min-w-0 flex-1\" />\n {onClose ? (\n <button\n type=\"button\"\n aria-label=\"Close agent config\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon', className: 'size-8' })}\n onClick={onClose}\n >\n <Icon name=\"xmark\" />\n </button>\n ) : null}\n </header>\n <div className=\"min-h-0 flex-1 overflow-y-auto\">\n <Section>\n <div className=\"flex items-center gap-2\">\n <ProviderMark\n logo={model?.provider.logo}\n label={model?.provider.name ?? spec.model.name}\n className=\"size-4 text-[0.5rem]\"\n />\n <span className=\"min-w-0 flex-1 truncate text-sm font-medium\">{displayModelLabel(spec.model.name)}</span>\n {modelInfo.length ? (\n <span title={modelInfoTitle} className=\"text-text-secondary shrink-0 whitespace-nowrap text-[0.6875rem]\">\n {modelInfo.join(' · ')}\n </span>\n ) : null}\n <button\n type=\"button\"\n aria-label=\"Edit Model\"\n title=\"Edit Model\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon', className: 'size-7' })}\n onClick={() => onOpenEditor('model')}\n >\n <Icon name=\"pencil\" className=\"size-3.5\" />\n </button>\n </div>\n <div className=\"mt-2 flex items-center gap-2\">\n <dl className=\"text-text-secondary flex min-w-0 flex-1 flex-wrap gap-x-3 gap-y-1 text-xs\">\n {modelParams.length ? (\n modelParams.map(entry => (\n <div key={entry.label} className=\"flex gap-1\">\n <dt>{entry.label}:</dt>\n <dd className=\"text-text-primary font-medium\">{entry.value}</dd>\n </div>\n ))\n ) : (\n <div>model settings: defaults</div>\n )}\n </dl>\n <button\n type=\"button\"\n aria-label=\"Model settings\"\n title=\"Model settings\"\n className={auiButtonClass({\n variant: 'ghost',\n size: 'icon',\n className: 'size-7 shrink-0 self-start',\n })}\n onClick={() => onOpenEditor('model-settings')}\n >\n <Icon name=\"sliders\" className=\"size-3.5\" />\n </button>\n </div>\n </Section>\n\n <Section title=\"Instructions\" description=\"Define the agent's role, goals, and behavior.\">\n <button\n type=\"button\"\n aria-label=\"Edit Instructions\"\n className=\"border-border hover:bg-ghost-button-hover flex w-full items-center gap-3 rounded-lg border p-3 text-left transition-colors\"\n onClick={() => onOpenEditor('instructions')}\n >\n <div className=\"min-w-0 flex-1\">\n <p\n className={cn(\n 'line-clamp-3 whitespace-pre-wrap text-sm',\n instructionPreview ? 'text-text-primary' : 'text-text-secondary',\n )}\n >\n {instructionPreview || 'No instructions added.'}\n </p>\n <p className=\"text-text-secondary mt-2 text-xs\">\n {userMessageCount} user {userMessageCount === 1 ? 'message' : 'messages'}\n </p>\n </div>\n <Icon name=\"chevron-right\" className=\"text-text-secondary size-4 shrink-0\" />\n </button>\n </Section>\n\n <Section\n title=\"Runtime Config\"\n description=\"Control execution and context behavior.\"\n actionIcon=\"sliders\"\n onEdit={() => onOpenEditor('runtime')}\n >\n <dl className=\"text-text-secondary flex flex-wrap gap-x-3 gap-y-1 text-xs leading-relaxed\">\n {runtimeConfig.map(entry => (\n <div key={entry.label} className=\"flex gap-1\">\n <dt>{entry.label}:</dt>\n <dd className={runtimeConfigValueClassName(entry.value)}>{entry.value}</dd>\n </div>\n ))}\n </dl>\n </Section>\n\n <Section\n title=\"MCP Servers\"\n icon=\"mcp-server\"\n actionIcon=\"plus\"\n actionLabel=\"Add MCP server\"\n onEdit={() => onOpenEditor('mcp')}\n >\n {mcp.length ? (\n <div className=\"flex flex-wrap gap-1.5\">\n {mcp.map(item => (\n <McpServerChip\n key={item.id}\n item={item}\n onRemove={\n onChange\n ? () =>\n onChange({\n ...spec,\n mcpServers: mcp.filter(mount => mount.id !== item.id).map(mount => mount.value),\n })\n : undefined\n }\n onTogglePreload={\n onChange\n ? () =>\n onChange({\n ...spec,\n mcpServers: mcp.map(mount =>\n mount.id === item.id\n ? withPreload(mount.value, !preloadFromMount(mount.value))\n : mount.value,\n ),\n })\n : undefined\n }\n />\n ))}\n </div>\n ) : null}\n </Section>\n\n <Section title=\"Skills\" actionIcon=\"plus\" actionLabel=\"Add skill\" onEdit={() => onOpenEditor('skills')}>\n {!skillsAvailable ? (\n <p className=\"text-text-secondary text-xs\">Skills require an available sandbox.</p>\n ) : skills.length ? (\n <div className=\"flex flex-wrap gap-1.5\">\n {skills.map(item => (\n <span key={item.id} className=\"rounded-md border border-border px-2 py-1 text-xs\">\n {item.name}\n </span>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary text-xs\">No skills selected.</p>\n )}\n </Section>\n </div>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentConfigPanel: typeof AgentConfigPanel;\n AgentConfigSection: typeof AgentConfigSection;\n }\n}\n","'use client';\n\nimport type { TrueForgeApi } from '@truefoundry/trueforge-sdk';\nimport { useId, useRef, useState } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { auiInputClass } from '../lib/inputClasses.js';\nimport { Button } from '../primitives/Button.js';\nimport { SideDrawer } from '../primitives/SideDrawer.js';\n\ntype UserMessageDraft = {\n id: number;\n content: string;\n};\n\nexport type AgentInstructionsDraft = {\n instructions: string;\n messages: TrueForgeApi.InitialUserMessage[];\n};\n\nexport type AgentInstructionsDrawerProps = {\n open: boolean;\n instructions: string;\n messages?: TrueForgeApi.InitialUserMessage[];\n onSave: (draft: AgentInstructionsDraft) => void;\n onClose: () => void;\n};\n\nfunction persistedMessages(rows: UserMessageDraft[]): TrueForgeApi.InitialUserMessage[] {\n return rows.filter(row => row.content.trim().length > 0).map(row => ({ type: 'user.message', content: row.content }));\n}\n\nexport function AgentInstructionsDrawer({\n open,\n instructions,\n messages = [],\n onSave,\n onClose,\n}: AgentInstructionsDrawerProps) {\n const fieldId = useId();\n const nextMessageId = useRef(messages.length);\n const [instructionDraft, setInstructionDraft] = useState(instructions);\n const [messageDrafts, setMessageDrafts] = useState<UserMessageDraft[]>(() =>\n messages.map((message, id) => ({ id, content: message.content })),\n );\n\n const updateMessageDrafts = (next: UserMessageDraft[]) => {\n setMessageDrafts(next);\n };\n\n const addUserMessage = () => {\n const next = [...messageDrafts, { id: nextMessageId.current, content: '' }];\n nextMessageId.current += 1;\n setMessageDrafts(next);\n };\n\n const updateUserMessage = ({ id, content }: UserMessageDraft) => {\n updateMessageDrafts(messageDrafts.map(message => (message.id === id ? { id, content } : message)));\n };\n\n const removeUserMessage = (id: number) => {\n updateMessageDrafts(messageDrafts.filter(message => message.id !== id));\n };\n\n const save = () => {\n onSave({ instructions: instructionDraft, messages: persistedMessages(messageDrafts) });\n onClose();\n };\n\n return (\n <SideDrawer\n open={open}\n onOpenChange={nextOpen => !nextOpen && onClose()}\n title=\"Instructions\"\n description=\"Define the agent behavior and messages added at the start of every session.\"\n anchor=\"right\"\n size=\"lg\"\n aria-label=\"Edit Instructions\"\n footer={\n <div className=\"flex justify-end\">\n <Button.Primary type=\"button\" onClick={save}>\n Save\n </Button.Primary>\n </div>\n }\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-6 p-5\">\n <section>\n <label htmlFor={`${fieldId}-instructions`} className=\"text-text-primary text-sm font-semibold\">\n Agent instructions\n </label>\n <p className=\"text-text-secondary mt-1 text-xs\">Describe the agent's role, goals, and constraints.</p>\n <textarea\n id={`${fieldId}-instructions`}\n value={instructionDraft}\n rows={14}\n placeholder=\"Enter detailed instructions for your agent…\"\n className={auiInputClass('mt-3 min-h-64 resize-y py-3')}\n onChange={event => setInstructionDraft(event.target.value)}\n />\n </section>\n\n <section className=\"border-border border-t pt-5\">\n <div className=\"flex items-center justify-between gap-3\">\n <div>\n <h3 className=\"text-text-primary text-sm font-semibold\">User Messages</h3>\n <p className=\"text-text-secondary mt-1 text-xs\">Add initial messages to every new agent session.</p>\n </div>\n <Button.Secondary type=\"button\" size=\"small\" onClick={addUserMessage}>\n <Icon name=\"plus\" className=\"size-3.5\" />\n Add User Message\n </Button.Secondary>\n </div>\n\n {messageDrafts.length > 0 ? (\n <div className=\"mt-4 flex flex-col gap-4\">\n {messageDrafts.map((message, index) => {\n const messageId = `${fieldId}-user-message-${message.id}`;\n return (\n <div key={message.id} className=\"border-border rounded-lg border p-3\">\n <div className=\"mb-2 flex items-center gap-2\">\n <Icon name=\"user\" className=\"text-text-secondary size-4\" />\n <label htmlFor={messageId} className=\"text-text-primary flex-1 text-sm font-medium\">\n User Message {index + 1}\n </label>\n <button\n type=\"button\"\n aria-label={`Remove User Message ${index + 1}`}\n className={auiButtonClass({ variant: 'ghost', size: 'icon', className: 'size-7' })}\n onClick={() => removeUserMessage(message.id)}\n >\n <Icon name=\"trash\" className=\"size-3.5\" />\n </button>\n </div>\n <textarea\n id={messageId}\n value={message.content}\n rows={4}\n placeholder=\"Type message content…\"\n className={auiInputClass('min-h-24 resize-y py-2')}\n onChange={event => updateUserMessage({ id: message.id, content: event.target.value })}\n />\n </div>\n );\n })}\n </div>\n ) : (\n <p className=\"text-text-secondary mt-4 text-sm\">No initial user messages.</p>\n )}\n </section>\n </div>\n </SideDrawer>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentInstructionsDrawer: typeof AgentInstructionsDrawer;\n }\n}\n","'use client';\n\nimport { useEffect, useId, useRef, type ReactNode } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { cn } from '../lib/cn.js';\nimport { useCompactLayout } from '../lib/CompactLayoutContext.js';\nimport { useCompactOverlayStyle } from '../lib/useCompactOverlayStyle.js';\n\nexport type SideDrawerAnchor = 'left' | 'right';\nexport type SideDrawerSize = 'sm' | 'md' | 'lg' | 'xl';\n\nexport type SideDrawerProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description?: string;\n headerIcon?: ReactNode;\n children: ReactNode;\n footer?: ReactNode;\n /** Desktop side; ignored when compact / below `md` (falls back to bottom sheet). */\n anchor?: SideDrawerAnchor;\n /** Desktop width. Defaults to `md`. */\n size?: SideDrawerSize;\n className?: string;\n 'aria-label'?: string;\n};\n\nconst SIZE_WIDTH: Record<SideDrawerSize, string> = {\n sm: 'md:w-80',\n md: 'md:w-[28rem]',\n lg: 'md:w-[36rem]',\n xl: 'md:w-[42rem]',\n};\n\n/**\n * Responsive overlay chrome: side drawer on `md+`, bottom sheet below `md`\n * (and always when compact dock/widget layout is active).\n */\nexport function SideDrawer({\n open,\n onOpenChange,\n title,\n description,\n headerIcon,\n children,\n footer,\n anchor = 'right',\n size = 'md',\n className,\n 'aria-label': ariaLabel,\n}: SideDrawerProps) {\n const ref = useRef<HTMLDialogElement>(null);\n const titleId = useId();\n const descriptionId = useId();\n const compact = useCompactLayout();\n const compactStyle = useCompactOverlayStyle(ref, compact);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n if (open && !el.open) el.showModal();\n else if (!open && el.open) el.close();\n }, [open]);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const handler = () => onOpenChange(false);\n el.addEventListener('close', handler);\n return () => el.removeEventListener('close', handler);\n }, [onOpenChange]);\n\n return (\n <dialog\n ref={ref}\n aria-label={ariaLabel ?? title}\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n // Escape still closes via cancel; backdrop click must not (no light-dismiss).\n closedby=\"closerequest\"\n onCancel={event => {\n event.preventDefault();\n event.stopPropagation();\n onOpenChange(false);\n }}\n style={compactStyle}\n className={cn(\n 'bg-card-bg text-text-primary border-border open:flex open:flex-col overflow-hidden rounded-none p-0 shadow-xl',\n 'backdrop:bg-black/50 backdrop:backdrop-blur-[2px] dark:backdrop:bg-black/70',\n compact\n ? 'm-0 mt-auto h-[min(85dvh,40rem)] w-full max-w-none border-t pb-[env(safe-area-inset-bottom)]'\n : cn(\n // Mobile / narrow: bottom sheet\n 'm-0 mt-auto h-[min(85dvh,40rem)] w-full max-w-none border-t pb-[env(safe-area-inset-bottom)]',\n // Desktop: side drawer\n 'md:mt-0 md:h-dvh md:max-h-none md:border md:pb-0',\n SIZE_WIDTH[size],\n anchor === 'right'\n ? 'md:ml-auto md:mr-0 md:border-y-0 md:border-r-0'\n : 'md:mr-auto md:ml-0 md:border-y-0 md:border-l-0',\n ),\n className,\n )}\n >\n <header className=\"bg-topbar-bg flex shrink-0 items-center gap-3 border-b border-border px-5 py-4\">\n {headerIcon}\n <div className=\"min-w-0 flex-1\">\n <h2 id={titleId} className=\"text-text-primary text-lg font-semibold tracking-tight\">\n {title}\n </h2>\n {description ? (\n <p id={descriptionId} className=\"text-text-secondary mt-1 text-sm\">\n {description}\n </p>\n ) : null}\n </div>\n <button\n type=\"button\"\n aria-label=\"Close\"\n title=\"Close\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={() => onOpenChange(false)}\n >\n <Icon name=\"xmark\" />\n </button>\n </header>\n <div className=\"flex min-h-0 flex-1 flex-col overflow-x-hidden overflow-y-auto\">{children}</div>\n {footer ? <div className=\"shrink-0 border-t border-border px-5 py-3\">{footer}</div> : null}\n </dialog>\n );\n}\n","'use client';\n\nimport { useLayoutEffect, useState, type CSSProperties, type RefObject } from 'react';\n\nexport function useCompactOverlayStyle(\n ref: RefObject<HTMLElement | null>,\n compact: boolean,\n contentSized = false,\n): CSSProperties | undefined {\n const [style, setStyle] = useState<CSSProperties>();\n\n useLayoutEffect(() => {\n if (!compact) {\n setStyle(undefined);\n return;\n }\n\n const container = ref.current?.closest<HTMLElement>('[data-aui-compact-layout]');\n if (!container) return;\n\n const update = () => {\n const bounds = container.getBoundingClientRect();\n const height = Math.min(bounds.height * 0.85, 480);\n setStyle({\n left: bounds.left,\n bottom: window.innerHeight - bounds.bottom,\n width: bounds.width,\n height: contentSized ? 'fit-content' : height,\n maxHeight: height,\n });\n };\n\n update();\n const observer = typeof ResizeObserver === 'function' ? new ResizeObserver(update) : null;\n observer?.observe(container);\n window.addEventListener('resize', update);\n return () => {\n observer?.disconnect();\n window.removeEventListener('resize', update);\n };\n }, [compact, contentSized, ref]);\n\n return style;\n}\n","'use client';\n\nimport { useState } from 'react';\n\nimport { useMCPAuth } from '../../hooks/useMcpAuth.js';\nimport { Icon } from '../../icons/Icon.js';\nimport type { AgentSpec, ConnectorState, McpToolSelection } from '../../server/types.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { cn } from '../lib/cn.js';\nimport { auiInputClass } from '../lib/inputClasses.js';\nimport { useInfiniteScrollSentinel } from '../lib/useInfiniteScrollSentinel.js';\nimport { Button } from '../primitives/Button.js';\nimport { CatalogLogo } from '../primitives/CatalogLogo.js';\nimport { Spinner } from '../primitives/Spinner.js';\nimport { Switch } from '../primitives/Switch.js';\nimport { Tooltip } from '../primitives/Tooltip.js';\nimport {\n editableMountsFromSpec,\n enabledToolsFromMount,\n preloadFromMount,\n withEnabledTools,\n withPreload,\n} from './agentConfigMounts.js';\nimport { useDraftCatalog } from './DraftCatalogProvider.js';\nimport { connectorsWithSelectedStubs } from './mcpConnectorStubs.js';\n\nexport type AgentMcpEditorContentProps = {\n spec: AgentSpec;\n connectors: ConnectorState[];\n query: string;\n activeConnectorId: string | null;\n tools: McpToolSelection[];\n toolsLoading: boolean;\n toolsError: string | null;\n onQueryChange: (query: string) => void;\n onSelectConnector: (connectorId: string) => void;\n onRetryTools: () => void;\n onRefreshConnectors?: () => Promise<void>;\n onChange: (spec: AgentSpec) => void;\n};\n\nfunction ToolCheckbox({ checked }: { checked: boolean }) {\n return (\n <span\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center rounded border',\n checked\n ? 'border-primary-button-bg bg-primary-button-bg text-primary-button-text'\n : 'border-input-border bg-input-box-bg',\n )}\n aria-hidden\n >\n {checked ? <Icon name=\"check\" className=\"size-3\" /> : null}\n </span>\n );\n}\n\nfunction ConnectorIcon({ connector }: { connector: ConnectorState }) {\n const logo = Reflect.get(connector, 'logo');\n if (typeof logo === 'string' && logo.trim() !== '') {\n return <CatalogLogo src={logo} alt=\"\" className=\"size-4 shrink-0 object-contain\" aria-hidden />;\n }\n return <Icon name=\"mcp-server\" className=\"text-text-secondary size-4 shrink-0\" />;\n}\n\nfunction selectedToolsHeaderLabel(mcpMounts: ReturnType<typeof editableMountsFromSpec>): string {\n if (mcpMounts.length === 0) return 'Selected Tools (0)';\n const everyAll = mcpMounts.every(mount => enabledToolsFromMount(mount.value) === 'all');\n if (everyAll) return 'Selected Tools (All)';\n const count = mcpMounts.reduce((total, mount) => {\n const enabled = enabledToolsFromMount(mount.value);\n return enabled === 'all' ? total : total + enabled.length;\n }, 0);\n return `Selected Tools (${count})`;\n}\n\nfunction ConnectNowButton({ connectorId, onConnected }: { connectorId: string; onConnected: () => Promise<void> }) {\n const { handleAuthorize, isOAuthLoading } = useMCPAuth();\n return (\n <Button.Primary\n type=\"button\"\n className=\"min-w-44\"\n disabled={isOAuthLoading}\n onClick={() => {\n void handleAuthorize(connectorId, isSuccess => {\n if (isSuccess) void onConnected();\n });\n }}\n >\n {isOAuthLoading ? 'Connecting...' : 'Connect Now'}\n </Button.Primary>\n );\n}\n\nexport function AgentMcpEditorContent({\n spec,\n connectors,\n query,\n activeConnectorId,\n tools,\n toolsLoading,\n toolsError,\n onQueryChange,\n onSelectConnector,\n onRetryTools,\n onRefreshConnectors,\n onChange,\n}: AgentMcpEditorContentProps) {\n const { connectorsHasMore, connectorsLoadMoreFailed, connectorsLoadingMore, loading, loadMoreConnectors } =\n useDraftCatalog();\n const [toolQuery, setToolQuery] = useState('');\n const [collapsedMountIds, setCollapsedMountIds] = useState<ReadonlySet<string>>(() => new Set());\n const mcpMounts = editableMountsFromSpec(spec.mcpServers);\n const catalogConnectors = connectorsWithSelectedStubs({ connectors, selected: mcpMounts });\n const selectedConnector = catalogConnectors.find(item => item.id === activeConnectorId);\n const activeMount = selectedConnector\n ? mcpMounts.find(item => item.id === selectedConnector.id || item.name === selectedConnector.name)\n : undefined;\n const needsAuth = selectedConnector?.authenticated === false;\n const canAddActiveConnector = selectedConnector !== undefined && selectedConnector.authenticated === true;\n const enabledTools = activeMount ? enabledToolsFromMount(activeMount.value) : [];\n const normalizedQuery = query.trim().toLowerCase();\n const filteredConnectors = catalogConnectors.filter(item =>\n `${item.name} ${item.description ?? ''}`.toLowerCase().includes(normalizedQuery),\n );\n const normalizedToolQuery = toolQuery.trim().toLowerCase();\n const filteredTools =\n normalizedToolQuery === '' ? tools : tools.filter(tool => tool.name.toLowerCase().includes(normalizedToolQuery));\n\n const { listRef: connectorsListRef, sentinelRef: connectorsSentinelRef } = useInfiniteScrollSentinel({\n enabled: true,\n hasMore: connectorsHasMore && !connectorsLoadMoreFailed,\n loading: connectorsLoadingMore || loading,\n onLoadMore: loadMoreConnectors,\n });\n const updateMount = (mountId: string, value: object) => {\n onChange({\n ...spec,\n mcpServers: mcpMounts.map(item => (item.id === mountId ? value : item.value)),\n });\n };\n\n const removeMount = (mountId: string) => {\n onChange({\n ...spec,\n mcpServers: mcpMounts.filter(item => item.id !== mountId).map(item => item.value),\n });\n };\n\n const openMountConnector = (mount: (typeof mcpMounts)[number]) => {\n const match = catalogConnectors.find(item => item.id === mount.id || item.name === mount.name);\n onSelectConnector(match?.id ?? mount.id);\n };\n\n const toggleTool = (toolName: string) => {\n if (!selectedConnector) return;\n if (!activeMount) {\n if (!canAddActiveConnector) return;\n onChange({\n ...spec,\n mcpServers: [\n ...(spec.mcpServers ?? []),\n withEnabledTools({ id: selectedConnector.id, name: selectedConnector.name }, [toolName]),\n ],\n });\n return;\n }\n const current = enabledTools === 'all' ? tools.map(tool => tool.name) : enabledTools;\n const checked = current.includes(toolName);\n const next = checked ? current.filter(name => name !== toolName) : [...current, toolName];\n if (next.length === 0) {\n removeMount(activeMount.id);\n } else {\n updateMount(activeMount.id, withEnabledTools(activeMount.value, next));\n }\n };\n\n const connectDuringChat = () => {\n if (!selectedConnector || activeMount !== undefined) return;\n onChange({\n ...spec,\n mcpServers: [\n ...(spec.mcpServers ?? []),\n withEnabledTools({ id: selectedConnector.id, name: selectedConnector.name }, 'all'),\n ],\n });\n };\n\n return (\n <div className=\"flex h-[min(36rem,calc(100dvh-10rem))] w-full min-w-0 flex-col overflow-hidden md:grid md:grid-cols-[14rem_minmax(0,1fr)_14rem]\">\n <div className=\"flex max-h-44 min-h-0 min-w-0 flex-col border-b border-border md:max-h-none md:border-r md:border-b-0 bg-sidebar-bg\">\n <label className=\"relative m-3 block shrink-0\">\n <Icon name=\"search\" className=\"text-text-secondary absolute top-1/2 left-2 size-3.5 -translate-y-1/2\" />\n <input\n value={query}\n onChange={event => onQueryChange(event.target.value)}\n placeholder=\"Search MCP\"\n className={auiInputClass('h-8 w-full pl-7')}\n />\n </label>\n <div ref={connectorsListRef} className=\"min-h-0 flex-1 overflow-y-auto p-2\">\n {filteredConnectors.map(connector => {\n const mounted = mcpMounts.some(item => item.id === connector.id || item.name === connector.name);\n const active = connector.id === activeConnectorId;\n return (\n <button\n key={connector.id}\n type=\"button\"\n aria-current={active ? 'true' : undefined}\n aria-label={connector.name}\n className={cn(\n 'flex w-full cursor-pointer items-center gap-2 rounded-md px-2 py-2 text-left',\n active ? 'bg-primary-button-bg/10' : 'hover:bg-ghost-button-hover',\n )}\n onClick={() => onSelectConnector(connector.id)}\n >\n <ConnectorIcon connector={connector} />\n <span className=\"text-text-primary min-w-0 flex-1 truncate text-sm font-medium\">{connector.name}</span>\n {mounted ? (\n <span\n className=\"bg-success-bg text-success-text flex size-3 shrink-0 items-center justify-center rounded-full\"\n aria-label={`${connector.name} selected`}\n >\n <Icon name=\"check\" className=\"size-2\" />\n </span>\n ) : null}\n </button>\n );\n })}\n {connectorsHasMore ? (\n <div\n ref={connectorsLoadMoreFailed ? undefined : connectorsSentinelRef}\n className=\"flex h-8 items-center justify-center\"\n >\n {connectorsLoadMoreFailed ? (\n <button\n type=\"button\"\n className={auiButtonClass({ variant: 'ghost', size: 'small' })}\n onClick={loadMoreConnectors}\n >\n Retry loading connectors\n </button>\n ) : connectorsLoadingMore ? (\n <span className=\"text-text-secondary text-[0.625rem]\">Loading…</span>\n ) : null}\n </div>\n ) : null}\n </div>\n </div>\n\n <div className=\"flex min-h-0 min-w-0 flex-1 flex-col border-b border-border md:border-r md:border-b-0\">\n {selectedConnector ? (\n needsAuth ? (\n <div className=\"flex min-h-0 flex-1 flex-col items-center justify-center gap-4 p-6 text-center\">\n <Icon name=\"lock\" className=\"text-text-secondary size-10\" />\n <p className=\"text-text-primary text-sm font-semibold\">You're not connected to this MCP Server</p>\n {onRefreshConnectors ? (\n <ConnectNowButton connectorId={selectedConnector.id} onConnected={onRefreshConnectors} />\n ) : null}\n <div className=\"text-text-secondary flex w-full max-w-xs items-center gap-3 text-xs\">\n <span className=\"bg-border h-px flex-1\" />\n OR\n <span className=\"bg-border h-px flex-1\" />\n </div>\n <Button.Secondary\n type=\"button\"\n className=\"min-w-44\"\n disabled={activeMount !== undefined}\n onClick={connectDuringChat}\n >\n Connect During Chat\n </Button.Secondary>\n </div>\n ) : (\n <>\n <div className=\"flex shrink-0 items-center justify-between gap-3 border-b border-border p-3\">\n <p className=\"min-w-0 truncate text-sm font-semibold\">\n {selectedConnector.name} Tools ({tools.length})\n </p>\n <label className=\"text-text-secondary flex shrink-0 cursor-pointer items-center gap-2 text-xs has-[:disabled]:cursor-not-allowed\">\n Enable All Tools\n <Switch\n checked={activeMount !== undefined && enabledTools === 'all'}\n disabled={!canAddActiveConnector && activeMount === undefined}\n onCheckedChange={enabled => {\n if (activeMount) {\n if (enabled) {\n updateMount(activeMount.id, withEnabledTools(activeMount.value, 'all'));\n } else {\n removeMount(activeMount.id);\n }\n } else if (enabled && canAddActiveConnector) {\n onChange({\n ...spec,\n mcpServers: [\n ...(spec.mcpServers ?? []),\n withEnabledTools({ id: selectedConnector.id, name: selectedConnector.name }, 'all'),\n ],\n });\n }\n }}\n aria-label=\"Enable all tools\"\n />\n </label>\n </div>\n <label className=\"relative m-3 block shrink-0\">\n <Icon name=\"search\" className=\"text-text-secondary absolute top-1/2 left-2 size-3.5 -translate-y-1/2\" />\n <input\n value={toolQuery}\n onChange={event => setToolQuery(event.target.value)}\n placeholder=\"Search Tools\"\n className={auiInputClass('h-8 w-full pl-7')}\n />\n </label>\n <div className=\"min-h-0 flex-1 overflow-y-auto px-2 pb-2\">\n {toolsLoading ? (\n <div className=\"flex h-full min-h-24 items-center justify-center p-3\" aria-label=\"Loading tools\">\n <Spinner size={20} className=\"text-text-secondary\" />\n </div>\n ) : null}\n {toolsError ? (\n <div className=\"p-3\">\n <p className=\"text-failure-bg text-sm\">{toolsError}</p>\n <Button.Secondary type=\"button\" size=\"small\" className=\"mt-2\" onClick={onRetryTools}>\n Retry\n </Button.Secondary>\n </div>\n ) : null}\n {!toolsLoading\n ? filteredTools.map(tool => {\n const checked = enabledTools === 'all' || enabledTools.includes(tool.name);\n return (\n <button\n key={tool.id}\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n aria-label={tool.name}\n disabled={!canAddActiveConnector && activeMount === undefined}\n className=\"hover:bg-ghost-button-hover flex w-full cursor-pointer items-center gap-2 rounded-md px-2 py-2 text-left disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent\"\n onClick={() => toggleTool(tool.name)}\n >\n <ToolCheckbox checked={checked} />\n <span className=\"min-w-0 flex-1\">\n <span className=\"text-text-primary block truncate text-sm font-medium\">{tool.name}</span>\n {tool.description ? (\n <span className=\"text-text-secondary line-clamp-1 text-xs\">{tool.description}</span>\n ) : null}\n </span>\n </button>\n );\n })\n : null}\n </div>\n <label className=\"text-text-secondary flex shrink-0 cursor-pointer items-center justify-end gap-2 border-t border-border p-3 text-xs has-[:disabled]:cursor-not-allowed\">\n Preload tools\n <Switch\n checked={activeMount !== undefined && preloadFromMount(activeMount.value)}\n disabled={activeMount === undefined}\n onCheckedChange={preload => {\n if (activeMount) updateMount(activeMount.id, withPreload(activeMount.value, preload));\n }}\n aria-label=\"Preload tools\"\n />\n </label>\n </>\n )\n ) : (\n <p className=\"text-text-secondary p-4 text-sm\">Select an MCP server to configure its tools.</p>\n )}\n </div>\n\n <div className=\"flex max-h-44 min-h-0 min-w-0 flex-col md:max-h-none\">\n <div className=\"shrink-0 border-b border-border p-3 text-sm font-semibold\">\n {selectedToolsHeaderLabel(mcpMounts)}\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto p-2\">\n {mcpMounts.length ? (\n <div className=\"space-y-1\">\n {mcpMounts.map(mount => {\n const selected = enabledToolsFromMount(mount.value);\n return (\n <details\n key={mount.id}\n className=\"group/mount\"\n open={!collapsedMountIds.has(mount.id)}\n onToggle={event => {\n const nextOpen = event.currentTarget.open;\n setCollapsedMountIds(prev => {\n const next = new Set(prev);\n if (nextOpen) next.delete(mount.id);\n else next.add(mount.id);\n return next;\n });\n }}\n >\n <summary\n className=\"hover:bg-ghost-button-hover flex cursor-pointer list-none items-center gap-1 rounded-md [&::-webkit-details-marker]:hidden\"\n onClick={() => openMountConnector(mount)}\n >\n <Icon\n name=\"chevron-down\"\n className=\"text-text-secondary size-3.5 shrink-0 -rotate-90 transition-transform group-open/mount:rotate-0\"\n />\n <span className=\"text-text-primary min-w-0 flex-1 truncate text-xs font-semibold\">\n {mount.name}\n </span>\n <span className=\"relative flex size-6 shrink-0 items-center justify-center\">\n <span className=\"text-text-secondary text-xs font-medium group-hover/mount:invisible group-focus-within/mount:invisible\">\n {selected === 'all' ? 'All' : selected.length}\n </span>\n <Tooltip\n content=\"Remove All Tools\"\n triggerClassName=\"pointer-events-none absolute inset-0 flex items-center justify-center opacity-0 group-hover/mount:pointer-events-auto group-hover/mount:opacity-100 group-focus-within/mount:pointer-events-auto group-focus-within/mount:opacity-100\"\n >\n <button\n type=\"button\"\n aria-label={`Remove all tools for ${mount.name}`}\n className={auiButtonClass({\n variant: 'ghost',\n size: 'icon',\n className: 'text-text-secondary size-6',\n })}\n onClick={event => {\n event.preventDefault();\n event.stopPropagation();\n removeMount(mount.id);\n }}\n >\n <Icon name=\"xmark\" className=\"size-3.5\" />\n </button>\n </Tooltip>\n </span>\n </summary>\n {selected === 'all' ? (\n <button\n type=\"button\"\n className=\"text-text-secondary hover:bg-ghost-button-hover flex w-full cursor-pointer items-center gap-1.5 rounded-md px-2 py-1.5 pl-7 text-left text-[0.6875rem] font-medium tracking-wide uppercase\"\n onClick={() => openMountConnector(mount)}\n >\n <Icon name=\"wrench\" className=\"size-3 shrink-0\" />\n ALL TOOLS ENABLED\n </button>\n ) : selected.length ? (\n selected.map(toolName => (\n <button\n key={`${mount.id}:${toolName}`}\n type=\"button\"\n aria-label={`Open ${mount.name} for ${toolName}`}\n className=\"text-text-primary hover:bg-ghost-button-hover flex w-full cursor-pointer items-center gap-1.5 rounded-md px-2 py-1 pl-7 text-left text-[0.6875rem]\"\n onClick={() => openMountConnector(mount)}\n >\n <Icon name=\"wrench\" className=\"text-text-secondary size-3 shrink-0\" />\n <span className=\"min-w-0 truncate\">{toolName}</span>\n </button>\n ))\n ) : (\n <p className=\"text-text-secondary px-2 py-1.5 pl-7 text-[0.6875rem]\">No tools selected.</p>\n )}\n </details>\n );\n })}\n </div>\n ) : (\n <p className=\"text-text-secondary p-4 text-center text-sm\">No tools selected.</p>\n )}\n </div>\n </div>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentMcpEditorContent: typeof AgentMcpEditorContent;\n }\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useToasterOptional } from '../containers/ToasterContainer.js';\nimport { useCatalogServer } from '../server/ServerContext.js';\n\nexport const MCP_AUTH_POPUP_CHANNEL = 'truefoundry-mcp-auth-popup';\n\nexport type McpAuthPopupMessage = {\n popupUid: string;\n isSuccess: boolean;\n};\n\nexport type McpAuthCallback = (isSuccess: boolean) => void;\n\nexport type UseMCPAuthOptions = {\n callbackPath?: string;\n};\n\nconst generatePopupUid = () => `mcp-oauth-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;\n\nconst isPopupMessage = (value: unknown): value is McpAuthPopupMessage => {\n if (typeof value !== 'object' || value === null) return false;\n const message = value as Partial<McpAuthPopupMessage>;\n return typeof message.popupUid === 'string' && typeof message.isSuccess === 'boolean';\n};\n\nexport const useMCPAuth = ({ callbackPath }: UseMCPAuthOptions = {}) => {\n const { connectorCatalog } = useCatalogServer();\n const toaster = useToasterOptional();\n const [isOAuthLoading, setIsOAuthLoading] = useState(false);\n const popupUid = useMemo(() => generatePopupUid(), []);\n const listenerCleanupRef = useRef<(() => void) | null>(null);\n\n const clearPopupListener = useCallback(() => {\n listenerCleanupRef.current?.();\n listenerCleanupRef.current = null;\n }, []);\n\n useEffect(() => clearPopupListener, [clearPopupListener]);\n\n const openAuthPopup = useCallback(\n (authorizationEndpoint: string, callback: McpAuthCallback) => {\n clearPopupListener();\n\n const channel = new BroadcastChannel(MCP_AUTH_POPUP_CHANNEL);\n let popup: Window | null = null;\n const cleanup = () => {\n channel.close();\n popup?.close();\n };\n\n channel.onmessage = (event: MessageEvent<unknown>) => {\n if (!isPopupMessage(event.data) || event.data.popupUid !== popupUid) return;\n try {\n callback(event.data.isSuccess);\n } finally {\n clearPopupListener();\n }\n };\n listenerCleanupRef.current = cleanup;\n\n popup = window.open(authorizationEndpoint, '_blank', 'popup=true');\n if (!popup) {\n clearPopupListener();\n throw new Error('Popup blocked. Please allow pop-ups to authorize the MCP server.');\n }\n\n popup.focus();\n },\n [clearPopupListener, popupUid],\n );\n\n const handleAuthorize = useCallback(\n async (integrationId: string, callback: McpAuthCallback) => {\n if (!integrationId) return;\n\n try {\n setIsOAuthLoading(true);\n const callbackUrl = callbackPath\n ? new URL(callbackPath, window.location.origin)\n : new URL(window.location.href);\n callbackUrl.searchParams.set('screenType', 'mcp-auth');\n callbackUrl.searchParams.set('integrationId', integrationId);\n callbackUrl.searchParams.set('pUid', popupUid);\n\n const result = await connectorCatalog.authenticateConnector({\n id: integrationId,\n returnTo: `${callbackUrl.pathname}${callbackUrl.search}`,\n });\n\n if (\n ('status' in result && result.status?.toUpperCase() === 'AUTHENTICATED') ||\n ('authenticated' in result && result.authenticated)\n ) {\n callback(true);\n return;\n }\n\n const authorizationEndpoint = 'authorization_endpoint' in result ? result.authorization_endpoint : undefined;\n if (!authorizationEndpoint) {\n throw new Error('The MCP server did not return an authorization URL.');\n }\n\n openAuthPopup(authorizationEndpoint, callback);\n } catch (error: unknown) {\n toaster?.showError(error);\n callback(false);\n } finally {\n setIsOAuthLoading(false);\n }\n },\n [callbackPath, connectorCatalog, openAuthPopup, popupUid, toaster],\n );\n\n return {\n handleAuthorize,\n isOAuthLoading,\n };\n};\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\n// IntersectionObserver only accepts px/% — not rem (3rem @ 16px).\nconst DEFAULT_ROOT_MARGIN = '48px';\n\nexport type UseInfiniteScrollSentinelOptions = {\n enabled: boolean;\n hasMore: boolean;\n loading: boolean;\n onLoadMore: () => void;\n rootMargin?: string;\n};\n\n/**\n * IntersectionObserver sentinel for linear infinite-scroll lists.\n * Attach `listRef` to the scroll container and `sentinelRef` to a footer element.\n * Re-observes when `hasMore` / `loading` change so a still-visible sentinel (short\n * filtered lists) continues requesting pages after each load settles.\n */\nexport function useInfiniteScrollSentinel({\n enabled,\n hasMore,\n loading,\n onLoadMore,\n rootMargin = DEFAULT_ROOT_MARGIN,\n}: UseInfiniteScrollSentinelOptions): {\n listRef: (node: HTMLElement | null) => void;\n sentinelRef: (node: HTMLElement | null) => void;\n} {\n const onLoadMoreRef = useRef(onLoadMore);\n onLoadMoreRef.current = onLoadMore;\n\n const [listEl, setListEl] = useState<HTMLElement | null>(null);\n const [sentinelEl, setSentinelEl] = useState<HTMLElement | null>(null);\n\n const listRef = useCallback((node: HTMLElement | null) => {\n setListEl(node);\n }, []);\n\n const sentinelRef = useCallback((node: HTMLElement | null) => {\n setSentinelEl(node);\n }, []);\n\n useEffect(() => {\n if (!enabled || !hasMore || loading || listEl == null || sentinelEl == null) return;\n\n const observer = new IntersectionObserver(\n entries => {\n if (!entries.some(entry => entry.isIntersecting)) return;\n onLoadMoreRef.current();\n },\n { root: listEl, rootMargin },\n );\n observer.observe(sentinelEl);\n return () => observer.disconnect();\n }, [enabled, hasMore, loading, listEl, sentinelEl, rootMargin]);\n\n return { listRef, sentinelRef };\n}\n","'use client';\n\nimport type { ComponentPropsWithoutRef } from 'react';\n\nimport { cn } from '../lib/cn.js';\n\nexport type SwitchSize = 'sm' | 'md';\n\nexport type SwitchProps = Omit<ComponentPropsWithoutRef<'button'>, 'aria-checked' | 'children' | 'onClick' | 'role'> & {\n checked: boolean;\n onCheckedChange: (checked: boolean) => void;\n size?: SwitchSize;\n};\n\nconst sizeClasses: Record<SwitchSize, { track: string; thumb: string; checkedThumb: string }> = {\n sm: {\n track: 'h-5 w-9 p-0.5',\n thumb: 'size-4',\n checkedThumb: 'translate-x-4',\n },\n md: {\n track: 'h-6 w-11 p-0.5',\n thumb: 'size-5',\n checkedThumb: 'translate-x-5',\n },\n};\n\nexport function Switch({ checked, onCheckedChange, size = 'sm', disabled, className, ...props }: SwitchProps) {\n const classes = sizeClasses[size];\n\n return (\n <button\n {...props}\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n data-state={checked ? 'checked' : 'unchecked'}\n disabled={disabled}\n className={cn(\n 'flex shrink-0 cursor-pointer items-center overflow-hidden rounded-full transition-colors',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-ring/40',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n classes.track,\n checked ? 'bg-primary-button-bg' : 'bg-text-secondary/35 dark:bg-text-secondary/50',\n className,\n )}\n onClick={() => onCheckedChange(!checked)}\n >\n <span\n aria-hidden\n className={cn(\n 'shrink-0 translate-x-0 rounded-full shadow-sm transition-[transform,background-color]',\n checked ? 'bg-primary-button-text' : 'bg-primary-bg',\n classes.thumb,\n checked && classes.checkedThumb,\n )}\n />\n </button>\n );\n}\n","'use client';\n\nimport { useEffect, useId, useRef, type ReactNode } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { cn } from '../lib/cn.js';\nimport { useCompactLayout } from '../lib/CompactLayoutContext.js';\nimport { useCompactOverlayStyle } from '../lib/useCompactOverlayStyle.js';\n\nexport type CenteredModalProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description?: string;\n headerIcon?: ReactNode;\n children: ReactNode;\n footer?: ReactNode;\n className?: string;\n contentSized?: boolean;\n 'aria-label'?: string;\n};\n\n/**\n * Responsive modal chrome: centered dialog on `md+`, bottom sheet below `md`.\n * One content tree for both breakpoints (native `<dialog>`).\n */\nexport function CenteredModal({\n open,\n onOpenChange,\n title,\n description,\n headerIcon,\n children,\n footer,\n className,\n contentSized = false,\n 'aria-label': ariaLabel,\n}: CenteredModalProps) {\n const ref = useRef<HTMLDialogElement>(null);\n const titleId = useId();\n const descriptionId = useId();\n const compact = useCompactLayout();\n const compactStyle = useCompactOverlayStyle(ref, compact, contentSized);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n if (open && !el.open) {\n el.showModal();\n } else if (!open && el.open) {\n el.close();\n }\n }, [open]);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const handler = () => onOpenChange(false);\n el.addEventListener('close', handler);\n return () => el.removeEventListener('close', handler);\n }, [onOpenChange]);\n\n return (\n <dialog\n ref={ref}\n aria-label={ariaLabel ?? title}\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n onCancel={event => {\n event.preventDefault();\n event.stopPropagation();\n onOpenChange(false);\n }}\n style={compactStyle ?? (contentSized ? { height: 'fit-content', maxHeight: '85dvh' } : undefined)}\n className={cn(\n 'bg-card-bg text-text-primary border-border open:flex open:flex-col overflow-hidden p-0 shadow-xl',\n 'backdrop:bg-black/50 backdrop:backdrop-blur-[2px] dark:backdrop:bg-black/70',\n compact\n ? 'm-0 mt-auto max-w-none rounded-t-xl rounded-b-none border-t pb-[env(safe-area-inset-bottom)]'\n : contentSized\n ? 'm-0 mt-auto h-auto max-h-[85dvh] w-full max-w-none rounded-t-xl rounded-b-none border-t pb-[env(safe-area-inset-bottom)] md:m-auto md:h-auto md:w-[min(28rem,calc(100%-3rem))] md:max-w-md md:rounded-xl md:border md:pb-0'\n : cn(\n // Mobile: bottom sheet\n 'm-0 mt-auto h-[min(85dvh,40rem)] w-full max-w-none rounded-t-xl rounded-b-none border-t pb-[env(safe-area-inset-bottom)]',\n // Desktop: large centered modal (MCP-tools inspired)\n 'md:m-auto md:h-[min(80dvh,40rem)] md:w-[min(72rem,calc(100%-3rem))] md:max-w-5xl md:rounded-xl md:border md:pb-0',\n ),\n className,\n )}\n >\n <header className=\"bg-topbar-bg flex shrink-0 items-center gap-3 border-b border-border px-5 py-4\">\n {headerIcon}\n <div className=\"min-w-0 flex-1\">\n <h2 id={titleId} className=\"text-text-primary text-lg font-semibold tracking-tight\">\n {title}\n </h2>\n {description ? (\n <p id={descriptionId} className=\"text-text-secondary mt-1 text-sm\">\n {description}\n </p>\n ) : null}\n </div>\n <button\n type=\"button\"\n aria-label=\"Close\"\n title=\"Close\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={() => onOpenChange(false)}\n >\n <Icon name=\"xmark\" />\n </button>\n </header>\n <div className=\"flex min-h-0 flex-1 flex-col overflow-x-hidden overflow-y-auto\">{children}</div>\n {footer ? <div className=\"shrink-0 border-t border-border px-5 py-3\">{footer}</div> : null}\n </dialog>\n );\n}\n","'use client';\n\nimport type { AgentSpec, ModelSelection } from '../../server/types.js';\nimport { useSlot } from '../../theme/SlotsProvider.js';\nimport { CenteredModal } from '../primitives/CenteredModal.js';\n\nexport type AgentModelConfigModalProps = {\n editor: 'model' | 'model-settings' | null;\n spec: AgentSpec;\n models: ModelSelection[];\n loading: boolean;\n error: string | null;\n query: string;\n onQueryChange: (query: string) => void;\n onChange: (spec: AgentSpec) => void;\n onClose: () => void;\n};\n\nexport function AgentModelConfigModal({\n editor,\n spec,\n models,\n loading,\n error,\n query,\n onQueryChange,\n onChange,\n onClose,\n}: AgentModelConfigModalProps) {\n const AgentModelEditorContent = useSlot('AgentModelEditorContent');\n const selectingModel = editor === 'model';\n\n return (\n <CenteredModal\n open={editor !== null}\n onOpenChange={open => !open && onClose()}\n title={selectingModel ? 'Select model' : 'Model settings'}\n className={\n selectingModel\n ? 'md:w-[min(52rem,calc(100%-3rem))] md:max-w-5xl'\n : 'md:w-[min(36rem,calc(100%-3rem))] md:max-w-xl'\n }\n contentSized\n aria-label={selectingModel ? 'Edit model' : 'Edit model settings'}\n >\n {editor ? (\n <AgentModelEditorContent\n editor={editor}\n spec={spec}\n models={models}\n loading={loading}\n error={error}\n query={query}\n onQueryChange={onQueryChange}\n onChange={onChange}\n />\n ) : null}\n </CenteredModal>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentModelConfigModal: typeof AgentModelConfigModal;\n }\n}\n","'use client';\n\nimport { useId, useState } from 'react';\n\nimport type { AgentSpec, ModelSelection } from '../../server/types.js';\nimport { useSlot } from '../../theme/SlotsProvider.js';\nimport { cn } from '../lib/cn.js';\nimport { DraftModelCatalogPanel } from './DraftModelCatalogPanel.js';\nimport { modelPatchWithReasoningEffort } from './reasoningEffort.js';\n\nexport type AgentModelEditorContentProps = {\n editor: 'model' | 'model-settings';\n spec: AgentSpec;\n models: ModelSelection[];\n loading: boolean;\n error: string | null;\n query: string;\n onQueryChange: (query: string) => void;\n onChange: (spec: AgentSpec) => void;\n};\n\nfunction modelForSelection(spec: AgentSpec, model: ModelSelection): AgentSpec['model'] {\n const next = modelPatchWithReasoningEffort(model.name, spec.model.params, model.properties.reasoningEfforts);\n const maxOutputTokens = model.properties.maxOutputTokens;\n if (\n maxOutputTokens === undefined ||\n next.params?.maxTokens === undefined ||\n next.params.maxTokens <= maxOutputTokens\n ) {\n return next;\n }\n return { ...next, params: { ...next.params, maxTokens: maxOutputTokens } };\n}\n\nexport function AgentModelEditorContent({\n editor,\n spec,\n models,\n loading,\n error,\n query,\n onQueryChange,\n onChange,\n}: AgentModelEditorContentProps) {\n const listboxId = useId();\n const AgentModelSettingsContent = useSlot('AgentModelSettingsContent');\n const selectedModel = models.find(model => model.name === spec.model.name);\n const providers = Array.from(new Set(models.map(model => model.provider.name)));\n const [provider, setProvider] = useState(selectedModel?.provider.name ?? providers[0] ?? '');\n const effectiveProvider = providers.includes(provider)\n ? provider\n : (selectedModel?.provider.name ?? providers[0] ?? '');\n\n if (editor === 'model') {\n return (\n <div className=\"grid h-[min(32rem,calc(100dvh-8rem))] w-full min-w-0 grid-cols-[13rem_minmax(0,1fr)] overflow-hidden\">\n {error ? <p className=\"text-failure-bg px-3 pt-3 text-sm\">{error}</p> : null}\n <div className=\"min-h-0 overflow-y-auto border-r border-border p-2\">\n {providers.map(name => (\n <button\n key={name}\n type=\"button\"\n className={cn(\n 'text-text-secondary mb-1 w-full truncate rounded-md px-2 py-2 text-left text-xs',\n effectiveProvider === name && 'bg-dropdown-selected-item-bg text-dropdown-selected-item-text',\n )}\n onClick={() => setProvider(name)}\n >\n {name}\n </button>\n ))}\n </div>\n <div className=\"flex min-h-0 min-w-0 flex-col overflow-hidden\">\n <DraftModelCatalogPanel\n models={models.filter(model => model.provider.name === effectiveProvider)}\n loading={loading}\n selectedName={spec.model.name}\n query={query}\n onQueryChange={onQueryChange}\n listboxId={listboxId}\n showHeading={false}\n onSelect={model => onChange({ ...spec, model: modelForSelection(spec, model) })}\n />\n </div>\n </div>\n );\n }\n\n return <AgentModelSettingsContent spec={spec} model={selectedModel} onChange={onChange} />;\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentModelEditorContent: typeof AgentModelEditorContent;\n }\n}\n","import type { Model, ModelParams, ModelSelection } from '../../server/types.js';\n\ntype ReasoningEfforts = ModelSelection['properties']['reasoningEfforts'];\n\nexport function hasReasoningEfforts(efforts: ReasoningEfforts): efforts is string[] {\n return Array.isArray(efforts) && efforts.length > 0;\n}\n\n/** Keep current if still listed; otherwise the lowest non-\"none\" effort; none if model has no efforts. */\nexport function resolveReasoningEffort(efforts: ReasoningEfforts, current: string | undefined): string | undefined {\n if (!hasReasoningEfforts(efforts)) return undefined;\n if (current && efforts.includes(current)) return current;\n // Default to the lowest real effort, not \"none\" — catalog lists are ordered ascending.\n return efforts.find(effort => effort !== 'none') ?? efforts[0];\n}\n\n/**\n * Draft model patch: preserve other params, set or clear `reasoningEffort`.\n *\n * When clearing, set `reasoningEffort: undefined` (do not omit the key).\n * `mergeAgentSpec` in `@truefoundry/assistant-ui-runtime` shallow-merges\n * `model.params`, so omitting the key leaves a sticky prior effort and the\n * server then 422s on models that do not advertise `reasoning_efforts`.\n */\nexport function modelPatchWithReasoningEffort(\n name: string,\n existingParams: ModelParams | undefined,\n efforts: ReasoningEfforts,\n): Model {\n const nextEffort = resolveReasoningEffort(efforts, existingParams?.reasoningEffort);\n if (nextEffort === undefined) {\n if (!existingParams) return { name };\n const { reasoningEffort: _cleared, ...rest } = existingParams;\n return { name, params: { ...rest, reasoningEffort: undefined } };\n }\n return {\n name,\n params: { ...existingParams, reasoningEffort: nextEffort },\n };\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport type { AgentSpec, ModelParams, ModelSelection } from '../../server/types.js';\nimport { auiInputClass } from '../lib/inputClasses.js';\nimport { Switch } from '../primitives/Switch.js';\n\nexport type AgentModelSettingsContentProps = {\n spec: AgentSpec;\n model?: ModelSelection;\n onChange: (spec: AgentSpec) => void;\n};\n\nfunction finiteNumber(raw: string): number | null {\n if (raw.trim() === '') return null;\n const value = Number(raw);\n return Number.isFinite(value) ? value : null;\n}\n\nexport function AgentModelSettingsContent({ spec, model, onChange }: AgentModelSettingsContentProps) {\n const params = spec.model.params ?? {};\n const replaceParams = (next: ModelParams) => onChange({ ...spec, model: { ...spec.model, params: next } });\n const setParam = <Key extends keyof ModelParams>(key: Key, value: ModelParams[Key]) =>\n replaceParams({ ...params, [key]: value });\n const removeParam = (key: keyof ModelParams) => replaceParams({ ...params, [key]: undefined });\n const maxOutputTokens = model?.properties.maxOutputTokens;\n const reasoningEfforts = model?.properties.reasoningEfforts ?? [];\n const firstReasoningEffort = reasoningEfforts[0];\n\n const rows: Array<{\n label: string;\n enabled: boolean;\n control: ReactNode;\n onToggle: (enabled: boolean) => void;\n }> = [];\n\n if (maxOutputTokens !== undefined) {\n rows.push({\n label: 'Maximum Tokens',\n enabled: params.maxTokens !== undefined,\n onToggle: enabled => (enabled ? setParam('maxTokens', maxOutputTokens) : removeParam('maxTokens')),\n control: (\n <div className=\"mt-2 flex items-center gap-3\">\n <input\n type=\"range\"\n min={1}\n max={maxOutputTokens}\n value={params.maxTokens ?? maxOutputTokens}\n disabled={params.maxTokens === undefined}\n aria-label=\"Maximum tokens slider\"\n className=\"min-w-0 flex-1 accent-primary-button-bg\"\n onChange={event => {\n const value = finiteNumber(event.target.value);\n if (value !== null) setParam('maxTokens', value);\n }}\n />\n <input\n type=\"number\"\n min={1}\n max={maxOutputTokens}\n value={params.maxTokens ?? maxOutputTokens}\n disabled={params.maxTokens === undefined}\n aria-label=\"Maximum tokens value\"\n className={auiInputClass('h-8 w-24')}\n onChange={event => {\n const value = finiteNumber(event.target.value);\n if (value !== null) setParam('maxTokens', Math.max(1, Math.min(maxOutputTokens, value)));\n }}\n />\n </div>\n ),\n });\n }\n\n if (firstReasoningEffort !== undefined) {\n rows.push({\n label: 'Reasoning Effort',\n enabled: params.reasoningEffort !== undefined,\n onToggle: enabled =>\n enabled ? setParam('reasoningEffort', firstReasoningEffort) : removeParam('reasoningEffort'),\n control: (\n <select\n value={params.reasoningEffort ?? ''}\n disabled={params.reasoningEffort === undefined}\n aria-label=\"Reasoning effort value\"\n className={auiInputClass('mt-2 h-8 cursor-pointer py-1.5')}\n onChange={event => setParam('reasoningEffort', event.target.value)}\n >\n {reasoningEfforts.map(effort => (\n <option key={effort} value={effort}>\n {effort}\n </option>\n ))}\n </select>\n ),\n });\n }\n\n return (\n <div className=\"w-full p-5\">\n {rows.length > 0 ? (\n <div className=\"divide-y divide-border\">\n {rows.map(row => (\n <div key={row.label} className=\"py-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <span className=\"text-text-primary text-sm font-medium\">{row.label}</span>\n <Switch checked={row.enabled} onCheckedChange={row.onToggle} aria-label={`Enable ${row.label}`} />\n </div>\n {row.control}\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-text-secondary text-sm\">No configurable parameters are available for this model.</p>\n )}\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentModelSettingsContent: typeof AgentModelSettingsContent;\n }\n}\n","'use client';\n\nimport type { AgentSkill, AgentSpec, ConnectorState, McpToolSelection } from '../../server/types.js';\nimport { useSlot } from '../../theme/SlotsProvider.js';\nimport { Button } from '../primitives/Button.js';\nimport { CenteredModal } from '../primitives/CenteredModal.js';\n\nexport type AgentResourceConfigModalProps = {\n editor: 'mcp' | 'skills' | null;\n spec: AgentSpec;\n connectors: ConnectorState[];\n skills: AgentSkill[];\n skillsDisabled: boolean;\n query: string;\n activeConnectorId: string | null;\n tools: McpToolSelection[];\n toolsLoading: boolean;\n toolsError: string | null;\n onQueryChange: (query: string) => void;\n onSelectConnector: (connectorId: string) => void;\n onRetryTools: () => void;\n onRefreshConnectors?: () => Promise<void>;\n onChange: (spec: AgentSpec) => void;\n onClose: () => void;\n};\n\nexport function AgentResourceConfigModal({ editor, onClose, ...contentProps }: AgentResourceConfigModalProps) {\n const AgentResourceEditorContent = useSlot('AgentResourceEditorContent');\n const selectingMcp = editor === 'mcp';\n\n return (\n <CenteredModal\n open={editor !== null}\n onOpenChange={open => !open && onClose()}\n title={selectingMcp ? 'Select MCP Tools' : 'Skills'}\n className={\n selectingMcp\n ? 'md:w-[min(64rem,calc(100%-3rem))] md:max-w-5xl'\n : 'md:w-[min(40rem,calc(100%-3rem))] md:max-w-2xl'\n }\n contentSized\n aria-label={selectingMcp ? 'Select MCP Tools' : 'Edit skills'}\n footer={\n selectingMcp ? (\n <div className=\"flex justify-end\">\n <Button.Primary type=\"button\" onClick={onClose}>\n Save\n </Button.Primary>\n </div>\n ) : undefined\n }\n >\n {editor ? <AgentResourceEditorContent editor={editor} {...contentProps} /> : null}\n </CenteredModal>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentResourceConfigModal: typeof AgentResourceConfigModal;\n }\n}\n","'use client';\n\nimport type { AgentSkill, AgentSpec, ConnectorState, McpToolSelection } from '../../server/types.js';\nimport { useSlot } from '../../theme/SlotsProvider.js';\n\nexport type AgentResourceEditorContentProps = {\n editor: 'mcp' | 'skills';\n spec: AgentSpec;\n connectors: ConnectorState[];\n skills: AgentSkill[];\n skillsDisabled: boolean;\n query: string;\n activeConnectorId: string | null;\n tools: McpToolSelection[];\n toolsLoading: boolean;\n toolsError: string | null;\n onQueryChange: (query: string) => void;\n onSelectConnector: (connectorId: string) => void;\n onRetryTools: () => void;\n onRefreshConnectors?: () => Promise<void>;\n onChange: (spec: AgentSpec) => void;\n};\n\nexport function AgentResourceEditorContent(props: AgentResourceEditorContentProps) {\n const AgentMcpEditorContent = useSlot('AgentMcpEditorContent');\n const AgentSkillsEditorContent = useSlot('AgentSkillsEditorContent');\n\n if (props.editor === 'skills') {\n return (\n <AgentSkillsEditorContent\n spec={props.spec}\n skills={props.skills}\n skillsDisabled={props.skillsDisabled}\n query={props.query}\n onQueryChange={props.onQueryChange}\n onChange={props.onChange}\n />\n );\n }\n\n return (\n <AgentMcpEditorContent\n spec={props.spec}\n connectors={props.connectors}\n query={props.query}\n activeConnectorId={props.activeConnectorId}\n tools={props.tools}\n toolsLoading={props.toolsLoading}\n toolsError={props.toolsError}\n onQueryChange={props.onQueryChange}\n onSelectConnector={props.onSelectConnector}\n onRetryTools={props.onRetryTools}\n onRefreshConnectors={props.onRefreshConnectors}\n onChange={props.onChange}\n />\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentResourceEditorContent: typeof AgentResourceEditorContent;\n }\n}\n","'use client';\n\nimport type { AgentRuntimeConfig } from '../../server/types.js';\nimport { cn } from '../lib/cn.js';\nimport { auiInputClass } from '../lib/inputClasses.js';\nimport { Switch } from '../primitives/Switch.js';\nimport { Tooltip } from '../primitives/Tooltip.js';\n\nexport type AgentRuntimeConfigFieldsProps = {\n value: AgentRuntimeConfig;\n sandboxAvailable: boolean;\n hasSkills: boolean;\n disabled?: boolean;\n showCapabilities?: boolean;\n layout?: 'compact' | 'detailed';\n onChange: (value: AgentRuntimeConfig) => void;\n};\n\nfunction parseIterationLimit(raw: string): number | null {\n if (raw.trim() === '') return null;\n const parsed = Number(raw);\n return Number.isInteger(parsed) && Number.isFinite(parsed) ? Math.max(1, Math.min(1024, parsed)) : null;\n}\n\nfunction parsePositiveInteger(raw: string): number | null {\n if (raw.trim() === '') return null;\n const parsed = Number(raw);\n return Number.isInteger(parsed) && parsed > 0 ? parsed : null;\n}\n\nconst NO_SANDBOX_PROVIDER_HINT = 'No sandbox provider yet, add one in Settings → Sandbox';\n\ntype RuntimeSwitchField = {\n label: string;\n description: string;\n checked: boolean;\n disabled?: boolean;\n disabledTooltip?: string;\n update: (enabled: boolean) => AgentRuntimeConfig;\n};\n\nexport function AgentRuntimeConfigFields({\n value,\n sandboxAvailable,\n hasSkills,\n disabled = false,\n showCapabilities = true,\n layout = 'compact',\n onChange,\n}: AgentRuntimeConfigFieldsProps) {\n const capabilityFields: RuntimeSwitchField[] = [\n {\n label: 'Dynamic sub-agents',\n description: 'Allow the agent to delegate complex work to focused sub-agents.',\n checked: value.dynamicSubAgents?.enabled ?? true,\n update: enabled => ({ ...value, dynamicSubAgents: { enabled } }),\n },\n {\n label: 'Generative UI',\n description: 'Allow rich interactive UI blocks in agent responses.',\n checked: value.generativeUi?.enabled ?? true,\n update: enabled => ({ ...value, generativeUi: { enabled } }),\n },\n {\n label: 'Ask user questions',\n description: 'Allow the agent to pause and ask for clarification.',\n checked: value.askUserQuestions?.enabled ?? true,\n update: enabled => ({ ...value, askUserQuestions: { enabled } }),\n },\n ];\n const sandboxEnabled = value.sandbox?.enabled ?? false;\n const compactionEnabled = value.contextManagement?.compaction?.enabled ?? true;\n const sandboxField: RuntimeSwitchField = {\n label: 'Sandbox',\n description: 'Provide an isolated environment for code, files, and skills.',\n checked: sandboxEnabled,\n disabled: !sandboxAvailable || hasSkills,\n disabledTooltip: !sandboxAvailable\n ? NO_SANDBOX_PROVIDER_HINT\n : hasSkills\n ? 'Always on while skills are attached — remove them to turn it off'\n : undefined,\n update: enabled => ({ ...value, sandbox: { ...value.sandbox, enabled } }),\n };\n const fileDownloadsField: RuntimeSwitchField = {\n label: 'File downloads',\n description: 'Allow users to download files produced in the sandbox.',\n checked: value.sandbox?.fileDownloads ?? true,\n disabled: !sandboxAvailable || !sandboxEnabled,\n update: fileDownloads => ({\n ...value,\n sandbox: { ...value.sandbox, fileDownloads },\n }),\n };\n const compactionField: RuntimeSwitchField = {\n label: 'Context compaction',\n description: 'Summarize older turns as the context window fills.',\n checked: compactionEnabled,\n update: enabled => ({\n ...value,\n contextManagement: {\n ...value.contextManagement,\n compaction: { ...value.contextManagement?.compaction, enabled },\n largeToolResponse: value.contextManagement?.largeToolResponse ?? { enabled: true },\n },\n }),\n };\n const largeToolResponseField: RuntimeSwitchField = {\n label: 'Large tool response offloading',\n description: 'Move large tool output to the sandbox and retain a preview.',\n checked: value.contextManagement?.largeToolResponse?.enabled ?? true,\n disabled: !sandboxAvailable,\n disabledTooltip: !sandboxAvailable ? `Offloading needs a sandbox. ${NO_SANDBOX_PROVIDER_HINT}` : undefined,\n update: enabled => ({\n ...value,\n contextManagement: {\n ...value.contextManagement,\n compaction: value.contextManagement?.compaction ?? { enabled: true },\n largeToolResponse: { enabled },\n },\n }),\n };\n const runtimeFields = [sandboxField, fileDownloadsField, compactionField, largeToolResponseField];\n const compactionThreshold = value.contextManagement?.compaction?.trigger?.value ?? 50_000;\n\n const switchField = ({\n field,\n className,\n wrapperClassName,\n }: {\n field: RuntimeSwitchField;\n className?: string;\n wrapperClassName?: string;\n }) => (\n <Tooltip\n key={field.label}\n content={field.disabledTooltip ?? ''}\n triggerClassName={cn('flex w-full min-w-0', wrapperClassName)}\n >\n <label className={cn('flex w-full', className ?? 'items-center justify-between gap-3 py-1.5')}>\n <span className=\"min-w-0\">\n <span className={cn('text-text-primary text-xs', layout === 'detailed' && 'block font-medium')}>\n {field.label}\n </span>\n {layout === 'detailed' ? (\n <span className=\"text-text-secondary mt-0.5 block text-xs leading-snug\">{field.description}</span>\n ) : null}\n </span>\n <Switch\n checked={field.checked}\n disabled={disabled || field.disabled}\n onCheckedChange={enabled => onChange(field.update(enabled))}\n aria-label={field.label}\n />\n </label>\n </Tooltip>\n );\n\n if (layout === 'detailed') {\n return (\n <div className=\"space-y-5\">\n {showCapabilities ? (\n // Stacked below `md` so the bottom-sheet modal does not cram three labeled switches into one row.\n <div className=\"flex flex-col gap-3 md:flex-row\">\n {capabilityFields.map((field, index) =>\n switchField({\n field,\n className: 'items-start justify-between gap-3',\n wrapperClassName: cn(\n 'flex-1',\n index < capabilityFields.length - 1 &&\n 'border-b border-border pb-3 md:border-b-0 md:border-r md:pb-0 md:pr-3',\n ),\n }),\n )}\n </div>\n ) : null}\n <label className=\"flex items-center justify-between gap-4 border-b border-border py-3\">\n <span>\n <span className=\"text-text-primary block text-sm font-medium\">Iteration limit</span>\n <span className=\"text-text-secondary mt-0.5 block text-xs\">\n Maximum agent-loop iterations for one turn.\n </span>\n </span>\n <input\n type=\"number\"\n min={1}\n max={1024}\n disabled={disabled}\n value={value.iterationLimit ?? 100}\n className={auiInputClass('h-8 w-24 disabled:opacity-60')}\n onChange={event => {\n const iterationLimit = parseIterationLimit(event.target.value);\n if (iterationLimit !== null) onChange({ ...value, iterationLimit });\n }}\n />\n </label>\n <div className=\"divide-y divide-border\">\n <section className=\"py-3\">\n {switchField({ field: sandboxField, className: 'items-center justify-between gap-4' })}\n <div className={`mt-3 border-l-2 border-primary-button-bg/50 pl-3 ${sandboxEnabled ? '' : 'opacity-50'}`}>\n {switchField({ field: fileDownloadsField, className: 'items-center justify-between gap-4' })}\n </div>\n </section>\n <section className=\"py-3\">\n {switchField({ field: compactionField, className: 'items-center justify-between gap-4' })}\n <label\n className={`mt-3 flex items-center justify-between gap-4 border-l-2 border-primary-button-bg/50 pl-3 ${\n compactionEnabled ? '' : 'opacity-50'\n }`}\n >\n <span>\n <span className=\"text-text-primary block text-xs font-medium\">Compaction threshold tokens</span>\n <span className=\"text-text-secondary mt-0.5 block text-xs\">\n Input-token threshold that triggers compaction.\n </span>\n </span>\n <input\n type=\"number\"\n min={1}\n disabled={disabled || !compactionEnabled}\n value={compactionThreshold}\n className={auiInputClass('h-8 w-28 disabled:opacity-60')}\n onChange={event => {\n const threshold = parsePositiveInteger(event.target.value);\n if (threshold === null) return;\n onChange({\n ...value,\n contextManagement: {\n ...value.contextManagement,\n compaction: {\n ...value.contextManagement?.compaction,\n enabled: compactionEnabled,\n trigger: { type: 'input_tokens', value: threshold },\n },\n largeToolResponse: value.contextManagement?.largeToolResponse ?? { enabled: true },\n },\n });\n }}\n />\n </label>\n </section>\n {switchField({ field: largeToolResponseField, className: 'items-center justify-between gap-4 py-3' })}\n </div>\n </div>\n );\n }\n\n return (\n <div>\n <label className=\"mb-2 block text-xs\">\n <span className=\"text-text-secondary mb-1 block\">Iteration limit</span>\n <input\n type=\"number\"\n min={1}\n max={1024}\n disabled={disabled}\n value={value.iterationLimit ?? 100}\n className={auiInputClass('h-8 disabled:opacity-60')}\n onChange={event => {\n const iterationLimit = parseIterationLimit(event.target.value);\n if (iterationLimit !== null) onChange({ ...value, iterationLimit });\n }}\n />\n </label>\n {[...runtimeFields, ...(showCapabilities ? capabilityFields : [])].map(field => switchField({ field }))}\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentRuntimeConfigFields: typeof AgentRuntimeConfigFields;\n }\n}\n","'use client';\n\nimport type { AgentSpec } from '../../server/types.js';\nimport { useSlot } from '../../theme/SlotsProvider.js';\nimport { CenteredModal } from '../primitives/CenteredModal.js';\n\nexport type AgentRuntimeConfigModalProps = {\n open: boolean;\n spec: AgentSpec;\n sandboxAvailable: boolean;\n onChange: (spec: AgentSpec) => void;\n onClose: () => void;\n};\n\nexport function AgentRuntimeConfigModal({\n open,\n spec,\n sandboxAvailable,\n onChange,\n onClose,\n}: AgentRuntimeConfigModalProps) {\n const AgentRuntimeEditorContent = useSlot('AgentRuntimeEditorContent');\n\n return (\n <CenteredModal\n open={open}\n onOpenChange={nextOpen => !nextOpen && onClose()}\n title=\"Runtime Config\"\n className=\"md:w-[min(56rem,calc(100%-3rem))] md:max-w-4xl\"\n contentSized\n aria-label=\"Edit Runtime Config\"\n >\n <AgentRuntimeEditorContent spec={spec} sandboxAvailable={sandboxAvailable} onChange={onChange} />\n </CenteredModal>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentRuntimeConfigModal: typeof AgentRuntimeConfigModal;\n }\n}\n","'use client';\n\nimport type { AgentSpec } from '../../server/types.js';\nimport { useSlot } from '../../theme/SlotsProvider.js';\n\nexport type AgentRuntimeEditorContentProps = {\n spec: AgentSpec;\n sandboxAvailable: boolean;\n onChange: (spec: AgentSpec) => void;\n};\n\nexport function AgentRuntimeEditorContent({ spec, sandboxAvailable, onChange }: AgentRuntimeEditorContentProps) {\n const AgentRuntimeConfigFields = useSlot('AgentRuntimeConfigFields');\n\n return (\n <div className=\"h-[min(38rem,calc(100dvh-8rem))] w-full overflow-y-auto p-5\">\n <AgentRuntimeConfigFields\n value={spec.config ?? {}}\n sandboxAvailable={sandboxAvailable}\n hasSkills={(spec.skills?.length ?? 0) > 0}\n layout=\"detailed\"\n onChange={config => onChange({ ...spec, config })}\n />\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentRuntimeEditorContent: typeof AgentRuntimeEditorContent;\n }\n}\n","'use client';\n\nimport { Icon } from '../../icons/Icon.js';\nimport type { AgentSkill, AgentSpec } from '../../server/types.js';\nimport { useSlot } from '../../theme/SlotsProvider.js';\nimport { auiInputClass } from '../lib/inputClasses.js';\nimport { editableMountsFromSpec } from './agentConfigMounts.js';\n\nexport type AgentSkillsEditorContentProps = {\n spec: AgentSpec;\n skills: AgentSkill[];\n skillsDisabled: boolean;\n query: string;\n onQueryChange: (query: string) => void;\n onChange: (spec: AgentSpec) => void;\n};\n\nexport function AgentSkillsEditorContent({\n spec,\n skills,\n skillsDisabled,\n query,\n onQueryChange,\n onChange,\n}: AgentSkillsEditorContentProps) {\n const CatalogRow = useSlot('CatalogRow');\n const skillMounts = editableMountsFromSpec(spec.skills);\n const normalizedQuery = query.trim().toLowerCase();\n const filteredSkills = skills\n .filter(item => `${item.name} ${item.description ?? ''}`.toLowerCase().includes(normalizedQuery))\n .sort((left, right) => {\n const leftSelected = skillMounts.some(item => item.id === left.id || item.name === left.name);\n const rightSelected = skillMounts.some(item => item.id === right.id || item.name === right.name);\n return Number(rightSelected) - Number(leftSelected);\n });\n\n return (\n <div className=\"flex h-[min(32rem,calc(100dvh-8rem))] w-full min-w-0 flex-col overflow-hidden\">\n <label className=\"relative m-3 block shrink-0\">\n <Icon name=\"search\" className=\"text-text-secondary absolute top-1/2 left-2 size-3.5 -translate-y-1/2\" />\n <input\n value={query}\n onChange={event => onQueryChange(event.target.value)}\n placeholder=\"Search skills\"\n className={auiInputClass('h-8 w-full pl-7')}\n />\n </label>\n <div className=\"min-h-0 flex-1 overflow-y-auto p-2\">\n {filteredSkills.map(skill => {\n const mount = skillMounts.find(item => item.id === skill.id || item.name === skill.name);\n return (\n <CatalogRow\n key={skill.id}\n title={skill.name}\n description={skill.description}\n checked={mount !== undefined}\n disabled={skillsDisabled && mount === undefined}\n onToggle={() => {\n const adding = mount === undefined;\n onChange({\n ...spec,\n skills: adding\n ? [...(spec.skills ?? []), { id: skill.id, name: skill.name }]\n : skillMounts.filter(item => item !== mount).map(item => item.value),\n ...(adding\n ? {\n config: {\n ...spec.config,\n sandbox: { ...spec.config?.sandbox, enabled: true },\n },\n }\n : {}),\n });\n }}\n />\n );\n })}\n {filteredSkills.length === 0 ? (\n <p className=\"text-text-secondary p-4 text-center text-sm\">No skills found.</p>\n ) : null}\n </div>\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentSkillsEditorContent: typeof AgentSkillsEditorContent;\n }\n}\n","'use client';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { useOptionalShellMode } from '../../server/ShellModeContext.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { Tooltip } from '../primitives/Tooltip.js';\n\nexport type DraftAgentConfigTriggerProps = {\n disabled?: boolean;\n isRunning?: boolean;\n};\n\nexport function DraftAgentConfigTrigger({ disabled, isRunning }: DraftAgentConfigTriggerProps) {\n const shell = useOptionalShellMode();\n const open = shell?.agentConfigOpen === true;\n\n return (\n <Tooltip content=\"Agent config\">\n <button\n type=\"button\"\n aria-label=\"Agent config\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n disabled={disabled || isRunning || shell == null}\n className={auiButtonClass({ variant: 'ghost', size: 'icon', className: 'size-8' })}\n onClick={() => shell?.setAgentConfigOpen(!open)}\n >\n <Icon name=\"sliders\" className=\"size-3.5\" />\n </button>\n </Tooltip>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n DraftAgentConfigTrigger: typeof DraftAgentConfigTrigger;\n }\n}\n","'use client';\n\nimport { cn } from '../lib/cn.js';\nimport { Switch } from '../primitives/Switch.js';\nimport type { AgentCapabilityValues } from './agentCapabilities.js';\n\nconst CAPABILITIES: Array<{\n id: keyof AgentCapabilityValues;\n label: string;\n description: string;\n}> = [\n {\n id: 'generativeUi',\n label: 'Generative UI',\n description: 'Let the agent render interactive UI in its replies.',\n },\n {\n id: 'dynamicSubAgents',\n label: 'Dynamic sub-agents',\n description: 'Let the agent spin up sub-agents for complex tasks.',\n },\n {\n id: 'askUserQuestions',\n label: 'Ask clarifying questions',\n description: 'Let the agent ask before acting when unsure.',\n },\n];\n\nexport function DraftCapabilitiesPanel({\n value,\n onChange,\n disabled = false,\n divided = false,\n layout = 'list',\n}: {\n value: AgentCapabilityValues;\n onChange: (value: AgentCapabilityValues) => void;\n disabled?: boolean;\n divided?: boolean;\n layout?: 'list' | 'cards';\n}) {\n if (layout === 'cards') {\n return (\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n {CAPABILITIES.map(capability => {\n const checked = value[capability.id];\n return (\n <div\n key={capability.id}\n className=\"border-border flex min-w-0 flex-col gap-2 rounded-lg border p-3 sm:flex-1\"\n >\n <div className=\"flex items-start justify-between gap-2\">\n <p className=\"text-text-primary text-sm font-medium\">{capability.label}</p>\n <Switch\n checked={checked}\n aria-label={capability.label}\n disabled={disabled}\n className=\"mt-0.5\"\n onCheckedChange={nextChecked => onChange({ ...value, [capability.id]: nextChecked })}\n />\n </div>\n <p className=\"text-text-secondary text-xs leading-snug\">{capability.description}</p>\n </div>\n );\n })}\n </div>\n );\n }\n\n return (\n <div className={cn('flex flex-col', divided && 'overflow-hidden rounded-xl border border-border')}>\n {CAPABILITIES.map((capability, index) => {\n const checked = value[capability.id];\n return (\n <div\n key={capability.id}\n className={cn('flex items-start gap-3 px-3 py-3', divided && index > 0 && 'border-t border-border')}\n >\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-text-primary text-sm font-medium\">{capability.label}</p>\n <p className=\"text-text-secondary mt-0.5 text-xs leading-snug\">{capability.description}</p>\n </div>\n <Switch\n checked={checked}\n aria-label={capability.label}\n disabled={disabled}\n className=\"mt-0.5\"\n onCheckedChange={nextChecked => onChange({ ...value, [capability.id]: nextChecked })}\n />\n </div>\n );\n })}\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n DraftCapabilitiesPanel: typeof DraftCapabilitiesPanel;\n }\n}\n","'use client';\n\nimport { useSyncExternalStore } from 'react';\n\nconst MOBILE_QUERY = '(max-width: 767px)';\n\nfunction subscribe(callback: () => void) {\n if (typeof window.matchMedia !== 'function') return () => undefined;\n const media = window.matchMedia(MOBILE_QUERY);\n media.addEventListener('change', callback);\n return () => media.removeEventListener('change', callback);\n}\n\nfunction getSnapshot() {\n return typeof window.matchMedia === 'function' && window.matchMedia(MOBILE_QUERY).matches;\n}\n\nexport function useIsMobile() {\n return useSyncExternalStore(subscribe, getSnapshot, () => false);\n}\n","'use client';\n\nimport { useTrueFoundryAgentSpec, useTrueFoundryUpdateAgentSpec } from '@truefoundry/assistant-ui-runtime';\nimport { useEffect, useId, useRef, useState } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { cn } from '../lib/cn.js';\nimport { useCompactLayout } from '../lib/CompactLayoutContext.js';\nimport { useIsMobile } from '../lib/useIsMobile.js';\nimport { BottomSheet } from '../primitives/BottomSheet.js';\nimport { useDraftCatalog } from './DraftCatalogProvider.js';\nimport { hasReasoningEfforts, modelPatchWithReasoningEffort, resolveReasoningEffort } from './reasoningEffort.js';\n\nexport type DraftReasoningEffortSelectorProps = {\n disabled?: boolean;\n isRunning?: boolean;\n};\n\nexport function DraftReasoningEffortSelector({ disabled, isRunning }: DraftReasoningEffortSelectorProps) {\n const { models, ensureLoaded } = useDraftCatalog();\n const { agentSpec } = useTrueFoundryAgentSpec();\n const updateAgentSpec = useTrueFoundryUpdateAgentSpec();\n const [open, setOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const clearedStickyEffortForModelRef = useRef<string | null>(null);\n const menuId = useId();\n const isMobile = useIsMobile();\n const compactLayout = useCompactLayout();\n\n const selectedName = agentSpec?.model?.name ?? models[0]?.name ?? '';\n const selected = models.find(m => m.name === selectedName);\n const efforts = selected?.properties.reasoningEfforts;\n const currentEffort = agentSpec?.model?.params?.reasoningEffort;\n // Display fallback only — coerce into the spec on model change / explicit pick.\n const resolved = resolveReasoningEffort(efforts, currentEffort);\n\n useEffect(() => {\n // Need catalog to know whether this model exposes reasoning efforts.\n ensureLoaded();\n }, [ensureLoaded]);\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n // Heal sticky effort left by mergeAgentSpec when the selected model has none.\n useEffect(() => {\n if (!updateAgentSpec || selected === undefined) return;\n if (hasReasoningEfforts(efforts)) {\n clearedStickyEffortForModelRef.current = null;\n return;\n }\n if (currentEffort === undefined) return;\n if (clearedStickyEffortForModelRef.current === selected.name) return;\n clearedStickyEffortForModelRef.current = selected.name;\n updateAgentSpec({\n model: modelPatchWithReasoningEffort(selected.name, agentSpec?.model?.params, undefined),\n });\n }, [updateAgentSpec, selected, efforts, currentEffort, agentSpec?.model?.params]);\n\n if (!hasReasoningEfforts(efforts) || !resolved) return null;\n\n const content = (\n <>\n <div className=\"border-b border-border px-3 py-2\">\n <p className=\"text-text-primary text-sm font-normal\">Reasoning effort</p>\n </div>\n <div\n id={menuId}\n role=\"listbox\"\n aria-label=\"Select reasoning effort\"\n className=\"flex min-h-0 flex-1 flex-col overflow-y-auto p-1\"\n >\n {efforts.map(effort => {\n const active = effort === resolved;\n return (\n <button\n key={effort}\n type=\"button\"\n role=\"option\"\n aria-selected={active}\n className={cn(\n 'flex w-full items-center rounded-md px-2 py-2 text-left text-sm',\n active\n ? 'bg-dropdown-selected-item-bg text-dropdown-selected-item-text'\n : 'hover:bg-ghost-button-hover',\n )}\n onClick={() => {\n if (!selected || !updateAgentSpec) return;\n updateAgentSpec({\n model: modelPatchWithReasoningEffort(\n selected.name,\n { ...agentSpec?.model?.params, reasoningEffort: effort },\n efforts,\n ),\n });\n setOpen(false);\n }}\n >\n <span className=\"truncate font-normal\">{effort}</span>\n </button>\n );\n })}\n </div>\n </>\n );\n\n return (\n <div ref={containerRef} className=\"relative\">\n <button\n type=\"button\"\n disabled={disabled || isRunning}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n title=\"Select reasoning effort\"\n className={auiButtonClass({\n variant: 'ghost',\n size: 'small',\n className: cn(\n 'h-8 max-w-[10rem] gap-1.5 rounded-full px-2 text-xs font-medium',\n 'hover:bg-ghost-button-hover',\n ),\n })}\n onClick={() => setOpen(v => !v)}\n >\n <span className=\"truncate\">{resolved}</span>\n <Icon name=\"chevron-down\" className=\"size-3.5 shrink-0 opacity-60\" />\n </button>\n\n {open ? (\n isMobile || compactLayout ? (\n <BottomSheet open onOpenChange={setOpen} aria-label=\"Select reasoning effort\">\n {content}\n </BottomSheet>\n ) : (\n <div className=\"bg-card-bg text-text-primary absolute right-0 bottom-full z-50 mb-2 flex max-h-[22rem] w-[12rem] flex-col overflow-hidden rounded-lg border border-border shadow-lg\">\n {content}\n </div>\n )\n ) : null}\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, useRef, type MouseEvent, type ReactNode } from 'react';\n\nimport { useCompactLayout } from '../lib/CompactLayoutContext.js';\nimport { cn } from '../lib/cn.js';\nimport { useCompactOverlayStyle } from '../lib/useCompactOverlayStyle.js';\n\nexport type BottomSheetProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n className?: string;\n id?: string;\n 'aria-label': string;\n};\n\nexport function BottomSheet({\n open,\n onOpenChange,\n children,\n className,\n id,\n 'aria-label': ariaLabel,\n}: BottomSheetProps) {\n const ref = useRef<HTMLDialogElement>(null);\n const compact = useCompactLayout();\n const compactStyle = useCompactOverlayStyle(ref, compact);\n\n useEffect(() => {\n const dialog = ref.current;\n if (!dialog) return;\n if (open && !dialog.open) dialog.showModal();\n else if (!open && dialog.open) dialog.close();\n }, [open]);\n\n useEffect(() => {\n const dialog = ref.current;\n if (!dialog) return;\n const handleClose = () => onOpenChange(false);\n dialog.addEventListener('close', handleClose);\n return () => dialog.removeEventListener('close', handleClose);\n }, [onOpenChange]);\n\n const handleBackdropClick = (event: MouseEvent<HTMLDialogElement>) => {\n if (event.target === ref.current) onOpenChange(false);\n };\n\n return (\n <dialog\n ref={ref}\n id={id}\n aria-label={ariaLabel}\n onClick={handleBackdropClick}\n onCancel={event => {\n event.preventDefault();\n event.stopPropagation();\n onOpenChange(false);\n }}\n style={compactStyle ?? { height: 'min(70dvh, 30rem)', maxHeight: '85dvh' }}\n className={cn(\n 'aui-bottom-sheet bg-card-bg text-text-primary m-0 mt-auto w-full max-w-none overflow-hidden rounded-t-xl border border-b-0 border-border p-0 pb-[env(safe-area-inset-bottom)] shadow-xl',\n 'backdrop:bg-[var(--overlay)] backdrop:backdrop-blur-[2px]',\n 'open:flex open:flex-col',\n className,\n )}\n >\n <div className=\"flex h-5 shrink-0 items-center justify-center\" aria-hidden>\n <span className=\"h-1 w-10 rounded-full bg-text-secondary/30\" />\n </div>\n {children}\n </dialog>\n );\n}\n","'use client';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { shellIsCreateAgent, useOptionalShellMode } from '../../server/ShellModeContext.js';\nimport { useSlot } from '../../theme/SlotsProvider.js';\nimport type { ComposerLeftSectionProps, ComposerRightSectionProps } from '../ComposerSections.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { useCompactLayout } from '../lib/CompactLayoutContext.js';\nimport { useIsMobile } from '../lib/useIsMobile.js';\nimport { Tooltip } from '../primitives/Tooltip.js';\nimport { DraftReasoningEffortSelector } from './DraftReasoningEffortSelector.js';\n\nexport function DraftComposerLeftSection({ disabled, isRunning, onAttach }: ComposerLeftSectionProps) {\n const shell = useOptionalShellMode();\n const DraftCompositeSelector = useSlot('DraftCompositeSelector');\n const DraftAgentConfigTrigger = useSlot('DraftAgentConfigTrigger');\n const compact = useCompactLayout();\n const isMobile = useIsMobile();\n const isBuilder = shell != null && shellIsCreateAgent(shell.mode);\n\n return (\n <div className=\"flex min-w-0 flex-wrap items-center gap-1.5\">\n {!isBuilder ? <DraftCompositeSelector disabled={disabled} isRunning={isRunning} onAttach={onAttach} /> : null}\n {isBuilder && (compact || isMobile) ? (\n <DraftAgentConfigTrigger disabled={disabled} isRunning={isRunning} />\n ) : null}\n {isBuilder && onAttach != null ? (\n <Tooltip content=\"Attach a file\">\n <button\n type=\"button\"\n disabled={disabled || isRunning}\n aria-label=\"Attach a file\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={onAttach}\n >\n <Icon name=\"paperclip\" />\n </button>\n </Tooltip>\n ) : null}\n </div>\n );\n}\n\nexport function DraftComposerRightSection({ disabled, isRunning }: ComposerRightSectionProps) {\n const DraftModelSelector = useSlot('DraftModelSelector');\n\n return (\n <div className=\"flex min-w-0 items-center gap-1\">\n <DraftModelSelector disabled={disabled} isRunning={isRunning} />\n <DraftReasoningEffortSelector disabled={disabled} isRunning={isRunning} />\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n DraftComposerLeftSection: typeof DraftComposerLeftSection;\n DraftComposerRightSection: typeof DraftComposerRightSection;\n }\n}\n","'use client';\n\nimport { useTrueFoundryAgentSpec, useTrueFoundryUpdateAgentSpec } from '@truefoundry/assistant-ui-runtime';\nimport { useCallback, useEffect, useId, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { useMCPAuth } from '../../hooks/useMcpAuth.js';\nimport { Icon } from '../../icons/Icon.js';\nimport { useOptionalCatalogServer, useServerCapabilities } from '../../server/ServerContext.js';\nimport { useOptionalShellMode, type SettingsSection } from '../../server/ShellModeContext.js';\nimport type { AgentSkill, ConnectorState } from '../../server/types.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { cn } from '../lib/cn.js';\nimport { useCompactLayout } from '../lib/CompactLayoutContext.js';\nimport { auiInputClass } from '../lib/inputClasses.js';\nimport { useInfiniteScrollSentinel } from '../lib/useInfiniteScrollSentinel.js';\nimport { useIsMobile } from '../lib/useIsMobile.js';\nimport { BottomSheet } from '../primitives/BottomSheet.js';\nimport { Button } from '../primitives/Button.js';\nimport { CatalogLogo } from '../primitives/CatalogLogo.js';\nimport { Tooltip } from '../primitives/Tooltip.js';\nimport { DraftCatalogEmptyState } from './DraftCatalogEmptyState.js';\nimport { useDraftCatalog } from './DraftCatalogProvider.js';\nimport { connectorsWithSelectedStubs } from './mcpConnectorStubs.js';\n\n/** Catalog-backed mount shape used by the draft picker (runtime mounts stay opaque). */\nexport type DraftMount = { id: string; name: string };\n\n/**\n * Harness wire mounts are name-keyed (`{ name }` only). Catalog rows use\n * `id === name`, so missing ids hydrate from name — otherwise save/load drops\n * mounts from the picker and the next flush can wipe them from the spec.\n */\nexport function draftMountsFromSpec(value: unknown): DraftMount[] {\n if (!Array.isArray(value)) return [];\n const mounts: DraftMount[] = [];\n for (const item of value) {\n if (typeof item !== 'object' || item === null) continue;\n const name = Reflect.get(item, 'name');\n if (typeof name !== 'string') continue;\n const id = Reflect.get(item, 'id');\n mounts.push({ id: typeof id === 'string' ? id : name, name });\n }\n return mounts;\n}\ntype AttachTab = 'connectors' | 'skills';\n\nconst TABS: { id: AttachTab; label: string; icon: string }[] = [\n { id: 'connectors', label: 'Connectors', icon: 'plug' },\n { id: 'skills', label: 'Skills', icon: 'lightbulb' },\n];\n\nconst SPEC_FLUSH_MS = 300;\n\nfunction Checkbox({ checked }: { checked: boolean }) {\n return (\n <span\n className={cn(\n 'flex size-4 shrink-0 items-center justify-center rounded border',\n checked\n ? 'border-primary-button-bg bg-primary-button-bg text-primary-button-text'\n : 'border-input-border bg-input-box-bg',\n )}\n aria-hidden\n >\n {checked ? <Icon name=\"check\" className=\"size-3\" /> : null}\n </span>\n );\n}\n\nexport function CatalogRow({\n title,\n description,\n logo,\n fallbackIcon,\n checked,\n disabled = false,\n onToggle,\n onActivate,\n action,\n}: {\n title: string;\n description?: string;\n /** Catalog logo URL; when absent, `fallbackIcon` (or the title initial) is shown. */\n logo?: string | undefined;\n fallbackIcon?: string;\n checked: boolean;\n disabled?: boolean;\n onToggle: () => void;\n onActivate?: () => void;\n action?: ReactNode;\n}) {\n const content = (\n <>\n <span\n className=\"bg-secondary-bg text-text-secondary mt-0.5 flex size-7 shrink-0 items-center justify-center overflow-hidden rounded border border-border text-xs font-semibold\"\n aria-hidden\n >\n {logo ? (\n <CatalogLogo src={logo} alt={title} className=\"size-4\" />\n ) : fallbackIcon ? (\n <Icon name={fallbackIcon} className=\"text-text-primary size-4\" />\n ) : (\n title.charAt(0).toUpperCase()\n )}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className=\"text-text-primary block truncate text-sm font-medium\">{title}</span>\n {description ? <span className=\"text-text-secondary line-clamp-1 text-xs\">{description}</span> : null}\n </span>\n </>\n );\n\n if (action || onActivate) {\n return (\n <div\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n tabIndex={0}\n className=\"hover:bg-ghost-button-hover flex w-full cursor-pointer items-center gap-2 rounded-md px-2 py-2 text-left\"\n onClick={onActivate ?? onToggle}\n onKeyDown={event => {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n (onActivate ?? onToggle)();\n }}\n >\n {content}\n <span className=\"shrink-0\">{action}</span>\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={checked}\n aria-label={`${checked ? 'Deselect' : 'Select'} ${title}`}\n disabled={disabled}\n className=\"shrink-0 disabled:cursor-not-allowed disabled:opacity-50\"\n onClick={event => {\n event.stopPropagation();\n onToggle();\n }}\n >\n <Checkbox checked={checked} />\n </button>\n </div>\n );\n }\n\n return (\n <button\n type=\"button\"\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n disabled={disabled}\n className=\"hover:bg-ghost-button-hover flex w-full cursor-pointer items-center gap-2 rounded-md px-2 py-2 text-left disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent\"\n onClick={onToggle}\n >\n {content}\n {disabled ? <Icon name=\"lock\" className=\"text-text-secondary size-3\" /> : <Checkbox checked={checked} />}\n </button>\n );\n}\n\nexport function isUnauthenticatedDcrConnector(connector: ConnectorState): boolean {\n const auth = Reflect.get(connector, 'auth');\n return (\n connector.authenticated === false &&\n typeof auth === 'object' &&\n auth !== null &&\n Reflect.get(auth, 'type') === 'dcr'\n );\n}\n\nexport function ConnectorConnectButton({\n connector,\n onConnected,\n}: {\n connector: ConnectorState;\n onConnected: () => Promise<void>;\n}) {\n const { handleAuthorize, isOAuthLoading } = useMCPAuth();\n\n return (\n <Button.Secondary\n type=\"button\"\n aria-label={`Connect ${connector.name}`}\n disabled={isOAuthLoading}\n size=\"small\"\n onKeyDown={event => {\n event.stopPropagation();\n }}\n onClick={event => {\n event.stopPropagation();\n void handleAuthorize(connector.id, isSuccess => {\n if (isSuccess) void onConnected();\n });\n }}\n >\n {isOAuthLoading ? 'Connecting...' : 'Connect'}\n </Button.Secondary>\n );\n}\n\nfunction SearchField({\n value,\n onChange,\n placeholder,\n}: {\n value: string;\n onChange: (v: string) => void;\n placeholder: string;\n}) {\n return (\n <label className=\"relative mx-3 my-2 block\">\n <Icon\n name=\"search\"\n className=\"text-text-secondary pointer-events-none absolute top-1/2 left-2 size-3.5 -translate-y-1/2\"\n />\n <input\n type=\"search\"\n value={value}\n onChange={e => onChange(e.target.value)}\n placeholder={placeholder}\n className={auiInputClass('h-8 bg-secondary-bg py-1 pr-2 pl-7 dark:bg-primary-bg')}\n />\n </label>\n );\n}\n\nexport type DraftCompositeSelectorProps = {\n disabled?: boolean;\n isRunning?: boolean;\n onAttach?: () => void;\n};\n\nfunction SectionHeading({ label, count }: { label: string; count: number }) {\n return (\n <div className=\"text-text-secondary px-3 pt-2 pb-1 text-[0.6875rem] font-medium tracking-wide uppercase\">\n {label} ({count})\n </div>\n );\n}\n\nexport function DraftCompositeSelector({ disabled, isRunning, onAttach }: DraftCompositeSelectorProps) {\n const {\n skills,\n connectors,\n connectorLogos,\n connectorsHasMore,\n connectorsLoadMoreFailed,\n connectorsLoadingMore,\n loading,\n ensureLoaded,\n refreshConnectors,\n loadMoreConnectors,\n } = useDraftCatalog();\n const capabilities = useServerCapabilities();\n const settingsCatalog = useOptionalCatalogServer();\n const shell = useOptionalShellMode();\n const { agentSpec } = useTrueFoundryAgentSpec();\n const updateAgentSpec = useTrueFoundryUpdateAgentSpec();\n const [open, setOpen] = useState(false);\n const [tab, setTab] = useState<AttachTab>('connectors');\n const [query, setQuery] = useState('');\n // Section membership is snapped when the picker opens, so toggles don't jump rows mid-session.\n const [pinnedMcpIds, setPinnedMcpIds] = useState<Set<string>>(() => new Set());\n const [pinnedSkillIds, setPinnedSkillIds] = useState<Set<string>>(() => new Set());\n // Local working copy while open — flush to AgentSpec on debounce / close.\n const [localMcp, setLocalMcp] = useState<DraftMount[]>([]);\n const [localSkills, setLocalSkills] = useState<DraftMount[]>([]);\n const dirtyRef = useRef(false);\n const flushTimerRef = useRef<number | null>(null);\n const localMcpRef = useRef(localMcp);\n const localSkillsRef = useRef(localSkills);\n localMcpRef.current = localMcp;\n localSkillsRef.current = localSkills;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const menuId = useId();\n const isMobile = useIsMobile();\n const compactLayout = useCompactLayout();\n const skillsDisabled = capabilities?.skill.enabled !== true;\n const skillsDisabledReason = capabilities?.skill.reason;\n const needsSandbox = capabilities?.sandbox.enabled === false;\n const settingsEnabled = capabilities?.settings?.enabled !== false;\n const canConfigureConnectors = settingsEnabled && settingsCatalog?.connectorCatalog != null;\n const canConfigureSkills = settingsEnabled && settingsCatalog?.skillCatalog != null;\n const canConfigureSandbox = settingsEnabled && settingsCatalog?.sandboxCatalog != null;\n\n const specMcp = useMemo(() => draftMountsFromSpec(agentSpec?.mcpServers), [agentSpec?.mcpServers]);\n const specSkills = useMemo(() => draftMountsFromSpec(agentSpec?.skills), [agentSpec?.skills]);\n\n const selectedMcp = open ? localMcp : specMcp;\n const selectedSkills = open ? localSkills : specSkills;\n const selectedMcpIds = useMemo(() => new Set(selectedMcp.map(m => m.id)), [selectedMcp]);\n const selectedSkillIds = useMemo(() => new Set(selectedSkills.map(s => s.id)), [selectedSkills]);\n const hasValidModel = Boolean(agentSpec?.model?.name.trim());\n const toolsCount = selectedMcp.length + selectedSkills.length;\n const toolsTooltip = useMemo(() => {\n const formatNames = (items: Array<{ name: string }>) => {\n const names = items.map(item => item.name);\n if (names.length <= 4) return names.join(', ');\n return `${names.slice(0, 4).join(', ')} +${names.length - 4}`;\n };\n const lines: string[] = [];\n if (selectedMcp.length > 0) {\n lines.push(`Connectors: ${formatNames(selectedMcp)}`);\n }\n if (selectedSkills.length > 0) {\n lines.push(`Skills: ${formatNames(selectedSkills)}`);\n }\n return lines.length > 0 ? lines.join('\\n') : 'No connectors or skills selected';\n }, [selectedMcp, selectedSkills]);\n\n const clearFlushTimer = useCallback(() => {\n if (flushTimerRef.current != null) {\n window.clearTimeout(flushTimerRef.current);\n flushTimerRef.current = null;\n }\n }, []);\n\n const flushSpec = useCallback(() => {\n clearFlushTimer();\n if (!dirtyRef.current) return;\n dirtyRef.current = false;\n updateAgentSpec?.({\n mcpServers: localMcpRef.current,\n skills: localSkillsRef.current,\n });\n }, [clearFlushTimer, updateAgentSpec]);\n\n const scheduleFlush = useCallback(() => {\n clearFlushTimer();\n flushTimerRef.current = window.setTimeout(() => {\n flushTimerRef.current = null;\n flushSpec();\n }, SPEC_FLUSH_MS);\n }, [clearFlushTimer, flushSpec]);\n\n const setOpenAndFlush = useCallback(\n (next: boolean) => {\n if (!next) flushSpec();\n setOpen(next);\n },\n [flushSpec],\n );\n\n useEffect(() => {\n if (open) ensureLoaded();\n }, [open, ensureLoaded]);\n\n useEffect(() => {\n if (open && !hasValidModel) {\n setOpenAndFlush(false);\n }\n }, [hasValidModel, open, setOpenAndFlush]);\n\n useEffect(() => {\n if (!open) return;\n // Flush on pointer or keyboard focus leaving the picker so Save Agent (and\n // other outside actions) see the latest local connector/skill toggles.\n const handler = (e: Event) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpenAndFlush(false);\n }\n };\n document.addEventListener('mousedown', handler);\n document.addEventListener('focusin', handler);\n return () => {\n document.removeEventListener('mousedown', handler);\n document.removeEventListener('focusin', handler);\n };\n }, [open, setOpenAndFlush]);\n\n useEffect(() => () => clearFlushTimer(), [clearFlushTimer]);\n\n const { listRef: connectorsListRef, sentinelRef: connectorsSentinelRef } = useInfiniteScrollSentinel({\n enabled: open && tab === 'connectors',\n hasMore: connectorsHasMore && !connectorsLoadMoreFailed,\n loading: connectorsLoadingMore || loading,\n onLoadMore: loadMoreConnectors,\n });\n\n const catalogConnectors = useMemo(\n () => connectorsWithSelectedStubs({ connectors, selected: selectedMcp }),\n [connectors, selectedMcp],\n );\n\n const filteredConnectors = useMemo(() => {\n const needle = query.trim().toLowerCase();\n const matches = needle\n ? catalogConnectors.filter(\n c => c.name.toLowerCase().includes(needle) || (c.description?.toLowerCase().includes(needle) ?? false),\n )\n : catalogConnectors;\n return [...matches].sort(\n (left, right) => Number(isUnauthenticatedDcrConnector(left)) - Number(isUnauthenticatedDcrConnector(right)),\n );\n }, [catalogConnectors, query]);\n\n const filteredSkills = useMemo(() => {\n const needle = query.trim().toLowerCase();\n if (!needle) return skills;\n return skills.filter(\n s => s.name.toLowerCase().includes(needle) || (s.description?.toLowerCase().includes(needle) ?? false),\n );\n }, [skills, query]);\n\n const pinnedSelectedConnectors = useMemo(\n () => filteredConnectors.filter(c => pinnedMcpIds.has(c.id)),\n [filteredConnectors, pinnedMcpIds],\n );\n const pinnedAvailableConnectors = useMemo(\n () => filteredConnectors.filter(c => !pinnedMcpIds.has(c.id)),\n [filteredConnectors, pinnedMcpIds],\n );\n const pinnedSelectedSkills = useMemo(\n () => filteredSkills.filter(s => pinnedSkillIds.has(s.id)),\n [filteredSkills, pinnedSkillIds],\n );\n const pinnedAvailableSkills = useMemo(\n () => filteredSkills.filter(s => !pinnedSkillIds.has(s.id)),\n [filteredSkills, pinnedSkillIds],\n );\n\n const toggleConnector = (connector: ConnectorState) => {\n setLocalMcp(prev =>\n prev.some(m => m.id === connector.id)\n ? prev.filter(m => m.id !== connector.id)\n : [...prev, { id: connector.id, name: connector.name }],\n );\n dirtyRef.current = true;\n scheduleFlush();\n };\n\n const toggleSkill = (skill: AgentSkill) => {\n const adding = !localSkillsRef.current.some(item => item.id === skill.id);\n setLocalSkills(prev =>\n prev.some(s => s.id === skill.id)\n ? prev.filter(s => s.id !== skill.id)\n : [...prev, { id: skill.id, name: skill.name }],\n );\n if (adding && capabilities?.sandbox.enabled === true) {\n updateAgentSpec?.({\n config: {\n ...agentSpec?.config,\n sandbox: { ...agentSpec?.config?.sandbox, enabled: true },\n },\n });\n }\n dirtyRef.current = true;\n scheduleFlush();\n };\n\n const openPicker = (nextTab?: AttachTab) => {\n if (nextTab != null) {\n setTab(nextTab);\n setQuery('');\n }\n if (open) return;\n setLocalMcp(specMcp);\n setLocalSkills(specSkills);\n dirtyRef.current = false;\n clearFlushTimer();\n setPinnedMcpIds(new Set(specMcp.map(m => m.id)));\n setPinnedSkillIds(new Set(specSkills.map(s => s.id)));\n setOpen(true);\n };\n\n const openSettings = (section: SettingsSection) => {\n setOpenAndFlush(false);\n setQuery('');\n shell?.setSettingsOpen(true, section);\n };\n\n const content = (\n <>\n <div className=\"flex shrink-0 border-b border-border\">\n {TABS.map(t => {\n const count = t.id === 'connectors' ? selectedMcp.length : t.id === 'skills' ? selectedSkills.length : null;\n const active = tab === t.id;\n return (\n <button\n key={t.id}\n type=\"button\"\n className={cn(\n 'text-text-secondary flex flex-1 items-center justify-center gap-1.5 px-2 py-2.5 text-xs font-medium',\n active && 'text-primary-button-bg border-b-2 border-primary-button-bg',\n )}\n onClick={() => {\n setTab(t.id);\n setQuery('');\n }}\n >\n <Icon name={t.icon} className=\"size-3.5\" />\n {t.label}\n {count != null && count > 0 ? (\n <span className=\"bg-secondary-bg rounded px-1 text-[0.625rem]\">{count}</span>\n ) : null}\n </button>\n );\n })}\n </div>\n\n <>\n <SearchField\n value={query}\n onChange={setQuery}\n placeholder={tab === 'connectors' ? 'Search connectors...' : 'Search skills...'}\n />\n {tab === 'skills' && skillsDisabled && skillsDisabledReason ? (\n <div\n role=\"status\"\n className=\"border-primary-button-bg/30 bg-primary-button-bg/5 text-text-primary mx-3 mb-2 flex items-center gap-2 rounded-lg border p-3\"\n >\n <Icon name=\"lock\" className=\"text-primary-button-bg size-3 shrink-0\" />\n <span className=\"text-xs leading-none\">{skillsDisabledReason}</span>\n </div>\n ) : null}\n <div\n ref={tab === 'connectors' ? connectorsListRef : undefined}\n className=\"min-h-0 flex-1 overflow-y-auto px-1 pb-2\"\n >\n {tab === 'connectors' ? (\n <>\n {pinnedSelectedConnectors.length > 0 ? (\n <>\n <SectionHeading label=\"Selected\" count={pinnedSelectedConnectors.length} />\n {pinnedSelectedConnectors.map(c => (\n <CatalogRow\n key={c.id}\n title={c.name}\n logo={connectorLogos[c.name]}\n fallbackIcon=\"mcp-server\"\n checked={selectedMcpIds.has(c.id)}\n action={\n isUnauthenticatedDcrConnector(c) ? (\n <ConnectorConnectButton connector={c} onConnected={refreshConnectors} />\n ) : undefined\n }\n onToggle={() => toggleConnector(c)}\n />\n ))}\n </>\n ) : null}\n {pinnedAvailableConnectors.length > 0 ? (\n <>\n <SectionHeading label=\"Available\" count={pinnedAvailableConnectors.length} />\n {pinnedAvailableConnectors.map(c => (\n <CatalogRow\n key={c.id}\n title={c.name}\n logo={connectorLogos[c.name]}\n fallbackIcon=\"mcp-server\"\n checked={selectedMcpIds.has(c.id)}\n action={\n isUnauthenticatedDcrConnector(c) ? (\n <ConnectorConnectButton connector={c} onConnected={refreshConnectors} />\n ) : undefined\n }\n onToggle={() => toggleConnector(c)}\n />\n ))}\n </>\n ) : null}\n {filteredConnectors.length === 0 && connectors.length > 0 ? (\n <DraftCatalogEmptyState loading={loading} emptyLabel=\"No connectors\" settingsTarget=\"Connectors\" />\n ) : null}\n {connectors.length === 0 ? (\n <DraftCatalogEmptyState\n loading={loading}\n emptyLabel=\"No connectors\"\n settingsTarget=\"Connectors\"\n onOpenSettings={shell && canConfigureConnectors ? () => openSettings('connectors') : undefined}\n />\n ) : null}\n {connectorsHasMore ? (\n <div\n ref={connectorsLoadMoreFailed ? undefined : connectorsSentinelRef}\n className=\"flex h-8 items-center justify-center\"\n >\n {connectorsLoadMoreFailed ? (\n <button\n type=\"button\"\n className={auiButtonClass({ variant: 'ghost', size: 'small' })}\n onClick={loadMoreConnectors}\n >\n Retry loading connectors\n </button>\n ) : connectorsLoadingMore ? (\n <span className=\"text-text-secondary text-[0.625rem]\">Loading…</span>\n ) : null}\n </div>\n ) : null}\n </>\n ) : (\n <>\n {pinnedSelectedSkills.length > 0 ? (\n <>\n <SectionHeading label=\"Selected\" count={pinnedSelectedSkills.length} />\n {pinnedSelectedSkills.map(s => (\n <CatalogRow\n key={s.id}\n title={s.name}\n description={s.description}\n checked={selectedSkillIds.has(s.id)}\n disabled={skillsDisabled && !selectedSkillIds.has(s.id)}\n onToggle={() => toggleSkill(s)}\n />\n ))}\n </>\n ) : null}\n {pinnedAvailableSkills.length > 0 ? (\n <>\n <SectionHeading label=\"Available\" count={pinnedAvailableSkills.length} />\n {pinnedAvailableSkills.map(s => (\n <CatalogRow\n key={s.id}\n title={s.name}\n description={s.description}\n checked={selectedSkillIds.has(s.id)}\n disabled={skillsDisabled && !selectedSkillIds.has(s.id)}\n onToggle={() => toggleSkill(s)}\n />\n ))}\n </>\n ) : null}\n {filteredSkills.length === 0 ? (\n <DraftCatalogEmptyState\n loading={loading}\n emptyLabel=\"No skills\"\n settingsTarget={needsSandbox ? 'a Sandbox' : 'Skills'}\n onOpenSettings={\n skills.length === 0 && shell && (needsSandbox ? canConfigureSandbox : canConfigureSkills)\n ? () => openSettings(needsSandbox ? 'sandbox' : 'skills')\n : undefined\n }\n />\n ) : null}\n </>\n )}\n </div>\n </>\n </>\n );\n\n // Gapless row: now that both triggers are icon-only, their ghost hover targets butt\n // together as one toolbar cluster rather than reading as separate chips.\n return (\n <div ref={containerRef} className=\"relative flex flex-wrap items-center\">\n {hasValidModel ? (\n <Tooltip content={toolsTooltip} className=\"max-w-xs whitespace-pre-line text-left\" side=\"top\">\n <button\n type=\"button\"\n disabled={disabled || isRunning}\n aria-label={`Tools (${toolsCount})`}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={() => {\n if (open) {\n setOpenAndFlush(false);\n return;\n }\n openPicker();\n }}\n >\n {/* Icon-only trigger; the count and name reach assistive tech via aria-label\n and sighted users via the tooltip, which lists the selected tools. */}\n <Icon name=\"wrench\" />\n </button>\n </Tooltip>\n ) : null}\n\n {onAttach ? (\n <Tooltip content=\"Attach a file\">\n <button\n type=\"button\"\n disabled={disabled || isRunning}\n aria-label=\"Attach a file\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={onAttach}\n >\n <Icon name=\"paperclip\" />\n </button>\n </Tooltip>\n ) : null}\n\n {open && hasValidModel ? (\n isMobile || compactLayout ? (\n <BottomSheet id={menuId} open onOpenChange={setOpenAndFlush} aria-label=\"Add to composer\">\n {content}\n </BottomSheet>\n ) : (\n <div\n id={menuId}\n role=\"dialog\"\n aria-label=\"Add to composer\"\n className=\"bg-card-bg text-text-primary absolute bottom-full left-0 z-50 mb-2 flex h-[22rem] w-[28rem] max-w-[min(28rem,calc(100vw-2rem))] flex-col overflow-hidden rounded-lg border border-border shadow-lg\"\n >\n {content}\n </div>\n )\n ) : null}\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n CatalogRow: typeof CatalogRow;\n ConnectorConnectButton: typeof ConnectorConnectButton;\n DraftCompositeSelector: typeof DraftCompositeSelector;\n }\n}\n","'use client';\n\nimport { useTrueFoundryAgentSpec, useTrueFoundryUpdateAgentSpec } from '@truefoundry/assistant-ui-runtime';\nimport { useEffect, useId, useRef, useState } from 'react';\n\nimport { Icon } from '../../icons/Icon.js';\nimport { useOptionalCatalogServer } from '../../server/ServerContext.js';\nimport { useOptionalShellMode } from '../../server/ShellModeContext.js';\nimport { auiButtonClass } from '../lib/buttonClasses.js';\nimport { cn } from '../lib/cn.js';\nimport { useCompactLayout } from '../lib/CompactLayoutContext.js';\nimport { useIsMobile } from '../lib/useIsMobile.js';\nimport { BottomSheet } from '../primitives/BottomSheet.js';\nimport { useDraftCatalog } from './DraftCatalogProvider.js';\nimport { displayModelLabel, DraftModelCatalogPanel, ProviderMark } from './DraftModelCatalogPanel.js';\nimport { modelPatchWithReasoningEffort } from './reasoningEffort.js';\n\nexport type DraftModelSelectorProps = {\n disabled?: boolean;\n isRunning?: boolean;\n};\n\nexport function DraftModelSelector({ disabled, isRunning }: DraftModelSelectorProps) {\n const { models, loading, ensureLoaded } = useDraftCatalog();\n const { agentSpec } = useTrueFoundryAgentSpec();\n const updateAgentSpec = useTrueFoundryUpdateAgentSpec();\n const catalog = useOptionalCatalogServer();\n const shell = useOptionalShellMode();\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const containerRef = useRef<HTMLDivElement>(null);\n const menuId = useId();\n const isMobile = useIsMobile();\n const compactLayout = useCompactLayout();\n const showConfigureSettingsCta = !loading && models.length === 0 && catalog != null;\n const seededDefaultModelRef = useRef<string | null>(null);\n\n useEffect(() => {\n ensureLoaded();\n }, [ensureLoaded]);\n\n // Keep agentSpec in sync with the visual default: when no model is set (or the\n // current name is not in the catalog), commit the first available catalog model.\n useEffect(() => {\n if (!updateAgentSpec || loading || models.length === 0) return;\n const first = models[0];\n if (first === undefined) return;\n const firstValue = first.name;\n const currentName = agentSpec?.model?.name?.trim() ?? '';\n if (currentName) {\n const inCatalog = models.some(m => m.name === currentName);\n if (inCatalog) {\n seededDefaultModelRef.current = null;\n return;\n }\n }\n if (seededDefaultModelRef.current === firstValue) return;\n seededDefaultModelRef.current = firstValue;\n updateAgentSpec({\n model: modelPatchWithReasoningEffort(firstValue, agentSpec?.model?.params, first.properties.reasoningEfforts),\n });\n }, [updateAgentSpec, loading, models, agentSpec?.model?.name, agentSpec?.model?.params]);\n\n const selectedName = agentSpec?.model?.name ?? models[0]?.name ?? '';\n const selected = models.find(m => m.name === selectedName);\n const label = selected\n ? displayModelLabel(selected.name)\n : selectedName\n ? displayModelLabel(selectedName)\n : loading\n ? 'Loading…'\n : 'Select model';\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n const account = selected?.provider.name ?? selectedName;\n\n const content = (\n <DraftModelCatalogPanel\n models={models}\n loading={loading}\n selectedName={selectedName}\n query={query}\n onQueryChange={setQuery}\n listboxId={menuId}\n onOpenSettings={\n showConfigureSettingsCta\n ? () => {\n setOpen(false);\n setQuery('');\n shell?.setSettingsOpen(true, 'models');\n }\n : undefined\n }\n onSelect={model => {\n updateAgentSpec?.({\n model: modelPatchWithReasoningEffort(model.name, agentSpec?.model?.params, model.properties.reasoningEfforts),\n });\n setOpen(false);\n setQuery('');\n }}\n />\n );\n\n return (\n <div ref={containerRef} className=\"relative\">\n <button\n type=\"button\"\n disabled={disabled || isRunning}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n title=\"Select model\"\n className={auiButtonClass({\n variant: 'ghost',\n size: 'small',\n className: cn('h-8 max-w-48 gap-1.5 rounded-full px-2 text-xs font-medium', 'hover:bg-ghost-button-hover'),\n })}\n onClick={() => setOpen(v => !v)}\n >\n <ProviderMark logo={selected?.provider.logo} label={account} className=\"size-4 text-xs\" />\n <span className=\"truncate\">{label}</span>\n <Icon name=\"chevron-down\" className=\"size-3.5 shrink-0 opacity-60\" />\n </button>\n\n {open ? (\n isMobile || compactLayout ? (\n <BottomSheet open onOpenChange={setOpen} aria-label=\"Select model\">\n {content}\n </BottomSheet>\n ) : (\n <div className=\"bg-card-bg text-text-primary absolute right-0 bottom-full z-50 mb-2 flex max-h-[22rem] w-[18rem] flex-col overflow-hidden rounded-lg border border-border shadow-lg\">\n {content}\n </div>\n )\n ) : null}\n </div>\n );\n}\n\ndeclare module '../../theme/SlotsProvider.js' {\n interface AtomSlots {\n DraftModelSelector: typeof DraftModelSelector;\n }\n}\n","import { forwardRef, type ComponentPropsWithRef } from 'react';\n\nimport { cn } from './lib/cn.js';\nimport { Spinner } from './primitives/Spinner.js';\n\nexport type HistoryLoaderProps = ComponentPropsWithRef<'div'> & {\n /** True while an older-history page is being fetched. */\n isLoading?: boolean;\n};\n\n/**\n * Inline status row shown at the top of the message list when older history\n * pages are available. Doubles as the scroll sentinel observed by\n * `HistoryLoaderContainer`.\n */\nexport const HistoryLoader = forwardRef<HTMLDivElement, HistoryLoaderProps>(\n ({ className, isLoading = false, ...rest }, ref) => (\n <div\n ref={ref}\n data-slot=\"aui_history-loader\"\n role=\"status\"\n aria-live=\"polite\"\n aria-label={isLoading ? 'Loading older messages' : 'Scroll up to load older messages'}\n className={cn('flex justify-center py-2', className)}\n {...rest}\n >\n {isLoading && <Spinner size={14} />}\n </div>\n ),\n);\nHistoryLoader.displayName = 'HistoryLoader';\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n HistoryLoader: typeof HistoryLoader;\n }\n}\n","'use client';\n\nimport type { ComponentType, ReactNode } from 'react';\nimport { useMemo, useRef } from 'react';\nimport ReactMarkdown, { type Components } from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\n\nimport { useSlot, useThemeMode } from '../theme/SlotsProvider.js';\nimport { useOptionalContentClassNames } from '../theme/ThemeProvider.js';\nimport { cn } from './lib/cn.js';\nimport type { OpenUiFenceBlockProps } from './OpenUiFenceBlock.js';\nimport type { SandboxArtifactDownloadProps } from './SandboxArtifactDownload.js';\nimport type { SyntaxHighlighterProps } from './SyntaxHighlighter.js';\n\n/** Preloads OpenUiFenceBlock so it's ready before the user sees openui content. */\nexport function preloadMarkdownOpenUI(): Promise<unknown> {\n return import('./OpenUiFenceBlock.js');\n}\n\n/**\n * Prism cost grows with the code body. While the final fence is still open and changing, render\n * it as plain code above this size; closed fences remain highlighted and are not repeatedly\n * downgraded. The active fence is highlighted once when its closing delimiter arrives.\n */\nexport const LARGE_STREAMING_FENCE_CHARS = 8 * 1024;\n\nexport type MarkdownProps = {\n content: string;\n isStreaming?: boolean;\n /** Base URL for resolving sandbox artifact download paths (e.g. gateway file endpoint). */\n fileDownloadBaseUrl?: string;\n /** Custom download handler that receives the original sandbox artifact path. */\n onDownloadArtifact?: (path: string, filename: string) => Promise<void>;\n /** When true, download actions in sandbox artifact blocks are hidden/disabled. */\n readOnly?: boolean;\n className?: string;\n};\n\n/**\n * Body of the final unmatched fenced block while streaming, or null when every fence is closed.\n * Used so only the growing fence skips Prism — completed large fences stay highlighted.\n */\nexport function getActiveStreamingFenceCode(content: string): string | null {\n const re = /^(`{3,})([^\\n]*)\\n?/gm;\n const markers: Array<{ after: number }> = [];\n let match: RegExpExecArray | null;\n while ((match = re.exec(content)) !== null) {\n markers.push({ after: match.index + match[0].length });\n }\n if (markers.length % 2 === 0) return null;\n const open = markers[markers.length - 1];\n if (open == null) return null;\n return content.slice(open.after).replace(/\\n$/, '');\n}\n\nfunction makeComponents(opts: {\n isStreaming?: boolean;\n /** Latest unmatched fence body; read via ref so `components` identity stays stable across growth. */\n getActiveFenceCode: () => string | null;\n darkTheme: boolean;\n fileDownloadBaseUrl?: string;\n onDownloadArtifact?: (path: string, filename: string) => Promise<void>;\n readOnly?: boolean;\n OpenUiFenceBlock: ComponentType<OpenUiFenceBlockProps>;\n SandboxArtifactDownload: ComponentType<SandboxArtifactDownloadProps>;\n SyntaxHighlighter: ComponentType<SyntaxHighlighterProps>;\n inlineCodeClassName?: string;\n}): Components {\n const {\n isStreaming,\n getActiveFenceCode,\n darkTheme,\n fileDownloadBaseUrl,\n onDownloadArtifact,\n readOnly,\n OpenUiFenceBlock,\n SandboxArtifactDownload,\n SyntaxHighlighter,\n inlineCodeClassName,\n } = opts;\n\n return {\n // Chat markdown links should open in a new tab.\n a({ href, children, node: _node, ...props }) {\n return (\n <a {...props} href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {children}\n </a>\n );\n },\n // Strip default <pre> wrapper — each block renderer provides its own container.\n pre({ children }: { children?: ReactNode }) {\n return <>{children}</>;\n },\n code({ className, children }) {\n const language = /language-(\\w+)/.exec(className ?? '')?.[1];\n const code = String(children ?? '').replace(/\\n$/, '');\n\n // Inline code: no language class\n if (!className) {\n return (\n <code\n className={cn('aui-inline-code rounded bg-secondary-bg px-1 py-0.5 font-mono text-sm', inlineCodeClassName)}\n >\n {children}\n </code>\n );\n }\n\n if (language === 'openui') {\n return <OpenUiFenceBlock content={code} isStreaming={isStreaming} darkTheme={darkTheme} />;\n }\n\n if (language === 'sandbox_artifacts') {\n return (\n <SandboxArtifactDownload\n code={code}\n fileDownloadBaseUrl={fileDownloadBaseUrl}\n onDownloadArtifact={onDownloadArtifact}\n readOnly={readOnly}\n />\n );\n }\n\n // Only the unmatched growing fence skips Prism; closed fences stay highlighted.\n const activeFenceCode = getActiveFenceCode();\n const isActiveOversizedFence =\n isStreaming === true &&\n activeFenceCode != null &&\n code === activeFenceCode &&\n code.length > LARGE_STREAMING_FENCE_CHARS;\n\n if (isActiveOversizedFence) {\n return (\n <pre\n className={cn(\n 'aui-syntax-highlighter my-2 max-w-full min-w-0 overflow-x-auto whitespace-pre-wrap break-words rounded-md',\n )}\n data-testid=\"aui-plain-streaming-fence\"\n >\n <code className={cn(className, 'whitespace-pre-wrap break-words')}>{code}</code>\n </pre>\n );\n }\n\n return <SyntaxHighlighter code={code} language={language} darkTheme={darkTheme} />;\n },\n };\n}\n\nconst REMARK_PLUGINS = [remarkGfm];\n\nexport function Markdown({\n content,\n isStreaming,\n fileDownloadBaseUrl,\n onDownloadArtifact,\n readOnly,\n className,\n}: MarkdownProps) {\n const mode = useThemeMode();\n const classNames = useOptionalContentClassNames();\n const darkTheme = mode === 'dark';\n const OpenUiFenceBlock = useSlot('OpenUiFenceBlock');\n const SandboxArtifactDownload = useSlot('SandboxArtifactDownload');\n const SyntaxHighlighter = useSlot('SyntaxHighlighter');\n\n // Ref keeps `components` stable while the active fence grows so completed Prism trees do not remount.\n const activeFenceCodeRef = useRef<string | null>(null);\n activeFenceCodeRef.current = isStreaming === true ? getActiveStreamingFenceCode(content) : null;\n\n const components = useMemo(\n () =>\n makeComponents({\n isStreaming,\n getActiveFenceCode: () => activeFenceCodeRef.current,\n darkTheme,\n fileDownloadBaseUrl,\n onDownloadArtifact,\n readOnly,\n OpenUiFenceBlock,\n SandboxArtifactDownload,\n SyntaxHighlighter,\n inlineCodeClassName: classNames.inlineCode,\n }),\n [\n isStreaming,\n darkTheme,\n fileDownloadBaseUrl,\n onDownloadArtifact,\n readOnly,\n OpenUiFenceBlock,\n SandboxArtifactDownload,\n SyntaxHighlighter,\n classNames.inlineCode,\n ],\n );\n\n return (\n <div\n className={cn('aui-markdown markdown-body min-w-0 max-w-full overflow-x-clip', classNames.markdown, className)}\n >\n <ReactMarkdown remarkPlugins={REMARK_PLUGINS} components={components}>\n {content}\n </ReactMarkdown>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n Markdown: typeof Markdown;\n }\n}\n","'use client';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { cn } from './lib/cn.js';\nimport { IconButton } from './primitives/IconButton.js';\n\nexport type MessageActionBarProps = {\n isCopied: boolean;\n onCopy: () => void;\n createdAt?: Date | string;\n className?: string;\n};\n\nconst actionBtnClass = 'h-6 w-6 text-text-secondary hover:text-text-primary [&_svg]:size-3.5';\n\nexport function MessageActionBar({ isCopied, onCopy, createdAt, className }: MessageActionBarProps) {\n const MessageTimestamp = useSlot('MessageTimestamp');\n\n return (\n <div\n className={cn('aui-assistant-action-bar-root animate-in fade-in flex items-center gap-1 duration-200', className)}\n >\n <MessageTimestamp createdAt={createdAt} className=\"mr-1\" />\n <IconButton aria-label=\"Copy\" tooltip=\"Copy\" variant=\"ghost\" className={actionBtnClass} onClick={onCopy}>\n <Icon name={isCopied ? 'check' : 'clone'} size=\"0.875em\" />\n </IconButton>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n MessageActionBar: typeof MessageActionBar;\n }\n}\n","import { cn } from './lib/cn.js';\n\nexport type MessageErrorBannerProps = {\n message: string;\n className?: string;\n};\n\nexport function MessageErrorBanner({ message, className }: MessageErrorBannerProps) {\n return (\n <div\n role=\"alert\"\n className={cn(\n 'aui-message-error-root border-failure-bg bg-failure-bg/10 text-failure-bg mt-2 rounded-md border p-3 text-sm',\n className,\n )}\n >\n <span className=\"aui-message-error-message line-clamp-2\">{message}</span>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n MessageErrorBanner: typeof MessageErrorBanner;\n }\n}\n","import { cn } from './lib/cn.js';\n\nexport type MessageIndicatorProps = {\n className?: string;\n};\n\nexport function MessageIndicator({ className }: MessageIndicatorProps) {\n return (\n <span\n data-slot=\"aui_assistant-message-indicator\"\n className={cn('animate-pulse font-sans', className)}\n aria-label=\"Assistant is working\"\n >\n {'●'}\n </span>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n MessageIndicator: typeof MessageIndicator;\n }\n}\n","'use client';\n\nimport { cn } from './lib/cn.js';\nimport { LightTooltip } from './primitives/Tooltip.js';\n\nfunction toDate(createdAt: Date | string | undefined): Date | null {\n if (createdAt == null) {\n return null;\n }\n const date = createdAt instanceof Date ? createdAt : new Date(createdAt);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\nfunction formatTime(date: Date): string {\n return new Intl.DateTimeFormat(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: true,\n }).format(date);\n}\n\nfunction formatFullDate(date: Date): string {\n return new Intl.DateTimeFormat(undefined, {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n }).format(date);\n}\n\nexport type MessageTimestampProps = {\n createdAt?: Date | string;\n className?: string;\n};\n\nexport function MessageTimestamp({ createdAt, className }: MessageTimestampProps) {\n const date = toDate(createdAt);\n\n if (date == null) {\n return null;\n }\n\n return (\n <LightTooltip title={formatFullDate(date)} size=\"fit\">\n <span className={cn('text-xs font-medium cursor-pointer leading-normal shrink-0 text-text-secondary', className)}>\n {formatTime(date)}\n </span>\n </LightTooltip>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n MessageTimestamp: typeof MessageTimestamp;\n }\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { useOptionalContentClassNames, useOptionalThemeMode } from '../theme/ThemeProvider.js';\nimport { cn } from './lib/cn.js';\n\nexport type MonacoEditorCoreProps = {\n value: string;\n language?: string;\n /** Monaco theme name. Defaults to SDK light/dark themes (`aui-monaco-light` / `aui-monaco-dark`). */\n theme?: string;\n options?: Record<string, unknown>;\n onChange?: (value: string) => void;\n onMount?: (editor: unknown, monaco: unknown) => void;\n beforeMount?: (monaco: unknown) => void;\n onAutoHeightChange?: (height: number) => void; // Reports Monaco's measured, clamped content height while `autoHeight` is active.\n className?: string;\n /**\n * Fixed height. Ignored when `autoHeight` is true (except as an initial\n * fallback before the editor mounts). Use `\"100%\"` for fill-parent layouts\n * (e.g. fullscreen dialogs) with `autoHeight={false}`.\n */\n height?: string | number;\n /** Grow/shrink to content height, capped by `maxHeight`. Default false. */\n autoHeight?: boolean;\n /** Cap for `autoHeight` (px number or CSS length). Default `10.5rem`. */\n maxHeight?: string | number;\n /** Floor for `autoHeight` (px number or CSS length). Default one line. */\n minHeight?: string | number;\n};\n\ntype MonacoEditor = {\n getValue(): string;\n setValue(value: string): void;\n getContentHeight(): number;\n onDidChangeModelContent(listener: () => void): { dispose(): void };\n onDidContentSizeChange(listener: () => void): { dispose(): void };\n updateOptions(options: Record<string, unknown>): void;\n dispose(): void;\n layout(): void;\n};\n\ntype MonacoModule = {\n editor: {\n create(container: HTMLElement, options: Record<string, unknown>): MonacoEditor;\n defineTheme(\n name: string,\n theme: {\n base: 'vs' | 'vs-dark' | 'hc-black' | 'hc-light';\n inherit: boolean;\n rules: unknown[];\n colors: Record<string, string>;\n },\n ): void;\n setTheme(name: string): void;\n };\n};\n\nconst AUI_MONACO_LIGHT = 'aui-monaco-light';\nconst AUI_MONACO_DARK = 'aui-monaco-dark';\nconst TRANSPARENT = '#00000000';\nconst DEFAULT_LINE_HEIGHT = 18;\nconst DEFAULT_VERTICAL_PADDING = 8;\nconst DEFAULT_MAX_HEIGHT = '10.5rem';\n\nfunction defineAuiThemes(monaco: MonacoModule) {\n const sharedColors = {\n 'editor.background': TRANSPARENT,\n 'editor.lineHighlightBackground': TRANSPARENT,\n 'editor.lineHighlightBorder': TRANSPARENT,\n 'editorGutter.background': TRANSPARENT,\n 'minimap.background': TRANSPARENT,\n focusBorder: TRANSPARENT,\n 'scrollbar.shadow': TRANSPARENT,\n 'editorOverviewRuler.border': TRANSPARENT,\n 'editorOverviewRuler.background': TRANSPARENT,\n };\n\n monaco.editor.defineTheme(AUI_MONACO_LIGHT, {\n base: 'vs',\n inherit: true,\n rules: [],\n colors: sharedColors,\n });\n\n monaco.editor.defineTheme(AUI_MONACO_DARK, {\n base: 'vs-dark',\n inherit: true,\n rules: [],\n colors: sharedColors,\n });\n}\n\nfunction resolveThemeName(\n explicit: string | undefined,\n classNameTheme: string | undefined,\n mode: 'light' | 'dark',\n): string {\n if (explicit) return explicit;\n if (classNameTheme) return classNameTheme;\n return mode === 'dark' ? AUI_MONACO_DARK : AUI_MONACO_LIGHT;\n}\n\nfunction toPx(value: string | number | undefined, fallback: number): number {\n if (value == null) return fallback;\n if (typeof value === 'number') return value;\n const trimmed = value.trim();\n if (trimmed.endsWith('rem')) {\n const rem = parseFloat(trimmed);\n const root =\n typeof document !== 'undefined' ? parseFloat(getComputedStyle(document.documentElement).fontSize) || 16 : 16;\n return Number.isFinite(rem) ? rem * root : fallback;\n }\n if (trimmed.endsWith('px')) {\n const px = parseFloat(trimmed);\n return Number.isFinite(px) ? px : fallback;\n }\n const n = parseFloat(trimmed);\n return Number.isFinite(n) ? n : fallback;\n}\n\nfunction estimateHeightFromValue(value: string, minPx: number, maxPx: number): number {\n const lines = Math.max(1, value.split('\\n').length);\n const estimated = lines * DEFAULT_LINE_HEIGHT + DEFAULT_VERTICAL_PADDING;\n return Math.min(maxPx, Math.max(minPx, estimated));\n}\n\nconst EMBEDDED_DEFAULTS: Record<string, unknown> = {\n automaticLayout: true,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n // Don't paint a blank last line when the buffer ends with `\\n`.\n renderFinalNewline: 'off',\n wordWrap: 'on',\n fontSize: 12,\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace',\n lineHeight: DEFAULT_LINE_HEIGHT,\n padding: { top: 4, bottom: 4 },\n renderLineHighlight: 'none',\n overviewRulerLanes: 0,\n overviewRulerBorder: false,\n hideCursorInOverviewRuler: true,\n glyphMargin: false,\n folding: true,\n scrollbar: {\n verticalScrollbarSize: 8,\n horizontalScrollbarSize: 8,\n useShadows: false,\n },\n stickyScroll: { enabled: false },\n};\n\nexport function MonacoEditorCore({\n value,\n language = 'plaintext',\n theme,\n options,\n onChange,\n onMount,\n beforeMount,\n onAutoHeightChange,\n className,\n height = 400,\n autoHeight = false,\n maxHeight = DEFAULT_MAX_HEIGHT,\n minHeight,\n}: MonacoEditorCoreProps) {\n const mode = useOptionalThemeMode();\n const classNames = useOptionalContentClassNames();\n const wrapperRef = useRef<HTMLDivElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const editorRef = useRef<MonacoEditor | null>(null);\n const monacoRef = useRef<MonacoModule | null>(null);\n const onChangeRef = useRef(onChange);\n const onMountRef = useRef(onMount);\n const beforeMountRef = useRef(beforeMount);\n const onAutoHeightChangeRef = useRef(onAutoHeightChange);\n onChangeRef.current = onChange;\n onMountRef.current = onMount;\n beforeMountRef.current = beforeMount;\n onAutoHeightChangeRef.current = onAutoHeightChange;\n\n const minPx = toPx(minHeight, DEFAULT_LINE_HEIGHT + DEFAULT_VERTICAL_PADDING);\n const maxPx = toPx(maxHeight, toPx(DEFAULT_MAX_HEIGHT, 168));\n const clampRef = useRef({ minPx, maxPx, autoHeight });\n clampRef.current = { minPx, maxPx, autoHeight };\n\n const [autoPx, setAutoPx] = useState(() => (autoHeight ? estimateHeightFromValue(value, minPx, maxPx) : 0));\n\n const resolvedTheme = resolveThemeName(theme, classNames.monaco?.monacoTheme, mode);\n\n const syncAutoHeight = () => {\n const editor = editorRef.current;\n const wrapper = wrapperRef.current;\n const { minPx: min, maxPx: max, autoHeight: enabled } = clampRef.current;\n if (!editor || !wrapper || !enabled) return;\n const next = Math.min(max, Math.max(min, editor.getContentHeight()));\n setAutoPx(next);\n wrapper.style.height = `${next}px`;\n editor.layout();\n onAutoHeightChangeRef.current?.(next);\n };\n\n useEffect(() => {\n if (!containerRef.current) return;\n\n let editor: MonacoEditor | null = null;\n let changeDisposable: { dispose(): void } | null = null;\n let sizeDisposable: { dispose(): void } | null = null;\n let destroyed = false;\n\n void import('monaco-editor').then(mod => {\n if (destroyed || !containerRef.current) return;\n\n const monaco = mod as unknown as MonacoModule;\n monacoRef.current = monaco;\n defineAuiThemes(monaco);\n beforeMountRef.current?.(monaco);\n\n editor = monaco.editor.create(containerRef.current, {\n value,\n language,\n theme: resolvedTheme,\n ...EMBEDDED_DEFAULTS,\n ...options,\n });\n\n editorRef.current = editor;\n\n changeDisposable = editor.onDidChangeModelContent(() => {\n onChangeRef.current?.(editor!.getValue());\n });\n\n if (autoHeight) {\n sizeDisposable = editor.onDidContentSizeChange(() => {\n syncAutoHeight();\n });\n // Layout after first paint so getContentHeight is accurate.\n requestAnimationFrame(() => syncAutoHeight());\n }\n\n onMountRef.current?.(editor, monaco);\n });\n\n return () => {\n destroyed = true;\n changeDisposable?.dispose();\n sizeDisposable?.dispose();\n editor?.dispose();\n editorRef.current = null;\n monacoRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []); // mount-only: editor manages its own state\n\n // Sync external value changes without recreating the editor.\n useEffect(() => {\n const editor = editorRef.current;\n if (editor && editor.getValue() !== value) {\n editor.setValue(value);\n if (autoHeight) {\n requestAnimationFrame(() => syncAutoHeight());\n }\n }\n }, [value, autoHeight, minPx, maxPx]);\n\n // Re-clamp when max/min change.\n useEffect(() => {\n if (autoHeight) {\n requestAnimationFrame(() => syncAutoHeight());\n }\n }, [autoHeight, minPx, maxPx]);\n\n // Follow light/dark (and host theme overrides) after mount.\n useEffect(() => {\n monacoRef.current?.editor.setTheme(resolvedTheme);\n }, [resolvedTheme]);\n\n const styleHeight = autoHeight ? autoPx : typeof height === 'number' ? height : height;\n\n return (\n <div\n ref={wrapperRef}\n className={cn('aui-monaco overflow-hidden', classNames.monaco?.root, className)}\n style={{ height: styleHeight }}\n >\n <div ref={containerRef} className={cn('h-full w-full overflow-hidden', classNames.monaco?.editor)} />\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n MonacoEditorCore: typeof MonacoEditorCore;\n }\n}\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport type { ChatFileDownloadFile } from './ChatFileDownload.js';\n\nexport type SandboxArtifactDownloadProps = {\n code: string;\n fileDownloadBaseUrl?: string;\n onDownloadArtifact?: (path: string, filename: string) => Promise<void>;\n readOnly?: boolean;\n};\n\nexport type SandboxArtifact = ChatFileDownloadFile;\n\nconst PREFIX = 'sandbox_artifacts';\n/** tfy / agent format: `[name](path)` */\nconst PAIR_RE = /\\[([^\\]]*)\\]\\(([^)]*)\\)/g;\n\n/**\n * Parses a `sandbox_artifacts` fence body into `{ name, path }` entries.\n * Primary format matches tfy-web-components: `[file.js](/tmp/file.js)`.\n * Colon lines (`name: path`) are accepted as a fallback.\n */\nexport function parseSandboxArtifacts(raw: string): SandboxArtifact[] {\n const trimmed = raw.trim();\n const body = trimmed.startsWith(PREFIX) ? trimmed.slice(PREFIX.length).trimStart() : trimmed;\n\n const fromLinks: SandboxArtifact[] = [];\n PAIR_RE.lastIndex = 0;\n let match: RegExpExecArray | null = PAIR_RE.exec(body);\n while (match !== null) {\n const name = match[1]?.trim() ?? '';\n const path = match[2]?.trim() ?? '';\n if (name && path) fromLinks.push({ name, path });\n match = PAIR_RE.exec(body);\n }\n if (fromLinks.length > 0) return fromLinks;\n\n // Fallback: `name: path` per line\n return body.split('\\n').flatMap(line => {\n const idx = line.indexOf(':');\n if (idx === -1) return [];\n const name = line.slice(0, idx).trim();\n const path = line.slice(idx + 1).trim();\n if (!name || !path) return [];\n // Skip leftover markdown link debris\n if (name.startsWith('[') || path.startsWith('(')) return [];\n return [{ name, path }];\n });\n}\n\nexport function SandboxArtifactDownload({\n code,\n fileDownloadBaseUrl,\n onDownloadArtifact,\n readOnly,\n}: SandboxArtifactDownloadProps) {\n const ChatFileDownload = useSlot('ChatFileDownload');\n const artifacts = useMemo(() => parseSandboxArtifacts(code), [code]);\n if (artifacts.length === 0) return null;\n\n return (\n <ChatFileDownload\n files={artifacts}\n fileDownloadBaseUrl={fileDownloadBaseUrl}\n onDownloadArtifact={onDownloadArtifact}\n readOnly={readOnly}\n />\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n SandboxArtifactDownload: typeof SandboxArtifactDownload;\n }\n}\n","'use client';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { cn } from './lib/cn.js';\nimport type { ToolCallStatus } from './ToolCallCard.js';\n\nexport type SandboxToolCallCardProps = {\n name: string;\n intent?: string;\n status: ToolCallStatus;\n expanded: boolean;\n onToggle: () => void;\n command?: string;\n exitCode?: number | null;\n argsJson?: string;\n resultText?: string;\n resultJson?: string;\n viewMode?: 'terminal' | 'code';\n hasContent?: boolean;\n onViewModeChange?: (viewMode: 'terminal' | 'code') => void;\n durationText?: string;\n dataTestPrefix?: string;\n className?: string;\n};\n\nfunction JsonPane({ value, className }: { value: string; className?: string }) {\n const MonacoEditorCore = useSlot('MonacoEditorCore');\n\n return (\n <MonacoEditorCore\n language=\"json\"\n value={value}\n autoHeight\n maxHeight=\"10.5rem\"\n options={{\n readOnly: true,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n wordWrap: 'on',\n lineNumbers: 'off',\n folding: true,\n fontSize: 12,\n }}\n className={cn('!border-0', className)}\n />\n );\n}\n\nfunction SandboxBody({\n command,\n exitCode,\n argsJson,\n resultText,\n resultJson,\n viewMode = 'terminal',\n hasContent = false,\n onViewModeChange,\n dataTestPrefix,\n}: Pick<\n SandboxToolCallCardProps,\n | 'command'\n | 'exitCode'\n | 'argsJson'\n | 'resultText'\n | 'resultJson'\n | 'viewMode'\n | 'hasContent'\n | 'onViewModeChange'\n | 'dataTestPrefix'\n>) {\n return (\n <div\n className=\"rounded-lg border border-border bg-primary-bg\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-sandbox` : undefined}\n >\n <div className=\"rounded-t-md border-b border-primary-button-bg/30 bg-primary-button-bg/10\">\n <div className=\"flex w-full min-w-0 items-center gap-2 px-3 py-1.5\">\n <p className=\"min-w-0 font-sans text-xs font-medium text-primary-button-bg\">sandbox</p>\n <div\n className=\"ml-auto flex shrink-0 items-center gap-1.5\"\n onClick={e => e.stopPropagation()}\n onKeyDown={e => e.stopPropagation()}\n >\n {exitCode != null && (\n <span\n className={cn(\n 'inline-flex h-6 items-center gap-1 rounded px-1.5 text-xs lowercase',\n exitCode === 0 ? 'bg-success-bg/10 text-success-bg' : 'bg-failure-bg/10 text-failure-bg',\n )}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-exit-code` : undefined}\n >\n <Icon name={exitCode === 0 ? 'circle-check' : 'circle-xmark'} size={12} />\n exit: {exitCode}\n </span>\n )}\n <div\n className=\"inline-flex h-6 items-center rounded-md border border-border bg-primary-bg p-0.5\"\n role=\"group\"\n aria-label=\"Sandbox view\"\n >\n <button\n type=\"button\"\n title=\"Terminal View\"\n aria-label=\"Terminal View\"\n aria-pressed={viewMode === 'terminal'}\n onClick={() => onViewModeChange?.('terminal')}\n className={cn(\n 'inline-flex size-5 cursor-pointer items-center justify-center rounded-sm text-text-secondary transition-colors',\n viewMode === 'terminal' && 'bg-dropdown-selected-item-bg text-dropdown-selected-item-text shadow-sm',\n )}\n >\n <Icon name=\"terminal\" size={12} />\n </button>\n <button\n type=\"button\"\n title=\"Code View\"\n aria-label=\"Code View\"\n aria-pressed={viewMode === 'code'}\n onClick={() => onViewModeChange?.('code')}\n className={cn(\n 'inline-flex size-5 cursor-pointer items-center justify-center rounded-sm text-text-secondary transition-colors',\n viewMode === 'code' && 'bg-dropdown-selected-item-bg text-dropdown-selected-item-text shadow-sm',\n )}\n >\n <Icon name=\"code\" size={12} />\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div className=\"rounded-b-lg border border-t-0 border-border p-3\">\n {hasContent && (\n <div className=\"max-h-80 overflow-x-hidden overflow-y-auto whitespace-pre-wrap break-words font-mono text-xs text-text-primary\">\n {viewMode === 'code' ? (\n <>\n {argsJson && (\n <div className=\"my-1 border-l-4 border-primary-button-bg px-3\">\n <div className=\"mb-1 font-sans text-xs font-medium leading-4\">Arguments</div>\n <JsonPane value={argsJson} className=\"pl-2\" />\n </div>\n )}\n {resultJson && (\n <div className=\"my-1 border-l-4 border-primary-button-bg/60 px-3\">\n <div className=\"mb-1 mt-2 font-sans text-xs font-medium leading-4\">Result</div>\n <JsonPane value={resultJson} className=\"pl-2\" />\n </div>\n )}\n </>\n ) : (\n <>\n {command && (\n <div className=\"my-1 break-all border-l-4 border-primary-button-bg px-3\">\n <div className=\"mb-1 text-[12px] font-medium leading-4 text-text-secondary\">COMMAND</div>\n <div>\n <span className=\"text-primary-button-bg\">$</span> {command}\n </div>\n </div>\n )}\n {resultText ? (\n <>\n <div className=\"mx-3 my-1 border-t border-border\" />\n <div className=\"my-1 break-all border-l-4 border-primary-button-bg/60 px-3\">\n <div className=\"mb-1 text-[12px] font-medium leading-4 text-text-secondary\">OUTPUT</div>\n <div>{resultText}</div>\n </div>\n </>\n ) : (\n resultJson && (\n <>\n <div className=\"mx-3 my-1 border-t border-border\" />\n <div className=\"my-1 border-l-4 border-primary-button-bg/60 px-3\">\n <div className=\"mb-1 text-[12px] font-medium leading-4 text-text-secondary\">OUTPUT</div>\n <JsonPane value={resultJson} className=\"pl-2\" />\n </div>\n </>\n )\n )}\n </>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport function SandboxToolCallCard({\n name,\n intent,\n status,\n expanded,\n onToggle,\n command,\n exitCode,\n argsJson,\n resultText,\n resultJson,\n viewMode = 'terminal',\n hasContent = false,\n onViewModeChange,\n durationText,\n dataTestPrefix,\n className,\n}: SandboxToolCallCardProps) {\n const ToolCallCard = useSlot('ToolCallCard');\n const awaiting = status === 'running';\n\n return (\n <ToolCallCard\n toolName={intent || name}\n icon=\"cube\"\n iconClassName=\"text-primary-button-bg shrink-0\"\n expanded={expanded}\n onToggle={onToggle}\n awaiting={awaiting}\n awaitingText={durationText ?? 'Running…'}\n showResponseLine={false}\n status={awaiting ? undefined : status}\n exitCode={exitCode}\n dataTestPrefix={dataTestPrefix}\n requestSlot={\n <SandboxBody\n command={command}\n exitCode={exitCode}\n argsJson={argsJson}\n resultText={resultText}\n resultJson={resultJson}\n viewMode={viewMode}\n hasContent={hasContent}\n onViewModeChange={onViewModeChange}\n dataTestPrefix={dataTestPrefix}\n />\n }\n className={cn('aui-sandbox-tool-call-card', className)}\n />\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n SandboxToolCallCard: typeof SandboxToolCallCard;\n }\n}\n","'use client';\n\nimport {\n useTrueFoundryAdoptAgentSpec,\n useTrueFoundryAgentSpec,\n useTrueFoundryFlushAgentSpec,\n} from '@truefoundry/assistant-ui-runtime';\nimport { useMemo, useRef, useState } from 'react';\n\nimport { useSaveAgentVisible } from '../hooks/useChatChromeActionsVisible.js';\nimport { Icon } from '../icons/Icon.js';\nimport { useOptionalServer, useServerCapabilities } from '../server/ServerContext.js';\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\nimport type { AgentSpec, McpToolSelection } from '../server/types.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { getErrorMessage } from '../utils/getErrorMessage.js';\nimport type { AgentConfigEditor } from './draft/AgentConfigEditors.js';\nimport { useOptionalAgentConfigInstructions } from './draft/AgentConfigInstructionsContext.js';\nimport { DraftCatalogProvider, useDraftCatalog } from './draft/DraftCatalogProvider.js';\nimport { editableMountsFromSpec, withPreload } from './draft/agentConfigMounts.js';\nimport { Button } from './primitives/Button.js';\nimport { CenteredModal } from './primitives/CenteredModal.js';\n\ntype SaveIntent = 'create' | 'update';\n\nfunction cloneAgentSpec(spec: AgentSpec): AgentSpec {\n return {\n ...spec,\n model: {\n ...spec.model,\n params: spec.model.params ? { ...spec.model.params } : undefined,\n },\n mcpServers: spec.mcpServers?.map((item: object) => ({ ...item })),\n skills: spec.skills?.map((item: object) => ({ ...item })),\n config: spec.config ? { ...spec.config } : undefined,\n };\n}\n\nexport type SaveAgentButtonProps = {\n disabled?: boolean;\n className?: string;\n children?: string;\n /** Unsynced drawer instructions to overlay onto the latest runtime spec. */\n instructionsOverride?: string;\n};\n\nexport function SaveAgentButton({\n disabled = false,\n className,\n children = 'Save Agent',\n instructionsOverride,\n}: SaveAgentButtonProps) {\n return (\n <DraftCatalogProvider>\n <SaveAgentButtonContent disabled={disabled} className={className} instructionsOverride={instructionsOverride}>\n {children}\n </SaveAgentButtonContent>\n </DraftCatalogProvider>\n );\n}\n\nfunction SaveAgentButtonContent({\n disabled,\n className,\n children,\n instructionsOverride,\n}: {\n disabled: boolean;\n className?: string;\n children: string;\n instructionsOverride?: string;\n}) {\n const { agentSpec, draftSessionId } = useTrueFoundryAgentSpec();\n const agentSpecRef = useRef(agentSpec);\n agentSpecRef.current = agentSpec;\n const flushAgentSpec = useTrueFoundryFlushAgentSpec();\n const adoptAgentSpec = useTrueFoundryAdoptAgentSpec();\n const builder = useOptionalServer();\n const shell = useOptionalShellMode();\n const configInstructions = useOptionalAgentConfigInstructions();\n const catalog = useDraftCatalog();\n const serverCapabilities = useServerCapabilities();\n const AgentConfigEditors = useSlot('AgentConfigEditors');\n const SaveAgentForm = useSlot('SaveAgentForm');\n const visible = useSaveAgentVisible();\n const [open, setOpen] = useState(false);\n const [editor, setEditor] = useState<AgentConfigEditor | null>(null);\n const [intent, setIntent] = useState<SaveIntent>('create');\n const [name, setName] = useState('');\n const [draftSpec, setDraftSpec] = useState<AgentSpec | null>(null);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const mcpMounts = useMemo(() => editableMountsFromSpec(draftSpec?.mcpServers), [draftSpec?.mcpServers]);\n const skillMounts = useMemo(() => editableMountsFromSpec(draftSpec?.skills), [draftSpec?.skills]);\n const modelEntry = useMemo(\n () => catalog.models.find(model => model.name === draftSpec?.model.name),\n [catalog.models, draftSpec?.model.name],\n );\n\n const close = () => {\n if (saving) return;\n setEditor(null);\n setOpen(false);\n setDraftSpec(null);\n setError(null);\n };\n\n const show = async () => {\n if (agentSpecRef.current === null || builder === null) return;\n setError(null);\n catalog.ensureLoaded();\n configInstructions?.flush();\n await flushAgentSpec();\n const flushedAgentSpec = agentSpecRef.current;\n if (flushedAgentSpec === null) return;\n const instructionsDraft = instructionsOverride ?? configInstructions?.draft;\n const latestAgentSpec =\n instructionsDraft === undefined ? flushedAgentSpec : { ...flushedAgentSpec, instructions: instructionsDraft };\n const currentName = shell?.mode.status === 'active' ? (shell.mode.agentName ?? shell.mode.agentId ?? '') : '';\n setIntent(currentName ? 'update' : 'create');\n setName(currentName);\n setDraftSpec(cloneAgentSpec(latestAgentSpec));\n setOpen(true);\n };\n\n const save = async () => {\n if (builder === null || draftSpec === null) return;\n const normalizedName = name.trim();\n if (!normalizedName || !draftSpec.model.name.trim()) return;\n setSaving(true);\n setError(null);\n try {\n const result = await builder.saveAgent({\n agentName: normalizedName,\n agentSpec: draftSpec,\n intent,\n sessionId: draftSessionId,\n });\n adoptAgentSpec({ agentSpec: draftSpec, updatedAt: result.sessionUpdatedAt });\n shell?.bindMutableAgent({\n agentId: result.agentId ?? normalizedName,\n agentName: normalizedName,\n agentSpec: draftSpec,\n });\n shell?.invalidateAgentsList();\n setOpen(false);\n setDraftSpec(null);\n setEditor(null);\n } catch (caught) {\n setError(getErrorMessage(caught, 'Could not save agent'));\n } finally {\n setSaving(false);\n }\n };\n\n const toggleMcpPreload = (id: string) => {\n if (draftSpec === null) return;\n const next = mcpMounts.map(item =>\n item.id === id ? withPreload(item.value, Reflect.get(item.value, 'preload') !== true) : item.value,\n );\n setDraftSpec({ ...draftSpec, mcpServers: next });\n };\n\n const removeMcp = (id: string) => {\n if (draftSpec === null) return;\n setDraftSpec({\n ...draftSpec,\n mcpServers: mcpMounts.filter(item => item.id !== id).map(item => item.value),\n });\n };\n\n const isUpdateMode =\n shell?.mode.status === 'active' &&\n shell.mode.isMutable &&\n (shell.mode.agentName !== undefined || shell.mode.agentId !== undefined);\n const triggerLabel = isUpdateMode && children === 'Save Agent' ? 'Update Agent' : children;\n const getMcpTools = builder === null ? undefined : Reflect.get(builder, 'getMcpTools');\n const loadMcpTools =\n typeof getMcpTools === 'function'\n ? async (connectorId: string): Promise<McpToolSelection[]> => {\n const result: unknown = await getMcpTools.call(builder, { connectorId });\n return Array.isArray(result) ? result : [];\n }\n : undefined;\n\n if (!visible) return null;\n\n return (\n <>\n <Button.Primary\n type=\"button\"\n size=\"large\"\n disabled={disabled || builder === null || agentSpec === null}\n className={className}\n onClick={() => void show()}\n >\n <Icon name=\"save\" className=\"size-3.5\" />\n {triggerLabel}\n </Button.Primary>\n\n <CenteredModal\n open={open}\n onOpenChange={next => !next && close()}\n title={intent === 'create' ? 'Save agent' : 'Update agent'}\n className=\"md:h-auto md:max-h-[85dvh] md:max-w-2xl\"\n aria-label={intent === 'create' ? 'Save agent' : 'Update agent'}\n >\n {draftSpec ? (\n <SaveAgentForm\n intent={intent}\n name={name}\n spec={draftSpec}\n modelEntry={modelEntry}\n mcpMounts={mcpMounts}\n skillMounts={skillMounts}\n saving={saving}\n error={error}\n onNameChange={setName}\n onChange={setDraftSpec}\n onEdit={setEditor}\n onToggleMcpPreload={toggleMcpPreload}\n onRemoveMcp={removeMcp}\n onCancel={close}\n onSave={() => void save()}\n />\n ) : null}\n </CenteredModal>\n\n {draftSpec ? (\n <AgentConfigEditors\n editor={editor}\n spec={draftSpec}\n models={catalog.models}\n connectors={catalog.connectors}\n skills={catalog.skills}\n loading={catalog.loading}\n error={catalog.error}\n skillsDisabled={serverCapabilities?.skill.enabled !== true}\n sandboxAvailable={serverCapabilities?.sandbox.enabled === true}\n loadMcpTools={loadMcpTools}\n onRefreshConnectors={catalog.refreshConnectors}\n onChange={setDraftSpec}\n onClose={() => setEditor(null)}\n />\n ) : null}\n </>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n SaveAgentButton: typeof SaveAgentButton;\n }\n}\n","'use client';\n\nimport { useTrueFoundryAgentSpec, useTrueFoundryUpdateAgentSpec } from '@truefoundry/assistant-ui-runtime';\nimport { createContext, useCallback, useContext, useMemo, type ReactNode } from 'react';\n\nimport { useDebouncedAgentInstructions } from '../../hooks/useDebouncedAgentInstructions.js';\n\ntype AgentConfigInstructionsContextValue = {\n draft: string;\n onChange: (value: string) => void;\n flush: () => void;\n};\n\nconst AgentConfigInstructionsContext = createContext<AgentConfigInstructionsContextValue | null>(null);\n\nexport function AgentConfigInstructionsProvider({ children }: { children: ReactNode }) {\n const { agentSpec } = useTrueFoundryAgentSpec();\n const updateAgentSpec = useTrueFoundryUpdateAgentSpec();\n const commit = useCallback((instructions: string) => updateAgentSpec?.({ instructions }), [updateAgentSpec]);\n const { draft, onChange, flush } = useDebouncedAgentInstructions({\n value: agentSpec?.instructions ?? '',\n onCommit: commit,\n });\n const value = useMemo(() => ({ draft, onChange, flush }), [draft, flush, onChange]);\n\n return <AgentConfigInstructionsContext.Provider value={value}>{children}</AgentConfigInstructionsContext.Provider>;\n}\n\nexport function useAgentConfigInstructions(): AgentConfigInstructionsContextValue {\n const value = useContext(AgentConfigInstructionsContext);\n if (value === null) {\n throw new Error('useAgentConfigInstructions must be used within AgentConfigInstructionsProvider');\n }\n return value;\n}\n\nexport function useOptionalAgentConfigInstructions(): AgentConfigInstructionsContextValue | null {\n return useContext(AgentConfigInstructionsContext);\n}\n","'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nconst DEFAULT_INSTRUCTIONS_DEBOUNCE_MS = 400;\n\nexport function useDebouncedAgentInstructions({\n value,\n onCommit,\n delayMs = DEFAULT_INSTRUCTIONS_DEBOUNCE_MS,\n}: {\n value: string;\n onCommit: (value: string) => void;\n delayMs?: number;\n}) {\n const [draft, setDraft] = useState(value);\n const draftRef = useRef(value);\n const dirtyRef = useRef(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const onCommitRef = useRef(onCommit);\n onCommitRef.current = onCommit;\n\n const clearTimer = useCallback(() => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n }, []);\n\n const flush = useCallback(() => {\n clearTimer();\n if (!dirtyRef.current) return;\n dirtyRef.current = false;\n onCommitRef.current(draftRef.current);\n }, [clearTimer]);\n\n const onChange = useCallback(\n (nextValue: string) => {\n draftRef.current = nextValue;\n dirtyRef.current = true;\n setDraft(nextValue);\n clearTimer();\n timerRef.current = setTimeout(flush, delayMs);\n },\n [clearTimer, delayMs, flush],\n );\n\n useEffect(() => {\n if (dirtyRef.current) return;\n draftRef.current = value;\n setDraft(value);\n }, [value]);\n\n useEffect(\n () => () => {\n clearTimer();\n if (dirtyRef.current) {\n dirtyRef.current = false;\n onCommitRef.current(draftRef.current);\n }\n },\n [clearTimer],\n );\n\n return { draft, onChange, flush };\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\n\nimport type { AgentSpec, ModelSelection } from '../server/types.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport type { AgentConfigEditor } from './draft/AgentConfigEditors.js';\nimport type { EditableMount } from './draft/agentConfigMounts.js';\nimport { auiInputClass } from './lib/inputClasses.js';\nimport { Button } from './primitives/Button.js';\n\nexport type SaveAgentFormProps = {\n intent: 'create' | 'update';\n name: string;\n spec: AgentSpec;\n modelEntry?: ModelSelection;\n mcpMounts: EditableMount[];\n skillMounts: EditableMount[];\n saving: boolean;\n error: string | null;\n onNameChange: (name: string) => void;\n onChange: (spec: AgentSpec) => void;\n onEdit: (editor: AgentConfigEditor) => void;\n onToggleMcpPreload: (id: string) => void;\n onRemoveMcp?: (id: string) => void;\n onCancel: () => void;\n onSave: () => void;\n};\n\nexport function SaveAgentForm({\n intent,\n name,\n spec,\n modelEntry,\n mcpMounts,\n skillMounts,\n saving,\n error,\n onNameChange,\n onChange,\n onEdit,\n onToggleMcpPreload,\n onRemoveMcp,\n onCancel,\n onSave,\n}: SaveAgentFormProps) {\n const SaveAgentFormFields = useSlot('SaveAgentFormFields');\n const errorRef = useRef<HTMLParagraphElement>(null);\n\n useEffect(() => {\n if (error === null) return;\n // scrollIntoView is unimplemented in jsdom; guard so tests don't throw.\n errorRef.current?.scrollIntoView?.({ block: 'nearest', behavior: 'smooth' });\n }, [error]);\n\n return (\n <div className=\"flex min-h-0 w-full flex-1 flex-col\">\n <div className=\"min-h-0 flex-1 overflow-y-auto px-5 py-3\">\n <label className=\"mb-3 block\">\n <span className=\"mb-1.5 block text-sm font-medium\">Agent name</span>\n <input\n value={name}\n disabled={saving || intent === 'update'}\n onChange={event => onNameChange(event.target.value)}\n placeholder=\"release-notes\"\n className={auiInputClass('h-8 disabled:opacity-60')}\n />\n </label>\n\n <label className=\"mb-3 block\">\n <span className=\"mb-1.5 block text-sm font-medium\">Instructions</span>\n <textarea\n value={spec.instructions ?? ''}\n disabled={saving}\n onChange={event => onChange({ ...spec, instructions: event.target.value })}\n rows={5}\n placeholder=\"You are a release notes writer for a platform team.\"\n className={auiInputClass('resize-y py-2 disabled:opacity-60')}\n />\n </label>\n\n <SaveAgentFormFields\n spec={spec}\n modelEntry={modelEntry}\n mcpMounts={mcpMounts}\n skillMounts={skillMounts}\n disabled={saving}\n onEdit={onEdit}\n onToggleMcpPreload={onToggleMcpPreload}\n onRemoveMcp={onRemoveMcp}\n />\n\n {error ? (\n <p\n ref={errorRef}\n role=\"alert\"\n className=\"text-failure-bg mt-3 text-sm wrap-break-word whitespace-pre-wrap tab-4\"\n >\n {error}\n </p>\n ) : null}\n </div>\n\n <div className=\"bg-card-bg sticky bottom-0 z-10 flex shrink-0 justify-end gap-2 border-t border-border px-5 py-4\">\n <Button.Secondary type=\"button\" disabled={saving} onClick={onCancel}>\n Cancel\n </Button.Secondary>\n <Button.Primary type=\"button\" disabled={saving || !name.trim() || !spec.model.name.trim()} onClick={onSave}>\n {saving ? 'Saving…' : 'Save changes'}\n </Button.Primary>\n </div>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n SaveAgentForm: typeof SaveAgentForm;\n }\n}\n","'use client';\n\nimport { Icon } from '../icons/Icon.js';\nimport type { AgentSpec, ModelSelection } from '../server/types.js';\nimport type { AgentConfigEditor } from './draft/AgentConfigEditors.js';\nimport { enabledToolsFromMount, type EditableMount } from './draft/agentConfigMounts.js';\nimport { displayModelLabel, ProviderMark } from './draft/DraftModelCatalogPanel.js';\nimport { modelParamSummary } from './draft/modelParamsSummary.js';\nimport { runtimeConfigSummary, runtimeConfigValueClassName } from './draft/runtimeConfigSummary.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\nimport { Tooltip } from './primitives/Tooltip.js';\n\nexport type SaveAgentFormFieldsProps = {\n spec: AgentSpec;\n modelEntry?: ModelSelection;\n mcpMounts: EditableMount[];\n skillMounts: EditableMount[];\n disabled: boolean;\n onEdit: (editor: AgentConfigEditor) => void;\n onToggleMcpPreload: (id: string) => void;\n onRemoveMcp?: (id: string) => void;\n};\n\nconst PRELOAD_TOOLS_COPY = {\n header: 'Preload tools',\n on: 'Tool definitions load into context upfront. No discovery step, but uses more context.',\n off: 'The agent discovers tools on demand. Lighter context upfront, but a discovery step the first time it needs a tool.',\n} as const;\n\nfunction formatTokens(value: number): string {\n return Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 }).format(value);\n}\n\nexport function SaveAgentFormFields({\n spec,\n modelEntry,\n mcpMounts,\n skillMounts,\n disabled,\n onEdit,\n onToggleMcpPreload,\n onRemoveMcp,\n}: SaveAgentFormFieldsProps) {\n const contextLength = Reflect.get(modelEntry?.properties ?? {}, 'contextLength');\n const maxOutputTokens = Reflect.get(modelEntry?.properties ?? {}, 'maxOutputTokens');\n const modelParams = modelParamSummary(spec.model.params);\n const runtimeConfig = runtimeConfigSummary(spec.config);\n\n return (\n <>\n <div className=\"mb-3\">\n <div className=\"mb-1.5 flex items-center justify-between\">\n <span className=\"text-text-secondary text-xs font-semibold tracking-wide uppercase\">Model</span>\n <button\n type=\"button\"\n aria-label=\"Edit Model\"\n disabled={disabled}\n className={auiButtonClass({ variant: 'ghost', size: 'icon', className: 'size-7' })}\n onClick={() => onEdit('model')}\n >\n <Icon name=\"pencil\" className=\"size-3.5\" />\n </button>\n </div>\n {spec.model.name ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"border-border inline-flex items-center gap-2 rounded-lg border py-1 pr-2.5 pl-2\">\n <ProviderMark\n logo={modelEntry?.provider.logo}\n label={modelEntry?.provider.name ?? spec.model.name}\n className=\"size-4 text-[8px]\"\n />\n <span className=\"text-text-primary text-sm\">{displayModelLabel(spec.model.name)}</span>\n </span>\n {typeof contextLength === 'number' && contextLength ? (\n <span className=\"text-text-secondary text-xs\">{formatTokens(contextLength)} context</span>\n ) : null}\n {typeof maxOutputTokens === 'number' && maxOutputTokens ? (\n <span className=\"text-text-secondary text-xs\">{formatTokens(maxOutputTokens)} max output</span>\n ) : null}\n </div>\n ) : (\n <p className=\"text-text-secondary text-xs\">No model selected.</p>\n )}\n <div className=\"mt-2 flex items-center gap-2\">\n <dl className=\" text-text-secondary flex min-w-0 flex-1 flex-wrap gap-x-3 gap-y-1 text-xs\">\n {modelParams.length ? (\n modelParams.map(entry => (\n <div key={entry.label} className=\"flex gap-1\">\n <dt>{entry.label}:</dt>\n <dd className=\"text-text-primary font-medium\">{entry.value}</dd>\n </div>\n ))\n ) : (\n <div>model settings: defaults</div>\n )}\n </dl>\n <button\n type=\"button\"\n aria-label=\"Model settings\"\n title=\"Model settings\"\n disabled={disabled}\n className={auiButtonClass({ variant: 'ghost', size: 'icon', className: 'size-7 shrink-0' })}\n onClick={() => onEdit('model-settings')}\n >\n <Icon name=\"sliders\" className=\"size-3.5\" />\n </button>\n </div>\n </div>\n\n <div className=\"mb-3\">\n <div className=\"mb-1.5 flex items-center justify-between\">\n <span className=\"text-text-secondary text-xs font-semibold tracking-wide uppercase\">Runtime Config</span>\n <button\n type=\"button\"\n aria-label=\"Edit Runtime Config\"\n disabled={disabled}\n className={auiButtonClass({ variant: 'ghost', size: 'icon', className: 'size-7' })}\n onClick={() => onEdit('runtime')}\n >\n <Icon name=\"pencil\" className=\"size-3.5\" />\n </button>\n </div>\n <dl className=\"text-text-secondary flex flex-wrap gap-x-3 gap-y-1 text-xs\">\n {runtimeConfig.map(entry => (\n <div key={entry.label} className=\"flex gap-1\">\n <dt>{entry.label}:</dt>\n <dd className={runtimeConfigValueClassName(entry.value)}>{entry.value}</dd>\n </div>\n ))}\n </dl>\n </div>\n\n <div className=\"mb-3\">\n <div className=\"mb-1.5 flex items-center justify-between\">\n <span className=\"text-text-secondary text-xs font-semibold tracking-wide uppercase\">Connectors</span>\n <button\n type=\"button\"\n aria-label=\"Edit Connectors\"\n disabled={disabled}\n className={auiButtonClass({ variant: 'ghost', size: 'icon', className: 'size-7' })}\n onClick={() => onEdit('mcp')}\n >\n <Icon name=\"pencil\" className=\"size-3.5\" />\n </button>\n </div>\n {mcpMounts.length === 0 ? (\n <p className=\"text-text-secondary text-xs\">No connectors added.</p>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {mcpMounts.map(mount => {\n const preload = Reflect.get(mount.value, 'preload') === true;\n const enabledTools = enabledToolsFromMount(mount.value);\n const label = `${PRELOAD_TOOLS_COPY.header} · ${preload ? 'ON' : 'OFF'}`;\n return (\n <span\n key={mount.id}\n className=\"border-border flex items-center gap-2 rounded-lg border py-1 pr-2.5 pl-1.5\"\n >\n <Tooltip\n className=\"max-w-68 whitespace-normal\"\n content={\n <div className=\"text-left\">\n <p className=\"mb-1 text-[11px] font-semibold tracking-wide uppercase\">{label}</p>\n <p className=\"text-xs leading-snug\">\n {preload ? PRELOAD_TOOLS_COPY.on : PRELOAD_TOOLS_COPY.off}\n </p>\n </div>\n }\n >\n <button\n type=\"button\"\n aria-label={label}\n aria-pressed={preload}\n disabled={disabled}\n onClick={() => onToggleMcpPreload(mount.id)}\n className={cn(\n 'flex size-6 shrink-0 cursor-pointer items-center justify-center rounded-md border',\n 'transition-[color,background-color,border-color,transform] active:scale-90',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-ring/40',\n 'disabled:cursor-not-allowed disabled:opacity-50 disabled:active:scale-100',\n preload\n ? 'border-primary-button-bg/40 bg-primary-button-bg/10 text-primary-button-bg hover:border-primary-button-bg/70 hover:bg-primary-button-bg/20'\n : 'border-border text-text-secondary hover:border-text-secondary/50 hover:bg-text-secondary/10 hover:text-text-primary',\n )}\n >\n <Icon name=\"book-open\" className=\"size-3.5\" />\n </button>\n </Tooltip>\n <span className=\"text-text-primary text-sm\">{mount.name}</span>\n <span className=\"text-text-secondary text-xs\">\n {enabledTools === 'all' ? 'All tools' : `${enabledTools.length} tools`}\n </span>\n {onRemoveMcp ? (\n <button\n type=\"button\"\n aria-label={`Remove ${mount.name}`}\n disabled={disabled}\n className={auiButtonClass({ variant: 'ghost', size: 'icon', className: 'size-5' })}\n onClick={() => onRemoveMcp(mount.id)}\n >\n <Icon name=\"xmark\" className=\"size-3\" />\n </button>\n ) : null}\n </span>\n );\n })}\n </div>\n )}\n </div>\n\n <div className=\"mb-3\">\n <div className=\"mb-1.5 flex items-center justify-between\">\n <span className=\"text-text-secondary text-xs font-semibold tracking-wide uppercase\">Skills</span>\n <button\n type=\"button\"\n aria-label=\"Edit Skills\"\n disabled={disabled}\n className={auiButtonClass({ variant: 'ghost', size: 'icon', className: 'size-7' })}\n onClick={() => onEdit('skills')}\n >\n <Icon name=\"pencil\" className=\"size-3.5\" />\n </button>\n </div>\n {skillMounts.length === 0 ? (\n <p className=\"text-text-secondary text-xs\">No skills added.</p>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {skillMounts.map(mount => (\n <span\n key={mount.id}\n className=\"border-border flex items-center gap-2 rounded-lg border py-1 pr-2.5 pl-2.5\"\n >\n <span className=\"text-text-primary text-sm\">{mount.name}</span>\n </span>\n ))}\n </div>\n )}\n </div>\n </>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n SaveAgentFormFields: typeof SaveAgentFormFields;\n }\n}\n","'use client';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useOptionalScheduleServer } from '../server/ServerContext.js';\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\nimport { isSchedulesChromeEnabled } from '../server/serverChrome.js';\nimport { auiButtonClass, sidebarButtonRadiusClassName, sidebarRailButtonClassName } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\n\nexport type SchedulesButtonProps = {\n className?: string;\n compact?: boolean;\n};\n\nexport function SchedulesButton({ className, compact = false }: SchedulesButtonProps) {\n const shell = useOptionalShellMode();\n const scheduleServer = useOptionalScheduleServer();\n\n const enabled = isSchedulesChromeEnabled({ schedules: scheduleServer }) && shell != null;\n const open = shell?.schedulesOpen === true;\n\n if (!enabled) return null;\n\n return (\n <div className={cn('relative min-w-0', compact ? 'flex justify-center' : 'w-full', className)}>\n <button\n type=\"button\"\n aria-label={compact ? 'Schedules' : undefined}\n title={compact ? 'Schedules' : undefined}\n aria-current={open ? 'page' : undefined}\n className={auiButtonClass({\n variant: 'ghost',\n className: cn(\n sidebarButtonRadiusClassName,\n 'font-normal text-sidebar-text shadow-none hover:bg-secondary-button-hover hover:text-ghost-button-text',\n compact ? sidebarRailButtonClassName : 'h-8 w-full !justify-start px-2.5 text-sm',\n open &&\n 'bg-primary-button-bg font-medium text-primary-button-text hover:bg-primary-button-hover hover:text-primary-button-text',\n ),\n })}\n onClick={() => shell.setSchedulesOpen(!open)}\n >\n <Icon name=\"calendar-clock\" size={compact ? 14 : undefined} />\n {compact ? (\n <span className=\"text-center\">Schedules</span>\n ) : (\n <>\n <span className=\"truncate\">Schedules</span>\n <Icon name=\"chevron-right\" className=\"ml-auto size-3.5 shrink-0 opacity-60\" />\n </>\n )}\n </button>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n SchedulesButton: typeof SchedulesButton;\n }\n}\n","import { forwardRef, type ComponentProps } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\n\nexport type ScrollToBottomButtonProps = Omit<ComponentProps<'button'>, 'children' | 'aria-label'>;\n\nexport const ScrollToBottomButton = forwardRef<HTMLSpanElement, ScrollToBottomButtonProps>(\n ({ className, disabled, ...rest }, ref) => {\n if (disabled) return null;\n return (\n <span ref={ref} className={cn('absolute -top-14 z-10 inline-flex self-center')}>\n <button\n type=\"button\"\n aria-label=\"Scroll to bottom\"\n title=\"Scroll to bottom\"\n disabled={disabled}\n className={auiButtonClass({\n variant: 'ghost',\n size: 'icon',\n className: cn(\n 'aui-thread-scroll-to-bottom rounded-full border border-border bg-primary-bg text-text-primary shadow-sm hover:bg-ghost-button-hover hover:text-text-primary p-3',\n className,\n ),\n })}\n {...rest}\n >\n <Icon name=\"arrow-down\" />\n </button>\n </span>\n );\n },\n);\n\nScrollToBottomButton.displayName = 'ScrollToBottomButton';\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ScrollToBottomButton: typeof ScrollToBottomButton;\n }\n}\n","'use client';\n\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\n\n/** Empty main pane when AgentLibrary has no agent selected yet. */\nexport function SelectAgentEmptyState() {\n const shell = useOptionalShellMode();\n const AgentsLibraryButton = useSlot('AgentsLibraryButton');\n\n if (shell?.mode.status !== 'idle') return null;\n\n return (\n <div\n className=\"flex h-full min-h-0 w-full flex-col items-center justify-center gap-4 px-6\"\n data-slot=\"aui_select-agent-empty\"\n >\n <p className=\"text-text-secondary max-w-sm text-center text-sm\">Select an agent to start chatting</p>\n <AgentsLibraryButton className=\"w-56 max-w-full\" />\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n SelectAgentEmptyState: typeof SelectAgentEmptyState;\n }\n}\n","'use client';\n\nimport { useSessionShareSearch } from '../hooks/useSessionShareSearch.js';\nimport { Icon } from '../icons/Icon.js';\nimport { useOptionalAgentSessionsServer } from '../server/ServerContext.js';\nimport { useOptionalShellMode } from '../server/ShellModeContext.js';\nimport { isSessionsChromeEnabled } from '../server/serverChrome.js';\nimport { defaultSessionTimeRange, readSessionShareSearch } from '../utils/sessionShareUrl.js';\nimport { auiButtonClass, sidebarButtonRadiusClassName, sidebarRailButtonClassName } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\n\nexport type SessionsBrowserButtonProps = {\n className?: string;\n compact?: boolean;\n};\n\nexport function SessionsBrowserButton({ className, compact = false }: SessionsBrowserButtonProps) {\n const sessionsServer = useOptionalAgentSessionsServer();\n const shell = useOptionalShellMode();\n const { updateShareSearch } = useSessionShareSearch();\n const sessionsOpen = shell?.sessionsOpen === true;\n const enabled = isSessionsChromeEnabled({ sessions: sessionsServer }) && shell != null;\n\n if (!enabled) return null;\n\n return (\n <div className={cn('relative min-w-0', compact ? 'flex justify-center' : 'w-full', className)}>\n <button\n type=\"button\"\n aria-label={compact ? 'Sessions' : undefined}\n title={compact ? 'Sessions' : undefined}\n aria-current={sessionsOpen ? 'page' : undefined}\n className={auiButtonClass({\n variant: 'ghost',\n className: cn(\n sidebarButtonRadiusClassName,\n 'font-normal text-sidebar-text shadow-none hover:bg-secondary-button-hover hover:text-ghost-button-text',\n compact ? sidebarRailButtonClassName : 'h-8 w-full !justify-start px-2.5 text-sm',\n sessionsOpen &&\n 'bg-primary-button-bg font-medium text-primary-button-text hover:bg-primary-button-hover hover:text-primary-button-text',\n ),\n })}\n onClick={() => {\n if (!sessionsOpen) {\n const share = readSessionShareSearch(window.location.search);\n updateShareSearch({\n view: 'sessions',\n agentId: null,\n sessionId: null,\n timeRange: share.timeRange ?? defaultSessionTimeRange(),\n });\n }\n shell.setSessionsOpen(true);\n }}\n >\n <Icon name=\"message-square-text\" size={compact ? 14 : undefined} />\n {compact ? (\n <span className=\"text-center\">Sessions</span>\n ) : (\n <>\n <span className=\"truncate\">Sessions</span>\n <Icon name=\"chevron-right\" className=\"ml-auto size-3.5 shrink-0 opacity-60\" />\n </>\n )}\n </button>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n SessionsBrowserButton: typeof SessionsBrowserButton;\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\n/**\n * Optional host chrome (e.g. logout) to the right of theme + settings in {@link ShellActions}.\n * Default is empty; override via `overrides.ShellActionsActionSlot`.\n * Layouts keep {@link ShellActions} mounted while Settings is open so host state is not remounted.\n */\nexport function ShellActionsActionSlot(): ReactNode {\n return null;\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ShellActionsActionSlot: typeof ShellActionsActionSlot;\n }\n}\n","import { cn } from './lib/cn.js';\nimport { Skeleton } from './primitives/Skeleton.js';\n\nexport type MessageListSkeletonProps = {\n className?: string;\n};\n\nexport function MessageListSkeleton({ className }: MessageListSkeletonProps) {\n return (\n <div\n role=\"status\"\n aria-label=\"Loading conversation\"\n data-slot=\"aui_thread-history-skeleton\"\n className={cn('mb-14 flex flex-col gap-y-6', className)}\n >\n <div className=\"flex justify-end\">\n <Skeleton className=\"h-10 w-[min(85%,20rem)] rounded-xl\" />\n </div>\n <div className=\"flex flex-col gap-2 px-2\">\n <Skeleton className=\"h-4 w-full max-w-md\" />\n <Skeleton className=\"h-4 w-full max-w-sm\" />\n <Skeleton className=\"h-4 w-2/3 max-w-xs\" />\n </div>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n MessageListSkeleton: typeof MessageListSkeleton;\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { AgentStepRow, type AgentStepStatus } from './agent-chat/AgentStepRow.js';\nimport { cn } from './lib/cn.js';\nimport type { ToolCallStatus } from './ToolCallCard.js';\n\nexport type SubAgentCardProps = {\n agentName: string;\n instruction: string;\n stepCount: number;\n status: ToolCallStatus;\n expanded: boolean;\n onToggle: () => void;\n durationText?: string;\n children?: ReactNode;\n renderInstruction?: (instruction: string) => ReactNode;\n dataTestPrefix?: string;\n className?: string;\n};\n\nexport function SubAgentCard({\n agentName,\n instruction,\n stepCount: _stepCount,\n status,\n expanded,\n onToggle,\n durationText,\n children,\n renderInstruction,\n dataTestPrefix,\n className,\n}: SubAgentCardProps) {\n const Markdown = useSlot('Markdown');\n\n const agentStatus: AgentStepStatus = status === 'running' ? 'running' : status === 'success' ? 'success' : 'error';\n\n const instructionContent =\n instruction.trim().length > 0 ? (\n renderInstruction ? (\n renderInstruction(instruction)\n ) : (\n <Markdown content={instruction} className=\"flex flex-col font-sans text-sm text-text-secondary\" />\n )\n ) : null;\n\n return (\n <div\n className={cn('aui-sub-agent-card min-w-0', className)}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-sub-agent-card` : undefined}\n >\n <AgentStepRow\n icon=\"agent-2\"\n iconVariant=\"primary\"\n title={`Sub-agent: ${agentName}`}\n expandable\n expanded={expanded}\n onToggle={onToggle}\n status={agentStatus}\n statusText={durationText}\n dataTestPrefix={dataTestPrefix}\n >\n {instructionContent != null && (\n <div className=\"mb-3 flex flex-col gap-2 rounded-md border border-border p-2\">\n <h4 className=\"text-sm font-semibold text-text-primary\">Instructions</h4>\n <div\n className=\"text-sm text-text-secondary\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-instructions` : undefined}\n >\n {instructionContent}\n </div>\n </div>\n )}\n\n {children != null && (\n <div\n className=\"flex min-w-0 flex-col gap-3\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-nested-content` : undefined}\n >\n {children}\n </div>\n )}\n </AgentStepRow>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n SubAgentCard: typeof SubAgentCard;\n }\n}\n","'use client';\n\nimport {\n Children,\n cloneElement,\n isValidElement,\n memo,\n useCallback,\n useMemo,\n useState,\n type ComponentType,\n type ReactNode,\n} from 'react';\nimport { Prism as PrismHighlighter } from 'react-syntax-highlighter';\nimport { oneDark, oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useOptionalContentClassNames } from '../theme/ThemeProvider.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\n\nexport type SyntaxHighlighterProps = {\n code: string;\n language?: string;\n darkTheme?: boolean;\n className?: string;\n showLineNumbers?: boolean;\n};\n\n/** Drop a single trailing newline so line numbers do not paint an empty last row. */\nexport function stripTrailingNewline(code: string): string {\n return code.endsWith('\\n') ? code.slice(0, -1) : code;\n}\n\nfunction applyLineNumberClassName(children: ReactNode, className: string | undefined): ReactNode {\n if (!className) return children;\n\n return Children.map(children, child => {\n if (\n !isValidElement<{ className?: string }>(child) ||\n !child.props.className?.includes('react-syntax-highlighter-line-number')\n ) {\n return child;\n }\n\n return cloneElement(child, { className: cn(child.props.className, className) });\n });\n}\n\nfunction SyntaxHighlighterImpl({ code, language, darkTheme, className, showLineNumbers }: SyntaxHighlighterProps) {\n const classNames = useOptionalContentClassNames();\n const style = darkTheme ? oneDark : oneLight;\n const [copied, setCopied] = useState(false);\n const displayCode = useMemo(() => stripTrailingNewline(code), [code]);\n\n const handleCopy = useCallback(() => {\n void navigator.clipboard.writeText(code).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n });\n }, [code]);\n\n return (\n <div\n className={cn(\n 'aui-syntax-highlighter relative my-2 max-w-full min-w-0 overflow-x-auto rounded-md',\n classNames.syntaxHighlighter?.root,\n className,\n )}\n >\n <button\n type=\"button\"\n onClick={handleCopy}\n title={copied ? 'Copied!' : 'Copy'}\n aria-label={copied ? 'Copied!' : 'Copy'}\n className={auiButtonClass({\n variant: 'secondary',\n size: 'icon',\n className: 'absolute top-2 right-2 z-10 h-7 w-7',\n })}\n >\n <Icon name={copied ? 'check' : 'copy'} size=\"0.875em\" />\n </button>\n <PrismHighlighter\n language={language}\n style={style}\n customStyle={{ margin: 0, maxWidth: '100%', whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}\n wrapLongLines\n showLineNumbers={showLineNumbers}\n PreTag={({ children, className: preClass, ...rest }) => (\n <pre\n {...rest}\n className={cn(\n 'max-w-full overflow-x-auto whitespace-pre-wrap break-words',\n classNames.syntaxHighlighter?.pre,\n preClass,\n )}\n >\n {children}\n </pre>\n )}\n CodeTag={({ children, className: codeClass, ...rest }) => (\n <code\n {...rest}\n className={cn('whitespace-pre-wrap break-words', classNames.syntaxHighlighter?.code, codeClass)}\n >\n {applyLineNumberClassName(children, classNames.syntaxHighlighter?.lineNumber)}\n </code>\n )}\n >\n {displayCode}\n </PrismHighlighter>\n </div>\n );\n}\n\nexport const SyntaxHighlighter: ComponentType<SyntaxHighlighterProps> = memo(SyntaxHighlighterImpl);\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n SyntaxHighlighter: typeof SyntaxHighlighter;\n }\n}\n","export default {\n \"code[class*=\\\"language-\\\"]\": {\n \"background\": \"hsl(220, 13%, 18%)\",\n \"color\": \"hsl(220, 14%, 71%)\",\n \"textShadow\": \"0 1px rgba(0, 0, 0, 0.3)\",\n \"fontFamily\": \"\\\"Fira Code\\\", \\\"Fira Mono\\\", Menlo, Consolas, \\\"DejaVu Sans Mono\\\", monospace\",\n \"direction\": \"ltr\",\n \"textAlign\": \"left\",\n \"whiteSpace\": \"pre\",\n \"wordSpacing\": \"normal\",\n \"wordBreak\": \"normal\",\n \"lineHeight\": \"1.5\",\n \"MozTabSize\": \"2\",\n \"OTabSize\": \"2\",\n \"tabSize\": \"2\",\n \"WebkitHyphens\": \"none\",\n \"MozHyphens\": \"none\",\n \"msHyphens\": \"none\",\n \"hyphens\": \"none\"\n },\n \"pre[class*=\\\"language-\\\"]\": {\n \"background\": \"hsl(220, 13%, 18%)\",\n \"color\": \"hsl(220, 14%, 71%)\",\n \"textShadow\": \"0 1px rgba(0, 0, 0, 0.3)\",\n \"fontFamily\": \"\\\"Fira Code\\\", \\\"Fira Mono\\\", Menlo, Consolas, \\\"DejaVu Sans Mono\\\", monospace\",\n \"direction\": \"ltr\",\n \"textAlign\": \"left\",\n \"whiteSpace\": \"pre\",\n \"wordSpacing\": \"normal\",\n \"wordBreak\": \"normal\",\n \"lineHeight\": \"1.5\",\n \"MozTabSize\": \"2\",\n \"OTabSize\": \"2\",\n \"tabSize\": \"2\",\n \"WebkitHyphens\": \"none\",\n \"MozHyphens\": \"none\",\n \"msHyphens\": \"none\",\n \"hyphens\": \"none\",\n \"padding\": \"1em\",\n \"margin\": \"0.5em 0\",\n \"overflow\": \"auto\",\n \"borderRadius\": \"0.3em\"\n },\n \"code[class*=\\\"language-\\\"]::-moz-selection\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"inherit\",\n \"textShadow\": \"none\"\n },\n \"code[class*=\\\"language-\\\"] *::-moz-selection\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"inherit\",\n \"textShadow\": \"none\"\n },\n \"pre[class*=\\\"language-\\\"] *::-moz-selection\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"inherit\",\n \"textShadow\": \"none\"\n },\n \"code[class*=\\\"language-\\\"]::selection\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"inherit\",\n \"textShadow\": \"none\"\n },\n \"code[class*=\\\"language-\\\"] *::selection\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"inherit\",\n \"textShadow\": \"none\"\n },\n \"pre[class*=\\\"language-\\\"] *::selection\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"inherit\",\n \"textShadow\": \"none\"\n },\n \":not(pre) > code[class*=\\\"language-\\\"]\": {\n \"padding\": \"0.2em 0.3em\",\n \"borderRadius\": \"0.3em\",\n \"whiteSpace\": \"normal\"\n },\n \"comment\": {\n \"color\": \"hsl(220, 10%, 40%)\",\n \"fontStyle\": \"italic\"\n },\n \"prolog\": {\n \"color\": \"hsl(220, 10%, 40%)\"\n },\n \"cdata\": {\n \"color\": \"hsl(220, 10%, 40%)\"\n },\n \"doctype\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"punctuation\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"entity\": {\n \"color\": \"hsl(220, 14%, 71%)\",\n \"cursor\": \"help\"\n },\n \"attr-name\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \"class-name\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \"boolean\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \"constant\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \"number\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \"atrule\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \"keyword\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \"property\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \"tag\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \"symbol\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \"deleted\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \"important\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \"selector\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"string\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"char\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"builtin\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"inserted\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"regex\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"attr-value\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"attr-value > .token.punctuation\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \"variable\": {\n \"color\": \"hsl(207, 82%, 66%)\"\n },\n \"operator\": {\n \"color\": \"hsl(207, 82%, 66%)\"\n },\n \"function\": {\n \"color\": \"hsl(207, 82%, 66%)\"\n },\n \"url\": {\n \"color\": \"hsl(187, 47%, 55%)\"\n },\n \"attr-value > .token.punctuation.attr-equals\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"special-attr > .token.attr-value > .token.value.css\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \".language-css .token.selector\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \".language-css .token.property\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \".language-css .token.function\": {\n \"color\": \"hsl(187, 47%, 55%)\"\n },\n \".language-css .token.url > .token.function\": {\n \"color\": \"hsl(187, 47%, 55%)\"\n },\n \".language-css .token.url > .token.string.url\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \".language-css .token.important\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \".language-css .token.atrule .token.rule\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \".language-javascript .token.operator\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \".language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation\": {\n \"color\": \"hsl(5, 48%, 51%)\"\n },\n \".language-json .token.operator\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \".language-json .token.null.keyword\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \".language-markdown .token.url\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \".language-markdown .token.url > .token.operator\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \".language-markdown .token.url-reference.url > .token.string\": {\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \".language-markdown .token.url > .token.content\": {\n \"color\": \"hsl(207, 82%, 66%)\"\n },\n \".language-markdown .token.url > .token.url\": {\n \"color\": \"hsl(187, 47%, 55%)\"\n },\n \".language-markdown .token.url-reference.url\": {\n \"color\": \"hsl(187, 47%, 55%)\"\n },\n \".language-markdown .token.blockquote.punctuation\": {\n \"color\": \"hsl(220, 10%, 40%)\",\n \"fontStyle\": \"italic\"\n },\n \".language-markdown .token.hr.punctuation\": {\n \"color\": \"hsl(220, 10%, 40%)\",\n \"fontStyle\": \"italic\"\n },\n \".language-markdown .token.code-snippet\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \".language-markdown .token.bold .token.content\": {\n \"color\": \"hsl(29, 54%, 61%)\"\n },\n \".language-markdown .token.italic .token.content\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \".language-markdown .token.strike .token.content\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \".language-markdown .token.strike .token.punctuation\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \".language-markdown .token.list.punctuation\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \".language-markdown .token.title.important > .token.punctuation\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \"bold\": {\n \"fontWeight\": \"bold\"\n },\n \"italic\": {\n \"fontStyle\": \"italic\"\n },\n \"namespace\": {\n \"Opacity\": \"0.8\"\n },\n \"token.tab:not(:empty):before\": {\n \"color\": \"hsla(220, 14%, 71%, 0.15)\",\n \"textShadow\": \"none\"\n },\n \"token.cr:before\": {\n \"color\": \"hsla(220, 14%, 71%, 0.15)\",\n \"textShadow\": \"none\"\n },\n \"token.lf:before\": {\n \"color\": \"hsla(220, 14%, 71%, 0.15)\",\n \"textShadow\": \"none\"\n },\n \"token.space:before\": {\n \"color\": \"hsla(220, 14%, 71%, 0.15)\",\n \"textShadow\": \"none\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item\": {\n \"marginRight\": \"0.4em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button\": {\n \"background\": \"hsl(220, 13%, 26%)\",\n \"color\": \"hsl(220, 9%, 55%)\",\n \"padding\": \"0.1em 0.4em\",\n \"borderRadius\": \"0.3em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a\": {\n \"background\": \"hsl(220, 13%, 26%)\",\n \"color\": \"hsl(220, 9%, 55%)\",\n \"padding\": \"0.1em 0.4em\",\n \"borderRadius\": \"0.3em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span\": {\n \"background\": \"hsl(220, 13%, 26%)\",\n \"color\": \"hsl(220, 9%, 55%)\",\n \"padding\": \"0.1em 0.4em\",\n \"borderRadius\": \"0.3em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus\": {\n \"background\": \"hsl(220, 13%, 28%)\",\n \"color\": \"hsl(220, 14%, 71%)\"\n },\n \".line-highlight.line-highlight\": {\n \"background\": \"hsla(220, 100%, 80%, 0.04)\"\n },\n \".line-highlight.line-highlight:before\": {\n \"background\": \"hsl(220, 13%, 26%)\",\n \"color\": \"hsl(220, 14%, 71%)\",\n \"padding\": \"0.1em 0.6em\",\n \"borderRadius\": \"0.3em\",\n \"boxShadow\": \"0 2px 0 0 rgba(0, 0, 0, 0.2)\"\n },\n \".line-highlight.line-highlight[data-end]:after\": {\n \"background\": \"hsl(220, 13%, 26%)\",\n \"color\": \"hsl(220, 14%, 71%)\",\n \"padding\": \"0.1em 0.6em\",\n \"borderRadius\": \"0.3em\",\n \"boxShadow\": \"0 2px 0 0 rgba(0, 0, 0, 0.2)\"\n },\n \"pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before\": {\n \"backgroundColor\": \"hsla(220, 100%, 80%, 0.04)\"\n },\n \".line-numbers.line-numbers .line-numbers-rows\": {\n \"borderRightColor\": \"hsla(220, 14%, 71%, 0.15)\"\n },\n \".command-line .command-line-prompt\": {\n \"borderRightColor\": \"hsla(220, 14%, 71%, 0.15)\"\n },\n \".line-numbers .line-numbers-rows > span:before\": {\n \"color\": \"hsl(220, 14%, 45%)\"\n },\n \".command-line .command-line-prompt > span:before\": {\n \"color\": \"hsl(220, 14%, 45%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-1\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-5\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-9\": {\n \"color\": \"hsl(355, 65%, 65%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-2\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-6\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-10\": {\n \"color\": \"hsl(95, 38%, 62%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-3\": {\n \"color\": \"hsl(207, 82%, 66%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-7\": {\n \"color\": \"hsl(207, 82%, 66%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-11\": {\n \"color\": \"hsl(207, 82%, 66%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-4\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-8\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-12\": {\n \"color\": \"hsl(286, 60%, 67%)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(353, 100%, 66%, 0.15)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(353, 100%, 66%, 0.15)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(137, 100%, 55%, 0.15)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(137, 100%, 55%, 0.15)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \".prism-previewer.prism-previewer:before\": {\n \"borderColor\": \"hsl(224, 13%, 17%)\"\n },\n \".prism-previewer-gradient.prism-previewer-gradient div\": {\n \"borderColor\": \"hsl(224, 13%, 17%)\",\n \"borderRadius\": \"0.3em\"\n },\n \".prism-previewer-color.prism-previewer-color:before\": {\n \"borderRadius\": \"0.3em\"\n },\n \".prism-previewer-easing.prism-previewer-easing:before\": {\n \"borderRadius\": \"0.3em\"\n },\n \".prism-previewer.prism-previewer:after\": {\n \"borderTopColor\": \"hsl(224, 13%, 17%)\"\n },\n \".prism-previewer-flipped.prism-previewer-flipped.after\": {\n \"borderBottomColor\": \"hsl(224, 13%, 17%)\"\n },\n \".prism-previewer-angle.prism-previewer-angle:before\": {\n \"background\": \"hsl(219, 13%, 22%)\"\n },\n \".prism-previewer-time.prism-previewer-time:before\": {\n \"background\": \"hsl(219, 13%, 22%)\"\n },\n \".prism-previewer-easing.prism-previewer-easing\": {\n \"background\": \"hsl(219, 13%, 22%)\"\n },\n \".prism-previewer-angle.prism-previewer-angle circle\": {\n \"stroke\": \"hsl(220, 14%, 71%)\",\n \"strokeOpacity\": \"1\"\n },\n \".prism-previewer-time.prism-previewer-time circle\": {\n \"stroke\": \"hsl(220, 14%, 71%)\",\n \"strokeOpacity\": \"1\"\n },\n \".prism-previewer-easing.prism-previewer-easing circle\": {\n \"stroke\": \"hsl(220, 14%, 71%)\",\n \"fill\": \"transparent\"\n },\n \".prism-previewer-easing.prism-previewer-easing path\": {\n \"stroke\": \"hsl(220, 14%, 71%)\"\n },\n \".prism-previewer-easing.prism-previewer-easing line\": {\n \"stroke\": \"hsl(220, 14%, 71%)\"\n }\n};","export default {\n \"code[class*=\\\"language-\\\"]\": {\n \"background\": \"hsl(230, 1%, 98%)\",\n \"color\": \"hsl(230, 8%, 24%)\",\n \"fontFamily\": \"\\\"Fira Code\\\", \\\"Fira Mono\\\", Menlo, Consolas, \\\"DejaVu Sans Mono\\\", monospace\",\n \"direction\": \"ltr\",\n \"textAlign\": \"left\",\n \"whiteSpace\": \"pre\",\n \"wordSpacing\": \"normal\",\n \"wordBreak\": \"normal\",\n \"lineHeight\": \"1.5\",\n \"MozTabSize\": \"2\",\n \"OTabSize\": \"2\",\n \"tabSize\": \"2\",\n \"WebkitHyphens\": \"none\",\n \"MozHyphens\": \"none\",\n \"msHyphens\": \"none\",\n \"hyphens\": \"none\"\n },\n \"pre[class*=\\\"language-\\\"]\": {\n \"background\": \"hsl(230, 1%, 98%)\",\n \"color\": \"hsl(230, 8%, 24%)\",\n \"fontFamily\": \"\\\"Fira Code\\\", \\\"Fira Mono\\\", Menlo, Consolas, \\\"DejaVu Sans Mono\\\", monospace\",\n \"direction\": \"ltr\",\n \"textAlign\": \"left\",\n \"whiteSpace\": \"pre\",\n \"wordSpacing\": \"normal\",\n \"wordBreak\": \"normal\",\n \"lineHeight\": \"1.5\",\n \"MozTabSize\": \"2\",\n \"OTabSize\": \"2\",\n \"tabSize\": \"2\",\n \"WebkitHyphens\": \"none\",\n \"MozHyphens\": \"none\",\n \"msHyphens\": \"none\",\n \"hyphens\": \"none\",\n \"padding\": \"1em\",\n \"margin\": \"0.5em 0\",\n \"overflow\": \"auto\",\n \"borderRadius\": \"0.3em\"\n },\n \"code[class*=\\\"language-\\\"]::-moz-selection\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"inherit\"\n },\n \"code[class*=\\\"language-\\\"] *::-moz-selection\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"inherit\"\n },\n \"pre[class*=\\\"language-\\\"] *::-moz-selection\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"inherit\"\n },\n \"code[class*=\\\"language-\\\"]::selection\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"inherit\"\n },\n \"code[class*=\\\"language-\\\"] *::selection\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"inherit\"\n },\n \"pre[class*=\\\"language-\\\"] *::selection\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"inherit\"\n },\n \":not(pre) > code[class*=\\\"language-\\\"]\": {\n \"padding\": \"0.2em 0.3em\",\n \"borderRadius\": \"0.3em\",\n \"whiteSpace\": \"normal\"\n },\n \"comment\": {\n \"color\": \"hsl(230, 4%, 64%)\",\n \"fontStyle\": \"italic\"\n },\n \"prolog\": {\n \"color\": \"hsl(230, 4%, 64%)\"\n },\n \"cdata\": {\n \"color\": \"hsl(230, 4%, 64%)\"\n },\n \"doctype\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"punctuation\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"entity\": {\n \"color\": \"hsl(230, 8%, 24%)\",\n \"cursor\": \"help\"\n },\n \"attr-name\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \"class-name\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \"boolean\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \"constant\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \"number\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \"atrule\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \"keyword\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \"property\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \"tag\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \"symbol\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \"deleted\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \"important\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \"selector\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"string\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"char\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"builtin\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"inserted\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"regex\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"attr-value\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"attr-value > .token.punctuation\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \"variable\": {\n \"color\": \"hsl(221, 87%, 60%)\"\n },\n \"operator\": {\n \"color\": \"hsl(221, 87%, 60%)\"\n },\n \"function\": {\n \"color\": \"hsl(221, 87%, 60%)\"\n },\n \"url\": {\n \"color\": \"hsl(198, 99%, 37%)\"\n },\n \"attr-value > .token.punctuation.attr-equals\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"special-attr > .token.attr-value > .token.value.css\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \".language-css .token.selector\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \".language-css .token.property\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \".language-css .token.function\": {\n \"color\": \"hsl(198, 99%, 37%)\"\n },\n \".language-css .token.url > .token.function\": {\n \"color\": \"hsl(198, 99%, 37%)\"\n },\n \".language-css .token.url > .token.string.url\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \".language-css .token.important\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \".language-css .token.atrule .token.rule\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \".language-javascript .token.operator\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \".language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation\": {\n \"color\": \"hsl(344, 84%, 43%)\"\n },\n \".language-json .token.operator\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \".language-json .token.null.keyword\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \".language-markdown .token.url\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \".language-markdown .token.url > .token.operator\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \".language-markdown .token.url-reference.url > .token.string\": {\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \".language-markdown .token.url > .token.content\": {\n \"color\": \"hsl(221, 87%, 60%)\"\n },\n \".language-markdown .token.url > .token.url\": {\n \"color\": \"hsl(198, 99%, 37%)\"\n },\n \".language-markdown .token.url-reference.url\": {\n \"color\": \"hsl(198, 99%, 37%)\"\n },\n \".language-markdown .token.blockquote.punctuation\": {\n \"color\": \"hsl(230, 4%, 64%)\",\n \"fontStyle\": \"italic\"\n },\n \".language-markdown .token.hr.punctuation\": {\n \"color\": \"hsl(230, 4%, 64%)\",\n \"fontStyle\": \"italic\"\n },\n \".language-markdown .token.code-snippet\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \".language-markdown .token.bold .token.content\": {\n \"color\": \"hsl(35, 99%, 36%)\"\n },\n \".language-markdown .token.italic .token.content\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \".language-markdown .token.strike .token.content\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \".language-markdown .token.strike .token.punctuation\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \".language-markdown .token.list.punctuation\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \".language-markdown .token.title.important > .token.punctuation\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \"bold\": {\n \"fontWeight\": \"bold\"\n },\n \"italic\": {\n \"fontStyle\": \"italic\"\n },\n \"namespace\": {\n \"Opacity\": \"0.8\"\n },\n \"token.tab:not(:empty):before\": {\n \"color\": \"hsla(230, 8%, 24%, 0.2)\"\n },\n \"token.cr:before\": {\n \"color\": \"hsla(230, 8%, 24%, 0.2)\"\n },\n \"token.lf:before\": {\n \"color\": \"hsla(230, 8%, 24%, 0.2)\"\n },\n \"token.space:before\": {\n \"color\": \"hsla(230, 8%, 24%, 0.2)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item\": {\n \"marginRight\": \"0.4em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"hsl(230, 6%, 44%)\",\n \"padding\": \"0.1em 0.4em\",\n \"borderRadius\": \"0.3em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"hsl(230, 6%, 44%)\",\n \"padding\": \"0.1em 0.4em\",\n \"borderRadius\": \"0.3em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"hsl(230, 6%, 44%)\",\n \"padding\": \"0.1em 0.4em\",\n \"borderRadius\": \"0.3em\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover\": {\n \"background\": \"hsl(230, 1%, 78%)\",\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus\": {\n \"background\": \"hsl(230, 1%, 78%)\",\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover\": {\n \"background\": \"hsl(230, 1%, 78%)\",\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus\": {\n \"background\": \"hsl(230, 1%, 78%)\",\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover\": {\n \"background\": \"hsl(230, 1%, 78%)\",\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus\": {\n \"background\": \"hsl(230, 1%, 78%)\",\n \"color\": \"hsl(230, 8%, 24%)\"\n },\n \".line-highlight.line-highlight\": {\n \"background\": \"hsla(230, 8%, 24%, 0.05)\"\n },\n \".line-highlight.line-highlight:before\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"hsl(230, 8%, 24%)\",\n \"padding\": \"0.1em 0.6em\",\n \"borderRadius\": \"0.3em\",\n \"boxShadow\": \"0 2px 0 0 rgba(0, 0, 0, 0.2)\"\n },\n \".line-highlight.line-highlight[data-end]:after\": {\n \"background\": \"hsl(230, 1%, 90%)\",\n \"color\": \"hsl(230, 8%, 24%)\",\n \"padding\": \"0.1em 0.6em\",\n \"borderRadius\": \"0.3em\",\n \"boxShadow\": \"0 2px 0 0 rgba(0, 0, 0, 0.2)\"\n },\n \"pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before\": {\n \"backgroundColor\": \"hsla(230, 8%, 24%, 0.05)\"\n },\n \".line-numbers.line-numbers .line-numbers-rows\": {\n \"borderRightColor\": \"hsla(230, 8%, 24%, 0.2)\"\n },\n \".command-line .command-line-prompt\": {\n \"borderRightColor\": \"hsla(230, 8%, 24%, 0.2)\"\n },\n \".line-numbers .line-numbers-rows > span:before\": {\n \"color\": \"hsl(230, 1%, 62%)\"\n },\n \".command-line .command-line-prompt > span:before\": {\n \"color\": \"hsl(230, 1%, 62%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-1\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-5\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-9\": {\n \"color\": \"hsl(5, 74%, 59%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-2\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-6\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-10\": {\n \"color\": \"hsl(119, 34%, 47%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-3\": {\n \"color\": \"hsl(221, 87%, 60%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-7\": {\n \"color\": \"hsl(221, 87%, 60%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-11\": {\n \"color\": \"hsl(221, 87%, 60%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-4\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-8\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \".rainbow-braces .token.token.punctuation.brace-level-12\": {\n \"color\": \"hsl(301, 63%, 40%)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(353, 100%, 66%, 0.15)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(353, 100%, 66%, 0.15)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(353, 95%, 66%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(137, 100%, 55%, 0.15)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix)\": {\n \"backgroundColor\": \"hsla(137, 100%, 55%, 0.15)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection\": {\n \"backgroundColor\": \"hsla(135, 73%, 55%, 0.25)\"\n },\n \".prism-previewer.prism-previewer:before\": {\n \"borderColor\": \"hsl(0, 0, 95%)\"\n },\n \".prism-previewer-gradient.prism-previewer-gradient div\": {\n \"borderColor\": \"hsl(0, 0, 95%)\",\n \"borderRadius\": \"0.3em\"\n },\n \".prism-previewer-color.prism-previewer-color:before\": {\n \"borderRadius\": \"0.3em\"\n },\n \".prism-previewer-easing.prism-previewer-easing:before\": {\n \"borderRadius\": \"0.3em\"\n },\n \".prism-previewer.prism-previewer:after\": {\n \"borderTopColor\": \"hsl(0, 0, 95%)\"\n },\n \".prism-previewer-flipped.prism-previewer-flipped.after\": {\n \"borderBottomColor\": \"hsl(0, 0, 95%)\"\n },\n \".prism-previewer-angle.prism-previewer-angle:before\": {\n \"background\": \"hsl(0, 0%, 100%)\"\n },\n \".prism-previewer-time.prism-previewer-time:before\": {\n \"background\": \"hsl(0, 0%, 100%)\"\n },\n \".prism-previewer-easing.prism-previewer-easing\": {\n \"background\": \"hsl(0, 0%, 100%)\"\n },\n \".prism-previewer-angle.prism-previewer-angle circle\": {\n \"stroke\": \"hsl(230, 8%, 24%)\",\n \"strokeOpacity\": \"1\"\n },\n \".prism-previewer-time.prism-previewer-time circle\": {\n \"stroke\": \"hsl(230, 8%, 24%)\",\n \"strokeOpacity\": \"1\"\n },\n \".prism-previewer-easing.prism-previewer-easing circle\": {\n \"stroke\": \"hsl(230, 8%, 24%)\",\n \"fill\": \"transparent\"\n },\n \".prism-previewer-easing.prism-previewer-easing path\": {\n \"stroke\": \"hsl(230, 8%, 24%)\"\n },\n \".prism-previewer-easing.prism-previewer-easing line\": {\n \"stroke\": \"hsl(230, 8%, 24%)\"\n }\n};","import type { ComponentProps, ReactNode } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\nimport { Skeleton } from './primitives/Skeleton.js';\n\nexport type ThreadListNewButtonProps = ComponentProps<'button'>;\n\nexport function ThreadListNewButton({ className, children, style, ...rest }: ThreadListNewButtonProps) {\n return (\n <button\n type=\"button\"\n aria-label=\"Start new chat\"\n style={{ borderRadius: 'var(--thread-list-item-radius, 0.75rem)', ...style }}\n className={auiButtonClass({\n variant: 'ghost',\n className: cn(\n '!justify-start h-8 px-2.5 text-sm font-normal text-sidebar-text shadow-none hover:bg-secondary-button-hover hover:text-ghost-button-text',\n className,\n ),\n })}\n {...rest}\n >\n {children ?? (\n <>\n <Icon name=\"square-pen\" />\n New Chat\n </>\n )}\n </button>\n );\n}\n\nexport type ThreadListRowSkeletonProps = {\n count?: number;\n className?: string;\n};\n\nexport function ThreadListRowSkeleton({ count = 5, className }: ThreadListRowSkeletonProps) {\n return (\n <div className={cn('flex flex-col gap-1', className)} role=\"status\" aria-label=\"Loading threads\">\n {Array.from({ length: count }, (_, i) => (\n <div key={i} className=\"flex h-8 items-center px-2.5\">\n <Skeleton className=\"h-3.5 w-full\" />\n </div>\n ))}\n </div>\n );\n}\n\nexport type ThreadListEmptyStateProps = {\n message?: string;\n className?: string;\n};\n\nexport function ThreadListEmptyState({ message = 'No threads yet', className }: ThreadListEmptyStateProps) {\n return (\n <div\n className={cn('text-text-secondary flex flex-1 items-center justify-center px-4 text-center text-sm', className)}\n >\n {message}\n </div>\n );\n}\n\nexport type ThreadListShellProps = {\n header: ReactNode;\n children: ReactNode;\n className?: string;\n};\n\nexport function ThreadListShell({ header, children, className }: ThreadListShellProps) {\n return (\n <div className={cn('font-sans-flex flex h-full min-h-0 flex-1 flex-col overflow-hidden', className)}>\n <div className=\"shrink-0 border-b border-border px-2 py-2\">{header}</div>\n {/* History section owns overflow scroll so infinite-load IO can root on it. */}\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden p-2\">{children}</div>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ThreadListNewButton: typeof ThreadListNewButton;\n ThreadListRowSkeleton: typeof ThreadListRowSkeleton;\n ThreadListEmptyState: typeof ThreadListEmptyState;\n ThreadListShell: typeof ThreadListShell;\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\nimport { formatRelativeShort } from './lib/threadListMeta.js';\n\nexport type ThreadListRowProps = {\n title: string;\n active: boolean;\n onSelect: () => void;\n /** Named-agent label under the title (from session.agentName). */\n agentName?: string;\n /** Shown as compact relative time on the right. */\n lastMessageAt?: Date;\n /** Overflow actions (e.g. delete menu) — rendered as a sibling of the title button. */\n actions?: ReactNode;\n className?: string;\n};\n\nexport function ThreadListRow({\n title,\n active,\n onSelect,\n agentName,\n lastMessageAt,\n actions,\n className,\n}: ThreadListRowProps) {\n const relative = lastMessageAt != null ? formatRelativeShort(lastMessageAt) : undefined;\n const hasTrailing = relative != null || actions != null;\n\n return (\n <div\n data-slot=\"aui_thread-list-item\"\n data-active={active || undefined}\n className={cn(\n 'group flex min-w-0 items-center gap-0.5 rounded-[0.75rem] transition-colors',\n active\n ? 'bg-dropdown-selected-item-bg text-dropdown-selected-item-text'\n : 'text-text-secondary hover:bg-ghost-button-hover hover:text-text-primary',\n className,\n )}\n >\n <button\n type=\"button\"\n onClick={onSelect}\n style={{ borderRadius: 'var(--thread-list-item-radius, 0.75rem)' }}\n className={auiButtonClass({\n variant: 'ghost',\n className: cn(\n '!justify-start h-auto min-h-8 min-w-0 flex-1 overflow-hidden rounded-[0.75rem] px-2.5 py-1.5 text-left font-normal shadow-none',\n 'bg-transparent hover:bg-transparent hover:text-inherit',\n active ? 'text-dropdown-selected-item-text' : 'text-inherit',\n ),\n })}\n >\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-medium text-text-primary\">{title}</span>\n {agentName != null ? (\n <span className=\"mt-0.5 flex min-w-0 items-center gap-1 text-xs text-text-secondary\">\n <Icon name=\"agent-2\" className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{agentName}</span>\n </span>\n ) : null}\n </span>\n </button>\n {hasTrailing ? (\n <div className=\"relative mr-1 flex size-7 shrink-0 items-center justify-center\">\n {relative != null ? (\n <span\n data-slot=\"aui_thread-list-item-age\"\n className={cn(\n 'pointer-events-none text-xs text-text-secondary transition-opacity',\n // md: variants survive host Tailwind tree-shaking (same set as AgentsLibrary).\n // Bare group-hover:opacity-* is dropped from the example CSS bundle.\n actions != null &&\n 'opacity-0 md:opacity-100 md:group-hover:opacity-0 md:group-focus-within:opacity-0 md:group-has-[[data-state=open]]:opacity-0',\n )}\n >\n {relative}\n </span>\n ) : null}\n {actions != null ? (\n <div\n data-slot=\"aui_thread-list-item-actions\"\n className={cn(\n 'absolute inset-0 flex items-center justify-center transition-opacity',\n relative != null &&\n 'md:opacity-0 md:group-hover:opacity-100 md:group-focus-within:opacity-100 md:group-has-[[data-state=open]]:opacity-100',\n )}\n >\n {actions}\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ThreadListRow: typeof ThreadListRow;\n }\n}\n","import { forwardRef, type ComponentPropsWithRef, type CSSProperties } from 'react';\n\nimport { cn } from './lib/cn.js';\n\nconst THREAD_CSS_VARS: CSSProperties = {\n ['--thread-max-width' as string]: '44rem',\n ['--composer-padding' as string]: '8px',\n};\n\nexport type ThreadRootShellProps = ComponentPropsWithRef<'div'>;\n\nexport const ThreadRootShell = forwardRef<HTMLDivElement, ThreadRootShellProps>(\n ({ className, style, ...rest }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'font-sans-flex aui-root aui-thread-root bg-primary-bg @container flex h-full min-h-0 w-full min-w-0 flex-col overflow-hidden',\n className,\n )}\n style={{ ...THREAD_CSS_VARS, ...style }}\n {...rest}\n />\n ),\n);\nThreadRootShell.displayName = 'ThreadRootShell';\n\nexport type ThreadViewportShellProps = ComponentPropsWithRef<'div'> & {\n isEmpty?: boolean;\n};\n\nexport const ThreadViewportShell = forwardRef<HTMLDivElement, ThreadViewportShellProps>(\n ({ className, isEmpty, children, ...rest }, ref) => (\n <div\n ref={ref}\n data-slot=\"aui_thread-viewport\"\n className={cn(\n 'relative flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto overscroll-contain',\n className,\n )}\n {...rest}\n >\n <div\n className={cn(\n 'mx-auto flex w-full min-w-0 max-w-(--thread-max-width) flex-col px-3 pt-3 sm:px-4 sm:pt-4',\n isEmpty ? 'min-h-full justify-center pb-4' : 'pb-32',\n )}\n >\n {children}\n </div>\n </div>\n ),\n);\nThreadViewportShell.displayName = 'ThreadViewportShell';\n\nexport type ThreadComposerAreaShellProps = ComponentPropsWithRef<'div'> & {\n isEmpty?: boolean;\n};\n\nexport const ThreadComposerAreaShell = forwardRef<HTMLDivElement, ThreadComposerAreaShellProps>(\n ({ className, isEmpty, ...rest }, ref) => (\n <div\n ref={ref}\n data-slot=\"aui_thread-composer\"\n className={cn(\n 'aui-thread-composer bg-primary-bg relative mx-auto flex w-full min-w-0 max-w-(--thread-max-width) shrink-0 flex-col gap-3 px-3 pb-[max(1rem,env(safe-area-inset-bottom,0px))] sm:gap-4 sm:px-4 md:pb-[max(1.5rem,env(safe-area-inset-bottom,0px))]',\n !isEmpty && 'rounded-t-(--composer-radius)',\n className,\n )}\n {...rest}\n />\n ),\n);\nThreadComposerAreaShell.displayName = 'ThreadComposerAreaShell';\n\nexport type MessageGroupProps = ComponentPropsWithRef<'div'>;\n\nexport const MessageGroup = forwardRef<HTMLDivElement, MessageGroupProps>(({ className, ...rest }, ref) => (\n <div\n ref={ref}\n data-slot=\"aui_message-group\"\n className={cn('flex flex-col gap-y-4 empty:hidden', className)}\n {...rest}\n />\n));\nMessageGroup.displayName = 'MessageGroup';\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ThreadRootShell: typeof ThreadRootShell;\n ThreadViewportShell: typeof ThreadViewportShell;\n ThreadComposerAreaShell: typeof ThreadComposerAreaShell;\n MessageGroup: typeof MessageGroup;\n }\n}\n","'use client';\n\nimport { useCallback, useState, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { Icon } from '../icons/Icon.js';\nimport { auiButtonClass } from './lib/buttonClasses.js';\nimport { cn } from './lib/cn.js';\n\nexport type ToastProps = {\n title: string;\n description: string;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n variant?: 'error' | 'success';\n className?: string;\n};\n\nexport function Toast({ title, description, open, onOpenChange, variant = 'error', className }: ToastProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(async () => {\n const text = `${title}\\n${description}`;\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n } catch {\n // clipboard can fail in insecure contexts; toast still usable\n }\n }, [title, description]);\n\n if (!open) return null;\n\n return (\n <div\n role=\"alert\"\n className={cn(\n 'font-sans-flex bg-primary-bg text-text-primary pointer-events-auto flex w-full items-start gap-3 rounded-xl border border-border px-4 py-4 shadow-md dark:bg-card-bg',\n 'animate-in fade-in-0 slide-in-from-bottom-4',\n className,\n )}\n >\n <Icon\n name={variant === 'success' ? 'circle-check' : 'circle-exclamation'}\n size=\"1.25em\"\n className={cn('shrink-0', variant === 'success' ? 'text-success-bg' : 'text-failure-bg')}\n />\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-start justify-between gap-2\">\n <div\n className={cn(\n 'text-sm leading-none font-semibold',\n variant === 'success' ? 'text-success-bg' : 'text-failure-bg',\n )}\n >\n {title}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {variant === 'error' ? (\n <button\n type=\"button\"\n aria-label=\"Copy\"\n title=\"Copy\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={handleCopy}\n >\n <Icon name={copied ? 'check' : 'clone'} />\n </button>\n ) : null}\n <button\n type=\"button\"\n aria-label=\"Close\"\n title=\"Close\"\n className={auiButtonClass({ variant: 'ghost', size: 'icon' })}\n onClick={() => onOpenChange(false)}\n >\n <Icon name=\"xmark\" />\n </button>\n </div>\n </div>\n {description ? (\n <div className=\"text-text-secondary mt-1 max-h-24 overflow-y-auto text-sm leading-snug break-words whitespace-pre-wrap\">\n {description}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport type ToastStackProps = {\n children: ReactNode;\n duration?: number;\n};\n\nconst openToastStack = (element: HTMLDivElement | null): void => {\n if (element === null) return;\n try {\n if (typeof element.showPopover !== 'function') return;\n if (element.matches(':popover-open')) element.hidePopover();\n element.showPopover();\n } catch {\n // Popover APIs can reject during attachment; the fixed stack remains usable.\n }\n};\n\nexport function ToastStack({ children, duration: _duration = Number.POSITIVE_INFINITY }: ToastStackProps) {\n const stack = (\n <div\n ref={openToastStack}\n popover=\"manual\"\n className=\"pointer-events-none fixed inset-auto right-4 bottom-4 z-50 m-0 flex w-[calc(100vw-2rem)] max-w-md flex-col-reverse gap-2 overflow-visible bg-transparent\"\n >\n {children}\n </div>\n );\n\n if (typeof document === 'undefined') return stack;\n const dialogs = document.querySelectorAll<HTMLDialogElement>('dialog[open]');\n const activeDialog = dialogs.item(dialogs.length - 1);\n return activeDialog === null ? stack : createPortal(stack, activeDialog);\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n Toast: typeof Toast;\n ToastStack: typeof ToastStack;\n }\n}\n","'use client';\n\nimport { Icon } from '../icons/Icon.js';\nimport { StepIconBox } from './agent-chat/StepIconBox.js';\nimport { cn } from './lib/cn.js';\nimport { Button } from './primitives/Button.js';\n\nexport type ApprovalOption = {\n id: string;\n label: string;\n variant?: 'primary' | 'secondary' | 'destructive';\n requiresReason?: boolean;\n grants?: readonly string[];\n confirm?: {\n title?: string;\n description?: string;\n };\n};\n\nexport type ToolApprovalBarProps = {\n toolName: string;\n approveOptions?: ApprovalOption[];\n denyOptions?: ApprovalOption[];\n onSelect: (optionId: string, reason?: string) => void;\n status?: {\n type: 'approved' | 'denied';\n label?: string;\n reason?: string;\n };\n selectedDenyOption?: ApprovalOption;\n denialReason?: string;\n showReasonError?: boolean;\n onDenyOptionChange?: (optionId: string | null) => void;\n onDenialReasonChange?: (reason: string) => void;\n onReasonSubmit?: () => void;\n disabled?: boolean;\n readOnly?: boolean;\n showLineBelow?: boolean;\n dataTestPrefix?: string;\n className?: string;\n};\n\nconst DEFAULT_APPROVE_OPTIONS: ApprovalOption[] = [{ id: 'approve', label: 'Approve', variant: 'primary' }];\n\nconst DEFAULT_DENY_OPTIONS: ApprovalOption[] = [\n { id: 'deny', label: 'Deny', variant: 'secondary', requiresReason: true },\n];\n\nfunction optionVariant(option: ApprovalOption): 'primary' | 'secondary' | 'destructive' {\n if (option.variant === 'destructive') return 'destructive';\n if (option.variant === 'secondary') return 'secondary';\n return 'primary';\n}\n\nexport function ToolApprovalBar({\n toolName,\n approveOptions = DEFAULT_APPROVE_OPTIONS,\n denyOptions = DEFAULT_DENY_OPTIONS,\n onSelect,\n status,\n selectedDenyOption,\n denialReason = '',\n showReasonError = false,\n onDenyOptionChange,\n onDenialReasonChange,\n onReasonSubmit,\n disabled = false,\n readOnly = false,\n showLineBelow = false,\n dataTestPrefix,\n className,\n}: ToolApprovalBarProps) {\n const isDecided = !!status;\n const isApproved = status?.type === 'approved';\n const isDenied = status?.type === 'denied';\n const interactionsLocked = disabled && !isDecided;\n\n const headingText = isApproved ? 'Tool Approved' : isDenied ? 'Tool Approval Denied' : 'Tool Approval Required for';\n\n return (\n <div\n className={cn('aui-tool-approval-bar', className)}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-approval` : undefined}\n >\n <div className=\"flex gap-2\">\n <div className={cn('flex shrink-0 flex-col items-center', !showLineBelow && 'pb-1')}>\n <div className=\"min-h-[0.75rem] w-px flex-1 bg-border\" />\n <StepIconBox icon=\"wrench\" variant=\"muted\" iconSize=\"0.875em\" className=\"my-1\" />\n {showLineBelow && <div className=\"min-h-[0.75rem] w-px flex-1 bg-border\" />}\n </div>\n\n <div className=\"mt-2 flex flex-1 items-center justify-between\">\n <div className=\"flex w-full items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"inline-flex flex-wrap items-center gap-1 font-sans text-xs font-medium leading-4 text-text-primary\">\n {headingText}\n <span className=\"rounded bg-secondary-bg px-1.5 py-0.5 text-xs text-text-secondary\">{toolName}</span>\n </span>\n {isDecided && (\n <Icon\n name={isDenied ? 'circle-xmark' : 'circle-check'}\n size=\"0.875em\"\n className={cn('shrink-0', isDenied ? 'text-failure-bg' : 'text-success-bg')}\n />\n )}\n </div>\n {!isDecided && !readOnly && selectedDenyOption && (\n <Button.Secondary size=\"small\" disabled={interactionsLocked} onClick={() => onDenyOptionChange?.(null)}>\n Back\n </Button.Secondary>\n )}\n </div>\n {!isDecided && !readOnly && !selectedDenyOption && (\n <div className=\"flex gap-2\">\n {approveOptions.map(option => (\n <Button\n key={option.id}\n size=\"small\"\n variant={optionVariant(option)}\n disabled={interactionsLocked}\n onClick={() => onSelect(option.id)}\n >\n {option.variant === 'primary' && <Icon name=\"check\" size=\"0.75rem\" />}\n {option.label}\n </Button>\n ))}\n {denyOptions.map(option => (\n <Button\n key={option.id}\n size=\"small\"\n variant={optionVariant(option)}\n disabled={interactionsLocked}\n onClick={() => {\n if (option.requiresReason) {\n onDenyOptionChange?.(option.id);\n } else {\n onSelect(option.id);\n }\n }}\n >\n {option.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {!isDecided && !readOnly && selectedDenyOption && (\n <div className=\"flex flex-col gap-1 pl-8 pt-3\">\n {(selectedDenyOption.confirm?.title || selectedDenyOption.confirm?.description) && (\n <div className=\"flex flex-col gap-0.5\">\n {selectedDenyOption.confirm.title && (\n <span className=\"text-xs font-medium text-text-primary\">{selectedDenyOption.confirm.title}</span>\n )}\n {selectedDenyOption.confirm.description && (\n <span className=\"text-xs text-text-secondary\">{selectedDenyOption.confirm.description}</span>\n )}\n </div>\n )}\n {selectedDenyOption.grants && selectedDenyOption.grants.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-1\">\n <span className=\"text-xs text-text-secondary\">Grants:</span>\n {selectedDenyOption.grants.map(grant => (\n <span key={grant} className=\"rounded bg-secondary-bg px-1.5 py-0.5 text-xs text-text-secondary\">\n {grant}\n </span>\n ))}\n </div>\n )}\n <div className=\"flex items-center gap-2\">\n <input\n placeholder=\"Enter reason for denial\"\n aria-label=\"Reason for denial\"\n aria-invalid={showReasonError || undefined}\n aria-describedby={showReasonError ? 'aui-denial-reason-error' : undefined}\n value={denialReason}\n disabled={interactionsLocked}\n onChange={e => onDenialReasonChange?.(e.target.value)}\n className={cn(\n 'h-8 flex-1 rounded border border-input-border bg-primary-bg px-2 text-xs text-text-primary',\n 'focus:outline-none focus:ring-1 focus:ring-focus-ring',\n )}\n />\n <Button.Primary size=\"small\" disabled={interactionsLocked} onClick={onReasonSubmit}>\n Submit\n </Button.Primary>\n </div>\n {showReasonError && (\n <span id=\"aui-denial-reason-error\" className=\"text-xs text-failure-bg\" role=\"alert\">\n Reason is required\n </span>\n )}\n </div>\n )}\n\n {isDecided && status?.reason && (\n <div className=\"pl-8 pt-2\">\n <span className=\"text-xs text-text-secondary\">Reason: {status.reason}</span>\n </div>\n )}\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ToolApprovalBar: typeof ToolApprovalBar;\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { AgentStepRow, type AgentStepStatus } from './agent-chat/AgentStepRow.js';\nimport { cn } from './lib/cn.js';\n\nexport type ToolCallStatus = 'running' | 'success' | 'error';\n\nexport type ToolCallCardProps = {\n icon?: string;\n iconClassName?: string;\n iconVariant?: 'primary' | 'muted';\n toolName: string;\n expanded?: boolean;\n onToggle?: () => void;\n awaiting?: boolean;\n awaitingText?: string;\n status?: ToolCallStatus;\n exitCode?: number | null;\n showExpandChevron?: boolean;\n showResponseLine?: boolean;\n responseIcon?: ReactNode;\n approvalSlot?: ReactNode;\n requestSlot?: ReactNode;\n responseSlot?: ReactNode;\n highlightCard?: boolean;\n className?: string;\n mcpServerName?: string;\n dataTestPrefix?: string;\n};\n\nconst DEFAULT_AWAITING_TEXT = 'Awaiting Response...';\n\nexport function ToolCallCard({\n icon = 'mcp-server',\n iconClassName,\n iconVariant,\n toolName,\n expanded = false,\n onToggle,\n awaiting = false,\n awaitingText = DEFAULT_AWAITING_TEXT,\n status: explicitStatus,\n exitCode,\n showExpandChevron = true,\n showResponseLine = false,\n approvalSlot,\n requestSlot,\n responseSlot,\n highlightCard = false,\n className,\n mcpServerName: _mcpServerName,\n dataTestPrefix,\n}: ToolCallCardProps) {\n const hasApproval = !!approvalSlot;\n const hasRequest = !!requestSlot;\n const hasResponse = !!responseSlot;\n const showConnector = hasApproval || hasRequest || hasResponse;\n const isExpandable = showExpandChevron && (hasRequest || hasResponse);\n\n let derivedStatus: AgentStepStatus = 'idle';\n if (explicitStatus) derivedStatus = explicitStatus;\n else if (awaiting) derivedStatus = 'running';\n else if (exitCode === 0) derivedStatus = 'success';\n else if (exitCode != null) derivedStatus = 'error';\n else if (showResponseLine) derivedStatus = 'success';\n\n const statusText = awaiting ? awaitingText : undefined;\n const isCubeIcon = icon === 'cube';\n const derivedIconVariant = iconVariant || (isCubeIcon ? 'primary' : 'muted');\n const derivedIconSize = isCubeIcon ? '0.75em' : undefined;\n\n return (\n <div\n className={cn(\n 'aui-tool-call-card flex min-w-0 flex-col',\n highlightCard ? 'rounded-md p-1 -mx-1' : 'mx-0 mt-2 p-0',\n className,\n )}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-tool-call-card` : undefined}\n >\n <AgentStepRow\n icon={icon}\n iconClassName={iconClassName}\n iconVariant={derivedIconVariant}\n iconSize={derivedIconSize}\n title={toolName}\n expandable={isExpandable}\n expanded={expanded}\n onToggle={onToggle}\n status={derivedStatus}\n statusText={statusText}\n showConnector={showConnector}\n showContentConnector={true}\n showPersistentContentConnector={!hasApproval}\n dataTestPrefix={dataTestPrefix ? `${dataTestPrefix}-header` : undefined}\n persistentChildren={\n <>\n {approvalSlot}\n {expanded && showResponseLine && responseSlot && (\n <div data-testid={dataTestPrefix ? `${dataTestPrefix}-response` : undefined}>{responseSlot}</div>\n )}\n </>\n }\n >\n {requestSlot && (\n <div className=\"py-2 pt-0\" data-testid={dataTestPrefix ? `${dataTestPrefix}-request` : undefined}>\n {requestSlot}\n </div>\n )}\n </AgentStepRow>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ToolCallCard: typeof ToolCallCard;\n }\n}\n","'use client';\n\nimport { useState } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { cn } from './lib/cn.js';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from './primitives/Dialog.js';\nimport { IconButton } from './primitives/IconButton.js';\n\nexport type ToolCallContentBlockProps = {\n title: string;\n content: string;\n isJson?: boolean;\n copyValue?: string;\n maxHeight?: string;\n resizable?: boolean;\n fullscreen?: boolean;\n onFullscreenChange?: (fullscreen: boolean) => void;\n contentHeightRem?: number;\n contentRef?: (node: HTMLDivElement | null) => void;\n onContentHeightChange?: (height: number) => void;\n dataTestPrefix?: string;\n className?: string;\n};\n\nfunction JsonEditor({\n content,\n height,\n autoHeight = false,\n maxHeight,\n onAutoHeightChange,\n}: {\n content: string;\n height?: string | number;\n autoHeight?: boolean;\n maxHeight?: string | number;\n onAutoHeightChange?: (height: number) => void;\n}) {\n const MonacoEditorCore = useSlot('MonacoEditorCore');\n\n return (\n <MonacoEditorCore\n language=\"json\"\n value={content}\n height={height}\n autoHeight={autoHeight}\n maxHeight={maxHeight}\n onAutoHeightChange={onAutoHeightChange}\n options={{\n readOnly: true,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n wordWrap: 'on',\n lineNumbers: 'on',\n folding: true,\n fontSize: 12,\n }}\n className=\"border-0!\"\n />\n );\n}\n\nexport function ToolCallContentBlock({\n title,\n content,\n isJson = true,\n copyValue,\n maxHeight = '10.5rem',\n resizable = false,\n fullscreen = false,\n onFullscreenChange,\n contentHeightRem,\n contentRef,\n onContentHeightChange,\n dataTestPrefix,\n className,\n}: ToolCallContentBlockProps) {\n const Markdown = useSlot('Markdown');\n const [copied, setCopied] = useState(false);\n\n const handleCopy = () => {\n const val = copyValue ?? content;\n void navigator.clipboard.writeText(val).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n });\n };\n\n const hasMeasuredResizableHeight = resizable && contentHeightRem !== undefined;\n const bodyStyle = resizable\n ? {\n ...(hasMeasuredResizableHeight ? { height: `${Math.min(contentHeightRem, 10)}rem` } : {}),\n resize: 'vertical' as const,\n padding: '0.25rem',\n }\n : {\n padding: '0.25rem',\n };\n\n return (\n <div\n className={cn(\n 'aui-tool-call-content-block flex flex-col font-sans text-xs font-medium leading-4 text-text-primary',\n className,\n )}\n data-testid={dataTestPrefix ? `${dataTestPrefix}-content-block` : 'tfy-tool-call-content-block'}\n data-content={content}\n >\n <div className=\"flex items-center justify-between rounded-t-lg border border-primary-button-bg/30 bg-primary-button-bg/10 px-3 py-1\">\n <div className=\"font-sans text-xs font-medium text-primary-button-bg\">{title}</div>\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"inline-flex size-6 cursor-pointer items-center justify-center rounded text-text-secondary transition-colors hover:text-text-primary\"\n aria-label=\"Copy\"\n data-testid={dataTestPrefix ? `${dataTestPrefix}-copy` : undefined}\n >\n <Icon name={copied ? 'check' : 'clone'} size={14} />\n </button>\n <button\n type=\"button\"\n onClick={() => onFullscreenChange?.(true)}\n className=\"inline-flex size-6 cursor-pointer items-center justify-center rounded text-text-secondary transition-colors hover:text-text-primary\"\n aria-label=\"Expand\"\n >\n <Icon name=\"expand-alt\" size={14} />\n </button>\n </div>\n </div>\n <div\n ref={resizable ? contentRef : undefined}\n className={cn(\n 'relative min-h-7.5 rounded-b-lg border border-t-0 border-border bg-primary-bg',\n resizable && 'overflow-hidden',\n )}\n style={bodyStyle}\n >\n {isJson ? (\n <JsonEditor\n content={content}\n height={hasMeasuredResizableHeight ? '100%' : undefined}\n autoHeight={!hasMeasuredResizableHeight}\n maxHeight={maxHeight}\n onAutoHeightChange={resizable ? onContentHeightChange : undefined}\n />\n ) : (\n <div\n className={cn('overflow-y-auto', hasMeasuredResizableHeight && 'h-full')}\n style={!hasMeasuredResizableHeight && maxHeight ? { maxHeight } : undefined}\n >\n <Markdown content={content} className=\"text-xs text-text-secondary\" />\n </div>\n )}\n </div>\n\n {fullscreen && (\n <Dialog open onOpenChange={open => onFullscreenChange?.(open)}>\n <DialogContent className=\"flex h-[80vh] max-w-4xl flex-col\">\n <DialogHeader className=\"flex flex-row items-center justify-between gap-2\">\n <DialogTitle>{title}</DialogTitle>\n <IconButton variant=\"ghost\" onClick={() => onFullscreenChange?.(false)} aria-label=\"Minimize\">\n <Icon name=\"compress\" size=\"0.875em\" />\n </IconButton>\n </DialogHeader>\n <div className=\"min-h-0 flex-1\">\n <JsonEditor content={content} height=\"100%\" />\n </div>\n </DialogContent>\n </Dialog>\n )}\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ToolCallContentBlock: typeof ToolCallContentBlock;\n }\n}\n","import type { ReactNode } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { cn } from './lib/cn.js';\n\nexport type ToolGroupCardProps = {\n toolCallCount: number;\n expanded: boolean;\n active?: boolean;\n onToggle: () => void;\n children: ReactNode;\n className?: string;\n};\n\nexport function ToolGroupCard({\n toolCallCount,\n expanded,\n active = false,\n onToggle,\n children,\n className,\n}: ToolGroupCardProps) {\n const Accordion = useSlot('Accordion');\n const AccordionSummary = useSlot('AccordionSummary');\n const AccordionDetails = useSlot('AccordionDetails');\n const label = `${toolCallCount} tool ${toolCallCount === 1 ? 'call' : 'calls'}`;\n\n return (\n <Accordion\n data-slot=\"tool-group-card\"\n expanded={expanded}\n onChange={() => onToggle()}\n background=\"transparent\"\n className={cn('aui-tool-group-card group/tool-group w-full', className)}\n sx={{ margin: 0, border: 'none', boxShadow: 'none' }}\n >\n <AccordionSummary\n hideIcon\n disableRipple\n sx={{\n padding: 0,\n minHeight: 0,\n '&.Mui-expanded': { minHeight: 0 },\n '&:hover': { backgroundColor: 'transparent' },\n '& .MuiAccordionSummary-content': { margin: 0, width: '100%' },\n }}\n >\n <div className=\"text-text-secondary hover:text-text-primary flex origin-left items-center gap-2 py-1.5 text-sm transition-[color,scale] active:scale-[0.98]\">\n {active && <Icon name=\"loader\" className=\"size-3 shrink-0 animate-spin [animation-duration:0.6s]\" />}\n <span className=\"text-xs font-medium\">{label}</span>\n <Icon\n name=\"chevron-down\"\n className={cn(\n 'size-3 shrink-0 transition-transform duration-200 ease-[cubic-bezier(0.32,0.72,0,1)]',\n expanded ? 'rotate-0' : '-rotate-90',\n )}\n />\n </div>\n </AccordionSummary>\n <AccordionDetails sx={{ padding: 0 }}>\n <div className=\"mt-1 flex flex-col gap-2 text-text-primary\">{children}</div>\n </AccordionDetails>\n </Accordion>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n ToolGroupCard: typeof ToolGroupCard;\n }\n}\n","'use client';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { cn } from './lib/cn.js';\nimport { IconButton } from './primitives/IconButton.js';\n\nexport type UserMessageActionBarProps = {\n isCopied: boolean;\n editDisabled?: boolean;\n createdAt?: Date | string;\n onCopy: () => void;\n onEdit: () => void;\n onRetry: () => void;\n className?: string;\n};\n\nconst actionBtnClass = 'h-6 w-6 text-text-secondary hover:text-text-primary [&_svg]:size-3.5';\n\nexport function UserMessageActionBar({\n isCopied,\n editDisabled,\n createdAt,\n onCopy,\n onEdit,\n onRetry,\n className,\n}: UserMessageActionBarProps) {\n const MessageTimestamp = useSlot('MessageTimestamp');\n\n return (\n <div className={cn('aui-user-action-bar-root animate-in fade-in flex items-center gap-1 duration-200', className)}>\n <MessageTimestamp createdAt={createdAt} className=\"mr-1\" />\n <IconButton\n aria-label=\"Try again\"\n tooltip=\"Try again\"\n variant=\"ghost\"\n className={actionBtnClass}\n onClick={onRetry}\n >\n <Icon name=\"rotate-right\" size=\"0.875em\" />\n </IconButton>\n <IconButton\n aria-label=\"Edit\"\n tooltip=\"Edit\"\n variant=\"ghost\"\n className={actionBtnClass}\n disabled={editDisabled}\n onClick={onEdit}\n >\n <Icon name=\"pencil\" size=\"0.875em\" />\n </IconButton>\n <IconButton aria-label=\"Copy\" tooltip=\"Copy\" variant=\"ghost\" className={actionBtnClass} onClick={onCopy}>\n <Icon name={isCopied ? 'check' : 'clone'} size=\"0.875em\" />\n </IconButton>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n UserMessageActionBar: typeof UserMessageActionBar;\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\n\nimport { cn } from './lib/cn.js';\n\nexport type UserMessageBubbleProps = {\n text: string;\n attachments?: ReactNode;\n editAction?: ReactNode;\n className?: string;\n};\n\nexport function UserMessageBubble({ text, attachments, editAction, className }: UserMessageBubbleProps) {\n return (\n <div\n data-slot=\"aui_user-message-root\"\n className={cn('group/user-message flex w-full min-w-0 flex-col items-end gap-1', className)}\n >\n {attachments}\n <div\n data-slot=\"aui_user-message-content\"\n style={{ borderRadius: 'var(--composer-radius, 1.5rem)' }}\n className=\"max-w-[min(80%,100%)] min-w-0 bg-user-message-bg px-3 py-2 text-sm text-user-message-text whitespace-pre-wrap break-words sm:px-4 sm:py-2.5\"\n >\n {text}\n </div>\n {editAction && (\n <div className=\"flex max-w-[min(80%,100%)] justify-end opacity-0 transition-opacity group-hover/user-message:opacity-100 focus-within:opacity-100\">\n {editAction}\n </div>\n )}\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n UserMessageBubble: typeof UserMessageBubble;\n }\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport { cn } from './lib/cn.js';\n\nexport type UserMessageEditProps = {\n /** Timestamp node rendered beside the \"User\" label. */\n timestamp?: ReactNode;\n /** Read-only attachments shown above the input while editing. */\n attachments?: ReactNode;\n input: ReactNode;\n footer: ReactNode;\n className?: string;\n};\n\nexport const UserMessageEdit = forwardRef<HTMLDivElement, UserMessageEditProps & HTMLAttributes<HTMLDivElement>>(\n function UserMessageEdit({ timestamp, attachments, input, footer, className, ...rest }, ref) {\n return (\n <div\n ref={ref}\n data-slot=\"aui_user-message-edit\"\n className={cn('flex flex-col gap-2 w-full', className)}\n {...rest}\n >\n {(timestamp || attachments) && (\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <span className=\"font-medium text-text-primary\">User</span>\n {timestamp}\n </div>\n )}\n {attachments && <div className=\"flex flex-wrap gap-1\">{attachments}</div>}\n <div className=\"w-full\">{input}</div>\n <div>{footer}</div>\n </div>\n );\n },\n);\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n UserMessageEdit: typeof UserMessageEdit;\n }\n}\n","import type { ReactNode } from 'react';\n\nimport { Icon } from '../icons/Icon.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { useOptionalThemePreset } from '../theme/ThemeProvider.js';\nimport { cn } from './lib/cn.js';\n\nexport type WelcomeScreenProps = {\n heading?: string;\n icon?: ReactNode;\n className?: string;\n};\n\nexport function WelcomeScreen({ heading = 'How can I help you today?', icon, className }: WelcomeScreenProps) {\n const preset = useOptionalThemePreset();\n const BrandLogo = useSlot('BrandLogo');\n const resolvedIcon =\n icon !== undefined ? (\n icon\n ) : preset === 'chatgpt' ? null : preset === 'claude' ? (\n <Icon name=\"welcome-sparkle\" className=\"size-5 fill-current text-primary-button-bg\" />\n ) : (\n <BrandLogo variant=\"icon\" className=\"size-10\" />\n );\n\n return (\n <div\n data-preset={preset}\n className={cn(\n 'aui-thread-welcome-root relative isolate mb-6 flex flex-col items-center px-4 text-center text-text-primary',\n preset === 'gemini' && 'py-8',\n className,\n )}\n >\n {preset === 'gemini' && (\n <div\n aria-hidden\n className=\"pointer-events-none absolute left-1/2 top-1/2 -z-10 size-64 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-button-bg/20 blur-3xl motion-safe:animate-pulse motion-reduce:animate-none [animation-duration:4s]\"\n />\n )}\n {resolvedIcon !== null && (\n <div\n className={cn(\n 'fill-mode-both mb-4 motion-safe:animate-in motion-safe:fade-in motion-safe:slide-in-from-bottom-1 motion-reduce:animate-none',\n preset === 'claude' ? 'duration-300' : 'duration-200',\n )}\n >\n {resolvedIcon}\n </div>\n )}\n <h1\n className={cn(\n 'aui-thread-welcome-message-inner fill-mode-both text-2xl motion-safe:animate-in motion-safe:fade-in motion-safe:slide-in-from-bottom-1 motion-reduce:animate-none',\n preset === 'trueforge' ? 'font-semibold' : 'font-normal',\n resolvedIcon !== null && 'delay-75',\n preset === 'gemini' ? 'text-[1.75rem] leading-tight duration-300' : 'duration-200',\n )}\n >\n {heading}\n </h1>\n </div>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n WelcomeScreen: typeof WelcomeScreen;\n }\n}\n","'use client';\n\nimport { useEffect, useState, type ComponentType } from 'react';\n\nimport type { AgentMetricChartResult, AgentMetricsProps } from '../atoms/agent-details/types.js';\nimport { useAgentMetricsServer } from '../server/ServerContext.js';\nimport type { AgentMetricChartDefinition, AgentMetricMeter } from '../server/types.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { getErrorMessage } from '../utils/getErrorMessage.js';\nimport { resolveSessionTimeRange, type SessionTimeRange } from '../utils/sessionShareUrl.js';\n\nconst DEFAULT_METRICS_WINDOW_MS = 24 * 60 * 60 * 1000;\n\nexport function AgentMetricsContainer({ agentId }: AgentMetricsProps) {\n const metricsServer = useAgentMetricsServer();\n const AgentMetricsView = useSlot('AgentMetricsView');\n const [timeRange, setTimeRange] = useState<SessionTimeRange>(() => {\n const endTs = Date.now();\n return {\n startTs: endTs - DEFAULT_METRICS_WINDOW_MS,\n endTs,\n timeWindowMs: DEFAULT_METRICS_WINDOW_MS,\n };\n });\n const [definitions, setDefinitions] = useState<AgentMetricChartDefinition[]>();\n const [chartsError, setChartsError] = useState<string>();\n const [meters, setMeters] = useState<AgentMetricMeter[]>();\n const [meterError, setMeterError] = useState<string>();\n const [charts, setCharts] = useState<AgentMetricChartResult[]>([]);\n const [chartsLoading, setChartsLoading] = useState(true);\n\n useEffect(() => {\n let cancelled = false;\n setDefinitions(undefined);\n setChartsError(undefined);\n void metricsServer.getCharts().then(\n result => {\n if (!cancelled) setDefinitions(result);\n },\n error => {\n if (!cancelled) {\n setDefinitions([]);\n setChartsError(getErrorMessage(error, 'Metric charts could not be loaded.'));\n setChartsLoading(false);\n }\n },\n );\n return () => {\n cancelled = true;\n };\n }, [metricsServer]);\n\n useEffect(() => {\n if (definitions == null) return undefined;\n let cancelled = false;\n const resolvedRange = resolveSessionTimeRange(timeRange);\n const request = {\n agentId,\n startTimestamp: new Date(resolvedRange.startTs).toISOString(),\n endTimestamp: new Date(resolvedRange.endTs).toISOString(),\n };\n\n setMeters(undefined);\n setMeterError(undefined);\n setCharts(definitions.map(definition => ({ definition })));\n setChartsLoading(true);\n\n void metricsServer.getMeters(request).then(\n result => {\n if (!cancelled) setMeters(result);\n },\n error => {\n if (!cancelled) setMeterError(getErrorMessage(error, 'Aggregate metrics could not be loaded.'));\n },\n );\n\n void Promise.all(\n definitions.map(async definition => {\n try {\n const data = await metricsServer.getChartData({\n ...request,\n chartName: definition.name,\n });\n return { definition, graphs: data.graphs } satisfies AgentMetricChartResult;\n } catch (error) {\n return {\n definition,\n error: getErrorMessage(error, `${definition.displayName} could not be loaded.`),\n } satisfies AgentMetricChartResult;\n }\n }),\n ).then(result => {\n if (!cancelled) {\n setCharts(result);\n setChartsLoading(false);\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [agentId, definitions, metricsServer, timeRange]);\n\n return (\n <AgentMetricsView\n meters={meters}\n meterError={meterError}\n charts={charts}\n chartsLoading={chartsLoading}\n chartsError={chartsError}\n timeRange={timeRange}\n onTimeRangeChange={setTimeRange}\n />\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentMetrics: ComponentType<AgentMetricsProps>;\n }\n}\n","'use client';\n\nimport { ThreadPrimitive, type ThreadMessageLike } from '@assistant-ui/react';\nimport { convertTurnsToThreadMessages } from '@truefoundry/assistant-ui-runtime';\nimport { Suspense, useCallback, useEffect, useMemo, useRef, useState, type ComponentType } from 'react';\n\nimport { useServer } from '../server/ServerContext.js';\nimport type { AgentChatServer, SessionEventItem } from '../server/types.js';\nimport type { SlotOverrides } from '../theme/SlotsProvider.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { buildSessionMetrics } from '../utils/buildSessionMetrics.js';\nimport { buildSessionTimelineSegments } from '../utils/buildSessionTimelineSegments.js';\nimport { createCachedListEventsBridge } from '../utils/cachedListEventsBridge.js';\nimport { getTurnInputSummary } from '../utils/sessionTimelineEvents.js';\nimport { buildSessionTurnViews, type SessionTurnView } from '../utils/sessionTurnViews.js';\nimport { AssistantMessageContainer } from './AssistantMessageContainer.js';\nimport { ReadOnlySessionTurnRuntime } from './ReadOnlySessionTurnRuntime.js';\nimport { UserMessageContainer } from './UserMessageContainer.js';\n\nconst READ_ONLY_SLOT_OVERRIDES: SlotOverrides = {\n UserMessageActionBar: () => <></>,\n MessageActionBar: () => <></>,\n};\n\ntype TurnCreatedEvent = Extract<SessionEventItem['event'], { type: 'turn.created' }>;\ntype UserMessageInput = Extract<NonNullable<TurnCreatedEvent['input']>[number], { type: 'user.message' }>;\n\nfunction turnIdFromMessage(message: ThreadMessageLike): string {\n const messageId = message.id ?? '';\n // The stable message id identifies the opening backend turn. Metadata can\n // point at the latest continuation turn for artifact ownership.\n return message.role === 'user' ? messageId.replace(/-user$/, '') : messageId.replace(/-assistant$/, '');\n}\n\nfunction buildProjectionEvents(items: SessionEventItem[], turns: SessionTurnView[]): SessionEventItem[] {\n // The chat projection folds continuation inputs into the previous response.\n // Add a display-only user boundary so Agent Details keeps each backend turn separate.\n const continuationSummaries = new Map(\n turns.flatMap(turn => {\n const input = turn.created.input ?? [];\n return input.some(item => item.type === 'user.message') ? [] : [[turn.turnId, getTurnInputSummary(turn)]];\n }),\n );\n\n return items.map(item => {\n if (item.event.type !== 'turn.created') return item;\n const summary = continuationSummaries.get(item.turnId);\n if (summary === undefined) return item;\n const displayInput: UserMessageInput = { type: 'user.message', content: summary };\n return {\n ...item,\n event: {\n ...item.event,\n input: [...(item.event.input ?? []), displayInput],\n },\n };\n });\n}\n\nfunction appendTerminalText(content: ThreadMessageLike['content'], text: string): ThreadMessageLike['content'] {\n const terminalPart: { type: 'text'; text: string } = { type: 'text', text };\n return typeof content === 'string' ? [{ type: 'text', text: content }, terminalPart] : [...content, terminalPart];\n}\n\nfunction applyTerminalState(messages: ThreadMessageLike[], turn: SessionTurnView): ThreadMessageLike[] {\n const state = turn.done?.state;\n if (state?.status !== 'error' && state?.status !== 'cancelled') return messages;\n\n // failures need an assistant row so the terminal state is visible.\n const assistantIndex = messages.findIndex(message => message.role === 'assistant');\n const assistant = assistantIndex < 0 ? undefined : messages[assistantIndex];\n const terminal: ThreadMessageLike =\n state.status === 'error'\n ? {\n ...(assistant ?? {\n id: `${turn.turnId}-assistant`,\n role: 'assistant',\n content: [],\n createdAt: new Date(turn.done?.createdAt ?? turn.created.createdAt),\n metadata: { custom: { turnId: turn.turnId } },\n }),\n status: { type: 'incomplete', reason: 'error', error: state.message },\n }\n : {\n ...(assistant ?? {\n id: `${turn.turnId}-assistant`,\n role: 'assistant',\n content: [],\n createdAt: new Date(turn.done?.createdAt ?? turn.created.createdAt),\n metadata: { custom: { turnId: turn.turnId } },\n }),\n content: appendTerminalText(assistant?.content ?? [], `Cancelled: ${state.reason}`),\n status: { type: 'incomplete', reason: 'cancelled' },\n };\n\n if (assistantIndex < 0) return [...messages, terminal];\n return messages.map((message, index) => (index === assistantIndex ? terminal : message));\n}\n\nfunction messagesForTurn(messages: ThreadMessageLike[], turn: SessionTurnView): ThreadMessageLike[] {\n const matched = messages.filter(message => turnIdFromMessage(message) === turn.turnId);\n return applyTerminalState(matched, turn);\n}\n\nexport type AgentSessionTimelineContainerProps = {\n sessionId: string;\n events: SessionEventItem[];\n listMetrics?: {\n totalTurns: number;\n totalCostInUsd?: number;\n totalDurationMs: number;\n };\n};\n\nexport function AgentSessionTimelineContainer({ sessionId, events, listMetrics }: AgentSessionTimelineContainerProps) {\n const server = useServer();\n const AgentSessionTurnHeader = useSlot('AgentSessionTurnHeader');\n const AgentSessionEventTimeline = useSlot('AgentSessionEventTimeline');\n const AgentSessionMetricsStrip = useSlot('AgentSessionMetricsStrip');\n const MessageListSkeleton = useSlot('MessageListSkeleton');\n const ThreadViewportShell = useSlot('ThreadViewportShell');\n\n const [messages, setMessages] = useState<ThreadMessageLike[]>();\n const [loadFailed, setLoadFailed] = useState(false);\n const sectionRefs = useRef(new Map<number, HTMLElement>());\n\n const turnViews = useMemo(() => buildSessionTurnViews(events), [events]);\n const projectionEvents = useMemo(() => buildProjectionEvents(events, turnViews), [events, turnViews]);\n const timelineSegments = useMemo(() => buildSessionTimelineSegments(turnViews), [turnViews]);\n const sessionMetrics = useMemo(\n () => buildSessionMetrics({ turns: turnViews, segments: timelineSegments, listMetrics }),\n [listMetrics, timelineSegments, turnViews],\n );\n\n const handleSelectTurn = useCallback((index: number) => {\n sectionRefs.current.get(index)?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }, []);\n\n useEffect(() => {\n let cancelled = false;\n setMessages(undefined);\n setLoadFailed(false);\n\n const bridge = createCachedListEventsBridge(projectionEvents, { allAtOnce: true });\n // Events already include every turn.created / turn.done, so skip listTurns.\n const chatServer: AgentChatServer = {\n ...server,\n listEvents: req => bridge.listEvents(req),\n listTurns: async () => ({ data: [] }),\n };\n\n void convertTurnsToThreadMessages(chatServer, sessionId)\n .then(result => {\n if (!cancelled) setMessages(result.messages);\n })\n .catch(() => {\n if (!cancelled) setLoadFailed(true);\n });\n\n return () => {\n cancelled = true;\n };\n }, [projectionEvents, server, sessionId]);\n\n if (loadFailed) {\n return (\n <div className=\"flex flex-1 items-center justify-center px-6 text-sm text-text-secondary\">\n Session messages could not be loaded.\n </div>\n );\n }\n\n if (messages === undefined) {\n return (\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden p-4\">\n <MessageListSkeleton />\n </div>\n );\n }\n\n if (messages.length === 0 && turnViews.length === 0) {\n return (\n <div className=\"flex flex-1 items-center justify-center px-6 text-sm text-text-secondary\">\n This session has no messages yet.\n </div>\n );\n }\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col overflow-hidden\">\n <div className=\"shrink-0 border-b border-border\">\n <AgentSessionMetricsStrip metrics={sessionMetrics} />\n <Suspense fallback={null}>\n <AgentSessionEventTimeline turns={turnViews} segments={timelineSegments} onSelectTurn={handleSelectTurn} />\n </Suspense>\n </div>\n <ThreadViewportShell className=\"flex-1 pb-4\">\n <div className=\"flex flex-col gap-4\">\n {turnViews.map(turn => (\n <SessionTurnSection\n key={turn.turnId}\n turn={turn}\n messages={messagesForTurn(messages, turn)}\n AgentSessionTurnHeader={AgentSessionTurnHeader}\n onMount={node => {\n if (node == null) sectionRefs.current.delete(turn.turnNumber - 1);\n else sectionRefs.current.set(turn.turnNumber - 1, node);\n }}\n />\n ))}\n </div>\n </ThreadViewportShell>\n </div>\n );\n}\n\nfunction SessionTurnSection({\n turn,\n messages,\n AgentSessionTurnHeader,\n onMount,\n}: {\n turn: SessionTurnView;\n messages: ThreadMessageLike[];\n AgentSessionTurnHeader: ComponentType<{\n turnNumber: number;\n totalTokens?: number;\n inputTokens?: number;\n outputTokens?: number;\n cachedTokens?: number;\n durationMs?: number;\n totalCostInUsd?: number;\n }>;\n onMount: (node: HTMLElement | null) => void;\n}) {\n if (!turn.showHeader && messages.length === 0) {\n return null;\n }\n\n return (\n <section ref={onMount} id={`session-turn-${turn.turnNumber}`} className=\"flex flex-col gap-2\">\n {turn.showHeader ? (\n <AgentSessionTurnHeader\n turnNumber={turn.turnNumber}\n totalTokens={turn.totalTokens}\n inputTokens={turn.inputTokens}\n outputTokens={turn.outputTokens}\n cachedTokens={turn.cachedTokens}\n durationMs={turn.durationMs}\n totalCostInUsd={turn.totalCostInUsd}\n />\n ) : null}\n {messages.length > 0 ? (\n <ReadOnlySessionTurnRuntime slotOverrides={READ_ONLY_SLOT_OVERRIDES} messages={messages}>\n <ThreadPrimitive.Root asChild>\n <div className=\"aui-root aui-thread-root flex w-full flex-col\">\n <ThreadPrimitive.Messages>\n {({ message }) => (message.role === 'user' ? <UserMessageContainer /> : <AssistantMessageContainer />)}\n </ThreadPrimitive.Messages>\n </div>\n </ThreadPrimitive.Root>\n </ReadOnlySessionTurnRuntime>\n ) : null}\n </section>\n );\n}\n\ndeclare module '../theme/SlotsProvider.js' {\n interface AtomSlots {\n AgentSessionTimelineContainer: typeof AgentSessionTimelineContainer;\n }\n}\n","import { getSessionEventColor, type SessionEventTimelineSegment } from './sessionEventTimeline.js';\nimport type { SessionTurnView } from './sessionTurnViews.js';\n\nexport type SessionMetricBarDatum = {\n label: string;\n value: number;\n color: string;\n};\n\nexport type SessionMetrics = {\n totalTurns: number;\n wallTimeMs: number;\n totalCostUsd?: number;\n totalTokens: number;\n contextTokens: number;\n toolCalls: number;\n subAgents: number;\n errors: number;\n timeBreakdown: SessionMetricBarDatum[];\n costPerTurn: SessionMetricBarDatum[];\n tokenBreakdown: SessionMetricBarDatum[];\n contextByTurn: SessionMetricBarDatum[];\n toolCallFrequency: SessionMetricBarDatum[];\n};\n\nexport type SessionListMetricsHint = {\n totalTurns: number;\n totalCostInUsd?: number;\n totalDurationMs: number;\n};\n\nfunction segmentDurationMs(segment: SessionEventTimelineSegment): number {\n return Math.max(0, segment.endMs - segment.startMs);\n}\n\nfunction hintHasValues(hint?: SessionListMetricsHint): boolean {\n return hint != null && (hint.totalTurns > 0 || hint.totalCostInUsd != null || hint.totalDurationMs > 0);\n}\n\nfunction turnHasMetrics(turn: SessionTurnView): boolean {\n return (\n turn.totalTokens != null ||\n turn.inputTokens != null ||\n turn.outputTokens != null ||\n turn.cachedTokens != null ||\n turn.totalCostInUsd != null\n );\n}\n\nexport function buildSessionMetrics({\n turns,\n segments,\n listMetrics,\n}: {\n turns: SessionTurnView[];\n segments: SessionEventTimelineSegment[];\n listMetrics?: SessionListMetricsHint;\n}): SessionMetrics {\n let derivedWallTimeMs = 0;\n let derivedCostUsd = 0;\n let hasDerivedCost = false;\n let totalTokens = 0;\n let totalUncachedInputTokens = 0;\n let totalOutputTokens = 0;\n let totalCachedTokens = 0;\n let contextTokens = 0;\n const costPerTurn: SessionMetricBarDatum[] = [];\n const contextByTurn: SessionMetricBarDatum[] = [];\n\n for (const turn of turns) {\n const label = `T${turn.turnNumber}`;\n derivedWallTimeMs += turn.durationMs ?? 0;\n if (!turnHasMetrics(turn)) {\n costPerTurn.push({ label, value: 0, color: getSessionEventColor('tool_call') });\n contextByTurn.push({ label, value: contextTokens, color: getSessionEventColor('model') });\n continue;\n }\n\n // Prefer canonical turn fields from sessionTurnViews (uncached input already).\n const uncachedInputTokens = turn.inputTokens ?? 0;\n const outputTokens = turn.outputTokens ?? 0;\n const cachedTokens = turn.cachedTokens ?? 0;\n const turnTotalTokens = turn.totalTokens ?? uncachedInputTokens + cachedTokens + outputTokens;\n const turnCostUsd = turn.totalCostInUsd;\n\n if (turnCostUsd != null) {\n derivedCostUsd += turnCostUsd;\n hasDerivedCost = true;\n }\n totalTokens += turnTotalTokens;\n totalUncachedInputTokens += uncachedInputTokens;\n totalOutputTokens += outputTokens;\n totalCachedTokens += cachedTokens;\n contextTokens += turnTotalTokens;\n costPerTurn.push({ label, value: turnCostUsd ?? 0, color: getSessionEventColor('tool_call') });\n contextByTurn.push({ label, value: contextTokens, color: getSessionEventColor('model') });\n }\n\n const modelTimeMs = segments\n .filter(segment => segment.type === 'model')\n .reduce((sum, segment) => sum + segmentDurationMs(segment), 0);\n const toolTimeMs = segments\n .filter(segment => segment.type === 'tool_call')\n .reduce((sum, segment) => sum + segmentDurationMs(segment), 0);\n const waitingTimeMs = segments\n .filter(segment => segment.type === 'waiting_on_human' || segment.type === 'approval')\n .reduce((sum, segment) => sum + segmentDurationMs(segment), 0);\n const wallTimeMs = hintHasValues(listMetrics)\n ? (listMetrics?.totalDurationMs ?? derivedWallTimeMs)\n : derivedWallTimeMs;\n const overheadTimeMs = Math.max(0, wallTimeMs - modelTimeMs - toolTimeMs - waitingTimeMs);\n\n const toolCallCounts = new Map<string, number>();\n for (const segment of segments) {\n if (segment.type !== 'tool_call') continue;\n toolCallCounts.set(segment.description, (toolCallCounts.get(segment.description) ?? 0) + 1);\n }\n const toolCallFrequency = Array.from(toolCallCounts, ([label, value]) => ({\n label,\n value,\n color: getSessionEventColor('tool_call'),\n })).sort((left, right) => right.value - left.value);\n\n const totalCostUsd = listMetrics?.totalCostInUsd ?? (hasDerivedCost ? derivedCostUsd : undefined);\n\n return {\n totalTurns: hintHasValues(listMetrics) ? (listMetrics?.totalTurns ?? turns.length) : turns.length,\n wallTimeMs,\n ...(totalCostUsd == null ? {} : { totalCostUsd }),\n totalTokens,\n contextTokens,\n toolCalls: toolCallFrequency.reduce((sum, toolCall) => sum + toolCall.value, 0),\n subAgents: segments.filter(segment => segment.type === 'sub_agent').length,\n errors: segments.filter(segment => segment.type === 'error').length,\n timeBreakdown: [\n { label: 'model', value: modelTimeMs, color: getSessionEventColor('model') },\n { label: 'tools', value: toolTimeMs, color: getSessionEventColor('tool_call') },\n { label: 'waiting on human', value: waitingTimeMs, color: getSessionEventColor('approval') },\n { label: 'overhead', value: overheadTimeMs, color: getSessionEventColor('system') },\n ],\n costPerTurn,\n tokenBreakdown: [\n { label: 'input', value: totalUncachedInputTokens, color: getSessionEventColor('model') },\n { label: 'output', value: totalOutputTokens, color: getSessionEventColor('user') },\n { label: 'cached', value: totalCachedTokens, color: getSessionEventColor('sub_agent') },\n ],\n contextByTurn,\n toolCallFrequency,\n };\n}\n","import type { SessionEventTimelineSegment } from './sessionEventTimeline.js';\n\n/**\n * Pure layout helpers for the Sessions timeline.\n *\n * Segment construction owns event meaning; this module owns visual grouping,\n * lane allocation, and the compressed time axis. Keeping these calculations\n * outside React/Chart.js makes the rendering rules deterministic and testable.\n */\n\n/** Minimal interval shared by bars, compressed gaps, and grouped tool calls. */\nexport type TimelineGap = {\n startMs: number;\n endMs: number;\n};\n\nexport type TimelineTurnRange = {\n turnIndex: number;\n startMs: number;\n endMs: number;\n ordinal: number;\n};\n\nexport type TimelineLayout = {\n turnStartsMs: number[];\n turnOrdinals: Map<number, number>;\n turnRanges: TimelineTurnRange[];\n};\n\nexport type TimelineTurnBar = TimelineTurnRange & {\n id: string;\n durationMs: number;\n};\n\nexport type TimelineSubAgentBar = SessionEventTimelineSegment & {\n lane: number;\n visualEndMs: number;\n};\n\nexport type TimelineSubAgentLane = {\n threadId: string;\n lane: number;\n track: TimelineSubAgentBar;\n segments: SessionEventTimelineSegment[];\n};\n\nexport type TimelineToolCallGroup = TimelineGap & {\n id: string;\n segments: SessionEventTimelineSegment[];\n};\n\nexport type TimelineSubAgentGroup = TimelineGap & {\n id: string;\n barId: string;\n segments: SessionEventTimelineSegment[];\n};\n\nexport type TimelineMarkerGroup = TimelineGap & {\n id: string;\n segments: SessionEventTimelineSegment[];\n};\n\nexport const TIMELINE_TYPE = {\n turn: 'turn',\n event: 'event',\n markerGroup: 'markerGroup',\n toolCallGroup: 'toolCallGroup',\n subAgentGroup: 'subAgentGroup',\n} as const;\n\nexport type TimelineHoverTarget =\n | { type: typeof TIMELINE_TYPE.turn; bar: TimelineTurnBar }\n | { type: typeof TIMELINE_TYPE.event; segment: SessionEventTimelineSegment }\n | { type: typeof TIMELINE_TYPE.markerGroup; group: TimelineMarkerGroup }\n | { type: typeof TIMELINE_TYPE.toolCallGroup; group: TimelineToolCallGroup }\n | { type: typeof TIMELINE_TYPE.subAgentGroup; group: TimelineSubAgentGroup };\n\n/** Stable identity used to avoid replacing tooltip state while hovering the same bar. */\nexport function getTimelineHoverTargetId(target: TimelineHoverTarget | null): string {\n if (target == null) return '';\n if (target.type === TIMELINE_TYPE.turn) return target.bar.id;\n if (target.type === TIMELINE_TYPE.event) return target.segment.id;\n return target.group.id;\n}\n\n/** Convert an interval to Chart.js's floating horizontal-bar data shape. */\nexport function getTimelineRange({ startMs, endMs }: TimelineGap): [number, number] {\n return [startMs, endMs];\n}\n\n/** Collapse point events at an identical chart timestamp into one marker and tooltip. */\nexport function groupCoincidentTimelineMarkers(segments: SessionEventTimelineSegment[]): TimelineMarkerGroup[] {\n const groupsByTimestamp = new Map<number, SessionEventTimelineSegment[]>();\n for (const segment of segments) {\n if (!segment.isMarker) continue;\n const group = groupsByTimestamp.get(segment.startMs);\n if (group) group.push(segment);\n else groupsByTimestamp.set(segment.startMs, [segment]);\n }\n return Array.from(groupsByTimestamp, ([startMs, group]) => ({\n id: `marker-group-${group.map(segment => segment.id).join('-')}`,\n startMs,\n endMs: startMs,\n segments: group,\n })).sort((left, right) => left.startMs - right.startMs);\n}\n\nfunction timelineAxisUnit(totalMs: number): { divisorMs: number; suffix: string } {\n if (totalMs < 1_000) return { divisorMs: 1, suffix: 'ms' };\n if (totalMs < 60_000) return { divisorMs: 1_000, suffix: 's' };\n if (totalMs < 3_600_000) return { divisorMs: 60_000, suffix: 'm' };\n return { divisorMs: 3_600_000, suffix: 'h' };\n}\n\n/** Format an axis label as milliseconds, seconds, minutes, or hours by elapsed time. */\nexport function formatTimelineAxisDuration(durationMs: number): string {\n const unit = timelineAxisUnit(durationMs);\n return `${Number((durationMs / unit.divisorMs).toFixed(2))}${unit.suffix}`;\n}\n\nfunction getCleanAxisStepMs(totalMs: number): number {\n const { divisorMs } = timelineAxisUnit(totalMs);\n const target = totalMs / divisorMs / 8;\n if (divisorMs >= 60_000 && target < 1) return Math.max(0.25, Math.ceil(target * 4) / 4) * divisorMs;\n const integerTarget = Math.max(1, target);\n const magnitude = 10 ** Math.floor(Math.log10(integerTarget));\n const normalized = integerTarget / magnitude;\n const multiplier = normalized <= 1 ? 1 : normalized <= 2 ? 2 : normalized <= 5 ? 5 : 10;\n return multiplier * magnitude * divisorMs;\n}\n\n/** Generate clean active-time ticks, translated around fixed visual turn separators. */\nexport function buildTimelineAxisTicks({\n activeTotalMs,\n turnStartsMs,\n turnGapMs,\n}: {\n activeTotalMs: number;\n turnStartsMs: number[];\n turnGapMs: number;\n}): Array<{ value: number }> {\n const stepMs = getCleanAxisStepMs(activeTotalMs);\n const activeTicks: number[] = [];\n for (let activeMs = 0; activeMs < activeTotalMs; activeMs += stepMs) activeTicks.push(activeMs);\n const lastRegularTick = activeTicks.at(-1);\n if (lastRegularTick != null && lastRegularTick > 0 && activeTotalMs - lastRegularTick < stepMs / 4) {\n activeTicks.pop();\n }\n if (activeTicks.at(-1) !== activeTotalMs) activeTicks.push(activeTotalMs);\n return activeTicks.map(activeMs => ({\n value: activeMs + turnStartsMs.slice(1).filter(turnStartMs => turnStartMs <= activeMs).length * turnGapMs,\n }));\n}\n\n/**\n * Derive one background range per turn from all of that turn's segments.\n *\n * Turn numbers can be sparse after filtering or incomplete server data, so\n * `ordinal` is a dense visual position while `turnIndex` remains the source id.\n */\nexport function getTimelineLayout(segments: SessionEventTimelineSegment[]): TimelineLayout {\n const rangesByTurnIndex = new Map<number, TimelineGap>();\n\n for (const segment of segments) {\n const range = rangesByTurnIndex.get(segment.turnIndex);\n if (range) {\n range.startMs = Math.min(range.startMs, segment.startMs);\n range.endMs = Math.max(range.endMs, segment.endMs);\n } else {\n rangesByTurnIndex.set(segment.turnIndex, { startMs: segment.startMs, endMs: segment.endMs });\n }\n }\n\n const ranges = Array.from(rangesByTurnIndex.entries()).sort(([left], [right]) => left - right);\n return {\n turnStartsMs: ranges.map(([, range]) => range.startMs),\n turnOrdinals: new Map(ranges.map(([turnIndex], ordinal) => [turnIndex, ordinal])),\n turnRanges: ranges.map(([turnIndex, range], ordinal) => ({\n turnIndex,\n startMs: range.startMs,\n endMs: range.endMs,\n ordinal,\n })),\n };\n}\n\n/** Touching endpoints do not overlap, allowing adjacent bars to share a row. */\nfunction segmentsOverlap(left: SessionEventTimelineSegment, right: SessionEventTimelineSegment): boolean {\n return left.startMs < right.endMs && right.startMs < left.endMs;\n}\n\n/**\n * Select representative sub-agent tracks for the main event row.\n *\n * Longest-first selection preserves the tracks that explain the most elapsed\n * time; overlapping tracks are still available in dedicated sub-agent lanes.\n */\nexport function pickLongestNonOverlappingSegments(\n segments: SessionEventTimelineSegment[],\n): SessionEventTimelineSegment[] {\n const selected: SessionEventTimelineSegment[] = [];\n for (const segment of [...segments].sort((left, right) => {\n const durationDiff = right.endMs - right.startMs - (left.endMs - left.startMs);\n return durationDiff !== 0 ? durationDiff : left.startMs - right.startMs;\n })) {\n if (selected.some(kept => segmentsOverlap(kept, segment))) continue;\n selected.push(segment);\n }\n return selected.sort((left, right) => left.startMs - right.startMs);\n}\n\n/**\n * Merge transitively overlapping tool calls within the same turn and thread.\n *\n * Concurrent calls would otherwise draw on top of one another in the main\n * event row. The merged bar spans the union and its tooltip lists every member.\n * Calls from different turns/threads never merge even if timestamps overlap.\n */\nexport function groupOverlappingToolCalls(segments: SessionEventTimelineSegment[]): TimelineToolCallGroup[] {\n const groups: TimelineToolCallGroup[] = [];\n for (const segment of [...segments].sort((left, right) => left.startMs - right.startMs || left.endMs - right.endMs)) {\n const current = groups.at(-1);\n if (\n current == null ||\n current.segments[0]?.turnIndex !== segment.turnIndex ||\n current.segments[0]?.threadId !== segment.threadId ||\n segment.startMs >= current.endMs\n ) {\n groups.push({\n id: `tool-call-group-${segment.id}`,\n startMs: segment.startMs,\n endMs: segment.endMs,\n segments: [segment],\n });\n continue;\n }\n current.endMs = Math.max(current.endMs, segment.endMs);\n current.segments.push(segment);\n }\n return groups;\n}\n\n// Each visible main-row bar owns a tooltip containing only runs that overlap it.\n// This avoids pulling in distant runs through a chain of transitive overlaps.\nexport function getSubAgentHoverGroups({\n bars,\n subAgentSegments,\n}: {\n bars: SessionEventTimelineSegment[];\n subAgentSegments: SessionEventTimelineSegment[];\n}): TimelineSubAgentGroup[] {\n return bars.map(bar => ({\n id: `sub-agent-group-${bar.id}`,\n barId: bar.id,\n startMs: bar.startMs,\n endMs: bar.endMs,\n segments: subAgentSegments.filter(\n segment => segment.turnIndex === bar.turnIndex && (segment.id === bar.id || segmentsOverlap(bar, segment)),\n ),\n }));\n}\n\n/**\n * Assign sub-agent tracks to the first reusable non-overlapping lane and attach\n * each thread's child events to that track.\n *\n * `minWidthMs` matches the chart's minimum pixel width in time units, preventing\n * visually widened markers from colliding even when their raw durations do not.\n */\nexport function getSubAgentLanes({\n subAgentSegments,\n threadSegments,\n minWidthMs,\n}: {\n subAgentSegments: SessionEventTimelineSegment[];\n threadSegments: SessionEventTimelineSegment[];\n minWidthMs: number;\n}): TimelineSubAgentLane[] {\n const laneEndsMs: number[] = [];\n const tracks = [...subAgentSegments]\n .sort((left, right) => left.startMs - right.startMs)\n .map(segment => {\n const visualEndMs = Math.max(segment.endMs, segment.startMs + minWidthMs);\n const freeLane = laneEndsMs.findIndex(laneEndMs => laneEndMs <= segment.startMs);\n const lane = freeLane === -1 ? laneEndsMs.length : freeLane;\n laneEndsMs[lane] = visualEndMs;\n return { ...segment, id: `${segment.id}-lane`, lane, visualEndMs };\n });\n\n const childrenByThreadId = new Map<string, SessionEventTimelineSegment[]>();\n for (const segment of threadSegments) {\n if (segment.type === 'sub_agent') continue;\n const children = childrenByThreadId.get(segment.threadId);\n if (children) children.push(segment);\n else childrenByThreadId.set(segment.threadId, [segment]);\n }\n\n return tracks.map(track => ({\n threadId: track.threadId,\n lane: track.lane,\n track,\n segments: childrenByThreadId.get(track.threadId) ?? [],\n }));\n}\n\n/**\n * Collapse real idle time between turns while preserving all within-turn\n * offsets and durations.\n *\n * Session history may contain minutes or days between user messages. Displaying\n * that idle time would squeeze useful execution bars into a few pixels, so each\n * turn is translated to begin where the previous one ended. The chart adds a\n * small fixed visual separator afterward.\n */\nexport function compressInterTurnGaps(segments: SessionEventTimelineSegment[]): SessionEventTimelineSegment[] {\n const rangesByTurnIndex = new Map<number, { turnIndex: number; startMs: number; endMs: number }>();\n for (const segment of segments) {\n const range = rangesByTurnIndex.get(segment.turnIndex);\n if (range) {\n range.startMs = Math.min(range.startMs, segment.startMs);\n range.endMs = Math.max(range.endMs, segment.endMs);\n } else {\n rangesByTurnIndex.set(segment.turnIndex, {\n turnIndex: segment.turnIndex,\n startMs: segment.startMs,\n endMs: segment.endMs,\n });\n }\n }\n\n const shiftsByTurnIndex = new Map<number, number>();\n let previousEndMs = 0;\n for (const [rangeIndex, range] of Array.from(rangesByTurnIndex.values())\n .sort((left, right) => left.turnIndex - right.turnIndex)\n .entries()) {\n const targetStartMs = rangeIndex === 0 ? 0 : previousEndMs;\n const shiftMs = targetStartMs - range.startMs;\n shiftsByTurnIndex.set(range.turnIndex, shiftMs);\n previousEndMs = range.endMs + shiftMs;\n }\n\n return segments.map(segment => {\n const shiftMs = shiftsByTurnIndex.get(segment.turnIndex) ?? 0;\n return { ...segment, startMs: segment.startMs + shiftMs, endMs: segment.endMs + shiftMs };\n });\n}\n\n/** Translate a chart coordinate back to active elapsed time across visual turn separators. */\nexport function getActiveTimelineMs(valueMs: number, gaps: TimelineGap[]): number {\n let activeMs = valueMs;\n for (const gap of gaps) {\n activeMs -= Math.max(0, Math.min(valueMs, gap.endMs) - gap.startMs);\n }\n return Math.max(0, activeMs);\n}\n","import type { ToolApprovalOption as AuiToolApprovalOption, ToolCallMessagePartProps } from '@assistant-ui/react';\nimport { parse as parsePartialJson } from 'partial-json';\n\nimport type { ToolCallStatus } from '../atoms/ToolCallCard.js';\n\nexport type ApprovalOptionView = {\n id: string;\n label: string;\n isAllow: boolean;\n grants?: unknown;\n confirm?: Record<string, unknown>;\n};\n\nexport const SUB_AGENT_TOOL_NAME = 'create_sub_agent';\nexport const ASK_USER_TOOL_NAME = 'ask_user_question';\n\n/** Tool names that should be rendered as a sandbox execution card. */\nexport const SANDBOX_TOOL_NAMES = new Set(['exec', 'sandbox_exec']);\n\n/** MCP meta-tools that wrap actual tool calls. */\nexport const 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) => kind === 'allow-once' || kind === 'allow-always';\n\ntype JsonParseResult = { success: true; value: unknown; isPartial: boolean } | { success: false };\n\nfunction parseJsonIncrementally(content: string): JsonParseResult {\n try {\n return { success: true, value: JSON.parse(content), isPartial: false };\n } catch {\n const trimmed = content.trim();\n if (trimmed[0] !== '{' && trimmed[0] !== '[') return { success: false };\n\n try {\n return { success: true, value: parsePartialJson(content), isPartial: true };\n } catch {\n return { success: false };\n }\n }\n}\n\nfunction isUnknownRecord(value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function 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 = typeof record.question === 'string' ? record.question : undefined;\n const options = Array.isArray(record.options)\n ? record.options.filter((item): item is string => typeof item === 'string')\n : undefined;\n return { question, options };\n } catch {\n return {};\n }\n}\n\nexport function 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\nexport function hasPendingAskUserResponse(part: Pick<ToolCallMessagePartProps, 'interrupt' | 'result'>): boolean {\n return part.interrupt != null && part.result === undefined;\n}\n\nexport function hasPendingToolApproval(\n approval: { approved?: boolean; resolution?: 'cancelled' | 'expired' } | undefined,\n) {\n return approval != null && approval.approved === undefined && approval.resolution === undefined;\n}\n\nexport function buildApprovalOptions(options: readonly AuiToolApprovalOption[] | undefined): ApprovalOptionView[] {\n const declared = options?.filter(o => Object.hasOwn(APPROVAL_OPTION_DEFAULT_LABELS, o.kind));\n if (declared && declared.length > 0) {\n const allow = declared.filter(o => isAllowKind(o.kind));\n const reject = declared.filter(o => !isAllowKind(o.kind));\n const mapped: ApprovalOptionView[] = [...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: o.confirm != null ? (typeof o.confirm === 'object' ? o.confirm : {}) : undefined,\n }));\n if (reject.length === 0) {\n mapped.push({ id: '__deny', label: 'Deny', isAllow: false, 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\nexport function 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\nexport function toStatus(statusType: string | undefined): ToolCallStatus {\n if (statusType === 'complete') return 'success';\n if (statusType === 'incomplete') return 'error';\n return 'running';\n}\n\nexport function parseSandboxArgs(argsText: string | undefined): {\n command?: string;\n intent?: string;\n argsJson?: string;\n} {\n if (!argsText) return {};\n const parsed = parseJsonIncrementally(argsText);\n if (!parsed.success || !isUnknownRecord(parsed.value)) return { argsJson: argsText };\n\n return {\n command: typeof parsed.value.command === 'string' ? parsed.value.command : undefined,\n intent: typeof parsed.value.intent === 'string' ? parsed.value.intent : undefined,\n argsJson: parsed.isPartial ? argsText : JSON.stringify(parsed.value, null, 2),\n };\n}\n\nexport function parseSandboxResult(result: string | undefined): {\n exitCode?: number | null;\n resultText?: string;\n resultJson?: string;\n} {\n if (result === undefined) return {};\n const parsed = parseJsonIncrementally(result);\n if (!parsed.success || !isUnknownRecord(parsed.value)) return { resultText: result };\n\n const response = isUnknownRecord(parsed.value.response) ? parsed.value.response : undefined;\n const exitCode = typeof response?.exitCode === 'number' ? response.exitCode : null;\n const resultText = typeof response?.result === 'string' ? response.result : undefined;\n return {\n exitCode,\n resultText,\n resultJson: parsed.isPartial ? result : JSON.stringify(parsed.value, null, 2),\n };\n}\n\nexport function 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\nexport function 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: unknown = JSON.parse(content);\n return { value: JSON.stringify(parsed, null, 2), isJson: true };\n } catch {\n return { value: content, isJson: false };\n }\n}\n\nexport function getToolResultContent(content: unknown): {\n data: string;\n isJson: boolean;\n} {\n try {\n if (!content) return { isJson: false, data: '' };\n\n const parsedResult = typeof content === 'string' && content.trim().startsWith('{') ? JSON.parse(content) : content;\n\n if (\n typeof parsedResult === 'object' &&\n parsedResult != null &&\n Array.isArray((parsedResult as { content?: unknown }).content)\n ) {\n const text = (parsedResult as { content: Array<{ text?: unknown }> }).content[0]?.text || '';\n const display = getJsonDisplayValue(typeof text === 'string' ? text : JSON.stringify(text));\n return { data: display.value, isJson: display.isJson };\n }\n const display = getJsonDisplayValue(typeof parsedResult === 'string' ? parsedResult : JSON.stringify(parsedResult));\n return { data: display.value, isJson: display.isJson };\n } catch {\n return { data: String(content), isJson: false };\n }\n}\n\nexport function resolveSubAgentMeta(part: ToolCallMessagePartProps): {\n agentName: string;\n instruction: string;\n stepCount: number;\n} {\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 { subAgent?: { title?: string; name?: string; input?: string } } | undefined\n )?.subAgent;\n return {\n agentName:\n subAgent?.title ??\n subAgent?.name ??\n artifactSubAgent?.title ??\n artifactSubAgent?.agentInfo?.name ??\n part.toolName,\n instruction: subAgent?.input ?? artifactSubAgent?.agentInfo?.input ?? '',\n stepCount: part.messages?.length ?? 0,\n };\n}\n\nexport function mcpDisplayName(\n toolName: string,\n mcpServer: string | undefined,\n innerToolName: string | undefined,\n): string {\n if (toolName === 'call_tool' && innerToolName) {\n return mcpServer ? `call_tool: ${innerToolName} (${mcpServer})` : `call_tool: ${innerToolName}`;\n }\n if (toolName === 'get_tool_info' && innerToolName && mcpServer) {\n return `get_tool_info: ${innerToolName} (${mcpServer})`;\n }\n return toolName;\n}\n","import { MAIN_THREAD_ID } from './sessionEventTimeline.js';\nimport type { SessionTurnView } from './sessionTurnViews.js';\nimport { parseSandboxArgs, SANDBOX_TOOL_NAMES } from './toolCallParsing.js';\n\nexport type TimelineEvent = Record<string, unknown> & { type: string };\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value != null;\n}\n\nexport function asTimelineEvent(event: unknown): TimelineEvent | null {\n return isRecord(event) && typeof event.type === 'string' ? { ...event, type: event.type } : null;\n}\n\nexport function readString(record: Record<string, unknown>, camel: string, snake: string): string | undefined {\n const camelValue = record[camel];\n if (typeof camelValue === 'string' && camelValue.length > 0) return camelValue;\n const snakeValue = record[snake];\n return typeof snakeValue === 'string' && snakeValue.length > 0 ? snakeValue : undefined;\n}\n\nexport function parseTimestamp(timestamp: string | undefined): number | null {\n if (timestamp == null) return null;\n const timestampMs = Date.parse(timestamp);\n return Number.isNaN(timestampMs) ? null : timestampMs;\n}\n\nexport function eventCreatedAt(event: TimelineEvent): string | undefined {\n return readString(event, 'createdAt', 'created_at');\n}\n\nexport function eventThreadId(event: TimelineEvent): string {\n return readString(event, 'threadId', 'thread_id') ?? MAIN_THREAD_ID;\n}\n\nexport function eventId(event: TimelineEvent): string {\n return typeof event.id === 'string' ? event.id : `${event.type}-${eventCreatedAt(event) ?? 'unknown'}`;\n}\n\nexport function extractText(content: unknown): string {\n if (typeof content === 'string') return content.trim();\n if (!Array.isArray(content)) return '';\n return content\n .flatMap(item => {\n if (typeof item === 'string') return item ? [item] : [];\n if (isRecord(item) && typeof item.text === 'string' && item.text.length > 0) return [item.text];\n return [];\n })\n .join('\\n')\n .trim();\n}\n\nexport function toolCallsOf(event: TimelineEvent): Record<string, unknown>[] {\n const toolCalls = event.toolCalls ?? event.tool_calls;\n return Array.isArray(toolCalls) ? toolCalls.filter(isRecord) : [];\n}\n\nexport function parentToolCallId(event: TimelineEvent): string | undefined {\n const parent = isRecord(event.parent) ? event.parent : undefined;\n return parent == null ? undefined : readString(parent, 'toolCallId', 'tool_call_id');\n}\n\nexport function terminalCompletedAt(state: unknown): string | undefined {\n return isRecord(state) ? readString(state, 'completedAt', 'completed_at') : undefined;\n}\n\nexport function terminalMessage(state: unknown): string {\n return isRecord(state) && typeof state.message === 'string' ? state.message : '';\n}\n\nexport function terminalStatus(state: unknown): string | undefined {\n return isRecord(state) && typeof state.status === 'string' ? state.status : undefined;\n}\n\nfunction turnInputItems(\n created: SessionTurnView['created'],\n): Array<{ type?: unknown; content?: unknown; approval?: unknown }> {\n const input = Reflect.get(created, 'input');\n if (!Array.isArray(input)) return [];\n return input.flatMap(item => {\n if (typeof item !== 'object' || item == null) return [];\n return [\n {\n ...('type' in item ? { type: item.type } : {}),\n ...('content' in item ? { content: item.content } : {}),\n ...('approval' in item ? { approval: item.approval } : {}),\n },\n ];\n });\n}\n\nexport function getTurnInputType(turn: SessionTurnView): string {\n const item = turnInputItems(turn.created).find(entry => typeof entry.type === 'string');\n return typeof item?.type === 'string' ? item.type : 'user.message';\n}\n\nexport function getTurnInputSummary(turn: SessionTurnView): string {\n const item = turnInputItems(turn.created).find(entry => typeof entry.type === 'string');\n if (item == null) return '';\n if (item.type === 'user.tool_approval') {\n const approval = isRecord(item.approval) ? item.approval : undefined;\n const reason = typeof approval?.reason === 'string' ? approval.reason.trim() : '';\n if (approval?.status === 'deny') return reason.length > 0 ? `Denied: ${reason}` : 'Denied';\n if (approval?.status === 'allow') return 'Approved';\n return 'Tool approval';\n }\n if (item.type === 'user.tool_response') return extractText(item.content) || 'Tool response';\n return extractText(item.content) || 'User message';\n}\n\nexport function getSubAgentDescription(event: TimelineEvent): string {\n const title = typeof event.title === 'string' ? event.title.trim() : '';\n const agentInfo = isRecord(event.agentInfo)\n ? event.agentInfo\n : isRecord(event.agent_info)\n ? event.agent_info\n : undefined;\n const name = typeof agentInfo?.name === 'string' ? agentInfo.name.trim() : '';\n const input = typeof agentInfo?.input === 'string' ? agentInfo.input.trim() : '';\n return title || name || input;\n}\n\nexport function toolCallDescription(toolCall: Record<string, unknown>): string {\n const fn = isRecord(toolCall.function) ? toolCall.function : undefined;\n const name = typeof fn?.name === 'string' ? fn.name : '';\n if (SANDBOX_TOOL_NAMES.has(name) || name === 'code_sandbox') {\n const argumentsJson = typeof fn?.arguments === 'string' ? fn.arguments : undefined;\n const intent = parseSandboxArgs(argumentsJson).intent?.trim();\n return intent != null && intent.length > 0 ? intent : name;\n }\n return name;\n}\n","import { MAIN_THREAD_ID, type SessionEventTimelineSegment } from './sessionEventTimeline.js';\nimport { compressInterTurnGaps } from './sessionEventTimelineChart.js';\nimport {\n asTimelineEvent,\n eventCreatedAt,\n eventId,\n eventThreadId,\n extractText,\n getSubAgentDescription,\n getTurnInputSummary,\n getTurnInputType,\n parentToolCallId,\n parseTimestamp,\n readString,\n terminalCompletedAt,\n terminalMessage,\n terminalStatus,\n toolCallDescription,\n toolCallsOf,\n type TimelineEvent,\n} from './sessionTimelineEvents.js';\nimport type { SessionTurnView } from './sessionTurnViews.js';\n\n/**\n * Convert server turns and events into the transport-independent intervals\n * consumed by the Sessions timeline.\n *\n * The conversion runs in two passes because several bars need a later event\n * to determine their end:\n * - tool calls span from the model event that requested them to `tool.response`;\n * - sub-agent tracks span from `thread.created` to `thread.done`;\n * - approval-gated and sub-agent parent calls are excluded from ordinary tool\n * bars because they have dedicated visual representations.\n *\n * The second pass emits one user marker per turn, then chronological event\n * segments for each thread. Finally, real idle gaps between turns are removed\n * so old sessions remain readable without changing durations inside a turn.\n */\nexport function buildSessionTimelineSegments(turns: SessionTurnView[]): SessionEventTimelineSegment[] {\n const originMs = parseTimestamp(turns[0]?.created.createdAt);\n if (originMs == null) return [];\n\n // Correlation indexes built up front let the emission pass calculate complete\n // intervals without depending on the source event order.\n const toolResponsesByTurnId = new Map<string, Map<string, TimelineEvent>>();\n const approvalRequiredIdsByTurnId = new Map<string, Set<string>>();\n const threadDoneEvents = new Map<string, TimelineEvent>();\n const subAgentToolCallIds = new Set<string>();\n const toolCallRequestsByTurnId = new Map<string, Map<string, { startedAtMs: number; threadId: string }>>();\n let latestMs = originMs;\n\n for (const turn of turns) {\n latestMs = Math.max(latestMs, parseTimestamp(turn.created.createdAt) ?? latestMs);\n latestMs = Math.max(latestMs, parseTimestamp(terminalCompletedAt(turn.done?.state)) ?? latestMs);\n for (const raw of turn.events) {\n const event = asTimelineEvent(raw);\n if (event == null) continue;\n latestMs = Math.max(latestMs, parseTimestamp(eventCreatedAt(event)) ?? latestMs);\n if (event.type === 'tool.response') {\n const toolCallId = readString(event, 'toolCallId', 'tool_call_id');\n if (toolCallId == null) continue;\n const responses = toolResponsesByTurnId.get(turn.turnId) ?? new Map();\n responses.set(toolCallId, event);\n toolResponsesByTurnId.set(turn.turnId, responses);\n } else if (event.type === 'tool.approval_required') {\n const ids = approvalRequiredIdsByTurnId.get(turn.turnId) ?? new Set<string>();\n for (const toolCall of toolCallsOf(event)) {\n if (typeof toolCall.id === 'string') ids.add(toolCall.id);\n }\n approvalRequiredIdsByTurnId.set(turn.turnId, ids);\n } else if (event.type === 'thread.created') {\n const toolCallId = parentToolCallId(event);\n if (toolCallId != null) subAgentToolCallIds.add(toolCallId);\n } else if (event.type === 'thread.done') {\n threadDoneEvents.set(eventThreadId(event), event);\n } else if (event.type === 'model.message') {\n const startedAtMs = parseTimestamp(eventCreatedAt(event));\n if (startedAtMs == null) continue;\n const requests = toolCallRequestsByTurnId.get(turn.turnId) ?? new Map();\n for (const toolCall of toolCallsOf(event)) {\n if (typeof toolCall.id === 'string') {\n requests.set(toolCall.id, { startedAtMs, threadId: eventThreadId(event) });\n }\n }\n toolCallRequestsByTurnId.set(turn.turnId, requests);\n }\n }\n }\n\n const segments: SessionEventTimelineSegment[] = [];\n\n for (const turn of turns) {\n const createdMs = parseTimestamp(turn.created.createdAt);\n if (createdMs == null) continue;\n const turnIndex = turn.turnNumber - 1;\n\n segments.push({\n id: `${turn.turnId}-user`,\n type: 'user',\n title: getTurnInputType(turn),\n description: getTurnInputSummary(turn),\n startMs: createdMs - originMs,\n endMs: createdMs - originMs,\n turnIndex,\n threadId: MAIN_THREAD_ID,\n isMarker: true,\n });\n\n // Model intervals are independent per thread. Using one global previous\n // timestamp would make concurrent sub-agent bars consume each other's time.\n const lastTimestampByThreadId = new Map<string, number>();\n const events = [...turn.events]\n .map(asTimelineEvent)\n .filter((event): event is TimelineEvent => event != null)\n .sort(\n (left, right) => (parseTimestamp(eventCreatedAt(left)) ?? 0) - (parseTimestamp(eventCreatedAt(right)) ?? 0),\n );\n\n for (const event of events) {\n const eventMs = parseTimestamp(eventCreatedAt(event));\n if (eventMs == null) continue;\n const threadId = eventThreadId(event);\n appendEventSegments({\n event,\n eventMs,\n createdMs,\n originMs,\n turn,\n turnIndex,\n threadId,\n lastTimestampByThreadId,\n toolResponsesByTurnId,\n approvalRequiredIdsByTurnId,\n subAgentToolCallIds,\n toolCallRequestsByTurnId,\n threadDoneEvents,\n segments,\n });\n lastTimestampByThreadId.set(threadId, eventMs);\n }\n\n appendTerminalSegment({ turn, turnIndex, originMs, latestMs, segments });\n }\n\n return compressInterTurnGaps(\n segments.map(segment => ({\n ...segment,\n startMs: Math.max(0, segment.startMs),\n endMs: Math.max(0, segment.endMs),\n })),\n ).sort((left, right) => left.startMs - right.startMs || left.endMs - right.endMs);\n}\n\n/**\n * Map one supported server event to zero or more visual segments.\n *\n * New event types should be added here\n * when they have a clear visual category and useful timing semantics.\n */\nfunction appendEventSegments({\n event,\n eventMs,\n createdMs,\n originMs,\n turn,\n turnIndex,\n threadId,\n lastTimestampByThreadId,\n toolResponsesByTurnId,\n approvalRequiredIdsByTurnId,\n subAgentToolCallIds,\n toolCallRequestsByTurnId,\n threadDoneEvents,\n segments,\n}: {\n event: TimelineEvent;\n eventMs: number;\n createdMs: number;\n originMs: number;\n turn: SessionTurnView;\n turnIndex: number;\n threadId: string;\n lastTimestampByThreadId: Map<string, number>;\n toolResponsesByTurnId: Map<string, Map<string, TimelineEvent>>;\n approvalRequiredIdsByTurnId: Map<string, Set<string>>;\n subAgentToolCallIds: Set<string>;\n toolCallRequestsByTurnId: Map<string, Map<string, { startedAtMs: number; threadId: string }>>;\n threadDoneEvents: Map<string, TimelineEvent>;\n segments: SessionEventTimelineSegment[];\n}): void {\n switch (event.type) {\n case 'model.message': {\n const previousMs = lastTimestampByThreadId.get(threadId) ?? createdMs;\n const modelContent = extractText(event.content);\n const responses = toolResponsesByTurnId.get(turn.turnId);\n const approvalIds = approvalRequiredIdsByTurnId.get(turn.turnId);\n\n // A model event can request several tools at once. Each tool gets its own\n // response-bounded interval; overlapping intervals are grouped later by\n // the chart-layout utility into one parallel-tool-call bar.\n for (const toolCall of toolCallsOf(event)) {\n const toolCallId = typeof toolCall.id === 'string' ? toolCall.id : undefined;\n // Skip parent create_sub_agent calls and approval-gated calls; they have their own segments.\n if (toolCallId == null || subAgentToolCallIds.has(toolCallId) || approvalIds?.has(toolCallId)) continue;\n const response = responses?.get(toolCallId);\n const responseMs = response == null ? null : parseTimestamp(eventCreatedAt(response));\n if (responseMs == null || responseMs < eventMs) continue;\n segments.push({\n id: `${eventId(event)}-${toolCallId}`,\n type: 'tool_call',\n title: 'tool.call',\n description: toolCallDescription(toolCall),\n startMs: eventMs - originMs,\n endMs: responseMs - originMs,\n turnIndex,\n threadId,\n });\n }\n\n // The model bar covers processing since the previous event on this thread.\n // Keep an empty root model segment because it may still contain tool calls\n // and therefore represents real model time.\n if (modelContent.length > 0 || threadId === MAIN_THREAD_ID) {\n segments.push({\n id: eventId(event),\n type: 'model',\n title: event.type,\n description: modelContent,\n startMs: Math.max(0, previousMs - originMs),\n endMs: Math.max(0, eventMs - originMs),\n turnIndex,\n threadId,\n isMarker: eventMs <= previousMs,\n });\n }\n return;\n }\n case 'thread.created': {\n // The parent call is represented by this track, while child events are\n // assigned to the same thread id and rendered on the track's lane.\n const parentCallId = parentToolCallId(event);\n const request = parentCallId == null ? undefined : toolCallRequestsByTurnId.get(turn.turnId)?.get(parentCallId);\n if (request != null && request.startedAtMs < eventMs) {\n segments.push({\n id: `${eventId(event)}-waiting`,\n type: 'system',\n title: 'system.waiting_for_sub_agent',\n description: 'System waiting for sub-agent to start executing',\n startMs: request.startedAtMs - originMs,\n endMs: eventMs - originMs,\n turnIndex,\n threadId: request.threadId,\n });\n }\n const doneEvent = threadDoneEvents.get(threadId);\n const doneMs = doneEvent == null ? null : parseTimestamp(eventCreatedAt(doneEvent));\n segments.push({\n id: eventId(event),\n type: 'sub_agent',\n title: event.type,\n description: getSubAgentDescription(event),\n startMs: eventMs - originMs,\n endMs: doneMs != null && doneMs >= eventMs ? doneMs - originMs : eventMs - originMs,\n turnIndex,\n threadId,\n isMarker: doneMs == null || doneMs < eventMs,\n });\n return;\n }\n case 'tool.approval_required':\n case 'tool.response_required':\n case 'mcp.auth_required':\n case 'mcp.initialize':\n case 'sandbox.created':\n // These are point-in-time state transitions, so start and end are equal\n // and Chart.js renders them with the configured minimum marker width.\n segments.push({\n id: eventId(event),\n type:\n event.type === 'tool.approval_required'\n ? 'approval'\n : event.type === 'tool.response_required' || event.type === 'mcp.auth_required'\n ? 'waiting_on_human'\n : 'system',\n title: event.type,\n description:\n event.type === 'tool.approval_required'\n ? 'Approval required'\n : event.type === 'tool.response_required'\n ? 'Waiting for user response'\n : event.type === 'mcp.auth_required'\n ? 'MCP authentication required'\n : event.type === 'mcp.initialize'\n ? 'MCP initialized'\n : 'Sandbox created',\n startMs: eventMs - originMs,\n endMs: eventMs - originMs,\n turnIndex,\n threadId,\n isMarker: true,\n });\n return;\n default:\n return;\n }\n}\n\n/**\n * Add the terminal marker that closes a turn.\n *\n * Errors use the latest observed timestamp when the backend omitted\n * `completed_at`, ensuring failures remain visible instead of being dropped.\n * Running/paused turns have no terminal marker because they have not ended.\n */\nfunction appendTerminalSegment({\n turn,\n turnIndex,\n originMs,\n latestMs,\n segments,\n}: {\n turn: SessionTurnView;\n turnIndex: number;\n originMs: number;\n latestMs: number;\n segments: SessionEventTimelineSegment[];\n}): void {\n const status = terminalStatus(turn.done?.state);\n if (status === 'error') {\n const errorMs = parseTimestamp(terminalCompletedAt(turn.done?.state)) ?? latestMs;\n segments.push({\n id: `${turn.turnId}-error`,\n type: 'error',\n title: 'turn.error',\n description: terminalMessage(turn.done?.state),\n startMs: errorMs - originMs,\n endMs: errorMs - originMs,\n turnIndex,\n threadId: MAIN_THREAD_ID,\n isMarker: true,\n });\n return;\n }\n if (status !== 'done') return;\n const doneMs = parseTimestamp(terminalCompletedAt(turn.done?.state));\n if (doneMs == null) return;\n segments.push({\n id: `${turn.turnId}-turn.done`,\n type: 'system',\n title: 'turn.done',\n description: 'Turn completed',\n startMs: doneMs - originMs,\n endMs: doneMs - originMs,\n turnIndex,\n threadId: MAIN_THREAD_ID,\n isMarker: true,\n });\n}\n","import type { AgentChatServer, ListResult, SessionEventItem } from '../server/types.js';\n\nconst DEFAULT_PAGE_SIZE = 100;\n\n/** Serve preloaded session events through `AgentChatServer.listEvents` pagination. */\nexport function createCachedListEventsBridge(\n itemsAsc: SessionEventItem[],\n options?: { allAtOnce?: boolean },\n): Pick<AgentChatServer, 'listEvents'> {\n const itemsNewestFirst = [...itemsAsc].reverse();\n\n return {\n async listEvents({ limit = DEFAULT_PAGE_SIZE, pageToken }) {\n const offset = pageToken == null || pageToken.length === 0 ? 0 : Number.parseInt(pageToken, 10);\n const start = Number.isFinite(offset) ? offset : 0;\n // Agent Details already fetched the complete history; one page prevents\n // synthetic display boundaries from making the runtime stop before older turns.\n const pageSize = options?.allAtOnce === true ? itemsNewestFirst.length : limit;\n const data = itemsNewestFirst.slice(start, start + pageSize);\n const nextOffset = start + pageSize;\n const nextPageToken = nextOffset < itemsNewestFirst.length ? String(nextOffset) : undefined;\n const page: ListResult<SessionEventItem> = { data };\n return nextPageToken == null ? page : { ...page, nextPageToken };\n },\n };\n}\n","import type { SessionEventItem } from '../server/types.js';\n\ntype TurnCreatedEvent = Extract<SessionEventItem['event'], { type: 'turn.created' }>;\ntype TurnDoneEvent = Extract<SessionEventItem['event'], { type: 'turn.done' }>;\ntype TurnEvent = Exclude<SessionEventItem['event'], TurnCreatedEvent | TurnDoneEvent>;\n\nexport type SessionTurnView = {\n turnId: string;\n turnNumber: number;\n showHeader: boolean;\n created: TurnCreatedEvent;\n done?: TurnDoneEvent;\n events: TurnEvent[];\n totalTokens?: number;\n inputTokens?: number;\n outputTokens?: number;\n cachedTokens?: number;\n totalCostInUsd?: number;\n durationMs?: number;\n};\n\ntype TurnGroup = {\n created?: TurnCreatedEvent;\n done?: TurnDoneEvent;\n events: TurnEvent[];\n};\n\nconst RENDERABLE_INPUT_TYPES = new Set(['user.message', 'user.tool_approval', 'user.tool_response']);\n\nfunction timestampMs(createdAt: string): number {\n const value = Date.parse(createdAt);\n return Number.isNaN(value) ? 0 : value;\n}\n\nfunction isRenderableTurn(created: TurnCreatedEvent): boolean {\n const input = Reflect.get(created, 'input');\n if (!Array.isArray(input)) return false;\n return input.some(item => {\n if (typeof item !== 'object' || item == null || !('type' in item)) return false;\n const type = Reflect.get(item, 'type');\n return typeof type === 'string' && RENDERABLE_INPUT_TYPES.has(type);\n });\n}\n\nfunction readMetricNumber(metrics: object, camel: string, snake: string): number | undefined {\n const camelValue = Reflect.get(metrics, camel);\n if (typeof camelValue === 'number' && Number.isFinite(camelValue)) return camelValue;\n const snakeValue = Reflect.get(metrics, snake);\n return typeof snakeValue === 'number' && Number.isFinite(snakeValue) ? snakeValue : undefined;\n}\n\nfunction metricsFromTerminalState(state: unknown): {\n totalTokens?: number;\n inputTokens?: number;\n outputTokens?: number;\n cachedTokens?: number;\n totalCostInUsd?: number;\n} {\n if (typeof state !== 'object' || state == null || !('status' in state)) {\n return {};\n }\n const status = Reflect.get(state, 'status');\n if (status !== 'done' && status !== 'cancelled' && status !== 'error') {\n return {};\n }\n const metrics = Reflect.get(state, 'metrics');\n if (metrics == null || typeof metrics !== 'object') {\n return {};\n }\n const explicitTotal = readMetricNumber(metrics, 'totalTokens', 'total_tokens');\n const rawInputTokens = readMetricNumber(metrics, 'totalInputTokens', 'total_input_tokens');\n const outputTokens = readMetricNumber(metrics, 'totalOutputTokens', 'total_output_tokens');\n const cacheRead = readMetricNumber(metrics, 'totalCacheReadTokens', 'total_cache_read_tokens');\n const cacheWrite = readMetricNumber(metrics, 'totalCacheWriteTokens', 'total_cache_write_tokens');\n const totalCostInUsd = readMetricNumber(metrics, 'totalCostInUsd', 'total_cost_in_usd');\n const cachedTokens =\n cacheRead !== undefined || cacheWrite !== undefined ? (cacheRead ?? 0) + (cacheWrite ?? 0) : undefined;\n // Input in UI breakdowns is uncached so Input + Cached + Output does not double-count cache.\n const inputTokens = rawInputTokens !== undefined ? Math.max(0, rawInputTokens - (cachedTokens ?? 0)) : undefined;\n const totalTokens =\n explicitTotal ??\n (rawInputTokens !== undefined || outputTokens !== undefined\n ? (rawInputTokens ?? 0) + (outputTokens ?? 0)\n : undefined);\n return {\n ...(totalTokens !== undefined ? { totalTokens } : {}),\n ...(inputTokens !== undefined ? { inputTokens } : {}),\n ...(outputTokens !== undefined ? { outputTokens } : {}),\n ...(cachedTokens !== undefined ? { cachedTokens } : {}),\n ...(totalCostInUsd !== undefined ? { totalCostInUsd } : {}),\n };\n}\n\n/**\n * Build canonical ascending turn groups from durable session events.\n * Pair by turnId so interleaved turn.created / turn.done still match; ignore\n * orphan terminal or content events that never had a turn.created.\n */\nexport function buildSessionTurnViews(itemsAsc: SessionEventItem[]): SessionTurnView[] {\n const groupsByTurnId = new Map<string, TurnGroup>();\n\n for (const item of itemsAsc) {\n const { turnId, event } = item;\n const group = groupsByTurnId.get(turnId) ?? { events: [] };\n\n if (event.type === 'turn.created') {\n group.created = event;\n } else if (event.type === 'turn.done') {\n group.done = event;\n } else {\n group.events.push(event);\n }\n groupsByTurnId.set(turnId, group);\n }\n\n // Number only renderable turns so cards and the timeline share one index.\n const groups = Array.from(groupsByTurnId.entries())\n .flatMap(([turnId, group]) =>\n group.created === undefined || !isRenderableTurn(group.created)\n ? []\n : [{ turnId, created: group.created, group }],\n )\n .sort((left, right) => timestampMs(left.created.createdAt) - timestampMs(right.created.createdAt));\n\n return groups.map(({ turnId, created, group }, index) => {\n const done = group.done;\n group.events.sort((left, right) => timestampMs(left.createdAt) - timestampMs(right.createdAt));\n\n return {\n turnId,\n turnNumber: index + 1,\n showHeader: true,\n created,\n ...(done === undefined\n ? {}\n : {\n done,\n durationMs: Math.max(0, timestampMs(done.createdAt) - timestampMs(created.createdAt)),\n ...metricsFromTerminalState(done.state),\n }),\n events: group.events,\n };\n });\n}\n","'use client';\n\nimport { useActionBarCopy, useMessageError, useThreadIsRunning, type PartState } from '@assistant-ui/core/react';\nimport { MessagePrimitive, useAuiState, type EnrichedPartState, type GroupByContext } from '@assistant-ui/react';\nimport { useTrueFoundryResumeUnavailable } from '@truefoundry/assistant-ui-runtime';\n\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { computeAgentStepsSplit } from '../utils/computeAgentStepsSplit.js';\nimport { AgentStepsContainer } from './AgentStepsContainer.js';\nimport { AssistantTextContainer } from './AssistantTextContainer.js';\nimport { MessageImageContainer } from './MessageImageContainer.js';\nimport { ReasoningContainer } from './ReasoningContainer.js';\nimport { ToolCallContainer } from './ToolCallContainer.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 MessageActionBar = useSlot('MessageActionBar');\n const MessageErrorBanner = useSlot('MessageErrorBanner');\n const MessageIndicator = useSlot('MessageIndicator');\n const isThreadRunning = useThreadIsRunning();\n const resumeUnavailable = useTrueFoundryResumeUnavailable();\n const error = useMessageError();\n const createdAt = useAuiState(s => s.message.createdAt);\n const isMessageRunning = useAuiState(s => s.message.status?.type === 'running');\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, isMessageRunning);\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 return (\n <MessagePrimitive.Root data-role=\"assistant\">\n <AssistantMessageBubble\n error={error !== undefined ? <MessageErrorBanner message={String(error)} /> : undefined}\n actionBar={\n !isThreadRunning ? <MessageActionBar isCopied={isCopied} onCopy={copy} createdAt={createdAt} /> : undefined\n }\n >\n <MessagePrimitive.GroupedParts groupBy={groupBy}>\n {({ part, children }) => {\n switch (part.type) {\n case 'group-agentSteps':\n return (\n <AgentStepsContainer toolCount={toolCount} thinkingCount={thinkingCount} hasFinal={hasFinal}>\n {children}\n </AgentStepsContainer>\n );\n case 'group-reasoning':\n return <ReasoningContainer group={part as ThreadGroupPart} />;\n case 'text': {\n const index = parts.findIndex(p => p === part);\n // Intermediate text inside Agent steps: muted + indented vs final answer\n if (index >= 0 && index < cutIndex) {\n return (\n <div className=\"mb-2 ml-[1.75rem] text-xs text-text-secondary [&_.markdown-body]:text-inherit\">\n <AssistantTextContainer />\n </div>\n );\n }\n return <AssistantTextContainer />;\n }\n case 'reasoning':\n case 'tool-call':\n case 'image':\n case 'data':\n return <AssistantLeafPartContainer part={part} />;\n case 'indicator':\n return resumeUnavailable ? null : <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 type AgentStepPart = {\n type: PartState['type'];\n text?: string;\n};\n\nexport interface AgentStepsSplitResult {\n cutIndex: number;\n hasFinal: boolean;\n toolCount: number;\n thinkingCount: number;\n}\n\nexport function computeAgentStepsSplit(parts: readonly AgentStepPart[], isRunning: boolean): 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.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 // Only apply the 500-char holdback when there are actual agent steps (tool calls or\n // reasoning) before the text. For pure-text responses the text is always the final\n // answer and must stream directly, not be hidden inside the \"Agent steps\" accordion.\n const hasAgentStepsBeforeCut = parts.slice(0, cutIdx).some(p => p.type === 'tool-call' || p.type === 'reasoning');\n\n const finalConfirmed = finalTexts.length > 0 && (!isRunning || trailingChars >= 500 || !hasAgentStepsBeforeCut);\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 { useEffect, useRef, useState, 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}\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}: 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 onToggle={() => setExpanded(prev => !prev)}\n >\n {children as ReactNode}\n </AgentStepsCard>\n );\n}\n","'use client';\n\nimport {\n useAuiState,\n useSmooth,\n type MessagePartState,\n type ReasoningMessagePart,\n type TextMessagePart,\n} from '@assistant-ui/react';\nimport { useTrueFoundryDownloadSandboxFile } from '@truefoundry/assistant-ui-runtime';\nimport { useCallback, useMemo, useRef } from 'react';\n\nimport { MARKDOWN_SMOOTH_BACKLOG_CHARS, useThrottledMarkdownText } from '../hooks/useThrottledMarkdownText.js';\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport { useToasterOptional } from './ToasterContainer.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 toaster = useToasterOptional();\n const downloadSandboxFile = useTrueFoundryDownloadSandboxFile();\n // The download closure changes as the turn streams; a ref keeps onDownloadArtifact stable so\n // OpenUI does not remount.\n const downloadRef = useRef({ downloadSandboxFile, toaster });\n downloadRef.current = { downloadSandboxFile, toaster };\n const partState = useAuiState(s => s.part as MessagePartState & (TextMessagePart | ReasoningMessagePart));\n\n // Preserve the typewriter effect while it keeps pace. If its visible prefix falls too far\n // behind the raw stream, latch this part into bounded latest-prefix snapshots instead of\n // animating an ever-growing queue. We intentionally do not re-enable useSmooth for this part:\n // its private cursor still points at the old prefix and could visibly rewind the message.\n const pacedModeRef = useRef(false);\n const smoothedPart = useSmooth(\n partState,\n pacedModeRef.current\n ? false\n : {\n drainMs: 150,\n maxCharIntervalMs: 4,\n maxCharsPerFrame: 128,\n minCommitMs: 48,\n },\n );\n\n const networkComplete = partState.status?.type !== 'running';\n const smoothLag = partState.text.length - smoothedPart.text.length;\n if (!pacedModeRef.current && !networkComplete && smoothLag >= MARKDOWN_SMOOTH_BACKLOG_CHARS) {\n pacedModeRef.current = true;\n }\n const usePacedMode = pacedModeRef.current;\n\n const pacedText = useThrottledMarkdownText(partState.text, {\n enabled: usePacedMode,\n isComplete: networkComplete,\n });\n\n const text = usePacedMode ? pacedText : smoothedPart.text;\n // true while network stream is active OR while reveal/paced commit is still catching up\n const isStreaming = usePacedMode\n ? !networkComplete || text !== partState.text\n : smoothedPart.status?.type === 'running';\n\n const handleDownloadArtifact = useCallback(async (path: string) => {\n const { downloadSandboxFile, toaster } = downloadRef.current;\n try {\n triggerBrowserDownload(await downloadSandboxFile(path), filenameFromPath(path));\n } catch (error) {\n if (toaster != null) {\n toaster.showError(error);\n } else {\n console.error('Failed to download sandbox artifact', error);\n }\n }\n }, []);\n\n // Skip markdown re-parse when a raw SSE tick did not advance the committed display text.\n return useMemo(\n () => <Markdown content={text} isStreaming={isStreaming} onDownloadArtifact={handleDownloadArtifact} />,\n [Markdown, text, isStreaming, handleDownloadArtifact],\n );\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\n/**\n * Maximum tolerated gap between the raw stream and the typewriter reveal.\n * Beyond this point, animating every queued character delays the response noticeably, so the\n * container switches to paced snapshots of the latest raw prefix.\n */\nexport const MARKDOWN_SMOOTH_BACKLOG_CHARS = 4 * 1024;\n\n/**\n * Limits catch-up rendering to roughly 10 updates per second: frequent enough to keep streamed\n * text responsive, while leaving enough main-thread time for full-document Markdown parsing and\n * syntax highlighting to finish before the next snapshot.\n */\nexport const LARGE_MARKDOWN_THROTTLE_MS = 100;\n\n/**\n * Provides bounded latest-prefix snapshots after the typewriter reveal falls too far behind.\n *\n * Enabling the hook immediately catches up to the current raw prefix, then coalesces subsequent\n * stream updates to one commit per `throttleMs`. Completion always bypasses the timer so the final\n * document is exact. While disabled, the hook mirrors `text` and stays ready for a monotonic\n * transition into catch-up mode.\n */\nexport function useThrottledMarkdownText(\n text: string,\n {\n isComplete,\n enabled,\n throttleMs = LARGE_MARKDOWN_THROTTLE_MS,\n }: { isComplete: boolean; enabled: boolean; throttleMs?: number },\n): string {\n const [committed, setCommitted] = useState(text);\n const lastCommittedRef = useRef(text);\n const lastCommitAtRef = useRef(Date.now());\n const pendingRef = useRef(text);\n const wasEnabledRef = useRef(enabled);\n\n useEffect(() => {\n pendingRef.current = text;\n\n const commit = (value: string) => {\n // A stale timer must never replace a newer visible prefix with an older one.\n if (value.length < lastCommittedRef.current.length && value !== lastCommittedRef.current) {\n return;\n }\n lastCommittedRef.current = value;\n lastCommitAtRef.current = Date.now();\n setCommitted(value);\n };\n\n if (!enabled) {\n wasEnabledRef.current = false;\n lastCommittedRef.current = text;\n lastCommitAtRef.current = Date.now();\n setCommitted(text);\n return;\n }\n\n // Clear the accumulated reveal backlog once; only future growth is throttled.\n if (!wasEnabledRef.current) {\n wasEnabledRef.current = true;\n commit(text);\n return;\n }\n\n if (lastCommittedRef.current === text) return;\n\n if (isComplete) {\n commit(text);\n return;\n }\n\n const elapsed = Date.now() - lastCommitAtRef.current;\n if (elapsed >= throttleMs) {\n commit(text);\n return;\n }\n\n const id = setTimeout(() => {\n commit(pendingRef.current);\n }, throttleMs - elapsed);\n return () => clearTimeout(id);\n }, [text, isComplete, enabled, throttleMs]);\n\n return enabled ? committed : text;\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 => (s.part.type === 'image' ? s.part.filename : undefined));\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 { useAuiState } from '@assistant-ui/react';\nimport { useCallback, useRef, useState } from '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 {\n MessagePartPrimitive,\n MessagePrimitive,\n useToolCallElapsed,\n type ToolApprovalResponse,\n type ToolCallMessagePartComponent,\n type ToolCallMessagePartProps,\n} from '@assistant-ui/react';\nimport { useTrueFoundryRespondToToolApproval } from '@truefoundry/assistant-ui-runtime';\nimport { useState } from 'react';\n\nimport { useSlot } from '../theme/SlotsProvider.js';\nimport {\n ASK_USER_TOOL_NAME,\n MCP_META_TOOLS,\n SANDBOX_TOOL_NAMES,\n SUB_AGENT_TOOL_NAME,\n buildApprovalOptions,\n formatDuration,\n getAskUserAnswerResult,\n getJsonDisplayValue,\n getToolResultContent,\n hasPendingAskUserResponse,\n hasPendingToolApproval,\n mcpDisplayName,\n parseAskUserQuestionArgs,\n parseMcpToolArgs,\n parseSandboxArgs,\n parseSandboxResult,\n resolveSubAgentMeta,\n toStatus,\n} from '../utils/toolCallParsing.js';\nimport { AssistantTextContainer } from './AssistantTextContainer.js';\nimport { NestedApprovalBridgeContext, useNestedApprovalBridge } from './nestedApprovalBridge.js';\nimport { SandboxToolCallContainer } from './SandboxToolCallContainer.js';\nimport { ToolApprovalContainer } from './ToolApprovalContainer.js';\nimport { ToolCallContentBlockContainer } from './ToolCallContentBlockContainer.js';\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 ToolApprovalSlot({ part }: { part: ToolCallMessagePartProps }) {\n const isNestedReadonly = useNestedApprovalBridge();\n const respondToNestedApproval = useTrueFoundryRespondToToolApproval();\n\n const respond = (response: ToolApprovalResponse) => {\n if (!isNestedReadonly) {\n part.respondToApproval(response);\n return;\n }\n // Readonly nested thread: use this part's approval id, not the outer\n // create_sub_agent tool (which usually has no approval of its own).\n if (part.approval == null) return;\n\n let approved: boolean | undefined;\n let optionId: string | undefined;\n if ('approved' in response) {\n approved = response.approved;\n } else if ('optionId' in response) {\n const option = buildApprovalOptions(part.approval.options).find(o => o.id === response.optionId);\n if (option == null) return;\n approved = option.isAllow;\n optionId = response.optionId;\n }\n if (approved === undefined) return;\n\n respondToNestedApproval({\n approvalId: part.approval.id,\n approved,\n ...(optionId != null && optionId !== '__allow' && optionId !== '__deny' ? { optionId } : {}),\n ...('reason' in response && response.reason != null ? { reason: response.reason } : {}),\n });\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 argsText={part.argsText}\n options={\n buildApprovalOptions(part.approval?.options) as import('./ToolApprovalContainer.js').ToolApprovalOption[]\n }\n onSelectOption={onSelectOption}\n />\n );\n}\n\nfunction RequestResponseSlots({\n request,\n response,\n}: {\n request: { value: string; isJson: boolean };\n response: { data: string; isJson: boolean };\n}) {\n return {\n requestSlot: request.value ? (\n <ToolCallContentBlockContainer\n title=\"Request\"\n content={request.value}\n isJson={request.isJson}\n maxHeight=\"10.5rem\"\n />\n ) : response.data ? (\n <ToolCallContentBlockContainer title=\"Request\" content=\"{}\" isJson maxHeight=\"10.5rem\" />\n ) : undefined,\n responseSlot: response.data ? (\n <ToolCallContentBlockContainer title=\"Response\" content={response.data} isJson={response.isJson} resizable />\n ) : undefined,\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 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] = useState(isRequiresAction);\n if (isRequiresAction !== prevRequiresAction) {\n setPrevRequiresAction(isRequiresAction);\n if (isRequiresAction) setExpanded(true);\n }\n\n const showApproval = isRequiresAction && hasPendingToolApproval(part.approval);\n\n const durationText = elapsedMs === undefined ? undefined : formatDuration(elapsedMs);\n const status = toStatus(part.status?.type);\n const onToggle = () => setExpanded(prev => !prev);\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 { agentName, instruction, stepCount } = resolveSubAgentMeta(part);\n\n return (\n <div data-slot=\"tool-call-card\" data-variant=\"sub-agent\" className=\"w-full\">\n <SubAgentCard\n status={status}\n expanded={expanded}\n onToggle={onToggle}\n durationText={durationText}\n agentName={agentName}\n instruction={instruction}\n stepCount={stepCount}\n >\n <NestedApprovalBridgeContext.Provider value={true}>\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 } = parseSandboxResult(resultString);\n return (\n <SandboxToolCallContainer\n name={part.toolName}\n intent={intent}\n status={status}\n expanded={expanded}\n onToggle={onToggle}\n durationText={durationText}\n command={command}\n exitCode={exitCode}\n argsJson={argsJson}\n resultText={resultText}\n resultJson={resultJson}\n />\n );\n }\n\n if (MCP_META_TOOLS.has(part.toolName)) {\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 const slots = RequestResponseSlots({\n request: argsDisplay,\n response: resultDisplay,\n });\n return (\n <ToolCallCard\n toolName={`Listing tools · ${mcpServer}`}\n icon=\"mcp-server\"\n expanded={expanded}\n onToggle={onToggle}\n awaiting={status === 'running'}\n awaitingText={durationText ?? 'Awaiting Response…'}\n showResponseLine={status !== 'running' && !!resultDisplay.data}\n mcpServerName={mcpServer}\n {...slots}\n />\n );\n }\n\n const inputDisplay = input !== undefined ? getJsonDisplayValue(JSON.stringify(input, null, 2)) : argsDisplay;\n const slots = RequestResponseSlots({\n request: inputDisplay,\n response: resultDisplay,\n });\n\n return (\n <ToolCallCard\n toolName={mcpDisplayName(part.toolName, mcpServer, innerToolName)}\n icon=\"mcp-server\"\n expanded={expanded}\n onToggle={onToggle}\n awaiting={status === 'running'}\n awaitingText={durationText ?? 'Awaiting Response…'}\n showResponseLine={status !== 'running' && resultDisplay.data !== undefined}\n mcpServerName={mcpServer}\n {...slots}\n approvalSlot={showApproval ? <ToolApprovalSlot part={part} /> : undefined}\n />\n );\n }\n\n const argsDisplay = getJsonDisplayValue(part.argsText);\n const resultDisplay = getToolResultContent(part.result);\n const slots = RequestResponseSlots({\n request: argsDisplay,\n response: resultDisplay,\n });\n\n return (\n <ToolCallCard\n toolName={part.toolName}\n expanded={expanded}\n onToggle={onToggle}\n awaiting={status === 'running'}\n awaitingText={durationText ?? 'Awaiting Response…'}\n showResponseLine={status !== 'running' && resultDisplay.data !== undefined}\n {...slots}\n approvalSlot={showApproval ? <ToolApprovalSlot part={part} /> : undefined}\n />\n );\n};\n","'use client';\n\nimport { createContext, useContext } from 'react';\n\n/**\n * Sub-agent tool calls render inside a read-only nested thread\n * (`MessagePartPrimitive.Messages`), so `part.respondToApproval` throws.\n * When this flag is set, `ToolApprovalSlot` routes Allow/Deny through\n * `useTrueFoundryRespondToToolApproval()` using the *nested* tool's\n * approval id (not the outer `create_sub_agent` part).\n */\nexport const NestedApprovalBridgeContext = createContext(false);\n\nexport function useNestedApprovalBridge(): boolean {\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<SandboxToolCallCardProps, 'viewMode' | 'hasContent' | 'onViewModeChange'>,\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 }, [props.argsJson, props.command, props.resultJson, props.resultText, viewMode]);\n\n return <SandboxToolCallCard {...props} viewMode={viewMode} hasContent={hasContent} onViewModeChange={setViewMode} />;\n}\n","'use client';\n\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { ApprovalOption } from '../atoms/ToolApprovalBar.js';\n\nimport { parseMcpToolArgs } from '@/utils/toolCallParsing.js';\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 argsText?: string;\n options: ToolApprovalOption[];\n onSelectOption: (optionId: string, reason?: string) => void;\n};\n\nexport function ToolApprovalContainer({\n toolName = '',\n argsText,\n options,\n onSelectOption,\n}: ToolApprovalContainerProps) {\n const ToolApprovalBar = useSlot('ToolApprovalBar');\n const { mcpServer, innerToolName } = parseMcpToolArgs(argsText);\n const displayToolName = innerToolName && mcpServer ? `${innerToolName} (${mcpServer})` : toolName;\n const [selectedDenyOptionId, setSelectedDenyOptionId] = useState<string | null>(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(option => option.id === selectedDenyOptionId);\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={displayToolName}\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(props: ToolCallContentBlockProps) {\n const ToolCallContentBlock = useSlot('ToolCallContentBlock');\n const { isJson, onContentHeightChange: notifyContentHeightChange, resizable } = props;\n const [fullscreen, setFullscreen] = useState(false);\n const [contentHeightRem, setContentHeightRem] = useState<number>();\n const observerRef = useRef<ResizeObserver | null>(null);\n const contentNodeRef = useRef<HTMLDivElement | null>(null);\n const hasMeasuredRef = useRef(false);\n\n const contentRef = useCallback(\n (node: HTMLDivElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n contentNodeRef.current = node;\n hasMeasuredRef.current = false;\n if (node == null) return;\n\n setContentHeightRem(undefined);\n if (!resizable) return;\n\n const updateHeight = () => {\n if (!hasMeasuredRef.current && isJson !== false) return;\n const renderedHeight = node.getBoundingClientRect().height;\n const height = hasMeasuredRef.current && renderedHeight > 0 ? renderedHeight : node.scrollHeight;\n hasMeasuredRef.current = true;\n setContentHeightRem(height / 16);\n };\n updateHeight();\n observerRef.current = new ResizeObserver(updateHeight);\n observerRef.current.observe(node);\n },\n [isJson, resizable],\n );\n\n const onContentHeightChange = useCallback(\n (height: number) => {\n const node = contentNodeRef.current;\n if (node == null) return;\n const renderedHeight = node.getBoundingClientRect().height;\n hasMeasuredRef.current = true;\n setContentHeightRem((renderedHeight > 0 ? renderedHeight : Math.max(height, node.scrollHeight)) / 16);\n notifyContentHeightChange?.(height);\n },\n [notifyContentHeightChange],\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 onContentHeightChange={onContentHeightChange}\n />\n );\n}\n","'use client';\n\nimport { AssistantRuntimeProvider, useExternalStoreRuntime, type ThreadMessageLike } from '@assistant-ui/react';\nimport type { ReactNode } from 'react';\n\nimport { SlotsProvider, type SlotOverrides } from '../theme/SlotsProvider.js';\n\n/** Read-only assistant-ui runtime for one turn's projected messages. */\nexport function ReadOnlySessionTurnRuntime({\n messages,\n slotOverrides,\n children,\n}: {\n messages: ThreadMessageLike[];\n slotOverrides?: SlotOverrides;\n children: ReactNode;\n}) {\n const runtime = useExternalStoreRuntime<ThreadMessageLike>({\n messages,\n isRunning: false,\n convertMessage: message => message,\n onNew: async () => {},\n });\n\n const tree = <AssistantRuntimeProvider runtime={runtime}>{children}</AssistantRuntimeProvider>;\n if (slotOverrides == null) {\n return tree;\n }\n return <SlotsProvider overrides={slotOverrides}>{tree}</SlotsProvider>;\n}\n","'use client';\n\nimport { useActionBarCopy, useActionBarEdit, useThreadIsRunning } from '@assistant-ui/core/react';\nimport { MessagePrimitive, useAui, useAuiState } from '@assistant-ui/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 aui = useAui();\n const createdAt = useAuiState(s => s.message.createdAt);\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 const { edit, disabled: editDisabled } = useActionBarEdit();\n const { copy, isCopied } = useActionBarCopy({\n copyToClipboard: value => navigator.clipboard.writeText(value),\n });\n\n return (\n <MessagePrimitive.Root data-role=\"user\">\n <UserMessageBubble\n text={text}\n attachments={<MessageAttachmentsContainer />}\n editAction={\n !isRunning ? (\n <UserMessageActionBar\n isCopied={isCopied}\n editDisabled={editDisabled}\n createdAt={createdAt}\n onCopy={copy}\n onEdit={edit}\n onRetry={() => {\n aui.message().composer().beginEdit();\n aui.message().composer().send({ startRun: true });\n }}\n />\n ) : undefined\n }\n />\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 AttachmentPreviewDialog = useSlot('AttachmentPreviewDialog');\n const AttachmentCard = useSlot('AttachmentCard');\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 AttachmentPreviewDialog = useSlot('AttachmentPreviewDialog');\n const AttachmentCard = useSlot('AttachmentCard');\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 { useAuiState } from '@assistant-ui/react';\nimport { useEffect, useState } from '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"],"mappings":"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","names":["React","jsx","jsxs","jsx","React","useContext","jsx","React","jsx","jsxs","React","jsx","React","createContext","useContext","useMemo","React","jsx","React","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","jsx","jsxs","jsx","Markdown","jsx","jsxs","jsx","SyntaxHighlighter","useState","createContext","useContext","useState","jsx","jsxs","createContext","Toast","ToastStack","useState","useContext","React","jsx","React","React","useId","useState","jsx","jsxs","useState","useId","React","Fragment","jsx","jsxs","useState","Fragment","jsx","jsxs","useCallback","useEffect","useState","useCallback","useCallback","jsx","jsx","jsxs","AgentDetailsHeader","AgentDetailsTabs","AgentDetailsUnavailable","AgentOverview","AgentSessions","AgentCodeSnippets","useState","useCallback","useEffect","jsx","jsxs","jsx","jsxs","jsx","jsxs","jsx","AgentSessionsFilters","jsx","jsxs","AgentMetricCard","AgentMetricChart","AgentMetricsTimeRangeFilter","jsx","jsxs","useEffect","useState","useLayoutEffect","useRef","useState","createPortal","jsx","jsxs","useState","useRef","useLayoutEffect","createPortal","jsx","jsxs","useState","useEffect","Fragment","jsx","jsxs","eventType","jsx","jsxs","jsx","jsxs","useEffect","useRef","useState","useCallback","useEffect","useRef","useState","useEffect","useState","useState","useRef","useCallback","useEffect","useEffect","useId","useRef","useState","Fragment","jsx","jsxs","useState","useRef","useId","useEffect","jsx","jsxs","useState","useRef","useEffect","jsx","jsxs","Suspense","useEffect","useMemo","useState","jsx","jsxs","AgentSessions","AgentSessionsFilters","useState","useEffect","useMemo","Suspense","useCallback","useEffect","useState","jsx","jsxs","jsx","jsxs","jsx","jsxs","Fragment","jsx","jsxs","useState","useEffect","useCallback","useEffect","useState","Fragment","jsx","jsxs","useState","useEffect","jsx","jsxs","useState","jsx","useState","jsx","jsxs","jsx","jsxs","jsx","useState","Fragment","jsx","jsxs","useState","useState","jsx","jsxs","useState","jsx","jsxs","useCallback","useState","jsx","jsxs","MonacoEditorCore","useState","useCallback","jsx","jsxs","jsx","jsxs","ComposerLeftSection","ComposerRightSection","ComposerSendButton","useEffect","useMemo","useState","Fragment","jsx","jsxs","AgentModelConfigModal","AgentResourceConfigModal","AgentRuntimeConfigModal","AgentInstructionsDrawer","useState","useMemo","useEffect","useEffect","useState","useState","useEffect","jsx","jsxs","Fragment","jsx","jsxs","displayModelLabel","jsx","jsxs","formatTokens","displayModelLabel","useId","useRef","useState","useEffect","useId","useRef","useLayoutEffect","useState","jsx","jsxs","useRef","useId","useEffect","jsx","jsxs","useId","useRef","useState","useState","useCallback","useEffect","useMemo","useRef","useState","useState","useMemo","useRef","useCallback","useEffect","useCallback","useEffect","useRef","useState","jsx","sizeClasses","Fragment","jsx","jsxs","useState","useEffect","useId","useRef","jsx","jsxs","useRef","useId","useEffect","jsx","AgentModelEditorContent","useId","useState","jsx","jsxs","useId","AgentModelSettingsContent","useState","jsx","jsxs","jsx","AgentResourceEditorContent","jsx","AgentMcpEditorContent","AgentSkillsEditorContent","jsx","jsxs","jsx","AgentRuntimeEditorContent","jsx","AgentRuntimeConfigFields","jsx","jsxs","CatalogRow","jsx","jsx","jsxs","useSyncExternalStore","useTrueFoundryAgentSpec","useEffect","useId","useRef","useState","useEffect","useRef","jsx","jsxs","useRef","useEffect","Fragment","jsx","jsxs","useTrueFoundryAgentSpec","useState","useRef","useId","useEffect","jsx","jsxs","DraftCompositeSelector","DraftAgentConfigTrigger","DraftModelSelector","useTrueFoundryAgentSpec","useTrueFoundryUpdateAgentSpec","useCallback","useEffect","useId","useMemo","useRef","useState","Fragment","jsx","jsxs","useTrueFoundryAgentSpec","useTrueFoundryUpdateAgentSpec","useState","useRef","useId","useMemo","useCallback","useEffect","useTrueFoundryAgentSpec","useTrueFoundryUpdateAgentSpec","useEffect","useId","useRef","useState","jsx","jsxs","useTrueFoundryAgentSpec","useTrueFoundryUpdateAgentSpec","useState","useRef","useId","useEffect","displayModelLabel","jsx","useMemo","useRef","Fragment","jsx","OpenUiFenceBlock","SandboxArtifactDownload","SyntaxHighlighter","useRef","useMemo","jsx","jsxs","MessageTimestamp","jsx","jsx","jsx","useEffect","useRef","useState","jsx","useRef","useState","useEffect","useMemo","jsx","ChatFileDownload","useMemo","Fragment","jsx","jsxs","MonacoEditorCore","ToolCallCard","useTrueFoundryAgentSpec","useMemo","useRef","useState","useTrueFoundryAgentSpec","useTrueFoundryUpdateAgentSpec","createContext","useCallback","useContext","useMemo","useCallback","useEffect","useRef","useState","jsx","createContext","useTrueFoundryAgentSpec","useTrueFoundryUpdateAgentSpec","useCallback","useMemo","useContext","Fragment","jsx","jsxs","useTrueFoundryAgentSpec","useRef","AgentConfigEditors","SaveAgentForm","useState","useMemo","useEffect","useRef","jsx","jsxs","SaveAgentFormFields","useRef","useEffect","Fragment","jsx","jsxs","formatTokens","displayModelLabel","Fragment","jsx","jsxs","forwardRef","jsx","forwardRef","jsx","jsxs","AgentsLibraryButton","Fragment","jsx","jsxs","jsx","jsxs","jsx","jsxs","Markdown","cloneElement","isValidElement","useCallback","useMemo","useState","jsx","jsxs","isValidElement","cloneElement","useState","useMemo","useCallback","Fragment","jsx","jsxs","jsx","jsxs","forwardRef","jsx","forwardRef","useCallback","useState","createPortal","jsx","jsxs","useState","useCallback","createPortal","jsx","jsxs","Fragment","jsx","jsxs","useState","jsx","jsxs","MonacoEditorCore","Markdown","useState","jsx","jsxs","Accordion","AccordionSummary","AccordionDetails","jsx","jsxs","actionBtnClass","MessageTimestamp","jsx","jsxs","forwardRef","jsx","jsxs","forwardRef","UserMessageEdit","jsx","jsxs","BrandLogo","useEffect","useState","jsx","AgentMetricsView","useState","useEffect","Suspense","useCallback","useEffect","useMemo","useRef","useState","display","timestampMs","MessagePrimitive","useAuiState","useEffect","useRef","useState","jsx","AgentStepsCard","useState","useRef","useEffect","useAuiState","useCallback","useMemo","useRef","useEffect","useRef","useState","jsx","Markdown","useRef","useAuiState","useCallback","downloadSandboxFile","toaster","useMemo","useAuiState","jsx","AttachmentCard","AttachmentPreviewDialog","useAuiState","useAuiState","useCallback","useRef","useState","jsx","ReasoningCard","useAuiState","useState","useRef","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","ToolCallCard","SubAgentCard","AskUserPrompt","useState","argsDisplay","resultDisplay","slots","jsx","AssistantMessageBubble","MessageActionBar","MessageErrorBanner","MessageIndicator","useAuiState","MessagePrimitive","jsx","useActionBarCopy","useThreadIsRunning","MessagePrimitive","useAui","useAuiState","MessagePrimitive","useAuiState","useAuiState","useEffect","useState","jsx","AttachmentPreviewDialog","AttachmentCard","useAuiState","MessagePrimitive","AttachmentPickerButton","jsx","UserMessageBubble","UserMessageActionBar","useThreadIsRunning","useAui","useAuiState","useActionBarCopy","MessagePrimitive","Fragment","jsx","jsxs","AgentSessionTurnHeader","AgentSessionEventTimeline","AgentSessionMetricsStrip","MessageListSkeleton","ThreadViewportShell","useState","useRef","useMemo","useCallback","useEffect","Suspense","jsx","createContext","useContext","useMemo"]}
|