import React, { useMemo } from 'react' import { ApplyStatus, ToolArgs } from '../../types/apply' import { ParsedMsgBlock, parseMsgBlocks, } from '../../utils/parse-infio-block' import MarkdownApplyDiffBlock from './Markdown/MarkdownApplyDiffBlock' import MarkdownDataviewQueryBlock from './Markdown/MarkdownDataviewQueryBlock' import MarkdownEditFileBlock from './Markdown/MarkdownEditFileBlock' import MarkdownFetchUrlsContentBlock from './Markdown/MarkdownFetchUrlsContentBlock' import MarkdownListFilesBlock from './Markdown/MarkdownListFilesBlock' import MarkdownManageFilesBlock from './Markdown/MarkdownManageFilesBlock' import MarkdownMatchSearchFilesBlock from './Markdown/MarkdownMatchSearchFilesBlock' 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 MarkdownToolResult from './Markdown/MarkdownToolResult' import MarkdownTransformationToolBlock from './Markdown/MarkdownTransformationToolBlock' import MarkdownWithIcons from './Markdown/MarkdownWithIcon' import RawMarkdownBlock from './Markdown/RawMarkdownBlock' import UseMcpToolBlock from './Markdown/UseMcpToolBlock' 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 === 'think' ? ( ) : block.type === 'thinking' ? ( ) : 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 === 'match_search_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.type === 'use_mcp_tool' ? ( ) : block.type === 'dataview_query' ? ( ) : block.type === 'call_transformations' ? ( ) : block.type === 'manage_files' ? ( ) : block.type === 'tool_result' ? ( ) : ( ), )} ) } export default React.memo(ReactMarkdown)