import React, { useMemo } from 'react' import Markdown from 'react-markdown' import { ApplyStatus, ToolArgs } from '../../types/apply' import { ParsedMsgBlock, parseMsgBlocks, } from '../../utils/parse-infio-block' import MarkdownApplyDiffBlock from './Markdown/MarkdownApplyDiffBlock' import MarkdownEditFileBlock from './Markdown/MarkdownEditFileBlock' import MarkdownFetchUrlsContentBlock from './Markdown/MarkdownFetchUrlsContentBlock' import MarkdownListFilesBlock from './Markdown/MarkdownListFilesBlock' import MarkdownReadFileBlock from './Markdown/MarkdownReadFileBlock' import MarkdownReasoningBlock from './Markdown/MarkdownReasoningBlock' import MarkdownRegexSearchFilesBlock from './Markdown/MarkdownRegexSearchFilesBlock' import MarkdownSearchAndReplace from './Markdown/MarkdownSearchAndReplace' import MarkdownSearchWebBlock from './Markdown/MarkdownSearchWebBlock' import MarkdownSemanticSearchFilesBlock from './Markdown/MarkdownSemanticSearchFilesBlock' import MarkdownSwitchModeBlock from './Markdown/MarkdownSwitchModeBlock' import MarkdownWithIcons from './Markdown/MarkdownWithIcon' function ReactMarkdown({ applyStatus, onApply, children, }: { applyStatus: ApplyStatus onApply: (toolArgs: ToolArgs) => void children: string }) { const blocks: ParsedMsgBlock[] = useMemo( () => parseMsgBlocks(children), [children], ) return ( <> {blocks.map((block, index) => block.type === 'thinking' ? ( {block.content} ) : block.type === 'think' ? ( ) : block.type === 'write_to_file' ? ( {block.content} ) : block.type === 'insert_content' ? ( {block.content} ) : block.type === 'search_and_replace' ? ( ({ search: op.search, replace: op.replace, startLine: op.start_line, endLine: op.end_line, useRegex: op.use_regex, ignoreCase: op.ignore_case, regexFlags: op.regex_flags, }))} finish={block.finish} /> ) : block.type === 'apply_diff' ? ( ) : block.type === 'read_file' ? ( ) : block.type === 'list_files' ? ( ) : block.type === 'regex_search_files' ? ( ) : block.type === 'semantic_search_files' ? ( ) : block.type === 'attempt_completion' ? ( ) : block.type === 'ask_followup_question' ? ( ) : block.type === 'switch_mode' ? ( ) : block.type === 'search_web' ? ( ) : block.type === 'fetch_urls_content' ? ( ) : ( {block.content} ), )} ) } export default React.memo(ReactMarkdown)