@pstdio/ui 0.3.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/dist/MermaidComponent-DwEDwpo2.js +124 -0
  2. package/dist/MermaidComponent-DwEDwpo2.js.map +1 -0
  3. package/dist/chat-ui.js +610 -505
  4. package/dist/chat-ui.js.map +1 -1
  5. package/dist/components/attached-panel.d.ts +9 -0
  6. package/dist/components/attached-panel.utils.d.ts +6 -0
  7. package/dist/components/bubble-button.d.ts +10 -0
  8. package/dist/components/bubble-panel.d.ts +18 -0
  9. package/dist/components/chat-ui/components/chat-input-actions.d.ts +10 -0
  10. package/dist/components/chat-ui/components/chat-panel-sticky-user-message.d.ts +1 -1
  11. package/dist/components/chat-ui/components/chat-panel.d.ts +1 -0
  12. package/dist/components/chat-ui/tool-rendering/apply-patch-renderer.d.ts +2 -0
  13. package/dist/components/chat-ui/tool-rendering/default-renderers.d.ts +8 -7
  14. package/dist/components/chat-ui/tool-rendering/edit-renderer.d.ts +2 -0
  15. package/dist/components/chat-ui/tool-rendering/shared.d.ts +52 -0
  16. package/dist/components/chat-ui/tool-rendering/standard-renderers.d.ts +6 -0
  17. package/dist/components/chat-ui/tool-rendering/todo-write-renderer.d.ts +2 -0
  18. package/dist/components/diff-card.d.ts +3 -0
  19. package/dist/components/diff-drawer.d.ts +1 -0
  20. package/dist/components/layout.d.ts +1 -2
  21. package/dist/components/menu-item.d.ts +2 -1
  22. package/dist/components/panel-header.constants.d.ts +1 -0
  23. package/dist/components/resource-context-menu.d.ts +20 -0
  24. package/dist/components/rich-text/markdown-editor/markdown-editor.d.ts +1 -0
  25. package/dist/components/rich-text/prompt-input/plugins/ReferencePlugin/nodes/ReferenceNode/ReferenceNode.d.ts +2 -1
  26. package/dist/components/rich-text/shared/components/content-editable.d.ts +2 -1
  27. package/dist/components/rich-text/shared/plugins/CodePlugin/CodeBlockActionsPlugin.d.ts +4 -0
  28. package/dist/components/rich-text/shared/plugins/CodePlugin/CodeBlockPlugin.d.ts +2 -0
  29. package/dist/components/rich-text/shared/plugins/CodePlugin/CodeHighlightingPlugin.d.ts +1 -0
  30. package/dist/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/resolve-block-type.d.ts +17 -0
  31. package/dist/components/rich-text/shared/plugins/FloatingTextFormatToolbarPlugin/should-show-floating-toolbar.d.ts +11 -0
  32. package/dist/components/rich-text/shared/plugins/MermaidPlugin/MermaidComponent.d.ts +6 -0
  33. package/dist/components/rich-text/shared/plugins/MermaidPlugin/MermaidNode.d.ts +23 -0
  34. package/dist/components/rich-text/shared/plugins/MermaidPlugin/index.d.ts +1 -0
  35. package/dist/components/rich-text/shared/transformers/markdown-transformers.d.ts +1 -0
  36. package/dist/components/rich-text/utils/markdown.d.ts +1 -0
  37. package/dist/components/searchable-menu.d.ts +35 -2
  38. package/dist/components/session-indicator.d.ts +2 -2
  39. package/dist/components/sidebar/sidebar-footer.d.ts +6 -0
  40. package/dist/components/sidebar/sidebar-header.d.ts +7 -0
  41. package/dist/components/sidebar/sidebar-project-menu.d.ts +10 -0
  42. package/dist/components/sidebar/sidebar.d.ts +2 -0
  43. package/dist/components/sidebar/sidebar.store.d.ts +47 -0
  44. package/dist/components/{sidebar-next/sidebar-next.types.d.ts → sidebar/sidebar.types.d.ts} +3 -2
  45. package/dist/components/sidebar-tree/sidebar-node-content.d.ts +9 -0
  46. package/dist/components/sidebar-tree/sidebar-tree.d.ts +1 -1
  47. package/dist/components/sidebar-tree/sidebar-tree.types.d.ts +15 -3
  48. package/dist/components/tickets/tag-badge.d.ts +10 -0
  49. package/dist/components/tickets/tag-option-icon.d.ts +2 -0
  50. package/dist/components/tickets/ticket-board.d.ts +2 -0
  51. package/dist/components/tickets/ticket-card.d.ts +12 -7
  52. package/dist/components/tickets/ticket-grouping.d.ts +2 -2
  53. package/dist/components/tickets/ticket-list.d.ts +6 -1
  54. package/dist/components/tickets/tickets-workspace.d.ts +9 -3
  55. package/dist/components/tickets/types.d.ts +22 -5
  56. package/dist/components/tickets/workspace-helpers.d.ts +13 -0
  57. package/dist/components/workspace-badge.d.ts +22 -0
  58. package/dist/get-file-type-icon-Bwqf1WXA.js +101 -0
  59. package/dist/get-file-type-icon-Bwqf1WXA.js.map +1 -0
  60. package/dist/index.d.ts +22 -21
  61. package/dist/index.js +2303 -1963
  62. package/dist/index.js.map +1 -1
  63. package/dist/rich-message-BVRk9BSD.js +1503 -0
  64. package/dist/rich-message-BVRk9BSD.js.map +1 -0
  65. package/dist/rich-text.js +442 -279
  66. package/dist/rich-text.js.map +1 -1
  67. package/dist/style.css +1 -1
  68. package/dist/test-utils/local-storage.d.ts +1 -0
  69. package/dist/theme/global.d.ts +3 -0
  70. package/dist/theme/primitives/colors.d.ts +116 -0
  71. package/dist/theme/recipes/button.d.ts +13 -13
  72. package/dist/theme/recipes/dialog.d.ts +1 -1
  73. package/dist/theme/recipes/drawer.d.ts +1 -1
  74. package/dist/theme/recipes/menu.d.ts +1 -1
  75. package/dist/theme/recipes/popover.d.ts +1 -1
  76. package/dist/theme/recipes/tooltip.d.ts +1 -1
  77. package/dist/theme/tokens/colors.d.ts +162 -8
  78. package/dist/{theme-BFV2Q048.js → theme-D0VvFB1Y.js} +292 -154
  79. package/dist/theme-D0VvFB1Y.js.map +1 -0
  80. package/dist/theme.js +1 -1
  81. package/package.json +4 -2
  82. package/dist/components/breadcrumb.stories.d.ts +0 -25
  83. package/dist/components/button.stories.d.ts +0 -18
  84. package/dist/components/chat-ui/components/ai-conversation.stories.d.ts +0 -6
  85. package/dist/components/chat-ui/components/ai-conversation.test.d.ts +0 -1
  86. package/dist/components/chat-ui/components/ai-message.stories.d.ts +0 -6
  87. package/dist/components/chat-ui/components/ai-response.stories.d.ts +0 -7
  88. package/dist/components/chat-ui/components/attachment-list.stories.d.ts +0 -6
  89. package/dist/components/chat-ui/components/chat-input.stories.d.ts +0 -7
  90. package/dist/components/chat-ui/components/chat-panel-alerts.stories.d.ts +0 -9
  91. package/dist/components/chat-ui/components/chat-panel.sticky-user-message.test.d.ts +0 -1
  92. package/dist/components/chat-ui/components/chat-panel.stories.d.ts +0 -10
  93. package/dist/components/chat-ui/components/message-parts-renderer.stories.d.ts +0 -9
  94. package/dist/components/chat-ui/components/model-swap-separator.stories.d.ts +0 -6
  95. package/dist/components/chat-ui/components/tool-invocation-timeline.stories.d.ts +0 -6
  96. package/dist/components/chat-ui/components/workspace-hub.stories.d.ts +0 -6
  97. package/dist/components/checkbox.stories.d.ts +0 -15
  98. package/dist/components/column-file-browser.stories.d.ts +0 -15
  99. package/dist/components/data-table/data-table.stories.d.ts +0 -33
  100. package/dist/components/delete-confirmation-modal.stories.d.ts +0 -11
  101. package/dist/components/diff-bubble.stories.d.ts +0 -13
  102. package/dist/components/diff-drawer.stories.d.ts +0 -8
  103. package/dist/components/diff-view-adapter.test.d.ts +0 -1
  104. package/dist/components/documentation/docs-changelog.d.ts +0 -20
  105. package/dist/components/documentation/docs-changelog.stories.d.ts +0 -15
  106. package/dist/components/documentation/docs-outline.d.ts +0 -13
  107. package/dist/components/documentation/docs-outline.stories.d.ts +0 -16
  108. package/dist/components/documentation/docs-pagination.d.ts +0 -10
  109. package/dist/components/documentation/docs-pagination.stories.d.ts +0 -14
  110. package/dist/components/documentation/docs-sidebar.d.ts +0 -14
  111. package/dist/components/documentation/docs-sidebar.stories.d.ts +0 -7
  112. package/dist/components/drawer-inline.stories.d.ts +0 -8
  113. package/dist/components/empty-state.stories.d.ts +0 -34
  114. package/dist/components/file-selector.stories.d.ts +0 -17
  115. package/dist/components/folder-picker-dialog.stories.d.ts +0 -11
  116. package/dist/components/info-card.stories.d.ts +0 -41
  117. package/dist/components/item-section.stories.d.ts +0 -17
  118. package/dist/components/layout.stories.d.ts +0 -11
  119. package/dist/components/menu-item.stories.d.ts +0 -72
  120. package/dist/components/open-source-notices-screen.stories.d.ts +0 -12
  121. package/dist/components/panel-menu.d.ts +0 -9
  122. package/dist/components/panel-menu.stories.d.ts +0 -8
  123. package/dist/components/param-editor-horizontal.stories.d.ts +0 -19
  124. package/dist/components/param-editor.stories.d.ts +0 -24
  125. package/dist/components/properties.stories.d.ts +0 -17
  126. package/dist/components/resource-badge.stories.d.ts +0 -7
  127. package/dist/components/rich-text/collaborative-markdown-editor/collaborative-markdown-editor.stories.d.ts +0 -9
  128. package/dist/components/rich-text/markdown-editor/markdown-editor.stories.d.ts +0 -7
  129. package/dist/components/rich-text/prompt-input/prompt-input.stories.d.ts +0 -8
  130. package/dist/components/rich-text/rich-message/rich-message.stories.d.ts +0 -6
  131. package/dist/components/rich-text/shared/nodes/DataTableNode.stories.d.ts +0 -7
  132. package/dist/components/rich-text/shared/plugins/CodePlugin/CodeNode.d.ts +0 -21
  133. package/dist/components/rich-text/shared/plugins/CodePlugin/CodeNode.test.d.ts +0 -1
  134. package/dist/components/scroll-area.stories.d.ts +0 -7
  135. package/dist/components/searchable-menu.stories.d.ts +0 -6
  136. package/dist/components/searchable-menu.test.d.ts +0 -1
  137. package/dist/components/session-indicator.stories.d.ts +0 -11
  138. package/dist/components/sidebar-next/sidebar-next-footer.d.ts +0 -6
  139. package/dist/components/sidebar-next/sidebar-next-header.d.ts +0 -7
  140. package/dist/components/sidebar-next/sidebar-next.d.ts +0 -2
  141. package/dist/components/sidebar-next/sidebar-next.store.d.ts +0 -47
  142. package/dist/components/sidebar-next/sidebar-next.store.test.d.ts +0 -1
  143. package/dist/components/sidebar-next/sidebar-next.stories.d.ts +0 -10
  144. package/dist/components/sidebar-tree/sidebar-tree-searchable-action-menu.stories.d.ts +0 -6
  145. package/dist/components/sidebar-tree/sidebar-tree.stories.d.ts +0 -13
  146. package/dist/components/slider.stories.d.ts +0 -15
  147. package/dist/components/style-guide.stories.d.ts +0 -28
  148. package/dist/components/switch.stories.d.ts +0 -16
  149. package/dist/components/tickets/display-menu.stories.d.ts +0 -6
  150. package/dist/components/tickets/filter-menu.stories.d.ts +0 -6
  151. package/dist/components/tickets/ticket-board.stories.d.ts +0 -5
  152. package/dist/components/tickets/ticket-card.stories.d.ts +0 -18
  153. package/dist/components/tickets/ticket-grouping.test.d.ts +0 -1
  154. package/dist/components/tickets/ticket-list.stories.d.ts +0 -10
  155. package/dist/components/tickets/tickets-workspace.stories.d.ts +0 -10
  156. package/dist/components/tickets/use-workspace-store.test.d.ts +0 -1
  157. package/dist/components/toaster.stories.d.ts +0 -11
  158. package/dist/rich-message-ZT2CEiwt.js +0 -1406
  159. package/dist/rich-message-ZT2CEiwt.js.map +0 -1
  160. package/dist/theme-BFV2Q048.js.map +0 -1
  161. package/dist/tooltip-Dze4WXVl.js +0 -86
  162. package/dist/tooltip-Dze4WXVl.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chat-ui.js","sources":["../src/components/chat-ui/components/ai-conversation.tsx","../src/components/chat-ui/components/ai-message.tsx","../src/components/chat-ui/components/approval-prompt.tsx","../src/components/chat-ui/components/auto-scroll.tsx","../src/components/chat-ui/components/send-button.tsx","../src/components/chat-ui/components/chat-input.tsx","../src/components/chat-ui/utils/editor-state.ts","../src/components/chat-ui/components/chat-panel-sticky-user-message.ts","../src/components/chat-ui/components/ai-response.tsx","../src/components/chat-ui/utils/get-icon.ts","../src/components/chat-ui/utils/diff.ts","../src/components/chat-ui/tool-rendering/default-renderers.ts","../src/components/chat-ui/tool-rendering/build-timeline.ts","../src/components/chat-ui/components/timeline.tsx","../src/components/chat-ui/components/tool-invocation-timeline.tsx","../src/components/chat-ui/components/message-parts-renderer.tsx","../src/components/chat-ui/components/message-types.ts","../src/components/chat-ui/components/chat-panel.tsx","../src/components/chat-ui/components/chat-skeleton.tsx","../src/components/chat-ui/components/workspace-hub.tsx"],"sourcesContent":["import type { HTMLChakraProps, IconButtonProps } from \"@chakra-ui/react\";\nimport { AbsoluteCenter, chakra, IconButton } from \"@chakra-ui/react\";\nimport { ArrowDownIcon } from \"lucide-react\";\nimport { StickToBottom as StickToBottomEl, useStickToBottomContext } from \"use-stick-to-bottom\";\nimport { ScrollArea } from \"@/components/scroll-area\";\n\nexport type ConversationRootProps = HTMLChakraProps<\"div\", React.ComponentProps<typeof StickToBottomEl>>;\n\nexport const conversationRootDefaultProps = {\n \"aria-roledescription\": \"conversation\",\n initial: \"instant\",\n resize: \"instant\",\n role: \"log\",\n} as const;\n\nexport const ConversationRoot = chakra(\n StickToBottomEl,\n {\n base: {\n position: \"relative\",\n flex: 1,\n overflow: \"hidden\",\n height: \"full\",\n },\n },\n {\n forwardProps: [\"resize\"],\n defaultProps: conversationRootDefaultProps,\n },\n);\n\nexport type ConversationContentProps = Omit<React.ComponentProps<typeof ScrollArea>, \"contentProps\" | \"viewportRef\">;\n\nexport const ConversationContent = (props: ConversationContentProps) => {\n const { children, ...rest } = props;\n const { contentRef, scrollRef } = useStickToBottomContext();\n\n return (\n <ScrollArea\n {...rest}\n height=\"full\"\n width=\"full\"\n showHorizontalScrollbar={false}\n viewportRef={scrollRef as React.Ref<HTMLDivElement>}\n contentRef={contentRef as React.Ref<HTMLDivElement>}\n contentProps={{\n p: \"sm\",\n \"aria-live\": \"polite\",\n role: \"list\",\n }}\n >\n {children}\n </ScrollArea>\n );\n};\n\nexport type ConversationScrollButtonProps = IconButtonProps;\n\nexport const conversationScrollButtonContainerDefaultProps = {\n axis: \"horizontal\",\n bottom: \"md\",\n zIndex: 2,\n} as const;\n\nexport const ConversationScrollButton = (props: ConversationScrollButtonProps) => {\n const { isAtBottom, scrollToBottom } = useStickToBottomContext();\n\n return (\n !isAtBottom && (\n <AbsoluteCenter {...conversationScrollButtonContainerDefaultProps}>\n <IconButton rounded=\"full\" onClick={() => scrollToBottom()} variant=\"outline\" size=\"xs\" {...props}>\n <ArrowDownIcon size={16} />\n </IconButton>\n </AbsoluteCenter>\n )\n );\n};\n\nexport const ChatPrimitives = {\n Root: ConversationRoot,\n Viewport: ConversationContent,\n ScrollToBottom: ConversationScrollButton,\n} as const;\n","import type { HTMLChakraProps, RecipeVariantProps } from \"@chakra-ui/react\";\nimport { createSlotRecipeContext, defineSlotRecipe } from \"@chakra-ui/react\";\n\nconst recipe = defineSlotRecipe({\n className: \"ai-message\",\n slots: [\"root\", \"content\"],\n base: {\n root: {\n display: \"flex\",\n width: \"full\",\n alignItems: \"end\",\n justifyContent: \"end\",\n gap: \"sm\",\n animationName: \"message-fade-in\",\n animationDuration: \"200ms\",\n animationTimingFunction: \"ease-out\",\n \"&:has(+ [data-scope='ai-message'][data-part='root'])\": {\n mb: 0,\n },\n },\n content: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"sm\",\n textStyle: \"sm\",\n overflow: \"hidden\",\n },\n },\n variants: {\n from: {\n user: {\n root: {\n mb: \"md\",\n flexDirection: \"row\",\n },\n content: {\n border: \"1px solid\",\n borderColor: \"border.muted\",\n bg: \"bg.subtle\",\n px: \"xs\",\n py: \"xs\",\n width: \"full\",\n borderBottomRightRadius: 0,\n },\n },\n assistant: {\n root: {\n mb: \"md\",\n flexDirection: \"row\",\n justifyContent: \"start\",\n },\n content: {\n width: \"full\",\n },\n },\n developer: {\n root: {\n width: \"full\",\n flexDirection: \"row-reverse\",\n },\n content: {\n width: \"full\",\n },\n },\n },\n size: {\n sm: {\n root: { gap: \"xs\" },\n content: { textStyle: \"xs\" },\n },\n md: {},\n lg: {\n root: { gap: \"md\" },\n content: { textStyle: \"md\" },\n },\n },\n shape: {\n rounded: {\n content: { rounded: \"xs\" },\n },\n pill: {\n content: { rounded: \"full\" },\n },\n square: {\n content: { rounded: \"none\" },\n },\n },\n },\n defaultVariants: {\n from: \"user\",\n size: \"md\",\n shape: \"rounded\",\n },\n});\n\nconst { withProvider, withContext } = createSlotRecipeContext({ recipe });\n\ntype VariantProps = RecipeVariantProps<typeof recipe>;\n\nexport interface MessageRootProps extends HTMLChakraProps<\"div\">, VariantProps {}\nexport const MessageRoot = withProvider<HTMLDivElement, MessageRootProps>(\"div\", \"root\");\n\nexport interface MessageContentProps extends HTMLChakraProps<\"div\">, VariantProps {}\nexport const MessageContent = withContext<HTMLDivElement, MessageContentProps>(\"div\", \"content\");\n\nexport const ChatMessage = {\n Root: MessageRoot,\n Content: MessageContent,\n} as const;\n","import { Box, Button, Code, Flex, HStack, Text } from \"@chakra-ui/react\";\nimport { ShieldCheck, ShieldX } from \"lucide-react\";\n\ninterface ApprovalPromptProps {\n toolName: string;\n toolInput?: unknown;\n onApprove: () => void;\n onDeny: () => void;\n}\n\nconst formatToolInput = (input: unknown) => {\n if (input == null) return null;\n\n const text = typeof input === \"string\" ? input : JSON.stringify(input, null, 2);\n if (text.length === 0) return null;\n\n const truncated = text.length > 200 ? `${text.slice(0, 200)}...` : text;\n return truncated;\n};\n\nexport const ApprovalPrompt = (props: ApprovalPromptProps) => {\n const { toolName, toolInput, onApprove, onDeny } = props;\n const formattedInput = formatToolInput(toolInput);\n\n return (\n <Box px=\"sm\" py=\"xs\" mx=\"sm\" borderWidth=\"1px\" borderColor=\"border.warning\" borderRadius=\"lg\" bg=\"bg.warning\">\n <Flex direction=\"column\" gap=\"xs\">\n <Text textStyle=\"label/S/medium\" color=\"fg\">\n Allow <Code size=\"sm\">{toolName}</Code>?\n </Text>\n\n {formattedInput ? (\n <Code size=\"sm\" whiteSpace=\"pre-wrap\" maxH=\"6rem\" overflowY=\"auto\">\n {formattedInput}\n </Code>\n ) : null}\n\n <HStack gap=\"xs\" justifyContent=\"flex-end\">\n <Button size=\"xs\" variant=\"outline\" onClick={onDeny}>\n <ShieldX size={14} />\n Deny\n </Button>\n <Button size=\"xs\" colorPalette=\"green\" onClick={onApprove}>\n <ShieldCheck size={14} />\n Allow\n </Button>\n </HStack>\n </Flex>\n </Box>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { useStickToBottomContext } from \"use-stick-to-bottom\";\n\nexport interface AutoScrollProps {\n userMessageCount: number;\n}\n\ninterface ShouldAutoScrollArgs {\n previousUserMessageCount: number;\n userMessageCount: number;\n}\n\nexport const shouldAutoScroll = (args: ShouldAutoScrollArgs) => {\n const { previousUserMessageCount, userMessageCount } = args;\n\n if (previousUserMessageCount === 0) {\n return false;\n }\n\n return userMessageCount > previousUserMessageCount;\n};\n\nexport function AutoScroll(props: AutoScrollProps) {\n const { userMessageCount } = props;\n const { scrollToBottom } = useStickToBottomContext();\n const previousCountRef = useRef(userMessageCount);\n\n useEffect(() => {\n if (\n shouldAutoScroll({\n previousUserMessageCount: previousCountRef.current,\n userMessageCount,\n })\n ) {\n scrollToBottom();\n }\n\n previousCountRef.current = userMessageCount;\n }, [userMessageCount, scrollToBottom]);\n\n return null;\n}\n","import { IconButton, type IconButtonProps, Kbd, Portal, Tooltip } from \"@chakra-ui/react\";\nimport { ArrowUp, Square } from \"lucide-react\";\n\nexport interface SendButtonProps extends IconButtonProps {\n shortcut?: string;\n title?: string;\n canInterrupt: boolean;\n}\n\nexport const SendButton = (props: SendButtonProps) => {\n const { title, shortcut, canInterrupt, ...rest } = props;\n const ariaLabel = rest[\"aria-label\"] ?? title;\n\n const icon = canInterrupt ? (\n <Square size={16} strokeWidth={2} fill=\"currentColor\" />\n ) : (\n <ArrowUp size={16} strokeWidth={2} />\n );\n\n const button = (\n <IconButton\n data-testid=\"send-message-button\"\n size=\"sm\"\n variant=\"solid\"\n borderRadius=\"full\"\n colorPalette=\"primary\"\n aria-label={ariaLabel}\n title={title}\n {...rest}\n >\n {icon}\n </IconButton>\n );\n\n if (title) {\n const tooltipContent = shortcut ? (\n <>\n {title} <Kbd fontSize=\"xs\">{shortcut}</Kbd>\n </>\n ) : (\n title\n );\n\n return (\n <Tooltip.Root closeDelay={50} openDelay={100}>\n <Tooltip.Trigger asChild>{button}</Tooltip.Trigger>\n <Portal>\n <Tooltip.Positioner>\n <Tooltip.Content>{tooltipContent}</Tooltip.Content>\n </Tooltip.Positioner>\n </Portal>\n </Tooltip.Root>\n );\n }\n\n return button;\n};\n","import { Box, Flex, HStack, Spacer, Text } from \"@chakra-ui/react\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"@/components/scroll-area\";\nimport { getTextFromSerializedEditorState, PromptEditor } from \"../../rich-text\";\nimport { SendButton } from \"./send-button\";\n\ninterface ChatInputProps {\n defaultState: string;\n placeholder?: string;\n onSubmit?: (text: string, attachments: string[]) => void;\n onInterrupt?: () => void;\n streaming?: boolean;\n attachedResources?: string[];\n onClearAttachments?: () => void;\n isDisabled?: boolean;\n onChange?: (text: string) => void;\n attachmentList?: ReactNode;\n actions?: ReactNode;\n attachedToTop?: boolean;\n}\n\nexport const ChatInput = (props: ChatInputProps) => {\n const {\n defaultState,\n onSubmit = () => {},\n onInterrupt,\n streaming = false,\n attachedResources = [],\n onClearAttachments,\n isDisabled = false,\n onChange,\n placeholder,\n attachmentList,\n actions,\n attachedToTop = false,\n } = props;\n\n const [isSelected, setIsSelected] = useState(false);\n const [editorState, setEditorState] = useState(defaultState);\n const [editorKey, setEditorKey] = useState(0);\n const [text, setText] = useState(() => getTextFromSerializedEditorState(defaultState));\n const containerRef = useRef<HTMLDivElement | null>(null);\n const onChangeRef = useRef(onChange);\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n useEffect(() => {\n const resetText = getTextFromSerializedEditorState(defaultState);\n setEditorState(defaultState);\n setEditorKey((key) => key + 1);\n setText(resetText);\n onChangeRef.current?.(resetText);\n }, [defaultState]);\n\n const focusEditor = () => {\n const editable = containerRef.current?.querySelector('[contenteditable=\"true\"]');\n if (editable instanceof HTMLElement) {\n editable.focus();\n }\n };\n\n const handleContainerClick = () => {\n setIsSelected(true);\n focusEditor();\n };\n\n const resetEditor = (shouldFocus = false) => {\n setEditorState(defaultState);\n setEditorKey((key) => key + 1);\n const resetText = getTextFromSerializedEditorState(defaultState);\n setText(resetText);\n onChangeRef.current?.(resetText);\n\n if (shouldFocus) {\n requestAnimationFrame(() => {\n focusEditor();\n });\n }\n };\n\n const handleSend = () => {\n if (isDisabled) return;\n\n if (streaming) {\n onInterrupt?.();\n return;\n }\n\n const trimmed = text.trim();\n if (!trimmed) return;\n\n onSubmit(trimmed, attachedResources);\n\n resetEditor(true);\n\n onClearAttachments?.();\n };\n\n const canInterrupt = streaming && Boolean(onInterrupt);\n\n const placeholderNode = placeholder ? (\n <Text textStyle=\"label/M/regular\" color=\"fg.subtle\" pointerEvents=\"none\" position=\"absolute\" top=\"0\">\n {placeholder}\n </Text>\n ) : undefined;\n\n return (\n <Box\n ref={containerRef}\n position=\"relative\"\n width=\"100%\"\n paddingX=\"lg\"\n paddingY=\"md\"\n mt={attachedToTop ? \"-1px\" : undefined}\n bg=\"bg\"\n borderRadius=\"md\"\n borderTopRadius={attachedToTop ? \"0\" : undefined}\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor={isSelected ? \"blue.border\" : \"border.muted\"}\n boxShadow={isSelected ? \"mid\" : \"low\"}\n zIndex={isSelected ? 1 : 0}\n transition=\"box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out\"\n _hover={{\n borderColor: isSelected ? \"blue.border\" : \"border\",\n boxShadow: \"mid\",\n zIndex: 1,\n }}\n _focusWithin={{\n borderColor: \"blue.border\",\n boxShadow: \"mid\",\n zIndex: 1,\n }}\n onClick={handleContainerClick}\n onBlur={() => setIsSelected(false)}\n >\n <Flex direction=\"column\" color=\"fg\">\n {attachmentList}\n <ScrollArea maxH=\"10rem\" showHorizontalScrollbar={false} contentProps={{ pr: \"2xs\" }}>\n <PromptEditor\n key={editorKey}\n defaultState={editorState}\n isEditable={!isDisabled}\n placeholder={placeholderNode}\n onChange={(t) => {\n setText(t);\n onChange?.(t);\n }}\n onSubmit={handleSend}\n />\n </ScrollArea>\n <HStack gap=\"1\" mt=\"md\">\n {actions}\n <Spacer />\n <SendButton\n canInterrupt={canInterrupt}\n title={canInterrupt ? \"Stop Response\" : \"Message Sending\"}\n shortcut={streaming ? undefined : \"Enter\"}\n onClick={handleSend}\n disabled={(streaming && !canInterrupt) || (!streaming && !text.trim()) || isDisabled}\n />\n </HStack>\n </Flex>\n </Box>\n );\n};\n","import { generateEditorStateFromString } from \"../../rich-text\";\n\nexport const createSerializedPromptState = (input = \"\") => {\n return JSON.stringify(generateEditorStateFromString(input));\n};\n","import type { SessionMessage } from \"./message-types\";\n\nexport const STICKY_USER_MESSAGE_COLLAPSE_TEXT_THRESHOLD = 360;\nexport const STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT = \"min(20vh, 8rem)\";\n\nconst getMessageTextLength = (message: SessionMessage) => {\n return message.parts.reduce((total, part) => {\n if (part.type !== \"text\") return total;\n return total + part.text.length;\n }, 0);\n};\n\nexport const isStickyUserMessageCollapsible = (message: SessionMessage) => {\n if (message.role !== \"user\") return false;\n\n return getMessageTextLength(message) > STICKY_USER_MESSAGE_COLLAPSE_TEXT_THRESHOLD;\n};\n","import type { BoxProps } from \"@chakra-ui/react\";\nimport { Box } from \"@chakra-ui/react\";\nimport { RichMessage } from \"@/components/rich-text\";\n\nexport interface ChatRichContentProps extends Omit<BoxProps, \"children\"> {\n children: string;\n}\n\nexport const ChatRichContent = (props: ChatRichContentProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box {...rest}>\n <RichMessage defaultState={children} fullWidth />\n </Box>\n );\n};\n\nexport const Response = ChatRichContent;\n","import type { LucideIcon } from \"lucide-react\";\nimport {\n AlertTriangle,\n DotIcon,\n File,\n FileDiff,\n FileDown,\n FilePen,\n FileText,\n FileUp,\n Globe,\n ListTree,\n Move,\n Search,\n Terminal,\n Trash2,\n} from \"lucide-react\";\n\nconst toolIconMap = {\n shell: Terminal,\n ls: ListTree,\n read_file: FileText,\n write_file: FilePen,\n delete_file: Trash2,\n patch: FileDiff,\n upload_files: FileUp,\n download_file: FileDown,\n move_file: Move,\n} as const satisfies Record<string, LucideIcon>;\n\nconst iconMap = {\n dot: DotIcon,\n danger: AlertTriangle,\n search: Search,\n browser: Globe,\n file: File,\n terminal: Terminal,\n ...toolIconMap,\n} as const satisfies Record<string, LucideIcon>;\n\nexport type IconName = keyof typeof iconMap;\nexport type ToolIconName = keyof typeof toolIconMap;\n\nconst DEFAULT_TOOL_ICON: IconName = \"dot\";\n\nconst isToolIconName = (value: string): value is ToolIconName => Object.hasOwn(toolIconMap, value);\n\nexport const getIconComponent = (name: IconName): LucideIcon => {\n return iconMap[name];\n};\n\nexport const toolTypeToIconName = (type?: string): IconName => {\n if (!type) return DEFAULT_TOOL_ICON;\n\n const normalized = type.replace(/^tool-/, \"\");\n if (isToolIconName(normalized)) return normalized;\n\n switch (normalized) {\n case \"read\":\n return \"file\";\n case \"bash\":\n return \"terminal\";\n case \"apply_patch\":\n return \"patch\";\n case \"grep\":\n return \"search\";\n case \"glob\":\n return \"file\";\n case \"search\":\n return \"search\";\n case \"browser\":\n return \"browser\";\n case \"fs\":\n case \"file\":\n return \"file\";\n default:\n return DEFAULT_TOOL_ICON;\n }\n};\n\nexport { getFileTypeIcon } from \"../../../utils/get-file-type-icon\";\n","import type { TitleSegment } from \"../components/timeline\";\n\nexport type FileChange = { filePath: string; additions: number; deletions: number };\n\nexport function basenameSafe(path: string) {\n const idx = path.lastIndexOf(\"/\");\n return idx >= 0 ? path.slice(idx + 1) : path;\n}\n\nfunction normalizeHeaderPath(input?: string | null) {\n if (!input) return null;\n\n const token = input.split(\"\\t\")[0].trim();\n if (token === \"/dev/null\") return null;\n\n let normalized = token;\n if (normalized.startsWith(\"a/\") || normalized.startsWith(\"b/\")) {\n normalized = normalized.slice(2);\n }\n\n return normalized.replace(/^\\/+/, \"\").replace(/\\\\/g, \"/\");\n}\n\nconst isMinusHeader = (line: string) => line.startsWith(\"--- \");\nconst isPlusHeader = (line: string) => line.startsWith(\"+++ \");\nconst isHunkHeader = (line: string) => line.startsWith(\"@@\");\nconst isAddedLine = (line: string) => line.startsWith(\"+\") && !(isPlusHeader(line) || line === \"+++\");\nconst isDeletedLine = (line: string) => line.startsWith(\"-\") && !(isMinusHeader(line) || line === \"---\");\n\nconst ensureFileChange = (changes: Map<string, { additions: number; deletions: number }>, filePath: string) => {\n if (!changes.has(filePath)) {\n changes.set(filePath, { additions: 0, deletions: 0 });\n }\n};\n\nconst incrementAdditions = (changes: Map<string, { additions: number; deletions: number }>, filePath: string) => {\n const current = changes.get(filePath);\n if (!current) return;\n current.additions += 1;\n};\n\nconst incrementDeletions = (changes: Map<string, { additions: number; deletions: number }>, filePath: string) => {\n const current = changes.get(filePath);\n if (!current) return;\n current.deletions += 1;\n};\n\ntype UnifiedDiffState = {\n currentPath: string | null;\n lastMinusHeader: string | null;\n inHunk: boolean;\n};\n\nconst processUnifiedDiffLine = (\n line: string,\n state: UnifiedDiffState,\n changes: Map<string, { additions: number; deletions: number }>,\n) => {\n if (isMinusHeader(line)) {\n return { ...state, lastMinusHeader: normalizeHeaderPath(line.slice(4)), inHunk: false };\n }\n\n if (isPlusHeader(line)) {\n const plusPath = normalizeHeaderPath(line.slice(4));\n const currentPath = plusPath ?? state.lastMinusHeader;\n if (currentPath) ensureFileChange(changes, currentPath);\n return { ...state, currentPath, inHunk: false };\n }\n\n if (!state.currentPath) return state;\n\n if (isHunkHeader(line)) {\n return { ...state, inHunk: true };\n }\n\n if (!state.inHunk) return state;\n\n if (isAddedLine(line)) {\n incrementAdditions(changes, state.currentPath);\n return state;\n }\n\n if (isDeletedLine(line)) {\n incrementDeletions(changes, state.currentPath);\n }\n\n return state;\n};\n\nexport function parseUnifiedDiff(diffText?: string) {\n if (!diffText || typeof diffText !== \"string\") return [] as FileChange[];\n\n const changes = new Map<string, { additions: number; deletions: number }>();\n let state: UnifiedDiffState = {\n currentPath: null,\n lastMinusHeader: null,\n inHunk: false,\n };\n\n const lines = diffText.split(/\\r?\\n/);\n for (const line of lines) {\n state = processUnifiedDiffLine(line, state, changes);\n }\n\n return Array.from(changes.entries()).map(([filePath, { additions, deletions }]) => ({\n filePath,\n additions,\n deletions,\n }));\n}\n\nexport function buildDiffTitleSegments(diffText?: string) {\n return parseUnifiedDiff(diffText).map(\n (file) =>\n ({\n kind: \"diff\",\n fileName: basenameSafe(file.filePath),\n filePath: file.filePath,\n additions: file.additions,\n deletions: file.deletions,\n }) satisfies TitleSegment,\n );\n}\n\nexport function extractDiffFilePaths(diffText?: string) {\n return parseUnifiedDiff(diffText).map((file) => file.filePath);\n}\n\nexport type FileDiffPreview = { filePath: string; original: string; modified: string };\n\nconst isDiffFileBoundary = (line: string) => isMinusHeader(line) || line.startsWith(\"diff --git \");\n\nconst isInvalidHunkBodyLine = (line: string) => {\n if (line.startsWith(\" \")) return false;\n if (line.startsWith(\"+\")) return false;\n if (line.startsWith(\"-\")) return false;\n return line.trim() !== \"\";\n};\n\nconst appendHunkLine = (line: string, original: string[], modified: string[]) => {\n if (line.startsWith(\" \")) {\n const text = line.slice(1);\n original.push(text);\n modified.push(text);\n return;\n }\n\n if (line.startsWith(\"-\")) {\n original.push(line.slice(1));\n return;\n }\n\n if (line.startsWith(\"+\")) {\n modified.push(line.slice(1));\n }\n};\n\nconst parseHunkBody = (lines: string[], startIndex: number, original: string[], modified: string[]) => {\n let index = startIndex;\n\n while (index < lines.length) {\n const line = lines[index] || \"\";\n if (isDiffFileBoundary(line) || isHunkHeader(line) || isInvalidHunkBodyLine(line)) {\n break;\n }\n\n appendHunkLine(line, original, modified);\n index += 1;\n }\n\n if (original.length > 0 || modified.length > 0) {\n original.push(\"\");\n modified.push(\"\");\n }\n\n return index;\n};\n\nconst parsePreview = (lines: string[], startIndex: number) => {\n const oldHeader = normalizeHeaderPath((lines[startIndex] || \"\").slice(4));\n const next = lines[startIndex + 1] || \"\";\n if (!isPlusHeader(next)) return { nextIndex: startIndex + 1 } as const;\n\n const newHeader = normalizeHeaderPath(next.slice(4));\n const filePath = newHeader ?? oldHeader ?? \"\";\n const original: string[] = [];\n const modified: string[] = [];\n\n let index = startIndex + 2;\n while (index < lines.length) {\n const current = lines[index] || \"\";\n if (isDiffFileBoundary(current)) break;\n\n if (!isHunkHeader(current)) {\n index += 1;\n continue;\n }\n\n index = parseHunkBody(lines, index + 1, original, modified);\n }\n\n return {\n nextIndex: index,\n preview: { filePath, original: original.join(\"\\n\"), modified: modified.join(\"\\n\") } satisfies FileDiffPreview,\n } as const;\n};\n\nexport function buildFileDiffPreviews(diffText?: string) {\n if (!diffText || typeof diffText !== \"string\") return [] as FileDiffPreview[];\n\n const lines = diffText.split(/\\r?\\n/);\n const previews: FileDiffPreview[] = [];\n\n let i = 0;\n while (i < lines.length) {\n const line = lines[i] || \"\";\n if (!isMinusHeader(line)) {\n i += 1;\n continue;\n }\n\n const { nextIndex, preview } = parsePreview(lines, i);\n if (preview) previews.push(preview);\n i = Math.max(nextIndex, i + 1);\n }\n\n return previews;\n}\n","import type { ToolPart } from \"../agent-types\";\nimport type { Block, Item, TitleSegment } from \"../components/timeline\";\nimport { basenameSafe, buildDiffTitleSegments, buildFileDiffPreviews, extractDiffFilePaths } from \"../utils/diff\";\nimport { toolTypeToIconName } from \"../utils/get-icon\";\nimport type { ToolRenderer, ToolRenderersMap } from \"./types\";\n\nconst TOOL_LABELS: Record<string, string> = {\n apply_patch: \"Apply patch\",\n read: \"Read file\",\n bash: \"Run\",\n grep: \"Search files\",\n glob: \"Find files\",\n skill: \"Load skill\",\n};\n\nconst STATE_LABELS: Record<string, string> = {\n pending: \"queued\",\n error: \"failed\",\n \"output-error\": \"failed\",\n \"input-streaming\": \"running\",\n \"input-available\": \"queued\",\n};\n\nconst normalizeToolType = (value: string) => value.replace(/^tool-/, \"\");\n\nconst toTitleCase = (value: string) => {\n return value\n .split(\" \")\n .filter((token) => token.length > 0)\n .map((token) => token[0].toUpperCase() + token.slice(1))\n .join(\" \");\n};\n\nconst getToolType = (invocation: ToolPart) => normalizeToolType(invocation.tool ?? \"tool\");\n\nconst getToolLabel = (value: string) => {\n const normalized = normalizeToolType(value);\n return TOOL_LABELS[normalized] ?? toTitleCase(normalized.replace(/_/g, \" \"));\n};\n\nconst getStateLabel = (state?: unknown) => {\n if (!state || typeof state !== \"string\") return null;\n if (STATE_LABELS[state]) return STATE_LABELS[state];\n if (state.includes(\"stream\")) return \"running\";\n return null;\n};\n\nconst isErrorState = (state?: string) => state === \"error\" || state === \"output-error\";\n\nconst buildIndicator = (invocation: ToolPart) => {\n if (isErrorState(invocation.state?.status)) {\n return { type: \"icon\", icon: \"danger\" } as const;\n }\n\n return { type: \"icon\", icon: toolTypeToIconName(getToolType(invocation)) } as const;\n};\n\nconst buildBaseTitle = (invocation: ToolPart, detail?: string, labelOverride?: string) => {\n const label = labelOverride ?? getToolLabel(invocation.tool ?? \"tool\");\n const title: TitleSegment[] = [{ kind: \"text\", text: label, bold: true }];\n\n if (detail) {\n title.push({ kind: \"text\", text: detail, muted: true });\n }\n\n const stateLabel = getStateLabel(invocation.state?.status);\n if (stateLabel) {\n title.push({ kind: \"text\", text: stateLabel, muted: true });\n }\n\n return title;\n};\n\nconst getInputObject = (invocation: ToolPart) => {\n const input = invocation.state?.input;\n if (!input || typeof input !== \"object\" || Array.isArray(input)) return null;\n return input as Record<string, unknown>;\n};\n\nconst getOutputObject = (invocation: ToolPart) => {\n const output = invocation.state?.output;\n if (!output || typeof output !== \"object\" || Array.isArray(output)) return null;\n return output as Record<string, unknown>;\n};\n\nconst getStringValue = (value: unknown) => {\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n return null;\n};\n\nconst getObjectValue = (value: unknown) => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n};\n\nconst getStateObject = (invocation: ToolPart, key: string) => {\n const state = getObjectValue(invocation.state);\n if (!state) return null;\n return getObjectValue(state[key]);\n};\n\nconst normalizeFilePath = (value: string) => value.replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\");\n\nconst isUnifiedDiff = (value: string) => value.includes(\"--- \") && value.includes(\"+++ \") && value.includes(\"@@\");\n\ntype ApplyPatchMetadataFile = {\n filePath: string;\n additions: number;\n deletions: number;\n diff?: string;\n before?: string;\n after?: string;\n};\n\nconst getApplyPatchMetadataObjects = (invocation: ToolPart) => {\n const output = getOutputObject(invocation);\n return [getStateObject(invocation, \"metadata\"), getObjectValue(output?.metadata)].filter(Boolean) as Array<\n Record<string, unknown>\n >;\n};\n\nconst parseApplyPatchMetadataFile = (entry: unknown) => {\n const record = getObjectValue(entry);\n if (!record) return null;\n\n const rawPath = getStringValue(record.filePath) ?? getStringValue(record.relativePath) ?? getStringValue(record.path);\n if (!rawPath) return null;\n\n return {\n filePath: normalizeFilePath(rawPath),\n additions: typeof record.additions === \"number\" ? record.additions : 0,\n deletions: typeof record.deletions === \"number\" ? record.deletions : 0,\n diff: getStringValue(record.diff) ?? undefined,\n before: getStringValue(record.before) ?? undefined,\n after: getStringValue(record.after) ?? undefined,\n } satisfies ApplyPatchMetadataFile;\n};\n\nconst getApplyPatchMetadataFiles = (invocation: ToolPart) => {\n const files: ApplyPatchMetadataFile[] = [];\n\n for (const metadata of getApplyPatchMetadataObjects(invocation)) {\n const entries = Array.isArray(metadata.files) ? metadata.files : [];\n\n for (const entry of entries) {\n const parsedFile = parseApplyPatchMetadataFile(entry);\n if (!parsedFile) continue;\n files.push(parsedFile);\n }\n }\n\n return files;\n};\n\nconst getApplyPatchDiffText = (invocation: ToolPart) => {\n const input = getInputObject(invocation);\n const inputDiff = getStringValue(input?.diff);\n if (inputDiff) return inputDiff;\n\n for (const metadata of getApplyPatchMetadataObjects(invocation)) {\n const metadataDiff = getStringValue(metadata.diff);\n if (metadataDiff) return metadataDiff;\n }\n\n const fileDiffs = getApplyPatchMetadataFiles(invocation)\n .map((file) => file.diff)\n .filter((diff): diff is string => Boolean(diff));\n if (fileDiffs.length > 0) return fileDiffs.join(\"\\n\");\n\n const patchText = getStringValue(input?.patchText);\n if (patchText && isUnifiedDiff(patchText)) return patchText;\n\n return null;\n};\n\nconst buildApplyPatchMetadataTitleSegments = (files: ApplyPatchMetadataFile[]) => {\n const seen = new Set<string>();\n const segments: TitleSegment[] = [];\n\n for (const file of files) {\n if (seen.has(file.filePath)) continue;\n seen.add(file.filePath);\n\n segments.push({\n kind: \"diff\",\n fileName: basenameSafe(file.filePath),\n filePath: file.filePath,\n additions: file.additions,\n deletions: file.deletions,\n });\n }\n\n return segments;\n};\n\nconst getApplyPatchMetadataReferences = (files: ApplyPatchMetadataFile[]) => {\n return Array.from(new Set(files.map((file) => file.filePath)));\n};\n\nconst getOutputText = (invocation: ToolPart) => {\n const outputObject = getOutputObject(invocation);\n\n return (\n getStringValue(invocation.state?.output) ??\n getStringValue(outputObject?.returnDisplay) ??\n getStringValue(outputObject?.preview) ??\n getStringValue(outputObject?.stdout)\n );\n};\n\nconst parseSkillContentBlock = (value: string) => {\n const match = value.match(/<skill_content(?:\\s+name=\"([^\"]+)\")?>([\\s\\S]*?)<\\/skill_content>/);\n if (!match) return null;\n\n return {\n skillName: getStringValue(match[1]) ?? undefined,\n content: getStringValue(match[2]) ?? \"\",\n };\n};\n\nconst getSkillName = (invocation: ToolPart) => {\n const input = getInputObject(invocation);\n return (\n getStringValue(input?.name) ??\n getStringValue(input?.skillName) ??\n getStringValue(input?.skill) ??\n getStringValue(input?.skill_name) ??\n undefined\n );\n};\n\nconst buildFileLinkSegment = (filePath: string): TitleSegment => {\n return {\n kind: \"link\",\n text: basenameSafe(filePath),\n filePath,\n };\n};\n\nconst prependErrorBlock = (invocation: ToolPart, blocks: Block[]): Block[] => {\n if (!isErrorState(invocation.state?.status) || !invocation.state?.errorText) return blocks;\n const errorBlock: Block = { type: \"comment\", text: invocation.state.errorText };\n return [errorBlock, ...blocks];\n};\n\nconst renderApplyPatch: ToolRenderer = (invocation) => {\n const diffText = getApplyPatchDiffText(invocation);\n const metadataFiles = getApplyPatchMetadataFiles(invocation);\n\n const title = buildBaseTitle(invocation, undefined, \"Apply patch\");\n const diffSegments = buildDiffTitleSegments(diffText ?? undefined);\n if (diffSegments.length > 0) {\n title.push(...diffSegments);\n } else {\n title.push(...buildApplyPatchMetadataTitleSegments(metadataFiles));\n }\n\n const blocks: Block[] = [];\n const previews = buildFileDiffPreviews(diffText ?? undefined);\n for (const preview of previews) {\n blocks.push({\n type: \"diff\",\n language: \"diff\",\n original: preview.original,\n modified: preview.modified,\n sideBySide: false,\n });\n }\n\n if (blocks.length === 0) {\n for (const file of metadataFiles) {\n if (!file.before && !file.after) continue;\n blocks.push({\n type: \"diff\",\n language: \"diff\",\n original: file.before ?? \"\",\n modified: file.after ?? \"\",\n sideBySide: false,\n });\n }\n }\n\n if (blocks.length === 0) {\n const references = extractDiffFilePaths(diffText ?? undefined);\n if (references.length === 0) {\n references.push(...getApplyPatchMetadataReferences(metadataFiles));\n }\n if (references.length > 0) {\n blocks.push({ type: \"references\", references });\n }\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n\nconst renderRead: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const output = getOutputObject(invocation);\n\n const filePath =\n getStringValue(input?.filePath) ??\n getStringValue(input?.file) ??\n getStringValue(output?.filePath) ??\n getStringValue(output?.file) ??\n getStringValue(output?.path) ??\n undefined;\n\n const title = buildBaseTitle(invocation, undefined, \"Read file\");\n if (filePath) {\n title.push(buildFileLinkSegment(filePath));\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, []),\n } satisfies Item;\n};\n\nconst renderBash: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const output = getOutputObject(invocation);\n const command = getStringValue(input?.command) ?? undefined;\n\n const title = buildBaseTitle(invocation, command, \"Run command\");\n const blocks: Block[] = [];\n\n const outputText = getOutputText(invocation);\n if (outputText) {\n blocks.push({ type: \"code\", language: \"text\", code: outputText });\n }\n\n const stderr = getStringValue(output?.stderr);\n if (stderr && stderr !== outputText) {\n blocks.push({ type: \"code\", language: \"text\", code: stderr });\n }\n\n if (typeof output?.exitCode === \"number\") {\n blocks.push({ type: \"text\", text: `Exit code: ${output.exitCode}` });\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n\nconst renderGrep: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const outputText = getOutputText(invocation);\n const query = getStringValue(input?.pattern) ?? undefined;\n\n const title = buildBaseTitle(invocation, query, \"Search files\");\n const blocks: Block[] = outputText ? [{ type: \"code\", language: \"text\", code: outputText }] : [];\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n\nconst renderGlob: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const outputText = getOutputText(invocation);\n const pattern = getStringValue(input?.pattern) ?? undefined;\n\n const title = buildBaseTitle(invocation, pattern, \"Find files\");\n const blocks: Block[] = [];\n\n if (outputText) {\n const references = outputText\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n\n if (references.length > 0) {\n blocks.push({ type: \"references\", references });\n }\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n\nconst renderSkill: ToolRenderer = (invocation) => {\n const outputText = getOutputText(invocation);\n const parsedOutput = outputText ? parseSkillContentBlock(outputText) : null;\n\n const skillName = getSkillName(invocation) ?? parsedOutput?.skillName;\n const title = buildBaseTitle(invocation, skillName, \"Load skill\");\n\n const renderedContent = parsedOutput?.content ?? outputText;\n const blocks: Block[] = renderedContent ? [{ type: \"code\", language: \"markdown\", code: renderedContent }] : [];\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n\nexport const createDefaultToolRenderers = () => {\n return {\n apply_patch: renderApplyPatch,\n read: renderRead,\n bash: renderBash,\n grep: renderGrep,\n glob: renderGlob,\n skill: renderSkill,\n } satisfies ToolRenderersMap;\n};\n","import type { ToolPart } from \"../agent-types\";\nimport type { Block, TitleSegment } from \"../components/timeline\";\nimport { toolTypeToIconName } from \"../utils/get-icon\";\nimport { createDefaultToolRenderers } from \"./default-renderers\";\nimport type { ToolRenderersMap, ToolTimelineBuilderOptions } from \"./types\";\n\nconst STATE_LABELS: Record<string, string> = {\n pending: \"queued\",\n error: \"failed\",\n \"output-error\": \"failed\",\n \"input-streaming\": \"running\",\n \"input-available\": \"queued\",\n};\n\nconst normalizeToolType = (value: string) => value.replace(/^tool-/, \"\");\n\nconst toTitleCase = (value: string) => {\n return value\n .split(\" \")\n .filter((token) => token.length > 0)\n .map((token) => token[0].toUpperCase() + token.slice(1))\n .join(\" \");\n};\n\nconst getToolLabel = (tool?: string) => {\n const normalized = normalizeToolType(tool ?? \"tool\").replace(/_/g, \" \");\n return toTitleCase(normalized);\n};\n\nconst isErrorState = (state?: string) => state === \"error\" || state === \"output-error\";\n\nconst buildIndicator = (invocation: ToolPart) => {\n if (isErrorState(invocation.state?.status)) {\n return { type: \"icon\", icon: \"danger\" } as const;\n }\n\n return { type: \"icon\", icon: toolTypeToIconName(invocation.tool ?? \"tool\") } as const;\n};\n\nconst getStateLabel = (state?: unknown) => {\n if (!state || typeof state !== \"string\") return null;\n if (STATE_LABELS[state]) return STATE_LABELS[state];\n if (state.includes(\"stream\")) return \"running\";\n return null;\n};\n\nconst stringifyValue = (value: unknown) => {\n if (typeof value === \"string\") return value;\n if (value === null || value === undefined) return null;\n\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return null;\n }\n};\n\nconst buildGenericBlocks = (invocation: ToolPart): Block[] => {\n const blocks: Block[] = [];\n\n if (isErrorState(invocation.state?.status) && invocation.state?.errorText) {\n blocks.push({ type: \"comment\", text: invocation.state.errorText });\n }\n\n const inputText = stringifyValue(invocation.state?.input);\n if (inputText) {\n blocks.push({ type: \"code\", language: \"json\", code: inputText });\n }\n\n const outputText = stringifyValue(invocation.state?.output);\n if (outputText) {\n blocks.push({ type: \"code\", language: \"json\", code: outputText });\n }\n\n return blocks;\n};\n\nconst createGenericItem = (invocation: ToolPart) => {\n const title: TitleSegment[] = [{ kind: \"text\", text: getToolLabel(invocation.tool), bold: true }];\n const stateLabel = getStateLabel(invocation.state?.status);\n if (stateLabel) {\n title.push({ kind: \"text\", text: stateLabel, muted: true });\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: buildGenericBlocks(invocation),\n };\n};\n\nconst mergeToolRenderers = (overrides?: ToolRenderersMap) => {\n if (!overrides) return createDefaultToolRenderers();\n return { ...createDefaultToolRenderers(), ...overrides } satisfies ToolRenderersMap;\n};\n\nconst getRenderer = (invocation: ToolPart, toolRenderers: ToolRenderersMap) => {\n const rawTool = invocation.tool ?? \"tool\";\n return toolRenderers[rawTool] ?? toolRenderers[normalizeToolType(rawTool)];\n};\n\nconst renderInvocation = (\n invocation: ToolPart,\n toolRenderers: ToolRenderersMap,\n options?: ToolTimelineBuilderOptions,\n) => {\n const renderer = getRenderer(invocation, toolRenderers);\n if (renderer) {\n const rendered = renderer(invocation, options);\n if (rendered) return rendered;\n }\n\n return createGenericItem(invocation);\n};\n\nexport const buildTimelineDocFromInvocations = (invocations: ToolPart[], options?: ToolTimelineBuilderOptions) => {\n const toolRenderers = mergeToolRenderers(options?.toolRenderers);\n const items = invocations.map((invocation) => renderInvocation(invocation, toolRenderers, options));\n\n return { items };\n};\n\nexport const createToolTimelineBuilder = (toolRenderers: ToolRenderersMap) => {\n return (invocations: ToolPart[], options?: ToolTimelineBuilderOptions) => {\n return buildTimelineDocFromInvocations(invocations, { ...options, toolRenderers });\n };\n};\n","import { Avatar, Box, Button, Card, Timeline as ChakraTimeline, Link, Span, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronUpIcon } from \"lucide-react\";\nimport type { MouseEvent, ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport { DiffBubble } from \"@/components/diff-bubble\";\nimport { DiffEditor } from \"@/components/diff-editor\";\nimport { ResourceBadge } from \"@/components/resource-badge\";\nimport type { IconName } from \"../utils/get-icon\";\nimport { getIconComponent } from \"../utils/get-icon\";\n\nexport const Timeline = ChakraTimeline;\n\nexport type TimelineDoc = {\n items: Item[];\n};\n\nexport type Item = {\n id?: string;\n timestamp?: string;\n indicator?: Indicator;\n title: TitleSegment[];\n blocks?: Block[];\n expandable?: boolean;\n};\n\nexport type Indicator =\n | { type: \"icon\"; icon: IconName; color?: string }\n | { type: \"avatar\"; src: string; alt?: string }\n | { type: \"none\" };\n\nexport type TitleSegment =\n | { kind: \"text\"; text: string; bold?: boolean; muted?: boolean }\n | { kind: \"avatar\"; src: string; alt?: string }\n | { kind: \"diff\"; fileName: string; filePath?: string; additions?: number; deletions?: number }\n | {\n kind: \"link\";\n text: string;\n href?: string;\n filePath?: string;\n bold?: boolean;\n muted?: boolean;\n variant?: \"default\" | \"bubble\";\n };\n\nexport type Block =\n | { type: \"comment\"; text: string; reactions?: { clap?: number } }\n | { type: \"code\"; language: string; code: string; editable?: boolean }\n | { type: \"diff\"; language?: string; original: string; modified: string; sideBySide?: boolean }\n | { type: \"input\"; placeholder?: string }\n | { type: \"text\"; text: string }\n | { type: \"references\"; references: string[] }\n | { type: \"component\"; render: (ctx: { onOpenFile?: (filePath: string) => void }) => ReactNode };\n\nconst handleTitleLinkClick = (\n event: MouseEvent<HTMLAnchorElement>,\n seg: Extract<TitleSegment, { kind: \"link\" }>,\n onOpenFile?: (filePath: string) => void,\n stopPropagation = false,\n) => {\n if (stopPropagation) {\n event.stopPropagation();\n }\n\n if (!seg.href) {\n event.preventDefault();\n }\n if (seg.filePath) {\n onOpenFile?.(seg.filePath);\n }\n};\n\nfunction AvatarTitleSegment({ seg }: { seg: Extract<TitleSegment, { kind: \"avatar\" }> }) {\n return (\n <Avatar.Root width=\"1.5rem\" height=\"1.5rem\">\n <Avatar.Image src={seg.src} alt={seg.alt} />\n <Avatar.Fallback />\n </Avatar.Root>\n );\n}\n\nfunction DiffTitleSegment({\n seg,\n onOpenFile,\n}: {\n seg: Extract<TitleSegment, { kind: \"diff\" }>;\n onOpenFile?: (filePath: string) => void;\n}) {\n return (\n <DiffBubble\n fileName={seg.fileName}\n additions={seg.additions ?? 0}\n deletions={seg.deletions ?? 0}\n onClickFileLink={() => {\n const path = seg.filePath ?? seg.fileName;\n onOpenFile?.(path);\n }}\n />\n );\n}\n\nfunction BubbleLinkTitleSegment({\n seg,\n onOpenFile,\n}: {\n seg: Extract<TitleSegment, { kind: \"link\" }>;\n onOpenFile?: (filePath: string) => void;\n}) {\n const fontWeight = seg.bold ? \"medium\" : undefined;\n const isInteractive = Boolean(seg.href || seg.filePath);\n\n return (\n <Link\n href={seg.href ?? \"#\"}\n fontWeight={fontWeight}\n color={seg.muted ? \"fg.muted\" : \"fg.muted\"}\n textDecoration=\"none\"\n cursor={isInteractive ? \"pointer\" : \"default\"}\n onClick={(event) => handleTitleLinkClick(event, seg, onOpenFile, true)}\n _hover={{\n textDecoration: \"underline\",\n color: seg.muted ? \"fg.muted\" : \"fg.blue-dark\",\n }}\n >\n {seg.text}\n </Link>\n );\n}\n\nfunction DefaultLinkTitleSegment({\n seg,\n onOpenFile,\n}: {\n seg: Extract<TitleSegment, { kind: \"link\" }>;\n onOpenFile?: (filePath: string) => void;\n}) {\n const fontWeight = seg.bold ? \"medium\" : undefined;\n\n return (\n <Link\n href={seg.href ?? \"#\"}\n fontWeight={fontWeight}\n color={seg.muted ? \"fg.muted\" : \"accent.primary\"}\n textDecoration=\"underline\"\n onClick={(event) => handleTitleLinkClick(event, seg, onOpenFile)}\n _hover={{\n color: seg.muted ? \"fg.muted\" : \"accent.primary\",\n textDecoration: \"underline\",\n }}\n >\n {seg.text}\n </Link>\n );\n}\n\nfunction TextTitleSegment({\n seg,\n isClickable,\n}: {\n seg: Extract<TitleSegment, { kind: \"text\" }>;\n isClickable?: boolean;\n}) {\n return (\n <Span\n fontWeight={seg.bold ? \"medium\" : undefined}\n color=\"fg.muted\"\n _groupHover={{\n color: isClickable && !seg.muted ? \"fg\" : \"fg.muted\",\n }}\n >\n {seg.text}\n </Span>\n );\n}\n\nfunction TitleInline({\n seg,\n isClickable,\n onOpenFile,\n}: {\n seg: TitleSegment;\n isClickable?: boolean;\n onOpenFile?: (filePath: string) => void;\n}) {\n switch (seg.kind) {\n case \"avatar\":\n return <AvatarTitleSegment seg={seg} />;\n case \"diff\":\n return <DiffTitleSegment seg={seg} onOpenFile={onOpenFile} />;\n case \"link\":\n return seg.variant === \"bubble\" ? (\n <BubbleLinkTitleSegment seg={seg} onOpenFile={onOpenFile} />\n ) : (\n <DefaultLinkTitleSegment seg={seg} onOpenFile={onOpenFile} />\n );\n case \"text\":\n return <TextTitleSegment seg={seg} isClickable={isClickable} />;\n default:\n return null;\n }\n}\n\nfunction IndicatorView({ ind }: { ind?: Indicator }) {\n if (!ind || ind.type === \"none\") return null;\n\n if (ind.type === \"icon\") {\n const IndicatorIcon = getIconComponent(ind.icon);\n return (\n <Timeline.Indicator outline=\"none\" shadow=\"none\" border=\"none\" background=\"bg\" color=\"fg\">\n <Span display=\"inline-flex\" alignItems=\"center\">\n <IndicatorIcon size={14} strokeWidth={1} />\n </Span>\n </Timeline.Indicator>\n );\n }\n\n return (\n <Timeline.Indicator>\n <Avatar.Root boxSize=\"full\">\n <Avatar.Image src={ind.src} alt={ind.alt} />\n <Avatar.Fallback />\n </Avatar.Root>\n </Timeline.Indicator>\n );\n}\n\nfunction CodeBlock({ code, language }: { code: string; language?: string }) {\n return (\n <Box\n as=\"pre\"\n background=\"bg.muted\"\n color=\"fg\"\n borderRadius=\"md\"\n padding=\"sm\"\n fontFamily=\"mono\"\n fontSize=\"xs\"\n lineHeight=\"shorter\"\n overflowX=\"auto\"\n whiteSpace=\"pre\"\n aria-label={language ? `${language} code block` : \"code block\"}\n >\n <Box as=\"code\">{code}</Box>\n </Box>\n );\n}\n\nfunction BlockView({ b, onOpenFile }: { b: Block; onOpenFile?: (filePath: string) => void }) {\n switch (b.type) {\n case \"comment\":\n return (\n <Card.Root>\n <Card.Body>{b.text}</Card.Body>\n {b.reactions?.clap ? (\n <Card.Footer>\n <Button>👏 {b.reactions.clap}</Button>\n </Card.Footer>\n ) : null}\n </Card.Root>\n );\n case \"code\":\n return (\n <Card.Root border=\"0\" padding=\"0\">\n <Card.Body padding=\"0\">\n <CodeBlock language={b.language} code={b.code} />\n </Card.Body>\n </Card.Root>\n );\n case \"diff\":\n return (\n <Card.Root border=\"0\" padding=\"0\">\n <Card.Body padding=\"0\">\n <Box height=\"240px\" minW=\"320px\" overflow=\"hidden\">\n <DiffEditor\n original={b.original}\n modified={b.modified}\n language={b.language}\n sideBySide={b.sideBySide ?? false}\n disableScroll={true}\n />\n </Box>\n </Card.Body>\n </Card.Root>\n );\n case \"text\":\n return (\n <Card.Root background=\"transparent\">\n <Card.Body padding=\"sm\">\n <Text textStyle=\"label/S/regular\">{b.text}</Text>\n </Card.Body>\n </Card.Root>\n );\n case \"references\":\n return (\n <Stack mt=\"xs\" gap=\"xs\" flexDir=\"row\" flexWrap=\"wrap\">\n {b.references.map((ref) => (\n <ResourceBadge key={ref} fileName={ref} />\n ))}\n </Stack>\n );\n case \"component\":\n return <>{b.render({ onOpenFile })}</>;\n }\n}\n\nfunction TimelineItemRow({\n item,\n itemKey,\n isOpen,\n canExpand,\n hasBlocks,\n onToggle,\n onOpenFile,\n}: {\n item: Item;\n itemKey: string;\n isOpen: boolean;\n canExpand: boolean;\n hasBlocks: boolean;\n onToggle: (key: string) => void;\n onOpenFile?: (filePath: string) => void;\n}) {\n return (\n <Timeline.Item gap=\"xs\" key={itemKey}>\n <Timeline.Connector>\n <Timeline.Separator />\n <IndicatorView ind={item.indicator} />\n </Timeline.Connector>\n <Timeline.Content pb=\"xs\">\n {item.title.length > 0 && (\n <Timeline.Title\n className=\"group\"\n fontWeight=\"normal\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n cursor={canExpand ? \"pointer\" : \"default\"}\n onClick={canExpand ? () => onToggle(itemKey) : undefined}\n >\n <Span display=\"inline-flex\" alignItems=\"center\" gap=\"sm\" flexWrap=\"wrap\">\n <Span display=\"inline-flex\" alignItems=\"center\" gap=\"xs\" flexWrap=\"wrap\">\n {item.title.map((seg, i) => (\n <TitleInline key={i} seg={seg} isClickable={canExpand} onOpenFile={onOpenFile} />\n ))}\n </Span>\n {canExpand ? (\n <Span\n display=\"inline-flex\"\n alignItems=\"center\"\n transition=\"transform 200ms ease, color 200ms ease\"\n transform={isOpen ? \"rotate(0deg)\" : \"rotate(-180deg)\"}\n color=\"transparent\"\n _groupHover={{ color: \"fg\" }}\n >\n <ChevronUpIcon size={12} />\n </Span>\n ) : null}\n </Span>\n </Timeline.Title>\n )}\n {hasBlocks ? (\n <Box display=\"grid\" gridTemplateRows={isOpen ? \"1fr\" : \"0fr\"} transition=\"grid-template-rows 220ms ease\">\n {isOpen ? (\n <Box\n overflow=\"hidden\"\n opacity={1}\n transform=\"translateY(0)\"\n transition=\"opacity 200ms ease, transform 200ms ease\"\n >\n {item.blocks!.map((block, i) => (\n <Box key={i}>\n <BlockView b={block} onOpenFile={onOpenFile} />\n </Box>\n ))}\n </Box>\n ) : null}\n </Box>\n ) : null}\n </Timeline.Content>\n </Timeline.Item>\n );\n}\n\nexport function TimelineFromJSON({ data, onOpenFile }: { data: TimelineDoc; onOpenFile?: (filePath: string) => void }) {\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n\n const getKey = (it: Item, idx: number) => (it.id ? `id:${it.id}` : `idx:${idx}`);\n\n const toggle = (key: string) => {\n setExpanded((prev) => ({ ...prev, [key]: !prev[key] }));\n };\n\n return (\n <Timeline.Root>\n {data.items.map((item, idx) => {\n const key = getKey(item, idx);\n const hasBlocks = (item.blocks?.length ?? 0) > 0;\n const canExpand = (item.expandable ?? true) && hasBlocks;\n const isOpen = canExpand ? (expanded[key] ?? false) : hasBlocks;\n\n return (\n <TimelineItemRow\n key={key}\n item={item}\n itemKey={key}\n isOpen={isOpen}\n canExpand={canExpand}\n hasBlocks={hasBlocks}\n onToggle={toggle}\n onOpenFile={onOpenFile}\n />\n );\n })}\n </Timeline.Root>\n );\n}\n","import { buildTimelineDocFromInvocations } from \"../tool-rendering\";\nimport type { ToolPart } from \"./message-types\";\nimport { TimelineFromJSON } from \"./timeline\";\n\nexport interface ToolInvocationTimelineProps {\n invocations: ToolPart[];\n labeledBlocks?: boolean;\n onOpenFile?: (filePath: string) => void;\n}\n\nexport function ToolInvocationTimeline(props: ToolInvocationTimelineProps) {\n const { invocations, labeledBlocks, onOpenFile } = props;\n const data = buildTimelineDocFromInvocations(invocations, { labeledBlocks });\n\n return <TimelineFromJSON data={data} onOpenFile={onOpenFile} />;\n}\n","import { Box, Spinner, Text } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { AlertMessage } from \"@/components/alert\";\nimport { RichMessage } from \"@/components/rich-text\";\nimport type { AlertPart, ErrorPart, SessionMessage, SessionMessagePart, ToolPart } from \"../agent-types\";\nimport { Response } from \"./ai-response\";\nimport { ToolInvocationTimeline, type ToolInvocationTimelineProps } from \"./tool-invocation-timeline\";\n\ntype ToolInvocationTimelineComponent = (props: ToolInvocationTimelineProps) => ReactNode;\n\nexport interface MessagePartsProps {\n message: SessionMessage;\n streaming?: boolean;\n onOpenFile?: (filePath: string) => void;\n toolInvocationTimeline?: ToolInvocationTimelineComponent;\n}\n\nconst isToolPart = (part: SessionMessagePart): part is ToolPart => {\n return part.type === \"tool\";\n};\n\nconst formatTokenCount = (count: number) => {\n if (count >= 1000) return `${(count / 1000).toFixed(1)}k`;\n return String(count);\n};\n\nconst getErrorMessage = (part: ErrorPart) => {\n if (part.message && part.message.trim().length > 0) {\n return part.message;\n }\n\n const { errorType } = part;\n switch (errorType) {\n case \"timeout\":\n return \"Session timed out.\";\n case \"crash\":\n return \"Session crashed unexpectedly.\";\n case \"permission\":\n return \"Permission denied.\";\n default:\n return \"An error occurred.\";\n }\n};\n\nconst ALERT_COLOR_PALETTE: Record<AlertPart[\"status\"], string> = {\n info: \"blue\",\n warning: \"orange\",\n error: \"red\",\n success: \"green\",\n loading: \"blue\",\n};\n\nconst collectToolInvocations = (parts: SessionMessagePart[], startIndex: number) => {\n const invocations: ToolPart[] = [];\n let lookahead = startIndex;\n\n while (lookahead < parts.length) {\n const nextPart = parts[lookahead];\n if (!isToolPart(nextPart)) break;\n invocations.push(nextPart);\n lookahead += 1;\n }\n\n return { invocations, nextIndex: lookahead - 1 };\n};\n\nexport function MessagePartsRenderer(props: MessagePartsProps) {\n const { message, onOpenFile, toolInvocationTimeline } = props;\n const RenderToolInvocationTimeline = toolInvocationTimeline ?? ToolInvocationTimeline;\n const parts = message.parts ?? [];\n const nodes: ReactNode[] = [];\n\n for (let partIndex = 0; partIndex < parts.length; partIndex += 1) {\n const part = parts[partIndex];\n const key = `${message.id}-${partIndex}`;\n\n switch (part.type) {\n case \"text\":\n nodes.push(\n <div key={key}>\n <Response>{part.text}</Response>\n </div>,\n );\n break;\n case \"reasoning\":\n nodes.push(\n <Box\n key={key}\n padding=\"0\"\n css={{\n \"& .rich-text, & .rich-text *\": {\n color: \"fg.subtle !important\",\n fontSize: \".75rem !important\",\n fontWeight: \"normal !important\",\n },\n }}\n >\n <RichMessage defaultState={part.text} fullWidth />\n </Box>,\n );\n break;\n case \"tool\": {\n const { invocations, nextIndex } = collectToolInvocations(parts, partIndex);\n partIndex = nextIndex;\n nodes.push(\n <Box key={key} width=\"full\">\n <RenderToolInvocationTimeline invocations={invocations} labeledBlocks onOpenFile={onOpenFile} />\n </Box>,\n );\n break;\n }\n case \"error\":\n nodes.push(\n <Box key={key} py=\"2\" width=\"full\">\n <AlertMessage borderRadius=\"xs\" status=\"error\" colorPalette=\"red\" title={getErrorMessage(part)} size=\"sm\" />\n </Box>,\n );\n break;\n case \"token_usage\":\n nodes.push(\n <Box key={key}>\n <Text fontSize=\"xs\" color=\"fg.subtle\">\n Tokens: {formatTokenCount(part.inputTokens)} in / {formatTokenCount(part.outputTokens)} out\n {part.cacheReadTokens ? ` / ${formatTokenCount(part.cacheReadTokens)} cache read` : \"\"}\n </Text>\n </Box>,\n );\n break;\n case \"alert\":\n nodes.push(\n <Box key={key} width=\"full\">\n <AlertMessage\n borderRadius=\"xs\"\n status={part.status === \"loading\" ? \"info\" : part.status}\n colorPalette={ALERT_COLOR_PALETTE[part.status]}\n title={part.title}\n icon={part.status === \"loading\" ? <Spinner size=\"sm\" /> : undefined}\n size=\"sm\"\n >\n {part.message}\n </AlertMessage>\n </Box>,\n );\n break;\n default:\n nodes.push(null);\n }\n }\n\n return <>{nodes}</>;\n}\n","import type { SessionMessage, SessionMessagePart, ToolPart } from \"../agent-types\";\n\nexport type { SessionMessage, SessionMessagePart, ToolPart };\n\nexport type MessageOrigin = \"user\" | \"assistant\" | \"developer\";\n\nexport const getMessageOrigin = (role: string): MessageOrigin => {\n if (role === \"user\" || role === \"assistant\" || role === \"developer\") return role;\n return \"assistant\";\n};\n\nexport const isReasoningToolOnlyMessage = (message: SessionMessage) => {\n const parts = message.parts ?? [];\n if (parts.length === 0) return false;\n\n const hasTextPart = parts.some((part) => part.type === \"text\" && \"text\" in part);\n if (hasTextPart) return false;\n\n return parts.some((part) => part.type === \"reasoning\" || part.type === \"tool\");\n};\n\nexport const mergeReasoningToolOnlyMessages = (messages: SessionMessage[]) => {\n const merged: SessionMessage[] = [];\n\n for (const message of messages) {\n const previous = merged[merged.length - 1];\n\n if (previous && previous.role === message.role && isReasoningToolOnlyMessage(message)) {\n previous.parts = [...(previous.parts ?? []), ...(message.parts ?? [])];\n continue;\n }\n\n merged.push({\n ...message,\n parts: [...(message.parts ?? [])],\n });\n }\n\n return merged;\n};\n\nexport interface MessageGroup {\n userMessage: SessionMessage;\n responses: SessionMessage[];\n}\n\n// Groups messages into turns: each group starts with a user message\n// followed by all non-user messages until the next user message.\nexport const groupMessagesByTurn = (messages: SessionMessage[]) => {\n const groups: MessageGroup[] = [];\n const leadingResponses: SessionMessage[] = [];\n\n for (const message of messages) {\n if (message.role === \"user\") {\n groups.push({ userMessage: message, responses: [] });\n } else if (groups.length > 0) {\n groups[groups.length - 1].responses.push(message);\n } else {\n leadingResponses.push(message);\n }\n }\n\n return { groups, leadingResponses };\n};\n","import { Box, Button, Flex, HStack, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { MessageCircleIcon } from \"lucide-react\";\nimport { type ReactNode, useState } from \"react\";\nimport { EmptyState } from \"@/components/empty-state\";\nimport { createSerializedPromptState } from \"../utils/editor-state\";\nimport { ChatPrimitives } from \"./ai-conversation\";\nimport { ChatMessage } from \"./ai-message\";\nimport { AutoScroll } from \"./auto-scroll\";\nimport { ChatInput } from \"./chat-input\";\nimport {\n isStickyUserMessageCollapsible,\n STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT,\n} from \"./chat-panel-sticky-user-message\";\nimport { MessagePartsRenderer } from \"./message-parts-renderer\";\nimport {\n getMessageOrigin,\n groupMessagesByTurn,\n mergeReasoningToolOnlyMessages,\n type SessionMessage,\n} from \"./message-types\";\n\ninterface ChatPanelProps {\n messages: SessionMessage[];\n streaming?: boolean;\n emptyStateTitle: string;\n emptyStateDescription: string;\n emptyStateContent?: ReactNode;\n loadingContent?: ReactNode;\n chatInputPlaceholder: string;\n chatInputDefaultValue?: string;\n onSubmitMessage?: (text: string, attachments: string[]) => void;\n onChatInputChange?: (text: string) => void;\n actions?: ReactNode;\n repoMenu?: ReactNode;\n attachedResources?: string[];\n onClearAttachments?: () => void;\n attachmentList?: ReactNode;\n approvalPrompt?: ReactNode;\n workspaceHub?: ReactNode;\n workspaceInitializing?: boolean;\n inputDisabled?: boolean;\n}\n\nconst renderMessage = (message: SessionMessage, streaming: boolean) => {\n const from = getMessageOrigin(message.role);\n return (\n <ChatMessage.Root key={message.id} from={from}>\n <ChatMessage.Content from={from}>\n <MessagePartsRenderer message={message} streaming={streaming} />\n </ChatMessage.Content>\n </ChatMessage.Root>\n );\n};\n\nexport const ChatPanel = (props: ChatPanelProps) => {\n const {\n messages,\n streaming = false,\n emptyStateTitle,\n emptyStateDescription,\n emptyStateContent,\n loadingContent,\n chatInputPlaceholder,\n chatInputDefaultValue = \"\",\n onSubmitMessage,\n onChatInputChange,\n actions,\n repoMenu,\n attachedResources,\n onClearAttachments,\n attachmentList,\n approvalPrompt,\n workspaceHub,\n workspaceInitializing = false,\n inputDisabled = false,\n } = props;\n\n const merged = mergeReasoningToolOnlyMessages(messages);\n const hasMessages = merged.length > 0;\n const userMessageCount = merged.reduce((count, message) => count + (message.role === \"user\" ? 1 : 0), 0);\n const { groups, leadingResponses } = groupMessagesByTurn(merged);\n const [expandedStickyMessageIds, setExpandedStickyMessageIds] = useState(() => new Set<string>());\n const emptyContent = streaming ? (loadingContent ?? emptyStateContent) : emptyStateContent;\n const hasWorkspaceHub = Boolean(workspaceHub);\n const showThinkingIndicator = streaming && hasMessages && !workspaceInitializing;\n\n const toggleStickyMessageExpanded = (messageId: string) => {\n setExpandedStickyMessageIds((current) => {\n const next = new Set(current);\n if (next.has(messageId)) {\n next.delete(messageId);\n } else {\n next.add(messageId);\n }\n\n return next;\n });\n };\n\n return (\n <Flex position=\"relative\" direction=\"column\" w=\"full\" h=\"full\" overflow=\"hidden\">\n <ChatPrimitives.Root>\n <AutoScroll userMessageCount={userMessageCount} />\n <ChatPrimitives.Viewport>\n {hasMessages ? (\n <Stack gap=\"sm\">\n {leadingResponses.map((message) => renderMessage(message, streaming))}\n {groups.map((group) => {\n const isCollapsible = isStickyUserMessageCollapsible(group.userMessage);\n const isExpanded = expandedStickyMessageIds.has(group.userMessage.id);\n\n return (\n <Box key={group.userMessage.id}>\n <Box position=\"sticky\" top=\"0\" zIndex={1}>\n <Box position=\"relative\">\n <ChatMessage.Root from=\"user\">\n <ChatMessage.Content\n from=\"user\"\n maxH={isCollapsible && !isExpanded ? STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT : undefined}\n overflowY=\"hidden\"\n >\n <MessagePartsRenderer message={group.userMessage} streaming={streaming} />\n </ChatMessage.Content>\n </ChatMessage.Root>\n {isCollapsible && !isExpanded && (\n <Flex\n position=\"absolute\"\n bottom=\"0\"\n left=\"0\"\n right=\"0\"\n justifyContent=\"flex-end\"\n alignItems=\"flex-end\"\n px=\"xs\"\n pb=\"xs\"\n pt=\"lg\"\n bgGradient=\"to-t\"\n gradientFrom=\"bg.subtle\"\n gradientTo=\"transparent\"\n borderBottomRadius=\"xs\"\n >\n <Button\n size=\"2xs\"\n variant=\"solid\"\n onClick={() => toggleStickyMessageExpanded(group.userMessage.id)}\n >\n Show more\n </Button>\n </Flex>\n )}\n </Box>\n {isCollapsible && isExpanded && (\n <Flex justifyContent=\"flex-end\" mt=\"2xs\" mb=\"sm\">\n <Button\n size=\"2xs\"\n variant=\"ghost\"\n onClick={() => toggleStickyMessageExpanded(group.userMessage.id)}\n >\n Show less\n </Button>\n </Flex>\n )}\n </Box>\n {group.responses.map((message) => renderMessage(message, streaming))}\n </Box>\n );\n })}\n </Stack>\n ) : (\n (emptyContent ?? (\n <EmptyState\n icon={<MessageCircleIcon size={48} strokeWidth={1.5} />}\n title={emptyStateTitle}\n description={emptyStateDescription}\n />\n ))\n )}\n </ChatPrimitives.Viewport>\n <ChatPrimitives.ScrollToBottom aria-label=\"Scroll to latest message\" />\n </ChatPrimitives.Root>\n {approvalPrompt}\n {showThinkingIndicator ? (\n <HStack gap=\"xs\" px=\"sm\" py=\"2xs\">\n <Spinner size=\"xs\" color=\"fg.muted\" />\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n Working...\n </Text>\n </HStack>\n ) : null}\n <Stack px=\"sm\" gap={hasWorkspaceHub ? \"0\" : \"xs\"}>\n {workspaceHub}\n <ChatInput\n placeholder={chatInputPlaceholder}\n defaultState={createSerializedPromptState(chatInputDefaultValue)}\n streaming={streaming}\n onSubmit={onSubmitMessage}\n onChange={onChatInputChange}\n actions={actions}\n attachedResources={attachedResources}\n onClearAttachments={onClearAttachments}\n attachmentList={attachmentList}\n isDisabled={inputDisabled}\n attachedToTop={hasWorkspaceHub}\n />\n </Stack>\n <Flex p=\"2xs\" justifyContent=\"flex-end\">\n {repoMenu}\n </Flex>\n </Flex>\n );\n};\n","import { Skeleton, Stack } from \"@chakra-ui/react\";\nimport { ChatMessage } from \"./ai-message\";\n\nconst renderSkeletonLines = (widths: string[]) => (\n <Stack gap=\"xs\" w=\"full\">\n {widths.map((width, index) => (\n <Skeleton key={`${width}-${index}`} height=\"3\" width={width} borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n\nexport const ChatSkeleton = () => {\n return (\n <Stack minH=\"full\" py=\"xs\" gap=\"0\">\n <ChatMessage.Root from=\"user\">\n <ChatMessage.Content from=\"user\">{renderSkeletonLines([\"72%\", \"46%\"])}</ChatMessage.Content>\n </ChatMessage.Root>\n <ChatMessage.Root from=\"assistant\">\n <ChatMessage.Content from=\"assistant\">{renderSkeletonLines([\"76%\", \"62%\", \"40%\"])}</ChatMessage.Content>\n </ChatMessage.Root>\n </Stack>\n );\n};\n","import { Flex, HStack, Spinner, Text } from \"@chakra-ui/react\";\nimport { AlertTriangle } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { DiffBubble } from \"@/components/diff-bubble\";\n\ntype WorkspaceHubStatus = \"ready\" | \"loading\" | \"error\";\n\ninterface ChatWorkspaceHubProps {\n changesLabel: string;\n additions: number;\n deletions: number;\n action?: ReactNode;\n status?: WorkspaceHubStatus;\n statusLabel?: string;\n}\n\nexport const ChatWorkspaceHub = (props: ChatWorkspaceHubProps) => {\n const { changesLabel, additions, deletions, action, status = \"ready\", statusLabel } = props;\n const hasChanges = additions > 0 || deletions > 0;\n\n return (\n <Flex\n align=\"center\"\n justify=\"space-between\"\n gap=\"sm\"\n minW=\"0\"\n px=\"sm\"\n py=\"xs\"\n borderWidth=\"1px\"\n borderColor={status === \"error\" ? \"border.error\" : \"border.muted\"}\n borderRadius=\"xs\"\n borderBottomRadius=\"0\"\n bg={status === \"error\" ? \"bg.error\" : \"bg.subtle\"}\n >\n {status === \"loading\" ? (\n <HStack gap=\"xs\" minW=\"0\">\n <Spinner size=\"xs\" color=\"fg.muted\" />\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" truncate>\n {statusLabel ?? \"Setting up workspace...\"}\n </Text>\n </HStack>\n ) : status === \"error\" ? (\n <HStack gap=\"xs\" minW=\"0\">\n <AlertTriangle size={14} color=\"var(--chakra-colors-fg-error)\" />\n <Text textStyle=\"label/S/regular\" color=\"fg.error\" truncate>\n {statusLabel ?? \"Workspace setup failed\"}\n </Text>\n </HStack>\n ) : hasChanges ? (\n <DiffBubble\n label={changesLabel}\n additions={additions}\n deletions={deletions}\n variant=\"ghost\"\n size=\"small\"\n _hover={{ background: \"transparent\" }}\n />\n ) : (\n <Flex flex=\"1\" />\n )}\n {action ? (\n <Flex flexShrink={0} ml=\"auto\">\n {action}\n </Flex>\n ) : null}\n </Flex>\n );\n};\n"],"names":["conversationRootDefaultProps","initial","resize","role","ConversationRoot","chakra","StickToBottomEl","base","position","flex","overflow","height","forwardProps","defaultProps","ConversationContent","props","$","_c","children","rest","contentRef","scrollRef","useStickToBottomContext","t0","t1","t2","Symbol","for","p","t3","ScrollArea","conversationScrollButtonContainerDefaultProps","axis","bottom","zIndex","ConversationScrollButton","isAtBottom","scrollToBottom","jsx","AbsoluteCenter","IconButton","ArrowDownIcon","ChatPrimitives","Root","Viewport","ScrollToBottom","recipe","defineSlotRecipe","className","slots","root","display","width","alignItems","justifyContent","gap","animationName","animationDuration","animationTimingFunction","mb","content","flexDirection","textStyle","variants","from","user","border","borderColor","bg","px","py","borderBottomRightRadius","assistant","developer","size","sm","md","lg","shape","rounded","pill","square","defaultVariants","withProvider","withContext","createSlotRecipeContext","MessageRoot","MessageContent","ChatMessage","Content","formatToolInput","input","text","JSON","stringify","length","slice","ApprovalPrompt","toolName","toolInput","onApprove","onDeny","formattedInput","jsxs","Text","Code","ShieldX","t4","Button","t5","ShieldCheck","t6","t7","HStack","t8","Box","Flex","shouldAutoScroll","args","previousUserMessageCount","userMessageCount","AutoScroll","previousCountRef","useRef","current","useEffect","SendButton","canInterrupt","shortcut","title","ariaLabel","Square","ArrowUp","icon","button","Fragment","Kbd","tooltipContent","Tooltip","Portal","ChatInput","defaultState","onSubmit","onInterrupt","streaming","attachedResources","onClearAttachments","isDisabled","onChange","placeholder","attachmentList","actions","attachedToTop","undefined","_temp","isSelected","setIsSelected","useState","editorState","setEditorState","editorKey","setEditorKey","getTextFromSerializedEditorState","setText","containerRef","onChangeRef","t10","t9","resetText","_temp2","t11","editable","querySelector","HTMLElement","focus","focusEditor","t12","handleContainerClick","t13","t14","shouldFocus","_temp3","resetText_0","requestAnimationFrame","resetEditor","trimmed","trim","handleSend","Boolean","t15","placeholderNode","t16","t17","t18","t19","t20","t21","t22","boxShadow","t23","t24","t25","pr","t26","t27","t","t28","PromptEditor","t29","Spacer","t30","t31","t32","t33","t34","t35","t36","key","key_0","createSerializedPromptState","generateEditorStateFromString","STICKY_USER_MESSAGE_COLLAPSE_TEXT_THRESHOLD","STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT","getMessageTextLength","message","parts","reduce","total","part","type","isStickyUserMessageCollapsible","ChatRichContent","RichMessage","Response","toolIconMap","shell","Terminal","ls","ListTree","read_file","FileText","write_file","FilePen","delete_file","Trash2","patch","FileDiff","upload_files","FileUp","download_file","FileDown","move_file","Move","iconMap","dot","DotIcon","danger","AlertTriangle","search","Search","browser","Globe","file","File","terminal","DEFAULT_TOOL_ICON","isToolIconName","value","Object","hasOwn","getIconComponent","name","toolTypeToIconName","normalized","replace","basenameSafe","path","idx","lastIndexOf","normalizeHeaderPath","token","split","startsWith","isMinusHeader","line","isPlusHeader","isHunkHeader","isAddedLine","isDeletedLine","ensureFileChange","changes","filePath","has","set","additions","deletions","incrementAdditions","get","incrementDeletions","processUnifiedDiffLine","state","lastMinusHeader","inHunk","currentPath","parseUnifiedDiff","diffText","Map","lines","Array","entries","map","buildDiffTitleSegments","kind","fileName","extractDiffFilePaths","isDiffFileBoundary","isInvalidHunkBodyLine","appendHunkLine","original","modified","push","parseHunkBody","startIndex","index","parsePreview","oldHeader","next","nextIndex","preview","join","buildFileDiffPreviews","previews","i","Math","max","TOOL_LABELS","apply_patch","read","bash","grep","glob","skill","STATE_LABELS","pending","error","normalizeToolType","toTitleCase","filter","toUpperCase","getToolType","invocation","tool","getToolLabel","getStateLabel","includes","isErrorState","buildIndicator","status","buildBaseTitle","detail","labelOverride","bold","muted","stateLabel","getInputObject","isArray","getOutputObject","output","getStringValue","getObjectValue","getStateObject","normalizeFilePath","isUnifiedDiff","getApplyPatchMetadataObjects","metadata","parseApplyPatchMetadataFile","entry","record","rawPath","relativePath","diff","before","after","getApplyPatchMetadataFiles","files","parsedFile","getApplyPatchDiffText","inputDiff","metadataDiff","fileDiffs","patchText","buildApplyPatchMetadataTitleSegments","seen","Set","segments","add","getApplyPatchMetadataReferences","getOutputText","outputObject","returnDisplay","stdout","parseSkillContentBlock","match","skillName","getSkillName","skill_name","buildFileLinkSegment","prependErrorBlock","blocks","errorText","renderApplyPatch","metadataFiles","diffSegments","language","sideBySide","references","indicator","renderRead","renderBash","command","outputText","code","stderr","exitCode","renderGrep","query","pattern","renderGlob","renderSkill","parsedOutput","renderedContent","createDefaultToolRenderers","stringifyValue","buildGenericBlocks","inputText","createGenericItem","mergeToolRenderers","overrides","getRenderer","toolRenderers","rawTool","renderInvocation","options","renderer","rendered","buildTimelineDocFromInvocations","invocations","items","Timeline","ChakraTimeline","handleTitleLinkClick","event","seg","onOpenFile","stopPropagation","href","preventDefault","AvatarTitleSegment","alt","src","Avatar","DiffTitleSegment","DiffBubble","BubbleLinkTitleSegment","fontWeight","isInteractive","textDecoration","color","Link","DefaultLinkTitleSegment","TextTitleSegment","isClickable","Span","TitleInline","variant","IndicatorView","ind","IndicatorIcon","CodeBlock","BlockView","b","reactions","clap","Card","DiffEditor","Stack","render","ref","ResourceBadge","TimelineItemRow","item","itemKey","isOpen","canExpand","hasBlocks","onToggle","ChevronUpIcon","block","i_0","TimelineFromJSON","data","expanded","setExpanded","getKey","prev","toggle","idx_0","expandable","it","id","ToolInvocationTimeline","labeledBlocks","isToolPart","formatTokenCount","count","toFixed","String","getErrorMessage","errorType","ALERT_COLOR_PALETTE","info","warning","success","loading","collectToolInvocations","lookahead","nextPart","MessagePartsRenderer","toolInvocationTimeline","RenderToolInvocationTimeline","nodes","partIndex","bb0","fontSize","AlertMessage","inputTokens","outputTokens","cacheReadTokens","Spinner","getMessageOrigin","isReasoningToolOnlyMessage","some","mergeReasoningToolOnlyMessages","messages","merged","previous","groupMessagesByTurn","groups","leadingResponses","userMessage","responses","renderMessage","ChatPanel","emptyStateTitle","emptyStateDescription","emptyStateContent","loadingContent","chatInputPlaceholder","chatInputDefaultValue","onSubmitMessage","onChatInputChange","repoMenu","approvalPrompt","workspaceHub","workspaceInitializing","inputDisabled","hasMessages","expandedStickyMessageIds","setExpandedStickyMessageIds","emptyContent","hasWorkspaceHub","showThinkingIndicator","messageId","delete","toggleStickyMessageExpanded","message_0","group","isCollapsible","isExpanded","message_1","EmptyState","MessageCircleIcon","renderSkeletonLines","widths","Skeleton","ChatSkeleton","ChatWorkspaceHub","changesLabel","action","statusLabel","hasChanges","background"],"mappings":"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"}
1
+ {"version":3,"file":"chat-ui.js","sources":["../src/components/chat-ui/components/ai-conversation.tsx","../src/components/chat-ui/components/ai-message.tsx","../src/components/chat-ui/components/approval-prompt.tsx","../src/components/chat-ui/components/auto-scroll.tsx","../src/components/chat-ui/components/chat-input-actions.ts","../src/components/chat-ui/components/send-button.tsx","../src/components/chat-ui/components/chat-input.tsx","../src/components/chat-ui/utils/editor-state.ts","../src/components/chat-ui/components/chat-panel-sticky-user-message.ts","../src/components/chat-ui/components/ai-response.tsx","../src/components/chat-ui/utils/get-icon.ts","../src/components/chat-ui/utils/diff.ts","../src/components/chat-ui/tool-rendering/shared.ts","../src/components/chat-ui/tool-rendering/apply-patch-renderer.ts","../src/components/chat-ui/tool-rendering/edit-renderer.ts","../src/components/chat-ui/tool-rendering/standard-renderers.ts","../src/components/chat-ui/tool-rendering/todo-write-renderer.tsx","../src/components/chat-ui/tool-rendering/default-renderers.ts","../src/components/chat-ui/tool-rendering/build-timeline.ts","../src/components/chat-ui/components/timeline.tsx","../src/components/chat-ui/components/tool-invocation-timeline.tsx","../src/components/chat-ui/components/message-parts-renderer.tsx","../src/components/chat-ui/components/message-types.ts","../src/components/chat-ui/components/chat-panel.tsx","../src/components/chat-ui/components/chat-skeleton.tsx","../src/components/chat-ui/components/workspace-hub.tsx"],"sourcesContent":["import type { HTMLChakraProps, IconButtonProps } from \"@chakra-ui/react\";\nimport { AbsoluteCenter, chakra, IconButton } from \"@chakra-ui/react\";\nimport { ArrowDownIcon } from \"lucide-react\";\nimport { StickToBottom as StickToBottomEl, useStickToBottomContext } from \"use-stick-to-bottom\";\nimport { ScrollArea } from \"@/components/scroll-area\";\n\nexport type ConversationRootProps = HTMLChakraProps<\"div\", React.ComponentProps<typeof StickToBottomEl>>;\n\nexport const conversationRootDefaultProps = {\n \"aria-roledescription\": \"conversation\",\n initial: \"instant\",\n resize: \"instant\",\n role: \"log\",\n} as const;\n\nexport const ConversationRoot = chakra(\n StickToBottomEl,\n {\n base: {\n position: \"relative\",\n flex: 1,\n overflow: \"hidden\",\n height: \"full\",\n },\n },\n {\n forwardProps: [\"resize\"],\n defaultProps: conversationRootDefaultProps,\n },\n);\n\nexport type ConversationContentProps = Omit<React.ComponentProps<typeof ScrollArea>, \"contentProps\" | \"viewportRef\">;\n\nexport const ConversationContent = (props: ConversationContentProps) => {\n const { children, ...rest } = props;\n const { contentRef, scrollRef } = useStickToBottomContext();\n\n return (\n <ScrollArea\n {...rest}\n height=\"full\"\n width=\"full\"\n showHorizontalScrollbar={false}\n viewportRef={scrollRef as React.Ref<HTMLDivElement>}\n contentRef={contentRef as React.Ref<HTMLDivElement>}\n contentProps={{\n p: \"sm\",\n \"aria-live\": \"polite\",\n role: \"list\",\n }}\n >\n {children}\n </ScrollArea>\n );\n};\n\nexport type ConversationScrollButtonProps = IconButtonProps;\n\nexport const conversationScrollButtonContainerDefaultProps = {\n axis: \"horizontal\",\n bottom: \"md\",\n zIndex: 2,\n} as const;\n\nexport const ConversationScrollButton = (props: ConversationScrollButtonProps) => {\n const { isAtBottom, scrollToBottom } = useStickToBottomContext();\n\n return (\n !isAtBottom && (\n <AbsoluteCenter {...conversationScrollButtonContainerDefaultProps}>\n <IconButton rounded=\"full\" onClick={() => scrollToBottom()} variant=\"outline\" size=\"xs\" {...props}>\n <ArrowDownIcon size={16} />\n </IconButton>\n </AbsoluteCenter>\n )\n );\n};\n\nexport const ChatPrimitives = {\n Root: ConversationRoot,\n Viewport: ConversationContent,\n ScrollToBottom: ConversationScrollButton,\n} as const;\n","import type { HTMLChakraProps, RecipeVariantProps } from \"@chakra-ui/react\";\nimport { createSlotRecipeContext, defineSlotRecipe } from \"@chakra-ui/react\";\n\nconst recipe = defineSlotRecipe({\n className: \"ai-message\",\n slots: [\"root\", \"content\"],\n base: {\n root: {\n display: \"flex\",\n width: \"full\",\n alignItems: \"end\",\n justifyContent: \"end\",\n gap: \"sm\",\n animationName: \"message-fade-in\",\n animationDuration: \"200ms\",\n animationTimingFunction: \"ease-out\",\n \"&:has(+ [data-scope='ai-message'][data-part='root'])\": {\n mb: 0,\n },\n },\n content: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"sm\",\n textStyle: \"sm\",\n overflow: \"hidden\",\n },\n },\n variants: {\n from: {\n user: {\n root: {\n mb: \"md\",\n flexDirection: \"row\",\n },\n content: {\n border: \"1px solid\",\n borderColor: \"border.muted\",\n bg: \"bg.subtle\",\n px: \"xs\",\n py: \"xs\",\n width: \"full\",\n borderBottomRightRadius: 0,\n },\n },\n assistant: {\n root: {\n mb: \"md\",\n flexDirection: \"row\",\n justifyContent: \"start\",\n },\n content: {\n width: \"full\",\n },\n },\n developer: {\n root: {\n width: \"full\",\n flexDirection: \"row-reverse\",\n },\n content: {\n width: \"full\",\n },\n },\n },\n size: {\n sm: {\n root: { gap: \"xs\" },\n content: { textStyle: \"xs\" },\n },\n md: {},\n lg: {\n root: { gap: \"md\" },\n content: { textStyle: \"md\" },\n },\n },\n shape: {\n rounded: {\n content: { rounded: \"xs\" },\n },\n pill: {\n content: { rounded: \"full\" },\n },\n square: {\n content: { rounded: \"none\" },\n },\n },\n },\n defaultVariants: {\n from: \"user\",\n size: \"md\",\n shape: \"rounded\",\n },\n});\n\nconst { withProvider, withContext } = createSlotRecipeContext({ recipe });\n\ntype VariantProps = RecipeVariantProps<typeof recipe>;\n\nexport interface MessageRootProps extends HTMLChakraProps<\"div\">, VariantProps {}\nexport const MessageRoot = withProvider<HTMLDivElement, MessageRootProps>(\"div\", \"root\");\n\nexport interface MessageContentProps extends HTMLChakraProps<\"div\">, VariantProps {}\nexport const MessageContent = withContext<HTMLDivElement, MessageContentProps>(\"div\", \"content\");\n\nexport const ChatMessage = {\n Root: MessageRoot,\n Content: MessageContent,\n} as const;\n","import { Box, Button, Code, Flex, HStack, Text } from \"@chakra-ui/react\";\nimport { ShieldCheck, ShieldX } from \"lucide-react\";\n\ninterface ApprovalPromptProps {\n toolName: string;\n toolInput?: unknown;\n onApprove: () => void;\n onDeny: () => void;\n}\n\nconst formatToolInput = (input: unknown) => {\n if (input == null) return null;\n\n const text = typeof input === \"string\" ? input : JSON.stringify(input, null, 2);\n if (text.length === 0) return null;\n\n const truncated = text.length > 200 ? `${text.slice(0, 200)}...` : text;\n return truncated;\n};\n\nexport const ApprovalPrompt = (props: ApprovalPromptProps) => {\n const { toolName, toolInput, onApprove, onDeny } = props;\n const formattedInput = formatToolInput(toolInput);\n\n return (\n <Box px=\"sm\" py=\"xs\" mx=\"sm\" borderWidth=\"1px\" borderColor=\"border.warning\" borderRadius=\"lg\" bg=\"bg.warning\">\n <Flex direction=\"column\" gap=\"xs\">\n <Text textStyle=\"label/S/medium\" color=\"fg\">\n Allow <Code size=\"sm\">{toolName}</Code>?\n </Text>\n\n {formattedInput ? (\n <Code size=\"sm\" whiteSpace=\"pre-wrap\" maxH=\"6rem\" overflowY=\"auto\">\n {formattedInput}\n </Code>\n ) : null}\n\n <HStack gap=\"xs\" justifyContent=\"flex-end\">\n <Button size=\"xs\" variant=\"outline\" onClick={onDeny}>\n <ShieldX size={14} />\n Deny\n </Button>\n <Button size=\"xs\" colorPalette=\"green\" onClick={onApprove}>\n <ShieldCheck size={14} />\n Allow\n </Button>\n </HStack>\n </Flex>\n </Box>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport { useStickToBottomContext } from \"use-stick-to-bottom\";\n\nexport interface AutoScrollProps {\n userMessageCount: number;\n}\n\ninterface ShouldAutoScrollArgs {\n previousUserMessageCount: number;\n userMessageCount: number;\n}\n\nexport const shouldAutoScroll = (args: ShouldAutoScrollArgs) => {\n const { previousUserMessageCount, userMessageCount } = args;\n\n if (previousUserMessageCount === 0) {\n return false;\n }\n\n return userMessageCount > previousUserMessageCount;\n};\n\nexport function AutoScroll(props: AutoScrollProps) {\n const { userMessageCount } = props;\n const { scrollToBottom } = useStickToBottomContext();\n const previousCountRef = useRef(userMessageCount);\n\n useEffect(() => {\n if (\n shouldAutoScroll({\n previousUserMessageCount: previousCountRef.current,\n userMessageCount,\n })\n ) {\n scrollToBottom();\n }\n\n previousCountRef.current = userMessageCount;\n }, [userMessageCount, scrollToBottom]);\n\n return null;\n}\n","interface ChatInputActionState {\n canInterrupt: boolean;\n isDisabled: boolean;\n streaming: boolean;\n text: string;\n}\n\nexport type ChatInputAction = \"interrupt\" | \"none\" | \"submit\";\n\nconst hasMessageText = (text: string) => text.trim().length > 0;\n\nexport const resolveChatInputKeyboardAction = (state: ChatInputActionState): ChatInputAction => {\n const { isDisabled, streaming, text } = state;\n if (isDisabled || streaming || !hasMessageText(text)) return \"none\";\n return \"submit\";\n};\n\nexport const resolveChatInputButtonAction = (state: ChatInputActionState): ChatInputAction => {\n const { canInterrupt, isDisabled, streaming, text } = state;\n if (isDisabled) return \"none\";\n if (streaming) return canInterrupt ? \"interrupt\" : \"none\";\n if (!hasMessageText(text)) return \"none\";\n return \"submit\";\n};\n","import { IconButton, type IconButtonProps, Kbd, Portal, Tooltip } from \"@chakra-ui/react\";\nimport { ArrowUp, Square } from \"lucide-react\";\n\nexport interface SendButtonProps extends IconButtonProps {\n shortcut?: string;\n title?: string;\n canInterrupt: boolean;\n}\n\nexport const SendButton = (props: SendButtonProps) => {\n const { title, shortcut, canInterrupt, ...rest } = props;\n const ariaLabel = rest[\"aria-label\"] ?? title;\n\n const icon = canInterrupt ? (\n <Square size={16} strokeWidth={2} fill=\"currentColor\" />\n ) : (\n <ArrowUp size={16} strokeWidth={2} />\n );\n\n const button = (\n <IconButton\n data-testid=\"send-message-button\"\n size=\"sm\"\n variant=\"solid\"\n borderRadius=\"full\"\n colorPalette=\"primary\"\n aria-label={ariaLabel}\n title={title}\n {...rest}\n >\n {icon}\n </IconButton>\n );\n\n if (title) {\n const tooltipContent = shortcut ? (\n <>\n {title} <Kbd fontSize=\"xs\">{shortcut}</Kbd>\n </>\n ) : (\n title\n );\n\n return (\n <Tooltip.Root closeDelay={50} openDelay={100}>\n <Tooltip.Trigger asChild>{button}</Tooltip.Trigger>\n <Portal>\n <Tooltip.Positioner>\n <Tooltip.Content>{tooltipContent}</Tooltip.Content>\n </Tooltip.Positioner>\n </Portal>\n </Tooltip.Root>\n );\n }\n\n return button;\n};\n","import { Box, Flex, HStack, Spacer, Text } from \"@chakra-ui/react\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport { ScrollArea } from \"@/components/scroll-area\";\nimport { getTextFromSerializedEditorState, PromptEditor } from \"../../rich-text\";\nimport {\n type ChatInputAction,\n resolveChatInputButtonAction,\n resolveChatInputKeyboardAction,\n} from \"./chat-input-actions\";\nimport { SendButton } from \"./send-button\";\n\ninterface ChatInputProps {\n defaultState: string;\n placeholder?: string;\n onSubmit?: (text: string, attachments: string[]) => void;\n onInterrupt?: () => void;\n streaming?: boolean;\n attachedResources?: string[];\n onClearAttachments?: () => void;\n isDisabled?: boolean;\n onChange?: (text: string) => void;\n attachmentList?: ReactNode;\n actions?: ReactNode;\n attachedToTop?: boolean;\n}\n\nexport const ChatInput = (props: ChatInputProps) => {\n const {\n defaultState,\n onSubmit = () => {},\n onInterrupt,\n streaming = false,\n attachedResources = [],\n onClearAttachments,\n isDisabled = false,\n onChange,\n placeholder,\n attachmentList,\n actions,\n attachedToTop = false,\n } = props;\n\n const [isSelected, setIsSelected] = useState(false);\n const [editorState, setEditorState] = useState(defaultState);\n const [editorKey, setEditorKey] = useState(0);\n const [text, setText] = useState(() => getTextFromSerializedEditorState(defaultState));\n const containerRef = useRef<HTMLDivElement | null>(null);\n const onChangeRef = useRef(onChange);\n\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n useEffect(() => {\n const resetText = getTextFromSerializedEditorState(defaultState);\n setEditorState(defaultState);\n setEditorKey((key) => key + 1);\n setText(resetText);\n onChangeRef.current?.(resetText);\n }, [defaultState]);\n\n const focusEditor = () => {\n const editable = containerRef.current?.querySelector('[contenteditable=\"true\"]');\n if (editable instanceof HTMLElement) {\n editable.focus();\n }\n };\n\n const handleContainerClick = () => {\n setIsSelected(true);\n focusEditor();\n };\n\n const resetEditor = (shouldFocus = false) => {\n setEditorState(defaultState);\n setEditorKey((key) => key + 1);\n const resetText = getTextFromSerializedEditorState(defaultState);\n setText(resetText);\n onChangeRef.current?.(resetText);\n\n if (shouldFocus) {\n requestAnimationFrame(() => {\n focusEditor();\n });\n }\n };\n\n const canInterrupt = streaming && Boolean(onInterrupt);\n const actionState = { canInterrupt, isDisabled, streaming, text };\n const buttonAction = resolveChatInputButtonAction(actionState);\n\n const submitMessage = () => {\n const trimmed = text.trim();\n if (!trimmed) return;\n\n onSubmit(trimmed, attachedResources);\n\n resetEditor(true);\n\n onClearAttachments?.();\n };\n\n const runAction = (action: ChatInputAction) => {\n if (action === \"interrupt\") {\n onInterrupt?.();\n return;\n }\n\n if (action === \"submit\") {\n submitMessage();\n }\n };\n\n const handleKeyboardSubmit = () => {\n runAction(resolveChatInputKeyboardAction(actionState));\n };\n\n const handleButtonClick = () => {\n runAction(buttonAction);\n };\n\n const placeholderNode = placeholder ? (\n <Text textStyle=\"label/M/regular\" color=\"fg.subtle\" pointerEvents=\"none\" position=\"absolute\" top=\"0\">\n {placeholder}\n </Text>\n ) : undefined;\n\n return (\n <Box\n ref={containerRef}\n position=\"relative\"\n width=\"100%\"\n paddingX=\"lg\"\n paddingY=\"md\"\n mt={attachedToTop ? \"-1px\" : undefined}\n bg=\"bg\"\n borderRadius=\"md\"\n borderTopRadius={attachedToTop ? \"0\" : undefined}\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor={isSelected ? \"blue.border\" : \"border.muted\"}\n boxShadow={isSelected ? \"mid\" : \"low\"}\n zIndex={isSelected ? 1 : 0}\n transition=\"box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out\"\n _hover={{\n borderColor: isSelected ? \"blue.border\" : \"border\",\n boxShadow: \"mid\",\n zIndex: 1,\n }}\n _focusWithin={{\n borderColor: \"blue.border\",\n boxShadow: \"mid\",\n zIndex: 1,\n }}\n onClick={handleContainerClick}\n onBlur={() => setIsSelected(false)}\n >\n <Flex direction=\"column\" color=\"fg\">\n {attachmentList}\n <ScrollArea maxH=\"10rem\" showHorizontalScrollbar={false} contentProps={{ pr: \"2xs\" }}>\n <PromptEditor\n key={editorKey}\n defaultState={editorState}\n isEditable={!isDisabled}\n placeholder={placeholderNode}\n onChange={(t) => {\n setText(t);\n onChange?.(t);\n }}\n onSubmit={handleKeyboardSubmit}\n />\n </ScrollArea>\n <HStack gap=\"1\" mt=\"md\">\n {actions}\n <Spacer />\n <SendButton\n canInterrupt={canInterrupt}\n title={canInterrupt ? \"Stop Response\" : \"Message Sending\"}\n shortcut={streaming ? undefined : \"Enter\"}\n onClick={handleButtonClick}\n disabled={buttonAction === \"none\"}\n />\n </HStack>\n </Flex>\n </Box>\n );\n};\n","import { generateEditorStateFromString } from \"../../rich-text\";\n\nexport const createSerializedPromptState = (input = \"\") => {\n return JSON.stringify(generateEditorStateFromString(input));\n};\n","import type { SessionMessage } from \"./message-types\";\n\nexport const STICKY_USER_MESSAGE_COLLAPSE_TEXT_THRESHOLD = 360;\nexport const STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT = \"min(10vh, 4rem)\";\n\nconst getMessageTextLength = (message: SessionMessage) => {\n return message.parts.reduce((total, part) => {\n if (part.type !== \"text\") return total;\n return total + part.text.length;\n }, 0);\n};\n\nexport const isStickyUserMessageCollapsible = (message: SessionMessage) => {\n if (message.role !== \"user\") return false;\n\n return getMessageTextLength(message) > STICKY_USER_MESSAGE_COLLAPSE_TEXT_THRESHOLD;\n};\n","import type { BoxProps } from \"@chakra-ui/react\";\nimport { Box } from \"@chakra-ui/react\";\nimport { RichMessage } from \"@/components/rich-text\";\n\nexport interface ChatRichContentProps extends Omit<BoxProps, \"children\"> {\n children: string;\n}\n\nexport const ChatRichContent = (props: ChatRichContentProps) => {\n const { children, ...rest } = props;\n\n return (\n <Box {...rest}>\n <RichMessage defaultState={children} fullWidth />\n </Box>\n );\n};\n\nexport const Response = ChatRichContent;\n","import type { LucideIcon } from \"lucide-react\";\nimport {\n AlertTriangle,\n DotIcon,\n File,\n FileDiff,\n FileDown,\n FilePen,\n FileText,\n FileUp,\n Globe,\n ListTree,\n Move,\n Search,\n Terminal,\n Trash2,\n} from \"lucide-react\";\n\nconst toolIconMap = {\n shell: Terminal,\n ls: ListTree,\n read_file: FileText,\n write_file: FilePen,\n delete_file: Trash2,\n patch: FileDiff,\n upload_files: FileUp,\n download_file: FileDown,\n move_file: Move,\n} as const satisfies Record<string, LucideIcon>;\n\nconst iconMap = {\n dot: DotIcon,\n danger: AlertTriangle,\n search: Search,\n browser: Globe,\n file: File,\n terminal: Terminal,\n ...toolIconMap,\n} as const satisfies Record<string, LucideIcon>;\n\nexport type IconName = keyof typeof iconMap;\nexport type ToolIconName = keyof typeof toolIconMap;\n\nconst DEFAULT_TOOL_ICON: IconName = \"dot\";\n\nconst isToolIconName = (value: string): value is ToolIconName => Object.hasOwn(toolIconMap, value);\n\nexport const getIconComponent = (name: IconName): LucideIcon => {\n return iconMap[name];\n};\n\nexport const toolTypeToIconName = (type?: string): IconName => {\n if (!type) return DEFAULT_TOOL_ICON;\n\n const normalized = type.replace(/^tool-/, \"\");\n if (isToolIconName(normalized)) return normalized;\n\n switch (normalized) {\n case \"read\":\n return \"file\";\n case \"bash\":\n return \"terminal\";\n case \"edit\":\n return \"write_file\";\n case \"apply_patch\":\n return \"patch\";\n case \"grep\":\n return \"search\";\n case \"glob\":\n return \"file\";\n case \"todowrite\":\n return \"ls\";\n case \"search\":\n return \"search\";\n case \"browser\":\n return \"browser\";\n case \"fs\":\n case \"file\":\n return \"file\";\n default:\n return DEFAULT_TOOL_ICON;\n }\n};\n\nexport { getFileTypeIcon } from \"../../../utils/get-file-type-icon\";\n","import type { TitleSegment } from \"../components/timeline\";\n\nexport type FileChange = { filePath: string; additions: number; deletions: number };\n\nexport function basenameSafe(path: string) {\n const idx = path.lastIndexOf(\"/\");\n return idx >= 0 ? path.slice(idx + 1) : path;\n}\n\nfunction normalizeHeaderPath(input?: string | null) {\n if (!input) return null;\n\n const token = input.split(\"\\t\")[0].trim();\n if (token === \"/dev/null\") return null;\n\n let normalized = token;\n if (normalized.startsWith(\"a/\") || normalized.startsWith(\"b/\")) {\n normalized = normalized.slice(2);\n }\n\n return normalized.replace(/^\\/+/, \"\").replace(/\\\\/g, \"/\");\n}\n\nconst isMinusHeader = (line: string) => line.startsWith(\"--- \");\nconst isPlusHeader = (line: string) => line.startsWith(\"+++ \");\nconst isHunkHeader = (line: string) => line.startsWith(\"@@\");\nconst isAddedLine = (line: string) => line.startsWith(\"+\") && !(isPlusHeader(line) || line === \"+++\");\nconst isDeletedLine = (line: string) => line.startsWith(\"-\") && !(isMinusHeader(line) || line === \"---\");\n\nconst ensureFileChange = (changes: Map<string, { additions: number; deletions: number }>, filePath: string) => {\n if (!changes.has(filePath)) {\n changes.set(filePath, { additions: 0, deletions: 0 });\n }\n};\n\nconst incrementAdditions = (changes: Map<string, { additions: number; deletions: number }>, filePath: string) => {\n const current = changes.get(filePath);\n if (!current) return;\n current.additions += 1;\n};\n\nconst incrementDeletions = (changes: Map<string, { additions: number; deletions: number }>, filePath: string) => {\n const current = changes.get(filePath);\n if (!current) return;\n current.deletions += 1;\n};\n\ntype UnifiedDiffState = {\n currentPath: string | null;\n lastMinusHeader: string | null;\n inHunk: boolean;\n};\n\nconst processUnifiedDiffLine = (\n line: string,\n state: UnifiedDiffState,\n changes: Map<string, { additions: number; deletions: number }>,\n) => {\n if (isMinusHeader(line)) {\n return { ...state, lastMinusHeader: normalizeHeaderPath(line.slice(4)), inHunk: false };\n }\n\n if (isPlusHeader(line)) {\n const plusPath = normalizeHeaderPath(line.slice(4));\n const currentPath = plusPath ?? state.lastMinusHeader;\n if (currentPath) ensureFileChange(changes, currentPath);\n return { ...state, currentPath, inHunk: false };\n }\n\n if (!state.currentPath) return state;\n\n if (isHunkHeader(line)) {\n return { ...state, inHunk: true };\n }\n\n if (!state.inHunk) return state;\n\n if (isAddedLine(line)) {\n incrementAdditions(changes, state.currentPath);\n return state;\n }\n\n if (isDeletedLine(line)) {\n incrementDeletions(changes, state.currentPath);\n }\n\n return state;\n};\n\nexport function parseUnifiedDiff(diffText?: string) {\n if (!diffText || typeof diffText !== \"string\") return [] as FileChange[];\n\n const changes = new Map<string, { additions: number; deletions: number }>();\n let state: UnifiedDiffState = {\n currentPath: null,\n lastMinusHeader: null,\n inHunk: false,\n };\n\n const lines = diffText.split(/\\r?\\n/);\n for (const line of lines) {\n state = processUnifiedDiffLine(line, state, changes);\n }\n\n return Array.from(changes.entries()).map(([filePath, { additions, deletions }]) => ({\n filePath,\n additions,\n deletions,\n }));\n}\n\nexport function buildDiffTitleSegments(diffText?: string) {\n return parseUnifiedDiff(diffText).map(\n (file) =>\n ({\n kind: \"diff\",\n fileName: basenameSafe(file.filePath),\n filePath: file.filePath,\n additions: file.additions,\n deletions: file.deletions,\n }) satisfies TitleSegment,\n );\n}\n\nexport function extractDiffFilePaths(diffText?: string) {\n return parseUnifiedDiff(diffText).map((file) => file.filePath);\n}\n\nexport type FileDiffPreview = { filePath: string; original: string; modified: string };\n\nconst isDiffFileBoundary = (line: string) => isMinusHeader(line) || line.startsWith(\"diff --git \");\n\nconst isInvalidHunkBodyLine = (line: string) => {\n if (line.startsWith(\" \")) return false;\n if (line.startsWith(\"+\")) return false;\n if (line.startsWith(\"-\")) return false;\n return line.trim() !== \"\";\n};\n\nconst appendHunkLine = (line: string, original: string[], modified: string[]) => {\n if (line.startsWith(\" \")) {\n const text = line.slice(1);\n original.push(text);\n modified.push(text);\n return;\n }\n\n if (line.startsWith(\"-\")) {\n original.push(line.slice(1));\n return;\n }\n\n if (line.startsWith(\"+\")) {\n modified.push(line.slice(1));\n }\n};\n\nconst parseHunkBody = (lines: string[], startIndex: number, original: string[], modified: string[]) => {\n let index = startIndex;\n\n while (index < lines.length) {\n const line = lines[index] || \"\";\n if (isDiffFileBoundary(line) || isHunkHeader(line) || isInvalidHunkBodyLine(line)) {\n break;\n }\n\n appendHunkLine(line, original, modified);\n index += 1;\n }\n\n if (original.length > 0 || modified.length > 0) {\n original.push(\"\");\n modified.push(\"\");\n }\n\n return index;\n};\n\nconst parsePreview = (lines: string[], startIndex: number) => {\n const oldHeader = normalizeHeaderPath((lines[startIndex] || \"\").slice(4));\n const next = lines[startIndex + 1] || \"\";\n if (!isPlusHeader(next)) return { nextIndex: startIndex + 1 } as const;\n\n const newHeader = normalizeHeaderPath(next.slice(4));\n const filePath = newHeader ?? oldHeader ?? \"\";\n const original: string[] = [];\n const modified: string[] = [];\n\n let index = startIndex + 2;\n while (index < lines.length) {\n const current = lines[index] || \"\";\n if (isDiffFileBoundary(current)) break;\n\n if (!isHunkHeader(current)) {\n index += 1;\n continue;\n }\n\n index = parseHunkBody(lines, index + 1, original, modified);\n }\n\n return {\n nextIndex: index,\n preview: { filePath, original: original.join(\"\\n\"), modified: modified.join(\"\\n\") } satisfies FileDiffPreview,\n } as const;\n};\n\nexport function buildFileDiffPreviews(diffText?: string) {\n if (!diffText || typeof diffText !== \"string\") return [] as FileDiffPreview[];\n\n const lines = diffText.split(/\\r?\\n/);\n const previews: FileDiffPreview[] = [];\n\n let i = 0;\n while (i < lines.length) {\n const line = lines[i] || \"\";\n if (!isMinusHeader(line)) {\n i += 1;\n continue;\n }\n\n const { nextIndex, preview } = parsePreview(lines, i);\n if (preview) previews.push(preview);\n i = Math.max(nextIndex, i + 1);\n }\n\n return previews;\n}\n","import type { ToolPart } from \"../agent-types\";\nimport type { Block, TitleSegment } from \"../components/timeline\";\nimport { basenameSafe, buildDiffTitleSegments, buildFileDiffPreviews, extractDiffFilePaths } from \"../utils/diff\";\nimport { toolTypeToIconName } from \"../utils/get-icon\";\n\nconst TOOL_LABELS: Record<string, string> = {\n apply_patch: \"Apply patch\",\n bash: \"Run command\",\n edit: \"Edit file\",\n glob: \"Find files\",\n grep: \"Search files\",\n read: \"Read file\",\n skill: \"Load skill\",\n todowrite: \"Update todos\",\n};\n\nconst STATE_LABELS: Record<string, string> = {\n pending: \"queued\",\n error: \"failed\",\n \"output-error\": \"failed\",\n input_streaming: \"running\",\n input_available: \"queued\",\n running: \"running\",\n completed: \"completed\",\n failed: \"failed\",\n};\n\nexport type ApplyPatchMetadataFile = {\n filePath: string;\n additions: number;\n deletions: number;\n diff?: string;\n before?: string;\n after?: string;\n};\n\nexport const normalizeToolType = (value: string) => value.replace(/^tool-/, \"\").toLowerCase();\n\nconst toTitleCase = (value: string) => {\n return value\n .split(\" \")\n .filter((token) => token.length > 0)\n .map((token) => token[0].toUpperCase() + token.slice(1))\n .join(\" \");\n};\n\nexport const getToolType = (invocation: ToolPart) => normalizeToolType(invocation.tool ?? \"tool\");\n\nexport const getToolLabel = (value: string) => {\n const normalized = normalizeToolType(value);\n return TOOL_LABELS[normalized] ?? toTitleCase(normalized.replace(/_/g, \" \"));\n};\n\nexport const getStateLabel = (invocation: ToolPart) => {\n const state = invocation.state?.status ?? invocation.status;\n if (!state || typeof state !== \"string\") return null;\n\n const normalized = state.replace(/-/g, \"_\");\n if (STATE_LABELS[normalized]) return STATE_LABELS[normalized];\n if (normalized.includes(\"stream\")) return \"running\";\n return null;\n};\n\nexport const isErrorState = (invocation: ToolPart) => {\n const state = invocation.state?.status ?? invocation.status;\n return state === \"error\" || state === \"output-error\" || state === \"failed\";\n};\n\nexport const buildIndicator = (invocation: ToolPart) => {\n if (isErrorState(invocation)) {\n return { type: \"icon\", icon: \"danger\" } as const;\n }\n\n return { type: \"icon\", icon: toolTypeToIconName(getToolType(invocation)) } as const;\n};\n\nexport const buildBaseTitle = (invocation: ToolPart, detail?: string, labelOverride?: string) => {\n const label = labelOverride ?? getToolLabel(invocation.tool ?? \"tool\");\n const title: TitleSegment[] = [{ kind: \"text\", text: label, bold: true }];\n\n if (detail) {\n title.push({ kind: \"text\", text: detail, muted: true });\n }\n\n const stateLabel = getStateLabel(invocation);\n if (stateLabel && stateLabel !== \"completed\") {\n title.push({ kind: \"text\", text: stateLabel, muted: true });\n }\n\n return title;\n};\n\nexport const getInputObject = (invocation: ToolPart) => {\n const input = invocation.state?.input;\n if (!input || typeof input !== \"object\" || Array.isArray(input)) return null;\n return input as Record<string, unknown>;\n};\n\nexport const getOutputObject = (invocation: ToolPart) => {\n const output = invocation.state?.output;\n if (!output || typeof output !== \"object\" || Array.isArray(output)) return null;\n return output as Record<string, unknown>;\n};\n\nexport const getStringValue = (value: unknown) => {\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n return null;\n};\n\nexport const getObjectValue = (value: unknown) => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n};\n\nexport const getStateObject = (invocation: ToolPart, key: string) => {\n const state = getObjectValue(invocation.state);\n if (!state) return null;\n return getObjectValue(state[key]);\n};\n\nconst normalizeFilePath = (value: string) => value.replace(/\\\\/g, \"/\").replace(/^\\/+/, \"\");\n\nconst isUnifiedDiff = (value: string) => value.includes(\"--- \") && value.includes(\"+++ \") && value.includes(\"@@\");\n\nconst getApplyPatchMetadataObjects = (invocation: ToolPart) => {\n const output = getOutputObject(invocation);\n return [getStateObject(invocation, \"metadata\"), getObjectValue(output?.metadata)].filter(Boolean) as Array<\n Record<string, unknown>\n >;\n};\n\nconst parseApplyPatchMetadataFile = (entry: unknown) => {\n const record = getObjectValue(entry);\n if (!record) return null;\n\n const rawPath = getStringValue(record.filePath) ?? getStringValue(record.relativePath) ?? getStringValue(record.path);\n if (!rawPath) return null;\n\n return {\n filePath: normalizeFilePath(rawPath),\n additions: typeof record.additions === \"number\" ? record.additions : 0,\n deletions: typeof record.deletions === \"number\" ? record.deletions : 0,\n diff: getStringValue(record.diff) ?? undefined,\n before: getStringValue(record.before) ?? undefined,\n after: getStringValue(record.after) ?? undefined,\n } satisfies ApplyPatchMetadataFile;\n};\n\nexport const getApplyPatchMetadataFiles = (invocation: ToolPart) => {\n const files: ApplyPatchMetadataFile[] = [];\n\n for (const metadata of getApplyPatchMetadataObjects(invocation)) {\n const entries = Array.isArray(metadata.files) ? metadata.files : [];\n\n for (const entry of entries) {\n const parsedFile = parseApplyPatchMetadataFile(entry);\n if (!parsedFile) continue;\n files.push(parsedFile);\n }\n }\n\n return files;\n};\n\nexport const getApplyPatchDiffText = (invocation: ToolPart) => {\n const input = getInputObject(invocation);\n const inputDiff = getStringValue(input?.diff);\n if (inputDiff) return inputDiff;\n\n for (const metadata of getApplyPatchMetadataObjects(invocation)) {\n const metadataDiff = getStringValue(metadata.diff);\n if (metadataDiff) return metadataDiff;\n }\n\n const fileDiffs = getApplyPatchMetadataFiles(invocation)\n .map((file) => file.diff)\n .filter((diff): diff is string => Boolean(diff));\n if (fileDiffs.length > 0) return fileDiffs.join(\"\\n\");\n\n const patchText = getStringValue(input?.patchText);\n if (patchText && isUnifiedDiff(patchText)) return patchText;\n\n return null;\n};\n\nexport const buildApplyPatchMetadataTitleSegments = (files: ApplyPatchMetadataFile[]) => {\n const seen = new Set<string>();\n const segments: TitleSegment[] = [];\n\n for (const file of files) {\n if (seen.has(file.filePath)) continue;\n seen.add(file.filePath);\n\n segments.push({\n kind: \"diff\",\n fileName: basenameSafe(file.filePath),\n filePath: file.filePath,\n additions: file.additions,\n deletions: file.deletions,\n });\n }\n\n return segments;\n};\n\nexport const getApplyPatchMetadataReferences = (files: ApplyPatchMetadataFile[]) => {\n return Array.from(new Set(files.map((file) => file.filePath)));\n};\n\nexport const getOutputText = (invocation: ToolPart) => {\n const outputObject = getOutputObject(invocation);\n\n return (\n getStringValue(invocation.state?.output) ??\n getStringValue(outputObject?.returnDisplay) ??\n getStringValue(outputObject?.preview) ??\n getStringValue(outputObject?.stdout) ??\n getStringValue(outputObject?.content)\n );\n};\n\nexport const parseSkillContentBlock = (value: string) => {\n const match = value.match(/<skill_content(?:\\s+name=\"([^\"]+)\")?>([\\s\\S]*?)<\\/skill_content>/);\n if (!match) return null;\n\n return {\n skillName: getStringValue(match[1]) ?? undefined,\n content: getStringValue(match[2]) ?? \"\",\n };\n};\n\nexport const getSkillName = (invocation: ToolPart) => {\n const input = getInputObject(invocation);\n return (\n getStringValue(input?.name) ??\n getStringValue(input?.skillName) ??\n getStringValue(input?.skill) ??\n getStringValue(input?.skill_name) ??\n undefined\n );\n};\n\nexport const buildFileLinkSegment = (filePath: string): TitleSegment => {\n return {\n kind: \"link\",\n text: basenameSafe(filePath),\n filePath,\n };\n};\n\nexport const prependErrorBlock = (invocation: ToolPart, blocks: Block[]): Block[] => {\n if (!isErrorState(invocation) || !invocation.state?.errorText) return blocks;\n const errorBlock: Block = { type: \"comment\", text: invocation.state.errorText };\n return [errorBlock, ...blocks];\n};\n\nexport const getDiffBlocks = (diffText?: string | null) => {\n return buildFileDiffPreviews(diffText ?? undefined).map((preview) => ({\n type: \"diff\",\n language: \"diff\",\n original: preview.original,\n modified: preview.modified,\n sideBySide: false,\n })) satisfies Block[];\n};\n\nexport const getDiffTitleSegments = (diffText?: string | null) => buildDiffTitleSegments(diffText ?? undefined);\n\nexport const getDiffReferences = (diffText?: string | null) => extractDiffFilePaths(diffText ?? undefined);\n","import type { Block, Item } from \"../components/timeline\";\nimport {\n buildApplyPatchMetadataTitleSegments,\n buildBaseTitle,\n buildIndicator,\n getApplyPatchDiffText,\n getApplyPatchMetadataFiles,\n getApplyPatchMetadataReferences,\n getDiffBlocks,\n getDiffReferences,\n getDiffTitleSegments,\n prependErrorBlock,\n} from \"./shared\";\nimport type { ToolRenderer } from \"./types\";\n\nexport const renderApplyPatch: ToolRenderer = (invocation) => {\n const diffText = getApplyPatchDiffText(invocation);\n const metadataFiles = getApplyPatchMetadataFiles(invocation);\n\n const title = buildBaseTitle(invocation, undefined, \"Apply patch\");\n const diffSegments = getDiffTitleSegments(diffText);\n if (diffSegments.length > 0) {\n title.push(...diffSegments);\n } else {\n title.push(...buildApplyPatchMetadataTitleSegments(metadataFiles));\n }\n\n const blocks: Block[] = [...getDiffBlocks(diffText)];\n\n if (blocks.length === 0) {\n for (const file of metadataFiles) {\n if (!file.before && !file.after) continue;\n blocks.push({\n type: \"diff\",\n language: \"diff\",\n original: file.before ?? \"\",\n modified: file.after ?? \"\",\n sideBySide: false,\n });\n }\n }\n\n if (blocks.length === 0) {\n const references = getDiffReferences(diffText);\n if (references.length === 0) {\n references.push(...getApplyPatchMetadataReferences(metadataFiles));\n }\n if (references.length > 0) {\n blocks.push({ type: \"references\", references });\n }\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n","import type { Block, Item } from \"../components/timeline\";\nimport {\n buildBaseTitle,\n buildFileLinkSegment,\n buildIndicator,\n getDiffBlocks,\n getInputObject,\n getOutputObject,\n getStringValue,\n prependErrorBlock,\n} from \"./shared\";\nimport type { ToolRenderer } from \"./types\";\n\nconst buildEditDiff = (original: string, modified: string) => {\n return [\n {\n type: \"diff\",\n language: \"text\",\n original,\n modified,\n sideBySide: false,\n },\n ] satisfies Block[];\n};\n\nexport const renderEdit: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const output = getOutputObject(invocation);\n\n const filePath =\n getStringValue(input?.filePath) ??\n getStringValue(input?.file_path) ??\n getStringValue(output?.filePath) ??\n undefined;\n\n const original = getStringValue(output?.oldString) ?? getStringValue(input?.old_string) ?? undefined;\n const modified = getStringValue(output?.newString) ?? getStringValue(input?.new_string) ?? undefined;\n\n const title = buildBaseTitle(invocation, undefined, \"Edit file\");\n if (filePath) {\n title.push(buildFileLinkSegment(filePath));\n }\n\n const diffBlocks =\n original !== undefined && modified !== undefined\n ? buildEditDiff(original, modified)\n : getDiffBlocks(getStringValue(output?.diff));\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, diffBlocks),\n } satisfies Item;\n};\n","import type { Block, Item } from \"../components/timeline\";\nimport {\n buildBaseTitle,\n buildFileLinkSegment,\n buildIndicator,\n getInputObject,\n getOutputObject,\n getOutputText,\n getSkillName,\n getStringValue,\n parseSkillContentBlock,\n prependErrorBlock,\n} from \"./shared\";\nimport type { ToolRenderer } from \"./types\";\n\nexport const renderRead: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const output = getOutputObject(invocation);\n\n const filePath =\n getStringValue(input?.filePath) ??\n getStringValue(input?.file_path) ??\n getStringValue(input?.file) ??\n getStringValue(output?.filePath) ??\n getStringValue(output?.file) ??\n getStringValue(output?.path) ??\n undefined;\n\n const title = buildBaseTitle(invocation, undefined, \"Read file\");\n if (filePath) {\n title.push(buildFileLinkSegment(filePath));\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, []),\n } satisfies Item;\n};\n\nexport const renderBash: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const output = getOutputObject(invocation);\n const command = getStringValue(input?.command) ?? undefined;\n\n const title = buildBaseTitle(invocation, command, \"Run command\");\n const blocks: Block[] = [];\n\n const outputText = getOutputText(invocation);\n if (outputText) {\n blocks.push({ type: \"code\", language: \"text\", code: outputText });\n }\n\n const stderr = getStringValue(output?.stderr);\n if (stderr && stderr !== outputText) {\n blocks.push({ type: \"code\", language: \"text\", code: stderr });\n }\n\n if (typeof output?.exitCode === \"number\") {\n blocks.push({ type: \"text\", text: `Exit code: ${output.exitCode}` });\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n\nexport const renderGrep: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const outputText = getOutputText(invocation);\n const query = getStringValue(input?.pattern) ?? undefined;\n\n const title = buildBaseTitle(invocation, query, \"Search files\");\n const blocks: Block[] = outputText ? [{ type: \"code\", language: \"text\", code: outputText }] : [];\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n\nexport const renderGlob: ToolRenderer = (invocation) => {\n const input = getInputObject(invocation);\n const outputText = getOutputText(invocation);\n const pattern = getStringValue(input?.pattern) ?? undefined;\n\n const title = buildBaseTitle(invocation, pattern, \"Find files\");\n const blocks: Block[] = [];\n\n if (outputText) {\n const references = outputText\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n\n if (references.length > 0) {\n blocks.push({ type: \"references\", references });\n }\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n\nexport const renderSkill: ToolRenderer = (invocation) => {\n const outputText = getOutputText(invocation);\n const parsedOutput = outputText ? parseSkillContentBlock(outputText) : null;\n\n const skillName = getSkillName(invocation) ?? parsedOutput?.skillName;\n const title = buildBaseTitle(invocation, skillName, \"Load skill\");\n\n const renderedContent = parsedOutput?.content ?? outputText;\n const blocks: Block[] = renderedContent ? [{ type: \"code\", language: \"markdown\", code: renderedContent }] : [];\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: prependErrorBlock(invocation, blocks),\n } satisfies Item;\n};\n","import { Badge, Box, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { buildBaseTitle, buildIndicator, getInputObject, getOutputObject, prependErrorBlock } from \"./shared\";\nimport type { ToolRenderer } from \"./types\";\n\ntype TodoItem = {\n content: string;\n status?: string;\n priority?: string;\n};\n\nconst getTodos = (invocation: Parameters<ToolRenderer>[0]) => {\n const output = getOutputObject(invocation);\n const input = getInputObject(invocation);\n const candidates = [output?.newTodos, output?.todos, input?.todos];\n\n for (const candidate of candidates) {\n if (!Array.isArray(candidate)) continue;\n\n const todos: TodoItem[] = [];\n\n for (const item of candidate) {\n if (!item || typeof item !== \"object\" || Array.isArray(item)) continue;\n\n const todo = item as Record<string, unknown>;\n if (typeof todo.content !== \"string\" || todo.content.trim().length === 0) continue;\n\n todos.push({\n content: todo.content,\n status: typeof todo.status === \"string\" ? todo.status : undefined,\n priority: typeof todo.priority === \"string\" ? todo.priority : undefined,\n });\n }\n\n if (todos.length > 0) return todos;\n }\n\n return [] as TodoItem[];\n};\n\nconst formatBadgeLabel = (value?: string) => value?.replace(/_/g, \" \") ?? null;\n\nexport const renderTodoWrite: ToolRenderer = (invocation) => {\n const todos = getTodos(invocation);\n\n return {\n indicator: buildIndicator(invocation),\n title: buildBaseTitle(invocation, undefined, \"Update todos\"),\n blocks: prependErrorBlock(invocation, [\n {\n type: \"component\",\n render: () => (\n <Stack gap=\"sm\">\n {todos.map((todo) => {\n const status = formatBadgeLabel(todo.status);\n const priority = formatBadgeLabel(todo.priority);\n\n return (\n <Box key={`${todo.content}-${todo.status}-${todo.priority}`} borderWidth=\"1px\" borderRadius=\"md\" p=\"sm\">\n <Stack gap=\"xs\">\n <Text textStyle=\"label/M/regular\">{todo.content}</Text>\n <HStack gap=\"xs\" wrap=\"wrap\">\n {status ? <Badge variant=\"outline\">{status}</Badge> : null}\n {priority ? <Badge variant=\"subtle\">{priority}</Badge> : null}\n </HStack>\n </Stack>\n </Box>\n );\n })}\n </Stack>\n ),\n },\n ]),\n };\n};\n","import { renderApplyPatch } from \"./apply-patch-renderer\";\nimport { renderEdit } from \"./edit-renderer\";\nimport { renderBash, renderGlob, renderGrep, renderRead, renderSkill } from \"./standard-renderers\";\nimport { renderTodoWrite } from \"./todo-write-renderer\";\nimport type { ToolRenderersMap } from \"./types\";\n\nexport const createDefaultToolRenderers = () => {\n return {\n apply_patch: renderApplyPatch,\n bash: renderBash,\n edit: renderEdit,\n glob: renderGlob,\n grep: renderGrep,\n read: renderRead,\n skill: renderSkill,\n todowrite: renderTodoWrite,\n } satisfies ToolRenderersMap;\n};\n","import type { ToolPart } from \"../agent-types\";\nimport type { Block, TitleSegment } from \"../components/timeline\";\nimport { toolTypeToIconName } from \"../utils/get-icon\";\nimport { createDefaultToolRenderers } from \"./default-renderers\";\nimport { normalizeToolType } from \"./shared\";\nimport type { ToolRenderersMap, ToolTimelineBuilderOptions } from \"./types\";\n\nconst STATE_LABELS: Record<string, string> = {\n pending: \"queued\",\n error: \"failed\",\n \"output-error\": \"failed\",\n \"input-streaming\": \"running\",\n \"input-available\": \"queued\",\n};\n\nconst toTitleCase = (value: string) => {\n return value\n .split(\" \")\n .filter((token) => token.length > 0)\n .map((token) => token[0].toUpperCase() + token.slice(1))\n .join(\" \");\n};\n\nconst getToolLabel = (tool?: string) => {\n const normalized = normalizeToolType(tool ?? \"tool\").replace(/_/g, \" \");\n return toTitleCase(normalized);\n};\n\nconst isErrorState = (state?: string) => state === \"error\" || state === \"output-error\";\n\nconst buildIndicator = (invocation: ToolPart) => {\n if (isErrorState(invocation.state?.status)) {\n return { type: \"icon\", icon: \"danger\" } as const;\n }\n\n return { type: \"icon\", icon: toolTypeToIconName(invocation.tool ?? \"tool\") } as const;\n};\n\nconst getStateLabel = (state?: unknown) => {\n if (!state || typeof state !== \"string\") return null;\n if (STATE_LABELS[state]) return STATE_LABELS[state];\n if (state.includes(\"stream\")) return \"running\";\n return null;\n};\n\nconst stringifyValue = (value: unknown) => {\n if (typeof value === \"string\") return value;\n if (value === null || value === undefined) return null;\n\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return null;\n }\n};\n\nconst buildGenericBlocks = (invocation: ToolPart): Block[] => {\n const blocks: Block[] = [];\n\n if (isErrorState(invocation.state?.status) && invocation.state?.errorText) {\n blocks.push({ type: \"comment\", text: invocation.state.errorText });\n }\n\n const inputText = stringifyValue(invocation.state?.input);\n if (inputText) {\n blocks.push({ type: \"code\", language: \"json\", code: inputText });\n }\n\n const outputText = stringifyValue(invocation.state?.output);\n if (outputText) {\n blocks.push({ type: \"code\", language: \"json\", code: outputText });\n }\n\n return blocks;\n};\n\nconst createGenericItem = (invocation: ToolPart) => {\n const title: TitleSegment[] = [{ kind: \"text\", text: getToolLabel(invocation.tool), bold: true }];\n const stateLabel = getStateLabel(invocation.state?.status);\n if (stateLabel) {\n title.push({ kind: \"text\", text: stateLabel, muted: true });\n }\n\n return {\n indicator: buildIndicator(invocation),\n title,\n blocks: buildGenericBlocks(invocation),\n };\n};\n\nconst mergeToolRenderers = (overrides?: ToolRenderersMap) => {\n if (!overrides) return createDefaultToolRenderers();\n return { ...createDefaultToolRenderers(), ...overrides } satisfies ToolRenderersMap;\n};\n\nconst getRenderer = (invocation: ToolPart, toolRenderers: ToolRenderersMap) => {\n const rawTool = invocation.tool ?? \"tool\";\n return toolRenderers[rawTool] ?? toolRenderers[normalizeToolType(rawTool)];\n};\n\nconst renderInvocation = (\n invocation: ToolPart,\n toolRenderers: ToolRenderersMap,\n options?: ToolTimelineBuilderOptions,\n) => {\n const renderer = getRenderer(invocation, toolRenderers);\n if (renderer) {\n const rendered = renderer(invocation, options);\n if (rendered) return rendered;\n }\n\n return createGenericItem(invocation);\n};\n\nexport const buildTimelineDocFromInvocations = (invocations: ToolPart[], options?: ToolTimelineBuilderOptions) => {\n const toolRenderers = mergeToolRenderers(options?.toolRenderers);\n const items = invocations.map((invocation) => renderInvocation(invocation, toolRenderers, options));\n\n return { items };\n};\n\nexport const createToolTimelineBuilder = (toolRenderers: ToolRenderersMap) => {\n return (invocations: ToolPart[], options?: ToolTimelineBuilderOptions) => {\n return buildTimelineDocFromInvocations(invocations, { ...options, toolRenderers });\n };\n};\n","import { Avatar, Box, Button, Card, Timeline as ChakraTimeline, Link, Span, Stack, Text } from \"@chakra-ui/react\";\nimport { ChevronUpIcon } from \"lucide-react\";\nimport type { MouseEvent, ReactNode } from \"react\";\nimport { useState } from \"react\";\nimport { DiffBubble } from \"@/components/diff-bubble\";\nimport { DiffEditor } from \"@/components/diff-editor\";\nimport { ResourceBadge } from \"@/components/resource-badge\";\nimport type { IconName } from \"../utils/get-icon\";\nimport { getIconComponent } from \"../utils/get-icon\";\n\nexport const Timeline = ChakraTimeline;\n\nexport type TimelineDoc = {\n items: Item[];\n};\n\nexport type Item = {\n id?: string;\n timestamp?: string;\n indicator?: Indicator;\n title: TitleSegment[];\n blocks?: Block[];\n expandable?: boolean;\n};\n\nexport type Indicator =\n | { type: \"icon\"; icon: IconName; color?: string }\n | { type: \"avatar\"; src: string; alt?: string }\n | { type: \"none\" };\n\nexport type TitleSegment =\n | { kind: \"text\"; text: string; bold?: boolean; muted?: boolean }\n | { kind: \"avatar\"; src: string; alt?: string }\n | { kind: \"diff\"; fileName: string; filePath?: string; additions?: number; deletions?: number }\n | {\n kind: \"link\";\n text: string;\n href?: string;\n filePath?: string;\n bold?: boolean;\n muted?: boolean;\n variant?: \"default\" | \"bubble\";\n };\n\nexport type Block =\n | { type: \"comment\"; text: string; reactions?: { clap?: number } }\n | { type: \"code\"; language: string; code: string; editable?: boolean }\n | { type: \"diff\"; language?: string; original: string; modified: string; sideBySide?: boolean }\n | { type: \"input\"; placeholder?: string }\n | { type: \"text\"; text: string }\n | { type: \"references\"; references: string[] }\n | { type: \"component\"; render: (ctx: { onOpenFile?: (filePath: string) => void }) => ReactNode };\n\nconst handleTitleLinkClick = (\n event: MouseEvent<HTMLAnchorElement>,\n seg: Extract<TitleSegment, { kind: \"link\" }>,\n onOpenFile?: (filePath: string) => void,\n stopPropagation = false,\n) => {\n if (stopPropagation) {\n event.stopPropagation();\n }\n\n if (!seg.href) {\n event.preventDefault();\n }\n if (seg.filePath) {\n onOpenFile?.(seg.filePath);\n }\n};\n\nfunction AvatarTitleSegment({ seg }: { seg: Extract<TitleSegment, { kind: \"avatar\" }> }) {\n return (\n <Avatar.Root width=\"1.5rem\" height=\"1.5rem\">\n <Avatar.Image src={seg.src} alt={seg.alt} />\n <Avatar.Fallback />\n </Avatar.Root>\n );\n}\n\nfunction DiffTitleSegment({\n seg,\n onOpenFile,\n}: {\n seg: Extract<TitleSegment, { kind: \"diff\" }>;\n onOpenFile?: (filePath: string) => void;\n}) {\n return (\n <DiffBubble\n fileName={seg.fileName}\n additions={seg.additions ?? 0}\n deletions={seg.deletions ?? 0}\n onClickFileLink={() => {\n const path = seg.filePath ?? seg.fileName;\n onOpenFile?.(path);\n }}\n />\n );\n}\n\nfunction BubbleLinkTitleSegment({\n seg,\n onOpenFile,\n}: {\n seg: Extract<TitleSegment, { kind: \"link\" }>;\n onOpenFile?: (filePath: string) => void;\n}) {\n const fontWeight = seg.bold ? \"medium\" : undefined;\n const isInteractive = Boolean(seg.href || seg.filePath);\n\n return (\n <Link\n href={seg.href ?? \"#\"}\n fontWeight={fontWeight}\n color={seg.muted ? \"fg.muted\" : \"fg.muted\"}\n textDecoration=\"none\"\n cursor={isInteractive ? \"pointer\" : \"default\"}\n onClick={(event) => handleTitleLinkClick(event, seg, onOpenFile, true)}\n _hover={{\n textDecoration: \"underline\",\n color: seg.muted ? \"fg.muted\" : \"fg.blue-dark\",\n }}\n >\n {seg.text}\n </Link>\n );\n}\n\nfunction DefaultLinkTitleSegment({\n seg,\n onOpenFile,\n}: {\n seg: Extract<TitleSegment, { kind: \"link\" }>;\n onOpenFile?: (filePath: string) => void;\n}) {\n const fontWeight = seg.bold ? \"medium\" : undefined;\n\n return (\n <Link\n href={seg.href ?? \"#\"}\n fontWeight={fontWeight}\n color={seg.muted ? \"fg.muted\" : \"accent.primary\"}\n textDecoration=\"underline\"\n onClick={(event) => handleTitleLinkClick(event, seg, onOpenFile)}\n _hover={{\n color: seg.muted ? \"fg.muted\" : \"accent.primary\",\n textDecoration: \"underline\",\n }}\n >\n {seg.text}\n </Link>\n );\n}\n\nfunction TextTitleSegment({\n seg,\n isClickable,\n}: {\n seg: Extract<TitleSegment, { kind: \"text\" }>;\n isClickable?: boolean;\n}) {\n return (\n <Span\n fontWeight={seg.bold ? \"medium\" : undefined}\n color=\"fg.muted\"\n _groupHover={{\n color: isClickable && !seg.muted ? \"fg\" : \"fg.muted\",\n }}\n >\n {seg.text}\n </Span>\n );\n}\n\nfunction TitleInline({\n seg,\n isClickable,\n onOpenFile,\n}: {\n seg: TitleSegment;\n isClickable?: boolean;\n onOpenFile?: (filePath: string) => void;\n}) {\n switch (seg.kind) {\n case \"avatar\":\n return <AvatarTitleSegment seg={seg} />;\n case \"diff\":\n return <DiffTitleSegment seg={seg} onOpenFile={onOpenFile} />;\n case \"link\":\n return seg.variant === \"bubble\" ? (\n <BubbleLinkTitleSegment seg={seg} onOpenFile={onOpenFile} />\n ) : (\n <DefaultLinkTitleSegment seg={seg} onOpenFile={onOpenFile} />\n );\n case \"text\":\n return <TextTitleSegment seg={seg} isClickable={isClickable} />;\n default:\n return null;\n }\n}\n\nfunction IndicatorView({ ind }: { ind?: Indicator }) {\n if (!ind || ind.type === \"none\") return null;\n\n if (ind.type === \"icon\") {\n const IndicatorIcon = getIconComponent(ind.icon);\n return (\n <Timeline.Indicator outline=\"none\" shadow=\"none\" border=\"none\" background=\"bg\" color=\"fg\">\n <Span display=\"inline-flex\" alignItems=\"center\">\n <IndicatorIcon size={14} strokeWidth={1} />\n </Span>\n </Timeline.Indicator>\n );\n }\n\n return (\n <Timeline.Indicator>\n <Avatar.Root boxSize=\"full\">\n <Avatar.Image src={ind.src} alt={ind.alt} />\n <Avatar.Fallback />\n </Avatar.Root>\n </Timeline.Indicator>\n );\n}\n\nfunction CodeBlock({ code, language }: { code: string; language?: string }) {\n return (\n <Box\n as=\"pre\"\n background=\"bg.muted\"\n color=\"fg\"\n borderRadius=\"md\"\n padding=\"sm\"\n fontFamily=\"mono\"\n fontSize=\"xs\"\n lineHeight=\"shorter\"\n overflowX=\"auto\"\n whiteSpace=\"pre\"\n aria-label={language ? `${language} code block` : \"code block\"}\n >\n <Box as=\"code\">{code}</Box>\n </Box>\n );\n}\n\nfunction BlockView({ b, onOpenFile }: { b: Block; onOpenFile?: (filePath: string) => void }) {\n switch (b.type) {\n case \"comment\":\n return (\n <Card.Root>\n <Card.Body>{b.text}</Card.Body>\n {b.reactions?.clap ? (\n <Card.Footer>\n <Button>👏 {b.reactions.clap}</Button>\n </Card.Footer>\n ) : null}\n </Card.Root>\n );\n case \"code\":\n return (\n <Card.Root border=\"0\" padding=\"0\">\n <Card.Body padding=\"0\">\n <CodeBlock language={b.language} code={b.code} />\n </Card.Body>\n </Card.Root>\n );\n case \"diff\":\n return (\n <Card.Root border=\"0\" padding=\"0\">\n <Card.Body padding=\"0\">\n <Box height=\"240px\" minW=\"320px\" overflow=\"hidden\">\n <DiffEditor\n original={b.original}\n modified={b.modified}\n language={b.language}\n sideBySide={b.sideBySide ?? false}\n disableScroll={true}\n />\n </Box>\n </Card.Body>\n </Card.Root>\n );\n case \"text\":\n return (\n <Card.Root background=\"transparent\">\n <Card.Body padding=\"sm\">\n <Text textStyle=\"label/S/regular\">{b.text}</Text>\n </Card.Body>\n </Card.Root>\n );\n case \"references\":\n return (\n <Stack mt=\"xs\" gap=\"xs\" flexDir=\"row\" flexWrap=\"wrap\">\n {b.references.map((ref) => (\n <ResourceBadge key={ref} fileName={ref} />\n ))}\n </Stack>\n );\n case \"component\":\n return <>{b.render({ onOpenFile })}</>;\n }\n}\n\nfunction TimelineItemRow({\n item,\n itemKey,\n isOpen,\n canExpand,\n hasBlocks,\n onToggle,\n onOpenFile,\n}: {\n item: Item;\n itemKey: string;\n isOpen: boolean;\n canExpand: boolean;\n hasBlocks: boolean;\n onToggle: (key: string) => void;\n onOpenFile?: (filePath: string) => void;\n}) {\n return (\n <Timeline.Item gap=\"xs\" key={itemKey}>\n <Timeline.Connector>\n <Timeline.Separator />\n <IndicatorView ind={item.indicator} />\n </Timeline.Connector>\n <Timeline.Content pb=\"xs\">\n {item.title.length > 0 && (\n <Timeline.Title\n className=\"group\"\n fontWeight=\"normal\"\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n cursor={canExpand ? \"pointer\" : \"default\"}\n onClick={canExpand ? () => onToggle(itemKey) : undefined}\n >\n <Span display=\"inline-flex\" alignItems=\"center\" gap=\"sm\" flexWrap=\"wrap\">\n <Span display=\"inline-flex\" alignItems=\"center\" gap=\"xs\" flexWrap=\"wrap\">\n {item.title.map((seg, i) => (\n <TitleInline key={i} seg={seg} isClickable={canExpand} onOpenFile={onOpenFile} />\n ))}\n </Span>\n {canExpand ? (\n <Span\n display=\"inline-flex\"\n alignItems=\"center\"\n transition=\"transform 200ms ease, color 200ms ease\"\n transform={isOpen ? \"rotate(0deg)\" : \"rotate(-180deg)\"}\n color=\"transparent\"\n _groupHover={{ color: \"fg\" }}\n >\n <ChevronUpIcon size={12} />\n </Span>\n ) : null}\n </Span>\n </Timeline.Title>\n )}\n {hasBlocks ? (\n <Box display=\"grid\" gridTemplateRows={isOpen ? \"1fr\" : \"0fr\"} transition=\"grid-template-rows 220ms ease\">\n {isOpen ? (\n <Box\n overflow=\"hidden\"\n opacity={1}\n transform=\"translateY(0)\"\n transition=\"opacity 200ms ease, transform 200ms ease\"\n >\n {item.blocks!.map((block, i) => (\n <Box key={i}>\n <BlockView b={block} onOpenFile={onOpenFile} />\n </Box>\n ))}\n </Box>\n ) : null}\n </Box>\n ) : null}\n </Timeline.Content>\n </Timeline.Item>\n );\n}\n\nexport function TimelineFromJSON({ data, onOpenFile }: { data: TimelineDoc; onOpenFile?: (filePath: string) => void }) {\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n\n const getKey = (it: Item, idx: number) => (it.id ? `id:${it.id}` : `idx:${idx}`);\n\n const toggle = (key: string) => {\n setExpanded((prev) => ({ ...prev, [key]: !prev[key] }));\n };\n\n return (\n <Timeline.Root>\n {data.items.map((item, idx) => {\n const key = getKey(item, idx);\n const hasBlocks = (item.blocks?.length ?? 0) > 0;\n const canExpand = (item.expandable ?? true) && hasBlocks;\n const isOpen = canExpand ? (expanded[key] ?? false) : hasBlocks;\n\n return (\n <TimelineItemRow\n key={key}\n item={item}\n itemKey={key}\n isOpen={isOpen}\n canExpand={canExpand}\n hasBlocks={hasBlocks}\n onToggle={toggle}\n onOpenFile={onOpenFile}\n />\n );\n })}\n </Timeline.Root>\n );\n}\n","import { buildTimelineDocFromInvocations } from \"../tool-rendering\";\nimport type { ToolPart } from \"./message-types\";\nimport { TimelineFromJSON } from \"./timeline\";\n\nexport interface ToolInvocationTimelineProps {\n invocations: ToolPart[];\n labeledBlocks?: boolean;\n onOpenFile?: (filePath: string) => void;\n}\n\nexport function ToolInvocationTimeline(props: ToolInvocationTimelineProps) {\n const { invocations, labeledBlocks, onOpenFile } = props;\n const data = buildTimelineDocFromInvocations(invocations, { labeledBlocks });\n\n return <TimelineFromJSON data={data} onOpenFile={onOpenFile} />;\n}\n","import { Box, Spinner, Text } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { AlertMessage } from \"@/components/alert\";\nimport { RichMessage } from \"@/components/rich-text\";\nimport type { AlertPart, ErrorPart, SessionMessage, SessionMessagePart, ToolPart } from \"../agent-types\";\nimport { Response } from \"./ai-response\";\nimport { ToolInvocationTimeline, type ToolInvocationTimelineProps } from \"./tool-invocation-timeline\";\n\ntype ToolInvocationTimelineComponent = (props: ToolInvocationTimelineProps) => ReactNode;\n\nexport interface MessagePartsProps {\n message: SessionMessage;\n streaming?: boolean;\n onOpenFile?: (filePath: string) => void;\n toolInvocationTimeline?: ToolInvocationTimelineComponent;\n}\n\nconst isToolPart = (part: SessionMessagePart): part is ToolPart => {\n return part.type === \"tool\";\n};\n\nconst formatTokenCount = (count: number) => {\n if (count >= 1000) return `${(count / 1000).toFixed(1)}k`;\n return String(count);\n};\n\nconst getErrorMessage = (part: ErrorPart) => {\n if (part.message && part.message.trim().length > 0) {\n return part.message;\n }\n\n const { errorType } = part;\n switch (errorType) {\n case \"timeout\":\n return \"Session timed out.\";\n case \"crash\":\n return \"Session crashed unexpectedly.\";\n case \"permission\":\n return \"Permission denied.\";\n default:\n return \"An error occurred.\";\n }\n};\n\nconst ALERT_COLOR_PALETTE: Record<AlertPart[\"status\"], string> = {\n info: \"blue\",\n warning: \"orange\",\n error: \"red\",\n success: \"green\",\n loading: \"blue\",\n};\n\nconst collectToolInvocations = (parts: SessionMessagePart[], startIndex: number) => {\n const invocations: ToolPart[] = [];\n let lookahead = startIndex;\n\n while (lookahead < parts.length) {\n const nextPart = parts[lookahead];\n if (!isToolPart(nextPart)) break;\n invocations.push(nextPart);\n lookahead += 1;\n }\n\n return { invocations, nextIndex: lookahead - 1 };\n};\n\nexport function MessagePartsRenderer(props: MessagePartsProps) {\n const { message, onOpenFile, toolInvocationTimeline } = props;\n const RenderToolInvocationTimeline = toolInvocationTimeline ?? ToolInvocationTimeline;\n const parts = message.parts ?? [];\n const nodes: ReactNode[] = [];\n\n for (let partIndex = 0; partIndex < parts.length; partIndex += 1) {\n const part = parts[partIndex];\n const key = `${message.id}-${partIndex}`;\n\n switch (part.type) {\n case \"text\":\n nodes.push(\n <div key={key}>\n <Response>{part.text}</Response>\n </div>,\n );\n break;\n case \"reasoning\":\n nodes.push(\n <Box\n key={key}\n padding=\"0\"\n css={{\n \"& .rich-text, & .rich-text *\": {\n color: \"fg.subtle !important\",\n fontSize: \".75rem !important\",\n fontWeight: \"normal !important\",\n },\n }}\n >\n <RichMessage defaultState={part.text} fullWidth />\n </Box>,\n );\n break;\n case \"tool\": {\n const { invocations, nextIndex } = collectToolInvocations(parts, partIndex);\n partIndex = nextIndex;\n nodes.push(\n <Box key={key} width=\"full\">\n <RenderToolInvocationTimeline invocations={invocations} labeledBlocks onOpenFile={onOpenFile} />\n </Box>,\n );\n break;\n }\n case \"error\":\n nodes.push(\n <Box key={key} py=\"2\" width=\"full\">\n <AlertMessage borderRadius=\"xs\" status=\"error\" colorPalette=\"red\" title={getErrorMessage(part)} size=\"sm\" />\n </Box>,\n );\n break;\n case \"token_usage\":\n nodes.push(\n <Box key={key}>\n <Text fontSize=\"xs\" color=\"fg.subtle\">\n Tokens: {formatTokenCount(part.inputTokens)} in / {formatTokenCount(part.outputTokens)} out\n {part.cacheReadTokens ? ` / ${formatTokenCount(part.cacheReadTokens)} cache read` : \"\"}\n </Text>\n </Box>,\n );\n break;\n case \"alert\":\n nodes.push(\n <Box key={key} width=\"full\">\n <AlertMessage\n borderRadius=\"xs\"\n status={part.status === \"loading\" ? \"info\" : part.status}\n colorPalette={ALERT_COLOR_PALETTE[part.status]}\n title={part.title}\n icon={part.status === \"loading\" ? <Spinner size=\"sm\" /> : undefined}\n size=\"sm\"\n >\n {part.message}\n </AlertMessage>\n </Box>,\n );\n break;\n default:\n nodes.push(null);\n }\n }\n\n return <>{nodes}</>;\n}\n","import type { SessionMessage, SessionMessagePart, ToolPart } from \"../agent-types\";\n\nexport type { SessionMessage, SessionMessagePart, ToolPart };\n\nexport type MessageOrigin = \"user\" | \"assistant\" | \"developer\";\n\nexport const getMessageOrigin = (role: string): MessageOrigin => {\n if (role === \"user\" || role === \"assistant\" || role === \"developer\") return role;\n return \"assistant\";\n};\n\nexport const isReasoningToolOnlyMessage = (message: SessionMessage) => {\n const parts = message.parts ?? [];\n if (parts.length === 0) return false;\n\n const hasTextPart = parts.some((part) => part.type === \"text\" && \"text\" in part);\n if (hasTextPart) return false;\n\n return parts.some((part) => part.type === \"reasoning\" || part.type === \"tool\");\n};\n\nexport const mergeReasoningToolOnlyMessages = (messages: SessionMessage[]) => {\n const merged: SessionMessage[] = [];\n\n for (const message of messages) {\n const previous = merged[merged.length - 1];\n\n if (previous && previous.role === message.role && isReasoningToolOnlyMessage(message)) {\n previous.parts = [...(previous.parts ?? []), ...(message.parts ?? [])];\n continue;\n }\n\n merged.push({\n ...message,\n parts: [...(message.parts ?? [])],\n });\n }\n\n return merged;\n};\n\nexport interface MessageGroup {\n userMessage: SessionMessage;\n responses: SessionMessage[];\n}\n\n// Groups messages into turns: each group starts with a user message\n// followed by all non-user messages until the next user message.\nexport const groupMessagesByTurn = (messages: SessionMessage[]) => {\n const groups: MessageGroup[] = [];\n const leadingResponses: SessionMessage[] = [];\n\n for (const message of messages) {\n if (message.role === \"user\") {\n groups.push({ userMessage: message, responses: [] });\n } else if (groups.length > 0) {\n groups[groups.length - 1].responses.push(message);\n } else {\n leadingResponses.push(message);\n }\n }\n\n return { groups, leadingResponses };\n};\n","import { Box, Button, Flex, HStack, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { MessageCircleIcon } from \"lucide-react\";\nimport { type ReactNode, useState } from \"react\";\nimport { EmptyState } from \"@/components/empty-state\";\nimport { createSerializedPromptState } from \"../utils/editor-state\";\nimport { ChatPrimitives } from \"./ai-conversation\";\nimport { ChatMessage } from \"./ai-message\";\nimport { AutoScroll } from \"./auto-scroll\";\nimport { ChatInput } from \"./chat-input\";\nimport {\n isStickyUserMessageCollapsible,\n STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT,\n} from \"./chat-panel-sticky-user-message\";\nimport { MessagePartsRenderer } from \"./message-parts-renderer\";\nimport {\n getMessageOrigin,\n groupMessagesByTurn,\n mergeReasoningToolOnlyMessages,\n type SessionMessage,\n} from \"./message-types\";\n\ninterface ChatPanelProps {\n messages: SessionMessage[];\n streaming?: boolean;\n emptyStateTitle: string;\n emptyStateDescription: string;\n emptyStateContent?: ReactNode;\n loadingContent?: ReactNode;\n chatInputPlaceholder: string;\n chatInputDefaultValue?: string;\n onSubmitMessage?: (text: string, attachments: string[]) => void;\n onInterrupt?: () => void;\n onChatInputChange?: (text: string) => void;\n actions?: ReactNode;\n repoMenu?: ReactNode;\n attachedResources?: string[];\n onClearAttachments?: () => void;\n attachmentList?: ReactNode;\n approvalPrompt?: ReactNode;\n workspaceHub?: ReactNode;\n workspaceInitializing?: boolean;\n inputDisabled?: boolean;\n}\n\nconst renderMessage = (message: SessionMessage, streaming: boolean) => {\n const from = getMessageOrigin(message.role);\n return (\n <ChatMessage.Root key={message.id} from={from}>\n <ChatMessage.Content from={from}>\n <MessagePartsRenderer message={message} streaming={streaming} />\n </ChatMessage.Content>\n </ChatMessage.Root>\n );\n};\n\nexport const ChatPanel = (props: ChatPanelProps) => {\n const {\n messages,\n streaming = false,\n emptyStateTitle,\n emptyStateDescription,\n emptyStateContent,\n loadingContent,\n chatInputPlaceholder,\n chatInputDefaultValue = \"\",\n onSubmitMessage,\n onInterrupt,\n onChatInputChange,\n actions,\n repoMenu,\n attachedResources,\n onClearAttachments,\n attachmentList,\n approvalPrompt,\n workspaceHub,\n workspaceInitializing = false,\n inputDisabled = false,\n } = props;\n\n const merged = mergeReasoningToolOnlyMessages(messages);\n const hasMessages = merged.length > 0;\n const userMessageCount = merged.reduce((count, message) => count + (message.role === \"user\" ? 1 : 0), 0);\n const { groups, leadingResponses } = groupMessagesByTurn(merged);\n const [expandedStickyMessageIds, setExpandedStickyMessageIds] = useState(() => new Set<string>());\n const emptyContent = streaming ? (loadingContent ?? emptyStateContent) : emptyStateContent;\n const hasWorkspaceHub = Boolean(workspaceHub);\n const showThinkingIndicator = streaming && hasMessages && !workspaceInitializing;\n\n const toggleStickyMessageExpanded = (messageId: string) => {\n setExpandedStickyMessageIds((current) => {\n const next = new Set(current);\n if (next.has(messageId)) {\n next.delete(messageId);\n } else {\n next.add(messageId);\n }\n\n return next;\n });\n };\n\n return (\n <Flex position=\"relative\" direction=\"column\" w=\"full\" h=\"full\" overflow=\"hidden\">\n <ChatPrimitives.Root>\n <AutoScroll userMessageCount={userMessageCount} />\n <ChatPrimitives.Viewport>\n {hasMessages ? (\n <Stack gap=\"sm\">\n {leadingResponses.map((message) => renderMessage(message, streaming))}\n {groups.map((group) => {\n const isCollapsible = isStickyUserMessageCollapsible(group.userMessage);\n const isExpanded = expandedStickyMessageIds.has(group.userMessage.id);\n\n return (\n <Box key={group.userMessage.id}>\n <Box position=\"sticky\" top=\"0\" zIndex={1}>\n <Box position=\"relative\">\n <ChatMessage.Root from=\"user\">\n <ChatMessage.Content\n from=\"user\"\n maxH={isCollapsible && !isExpanded ? STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT : undefined}\n overflowY=\"hidden\"\n >\n <MessagePartsRenderer message={group.userMessage} streaming={streaming} />\n </ChatMessage.Content>\n </ChatMessage.Root>\n {isCollapsible && !isExpanded && (\n <Flex\n position=\"absolute\"\n bottom=\"0\"\n left=\"0\"\n right=\"0\"\n justifyContent=\"flex-end\"\n alignItems=\"flex-end\"\n px=\"xs\"\n pb=\"xs\"\n pt=\"lg\"\n bgGradient=\"to-t\"\n gradientFrom=\"bg.subtle\"\n gradientTo=\"transparent\"\n borderBottomRadius=\"xs\"\n >\n <Button\n size=\"2xs\"\n variant=\"solid\"\n onClick={() => toggleStickyMessageExpanded(group.userMessage.id)}\n >\n Show more\n </Button>\n </Flex>\n )}\n </Box>\n {isCollapsible && isExpanded && (\n <Flex justifyContent=\"flex-end\" mt=\"2xs\" mb=\"sm\">\n <Button\n size=\"2xs\"\n variant=\"ghost\"\n onClick={() => toggleStickyMessageExpanded(group.userMessage.id)}\n >\n Show less\n </Button>\n </Flex>\n )}\n </Box>\n {group.responses.map((message) => renderMessage(message, streaming))}\n </Box>\n );\n })}\n </Stack>\n ) : (\n (emptyContent ?? (\n <EmptyState\n icon={<MessageCircleIcon size={48} strokeWidth={1.5} />}\n title={emptyStateTitle}\n description={emptyStateDescription}\n />\n ))\n )}\n </ChatPrimitives.Viewport>\n <ChatPrimitives.ScrollToBottom aria-label=\"Scroll to latest message\" />\n </ChatPrimitives.Root>\n {approvalPrompt}\n {showThinkingIndicator ? (\n <HStack gap=\"xs\" px=\"sm\" py=\"2xs\">\n <Spinner size=\"xs\" color=\"fg.muted\" />\n <Text textStyle=\"label/XS/regular\" color=\"fg.muted\">\n Working...\n </Text>\n </HStack>\n ) : null}\n <Stack px=\"sm\" gap={hasWorkspaceHub ? \"0\" : \"xs\"}>\n {workspaceHub}\n <ChatInput\n placeholder={chatInputPlaceholder}\n defaultState={createSerializedPromptState(chatInputDefaultValue)}\n streaming={streaming}\n onSubmit={onSubmitMessage}\n onInterrupt={onInterrupt}\n onChange={onChatInputChange}\n actions={actions}\n attachedResources={attachedResources}\n onClearAttachments={onClearAttachments}\n attachmentList={attachmentList}\n isDisabled={inputDisabled}\n attachedToTop={hasWorkspaceHub}\n />\n </Stack>\n <Flex p=\"2xs\" justifyContent=\"flex-end\">\n {repoMenu}\n </Flex>\n </Flex>\n );\n};\n","import { Skeleton, Stack } from \"@chakra-ui/react\";\nimport { ChatMessage } from \"./ai-message\";\n\nconst renderSkeletonLines = (widths: string[]) => (\n <Stack gap=\"xs\" w=\"full\">\n {widths.map((width, index) => (\n <Skeleton key={`${width}-${index}`} height=\"3\" width={width} borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n\nexport const ChatSkeleton = () => {\n return (\n <Stack minH=\"full\" py=\"xs\" gap=\"0\">\n <ChatMessage.Root from=\"user\">\n <ChatMessage.Content from=\"user\">{renderSkeletonLines([\"72%\", \"46%\"])}</ChatMessage.Content>\n </ChatMessage.Root>\n <ChatMessage.Root from=\"assistant\">\n <ChatMessage.Content from=\"assistant\">{renderSkeletonLines([\"76%\", \"62%\", \"40%\"])}</ChatMessage.Content>\n </ChatMessage.Root>\n </Stack>\n );\n};\n","import { Flex, HStack, Spinner, Text } from \"@chakra-ui/react\";\nimport { AlertTriangle } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { DiffBubble } from \"@/components/diff-bubble\";\n\ntype WorkspaceHubStatus = \"ready\" | \"loading\" | \"error\";\n\ninterface ChatWorkspaceHubProps {\n changesLabel: string;\n additions: number;\n deletions: number;\n action?: ReactNode;\n status?: WorkspaceHubStatus;\n statusLabel?: string;\n}\n\nexport const ChatWorkspaceHub = (props: ChatWorkspaceHubProps) => {\n const { changesLabel, additions, deletions, action, status = \"ready\", statusLabel } = props;\n const hasChanges = additions > 0 || deletions > 0;\n\n return (\n <Flex\n align=\"center\"\n justify=\"space-between\"\n gap=\"sm\"\n minW=\"0\"\n px=\"sm\"\n py=\"xs\"\n borderWidth=\"1px\"\n borderColor={status === \"error\" ? \"border.error\" : \"border.muted\"}\n borderRadius=\"xs\"\n borderBottomRadius=\"0\"\n bg={status === \"error\" ? \"bg.error\" : \"bg.subtle\"}\n >\n {status === \"loading\" ? (\n <HStack gap=\"xs\" minW=\"0\">\n <Spinner size=\"xs\" color=\"fg.muted\" />\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" truncate>\n {statusLabel ?? \"Setting up workspace...\"}\n </Text>\n </HStack>\n ) : status === \"error\" ? (\n <HStack gap=\"xs\" minW=\"0\">\n <AlertTriangle size={14} color=\"var(--chakra-colors-fg-error)\" />\n <Text textStyle=\"label/S/regular\" color=\"fg.error\" truncate>\n {statusLabel ?? \"Workspace setup failed\"}\n </Text>\n </HStack>\n ) : hasChanges ? (\n <DiffBubble\n label={changesLabel}\n additions={additions}\n deletions={deletions}\n variant=\"ghost\"\n size=\"small\"\n _hover={{ background: \"transparent\" }}\n />\n ) : (\n <Flex flex=\"1\" />\n )}\n {action ? (\n <Flex flexShrink={0} ml=\"auto\">\n {action}\n </Flex>\n ) : null}\n </Flex>\n );\n};\n"],"names":["conversationRootDefaultProps","initial","resize","role","ConversationRoot","chakra","StickToBottomEl","base","position","flex","overflow","height","forwardProps","defaultProps","ConversationContent","props","$","_c","children","rest","contentRef","scrollRef","useStickToBottomContext","t0","t1","t2","Symbol","for","p","t3","ScrollArea","conversationScrollButtonContainerDefaultProps","axis","bottom","zIndex","ConversationScrollButton","isAtBottom","scrollToBottom","jsx","AbsoluteCenter","IconButton","ArrowDownIcon","ChatPrimitives","Root","Viewport","ScrollToBottom","recipe","defineSlotRecipe","className","slots","root","display","width","alignItems","justifyContent","gap","animationName","animationDuration","animationTimingFunction","mb","content","flexDirection","textStyle","variants","from","user","border","borderColor","bg","px","py","borderBottomRightRadius","assistant","developer","size","sm","md","lg","shape","rounded","pill","square","defaultVariants","withProvider","withContext","createSlotRecipeContext","MessageRoot","MessageContent","ChatMessage","Content","formatToolInput","input","text","JSON","stringify","length","slice","ApprovalPrompt","toolName","toolInput","onApprove","onDeny","formattedInput","jsxs","Text","Code","ShieldX","t4","Button","t5","ShieldCheck","t6","t7","HStack","t8","Box","Flex","shouldAutoScroll","args","previousUserMessageCount","userMessageCount","AutoScroll","previousCountRef","useRef","current","useEffect","hasMessageText","trim","resolveChatInputKeyboardAction","state","isDisabled","streaming","resolveChatInputButtonAction","canInterrupt","SendButton","shortcut","title","ariaLabel","Square","ArrowUp","icon","button","Fragment","Kbd","tooltipContent","Tooltip","Portal","ChatInput","defaultState","onSubmit","onInterrupt","attachedResources","onClearAttachments","onChange","placeholder","attachmentList","actions","attachedToTop","undefined","_temp","isSelected","setIsSelected","useState","editorState","setEditorState","editorKey","setEditorKey","getTextFromSerializedEditorState","setText","containerRef","onChangeRef","t10","t9","resetText","_temp2","t11","editable","querySelector","HTMLElement","focus","focusEditor","t12","handleContainerClick","t13","t14","shouldFocus","_temp3","resetText_0","requestAnimationFrame","resetEditor","Boolean","actionState","buttonAction","t15","trimmed","submitMessage","t16","action","runAction","t17","handleKeyboardSubmit","t18","handleButtonClick","t19","placeholderNode","t20","t21","t22","t23","t24","t25","t26","boxShadow","t27","t28","t29","pr","t30","t31","t","t32","PromptEditor","t33","Spacer","t34","t35","t36","t37","t38","t39","t40","key","key_0","createSerializedPromptState","generateEditorStateFromString","STICKY_USER_MESSAGE_COLLAPSE_TEXT_THRESHOLD","STICKY_USER_MESSAGE_COLLAPSED_MAX_HEIGHT","getMessageTextLength","message","parts","reduce","total","part","type","isStickyUserMessageCollapsible","ChatRichContent","RichMessage","Response","toolIconMap","shell","Terminal","ls","ListTree","read_file","FileText","write_file","FilePen","delete_file","Trash2","patch","FileDiff","upload_files","FileUp","download_file","FileDown","move_file","Move","iconMap","dot","DotIcon","danger","AlertTriangle","search","Search","browser","Globe","file","File","terminal","DEFAULT_TOOL_ICON","isToolIconName","value","Object","hasOwn","getIconComponent","name","toolTypeToIconName","normalized","replace","basenameSafe","path","idx","lastIndexOf","normalizeHeaderPath","token","split","startsWith","isMinusHeader","line","isPlusHeader","isHunkHeader","isAddedLine","isDeletedLine","ensureFileChange","changes","filePath","has","set","additions","deletions","incrementAdditions","get","incrementDeletions","processUnifiedDiffLine","lastMinusHeader","inHunk","currentPath","parseUnifiedDiff","diffText","Map","lines","Array","entries","map","buildDiffTitleSegments","kind","fileName","extractDiffFilePaths","isDiffFileBoundary","isInvalidHunkBodyLine","appendHunkLine","original","modified","push","parseHunkBody","startIndex","index","parsePreview","oldHeader","next","nextIndex","preview","join","buildFileDiffPreviews","previews","i","Math","max","TOOL_LABELS","apply_patch","bash","edit","glob","grep","read","skill","todowrite","STATE_LABELS","pending","error","input_streaming","input_available","running","completed","failed","normalizeToolType","toLowerCase","toTitleCase","filter","toUpperCase","getToolType","invocation","tool","getToolLabel","getStateLabel","status","includes","isErrorState","buildIndicator","buildBaseTitle","detail","labelOverride","bold","muted","stateLabel","getInputObject","isArray","getOutputObject","output","getStringValue","getObjectValue","getStateObject","normalizeFilePath","isUnifiedDiff","getApplyPatchMetadataObjects","metadata","parseApplyPatchMetadataFile","entry","record","rawPath","relativePath","diff","before","after","getApplyPatchMetadataFiles","files","parsedFile","getApplyPatchDiffText","inputDiff","metadataDiff","fileDiffs","patchText","buildApplyPatchMetadataTitleSegments","seen","Set","segments","add","getApplyPatchMetadataReferences","getOutputText","outputObject","returnDisplay","stdout","parseSkillContentBlock","match","skillName","getSkillName","skill_name","buildFileLinkSegment","prependErrorBlock","blocks","errorText","getDiffBlocks","language","sideBySide","getDiffTitleSegments","getDiffReferences","renderApplyPatch","metadataFiles","diffSegments","references","indicator","buildEditDiff","renderEdit","file_path","oldString","old_string","newString","new_string","diffBlocks","renderRead","renderBash","command","outputText","code","stderr","exitCode","renderGrep","query","pattern","renderGlob","renderSkill","parsedOutput","renderedContent","getTodos","candidates","newTodos","todos","candidate","item","todo","priority","formatBadgeLabel","renderTodoWrite","render","Stack","Badge","createDefaultToolRenderers","stringifyValue","buildGenericBlocks","inputText","createGenericItem","mergeToolRenderers","overrides","getRenderer","toolRenderers","rawTool","renderInvocation","options","renderer","rendered","buildTimelineDocFromInvocations","invocations","items","Timeline","ChakraTimeline","handleTitleLinkClick","event","seg","onOpenFile","stopPropagation","href","preventDefault","AvatarTitleSegment","alt","src","Avatar","DiffTitleSegment","DiffBubble","BubbleLinkTitleSegment","fontWeight","isInteractive","textDecoration","color","Link","DefaultLinkTitleSegment","TextTitleSegment","isClickable","Span","TitleInline","variant","IndicatorView","ind","IndicatorIcon","CodeBlock","BlockView","b","reactions","clap","Card","DiffEditor","ref","ResourceBadge","TimelineItemRow","itemKey","isOpen","canExpand","hasBlocks","onToggle","ChevronUpIcon","block","i_0","TimelineFromJSON","data","expanded","setExpanded","getKey","prev","toggle","idx_0","expandable","it","id","ToolInvocationTimeline","labeledBlocks","isToolPart","formatTokenCount","count","toFixed","String","getErrorMessage","errorType","ALERT_COLOR_PALETTE","info","warning","success","loading","collectToolInvocations","lookahead","nextPart","MessagePartsRenderer","toolInvocationTimeline","RenderToolInvocationTimeline","nodes","partIndex","bb0","fontSize","AlertMessage","inputTokens","outputTokens","cacheReadTokens","Spinner","getMessageOrigin","isReasoningToolOnlyMessage","some","mergeReasoningToolOnlyMessages","messages","merged","previous","groupMessagesByTurn","groups","leadingResponses","userMessage","responses","renderMessage","ChatPanel","emptyStateTitle","emptyStateDescription","emptyStateContent","loadingContent","chatInputPlaceholder","chatInputDefaultValue","onSubmitMessage","onChatInputChange","repoMenu","approvalPrompt","workspaceHub","workspaceInitializing","inputDisabled","hasMessages","expandedStickyMessageIds","setExpandedStickyMessageIds","emptyContent","hasWorkspaceHub","showThinkingIndicator","messageId","delete","toggleStickyMessageExpanded","message_0","group","isCollapsible","isExpanded","message_1","EmptyState","MessageCircleIcon","renderSkeletonLines","widths","Skeleton","ChatSkeleton","ChatWorkspaceHub","changesLabel","statusLabel","hasChanges","background"],"mappings":"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"}