@pstdio/ui 0.2.2 → 0.2.3

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.
@@ -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/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"],"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 \"&: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 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: { px: \"xs\", py: \"xs\", textStyle: \"xs\" },\n },\n md: {\n content: { px: \"xs\", py: \"xs\" },\n },\n lg: {\n root: { gap: \"md\" },\n content: { px: \"sm\", py: \"xs\", 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 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}\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 } = 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 width=\"100%\"\n paddingX=\"lg\"\n paddingY=\"md\"\n bg=\"bg\"\n borderRadius=\"md\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor={isSelected ? \"blue.border\" : \"border.muted\"}\n boxShadow={isSelected ? \"mid\" : \"low\"}\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 }}\n _focusWithin={{\n borderColor: \"blue.border\",\n boxShadow: \"mid\",\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 { 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 { RichMessage } from \"@/components/rich-text\";\nimport type { 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 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 \"loading\":\n nodes.push(\n <Box key={key} display=\"flex\" alignItems=\"center\" gap=\"2\" py=\"2\">\n <Spinner size=\"sm\" />\n <Text fontSize=\"sm\" color=\"fg.muted\">\n Thinking...\n </Text>\n </Box>,\n );\n break;\n case \"error\":\n nodes.push(\n <Box key={key} py=\"2\">\n <Text fontSize=\"sm\" color=\"fg.error\">\n {getErrorMessage(part)}\n </Text>\n </Box>,\n );\n break;\n case \"token_usage\":\n nodes.push(\n <Box key={key} py=\"1\">\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 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, Flex, Stack } from \"@chakra-ui/react\";\nimport { MessageCircleIcon } from \"lucide-react\";\nimport type { ReactNode } 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 { 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 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}\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 chatInputPlaceholder,\n chatInputDefaultValue = \"\",\n onSubmitMessage,\n onChatInputChange,\n actions,\n repoMenu,\n attachedResources,\n onClearAttachments,\n attachmentList,\n approvalPrompt,\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\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 <Box key={group.userMessage.id}>\n <Box position=\"sticky\" top=\"0\" zIndex={1}>\n {renderMessage(group.userMessage, streaming)}\n </Box>\n {group.responses.map((message) => renderMessage(message, streaming))}\n </Box>\n ))}\n </Stack>\n ) : (\n <EmptyState\n icon={<MessageCircleIcon size={48} strokeWidth={1.5} />}\n title={emptyStateTitle}\n description={emptyStateDescription}\n />\n )}\n </ChatPrimitives.Viewport>\n <ChatPrimitives.ScrollToBottom aria-label=\"Scroll to latest message\" />\n </ChatPrimitives.Root>\n {approvalPrompt}\n <Box px=\"sm\">\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 />\n </Box>\n <Flex p=\"2xs\" justifyContent=\"flex-end\">\n {repoMenu}\n </Flex>\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","mb","content","flexDirection","textStyle","variants","from","user","border","borderColor","bg","borderBottomRightRadius","assistant","developer","size","sm","px","py","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","undefined","_temp","isSelected","setIsSelected","useState","editorState","setEditorState","editorKey","setEditorKey","getTextFromSerializedEditorState","setText","containerRef","onChangeRef","t9","resetText","_temp2","t10","editable","querySelector","HTMLElement","focus","focusEditor","t11","handleContainerClick","t12","t13","shouldFocus","_temp3","resetText_0","requestAnimationFrame","resetEditor","trimmed","trim","handleSend","Boolean","t14","placeholderNode","t15","t16","t17","t18","boxShadow","t19","t20","t21","pr","t22","t23","t","t24","PromptEditor","t25","Spacer","t26","t27","t28","t29","t30","t31","t32","key","key_0","createSerializedPromptState","generateEditorStateFromString","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","type","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","part","formatTokenCount","count","toFixed","String","getErrorMessage","message","errorType","collectToolInvocations","parts","lookahead","nextPart","MessagePartsRenderer","toolInvocationTimeline","RenderToolInvocationTimeline","nodes","partIndex","bb0","fontSize","Spinner","inputTokens","outputTokens","cacheReadTokens","getMessageOrigin","isReasoningToolOnlyMessage","some","mergeReasoningToolOnlyMessages","messages","merged","previous","groupMessagesByTurn","groups","leadingResponses","userMessage","responses","renderMessage","ChatPanel","emptyStateTitle","emptyStateDescription","chatInputPlaceholder","chatInputDefaultValue","onSubmitMessage","onChatInputChange","repoMenu","approvalPrompt","T0","T1","T2","hasMessages","reduce","message_0","group","message_1","EmptyState","MessageCircleIcon"],"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/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"],"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 \"&: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 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: { px: \"xs\", py: \"xs\", textStyle: \"xs\" },\n },\n md: {\n content: { px: \"xs\", py: \"xs\" },\n },\n lg: {\n root: { gap: \"md\" },\n content: { px: \"sm\", py: \"xs\", 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}\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 } = 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 width=\"100%\"\n paddingX=\"lg\"\n paddingY=\"md\"\n bg=\"bg\"\n borderRadius=\"md\"\n borderWidth=\"1px\"\n borderStyle=\"solid\"\n borderColor={isSelected ? \"blue.border\" : \"border.muted\"}\n boxShadow={isSelected ? \"mid\" : \"low\"}\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 }}\n _focusWithin={{\n borderColor: \"blue.border\",\n boxShadow: \"mid\",\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 { RichMessage } from \"@/components/rich-text\";\nimport type { 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 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 \"loading\":\n nodes.push(\n <Box key={key} display=\"flex\" alignItems=\"center\" gap=\"2\" py=\"2\">\n <Spinner size=\"sm\" />\n <Text fontSize=\"sm\" color=\"fg.muted\">\n Thinking...\n </Text>\n </Box>,\n );\n break;\n case \"error\":\n nodes.push(\n <Box key={key} py=\"2\">\n <Text fontSize=\"sm\" color=\"fg.error\">\n {getErrorMessage(part)}\n </Text>\n </Box>,\n );\n break;\n case \"token_usage\":\n nodes.push(\n <Box key={key} py=\"1\">\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 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, Stack } 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 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}\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 chatInputPlaceholder,\n chatInputDefaultValue = \"\",\n onSubmitMessage,\n onChatInputChange,\n actions,\n repoMenu,\n attachedResources,\n onClearAttachments,\n attachmentList,\n approvalPrompt,\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\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 <EmptyState\n icon={<MessageCircleIcon size={48} strokeWidth={1.5} />}\n title={emptyStateTitle}\n description={emptyStateDescription}\n />\n )}\n </ChatPrimitives.Viewport>\n <ChatPrimitives.ScrollToBottom aria-label=\"Scroll to latest message\" />\n </ChatPrimitives.Root>\n {approvalPrompt}\n <Box px=\"sm\">\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 />\n </Box>\n <Flex p=\"2xs\" justifyContent=\"flex-end\">\n {repoMenu}\n </Flex>\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","mb","content","flexDirection","textStyle","variants","from","user","border","borderColor","bg","borderBottomRightRadius","assistant","developer","size","sm","px","py","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","undefined","_temp","isSelected","setIsSelected","useState","editorState","setEditorState","editorKey","setEditorKey","getTextFromSerializedEditorState","setText","containerRef","onChangeRef","t9","resetText","_temp2","t10","editable","querySelector","HTMLElement","focus","focusEditor","t11","handleContainerClick","t12","t13","shouldFocus","_temp3","resetText_0","requestAnimationFrame","resetEditor","trimmed","trim","handleSend","Boolean","t14","placeholderNode","t15","t16","t17","t18","boxShadow","t19","t20","t21","pr","t22","t23","t","t24","PromptEditor","t25","Spacer","t26","t27","t28","t29","t30","t31","t32","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","collectToolInvocations","lookahead","nextPart","MessagePartsRenderer","toolInvocationTimeline","RenderToolInvocationTimeline","nodes","partIndex","bb0","fontSize","Spinner","inputTokens","outputTokens","cacheReadTokens","getMessageOrigin","isReasoningToolOnlyMessage","some","mergeReasoningToolOnlyMessages","messages","merged","previous","groupMessagesByTurn","groups","leadingResponses","userMessage","responses","renderMessage","ChatPanel","emptyStateTitle","emptyStateDescription","chatInputPlaceholder","chatInputDefaultValue","onSubmitMessage","onChatInputChange","repoMenu","approvalPrompt","hasMessages","expandedStickyMessageIds","setExpandedStickyMessageIds","messageId","delete","toggleStickyMessageExpanded","message_0","group","isCollapsible","isExpanded","message_1","EmptyState","MessageCircleIcon"],"mappings":"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"}