update fetch urls & web search show view

This commit is contained in:
duanfuxiang
2025-04-01 18:56:11 +08:00
parent 7642cc1410
commit c8d03bf799
25 changed files with 156 additions and 4967 deletions

View File

@@ -607,7 +607,6 @@ const Chat = forwardRef<ChatRef, ChatProps>((props, ref) => {
query: toolArgs.query,
scope: scope_folders,
})
console.log("results", results)
let snippets = results.map(({ path, content, metadata }) => {
const contentWithLineNumbers = addLineNumbers(content, metadata.startLine)
return `<file_block_content location="${path}#L${metadata.startLine}-${metadata.endLine}">\n${contentWithLineNumbers}\n</file_block_content>`

View File

@@ -1,11 +1,8 @@
import { ChevronDown, ChevronRight, Globe } from 'lucide-react'
import React, { useEffect, useMemo, useRef, useState } from 'react'
import { Check, ChevronDown, ChevronRight, Globe, Loader2, X } from 'lucide-react'
import React, { useEffect, useRef, useState } from 'react'
import { useDarkModeContext } from '../../contexts/DarkModeContext'
import { ApplyStatus, FetchUrlsContentToolArgs } from '../../types/apply'
import { MemoizedSyntaxHighlighterWrapper } from './SyntaxHighlighterWrapper'
export default function MarkdownFetchUrlsContentBlock({
applyStatus,
onApply,
@@ -17,14 +14,11 @@ export default function MarkdownFetchUrlsContentBlock({
urls: string[],
finish: boolean
}) {
const { isDarkMode } = useDarkModeContext()
const containerRef = useRef<HTMLDivElement>(null)
const [isOpen, setIsOpen] = useState(true)
React.useEffect(() => {
console.log('finish', finish, applyStatus)
if (finish && applyStatus === ApplyStatus.Idle) {
console.log('finish auto fetch urls content', urls)
onApply({
type: 'fetch_urls_content',
urls: urls
@@ -32,48 +26,67 @@ export default function MarkdownFetchUrlsContentBlock({
}
}, [finish])
const urlsMarkdownContent = useMemo(() => {
return urls.map(url => {
return `${url}`
}).join('\n\n')
}, [urls])
useEffect(() => {
if (containerRef.current) {
containerRef.current.scrollTop = containerRef.current.scrollHeight
}
}, [urlsMarkdownContent])
}, [urls])
return (
urlsMarkdownContent && (
<div
className={`infio-chat-code-block has-filename infio-reasoning-block`}
>
<div className={'infio-chat-code-block-header'}>
<div className={'infio-chat-code-block-header-filename'}>
urls.length > 0 && (
<div className="infio-chat-code-block has-filename infio-reasoning-block">
<div className="infio-chat-code-block-header">
<div className="infio-chat-code-block-header-filename">
<Globe size={10} className="infio-chat-code-block-header-icon" />
Fetch URLs Content
</div>
<button
className="clickable-icon infio-chat-list-dropdown"
onClick={() => setIsOpen(!isOpen)}
>
{isOpen ? <ChevronDown size={16} /> : <ChevronRight size={16} />}
</button>
<div className="infio-chat-code-block-header-button">
<button
className="infio-chat-code-block-status-button"
disabled={true}
>
{
!finish || applyStatus === ApplyStatus.Idle ? (
<>
<Loader2 className="spinner" size={14} /> Fetching...
</>
) : applyStatus === ApplyStatus.Applied ? (
<>
<Check size={14} /> Done
</>
) : (
<>
<X size={14} /> Failed
</>
)}
</button>
<button
className="clickable-icon infio-chat-list-dropdown"
onClick={() => setIsOpen(!isOpen)}
>
{isOpen ? <ChevronDown size={16} /> : <ChevronRight size={16} />}
</button>
</div>
</div>
<div
ref={containerRef}
className="infio-reasoning-content-wrapper"
style={{ display: isOpen ? 'block' : 'none' }}
>
<MemoizedSyntaxHighlighterWrapper
isDarkMode={isDarkMode}
language="markdown"
hasFilename={true}
wrapLines={true}
isOpen={isOpen}
>
{urlsMarkdownContent}
</MemoizedSyntaxHighlighterWrapper>
<ul className="infio-chat-code-block-url-list">
{urls.map((url, index) => (
<li key={index}>
<a
href={url}
target="_blank"
rel="noopener noreferrer"
className="infio-chat-code-block-url-link"
>
{url}
</a>
</li>
))}
</ul>
</div>
</div>
)

View File

@@ -25,9 +25,7 @@ export default function MarkdownListFilesBlock({
}
React.useEffect(() => {
console.log('finish', finish, applyStatus)
if (finish && applyStatus === ApplyStatus.Idle) {
console.log('finish auto list files', path)
onApply({
type: 'list_files',
filepath: path,

View File

@@ -25,9 +25,7 @@ export default function MarkdownRegexSearchFilesBlock({
}
React.useEffect(() => {
console.log('finish', finish, applyStatus)
if (finish && applyStatus === ApplyStatus.Idle) {
console.log('finish auto regex search files', path)
onApply({
type: 'regex_search_files',
filepath: path,

View File

@@ -1,4 +1,4 @@
import { Search } from 'lucide-react'
import { Check, Loader2, Search, X } from 'lucide-react'
import React from 'react'
import { useSettings } from '../../contexts/SettingsContext'
@@ -48,6 +48,27 @@ export default function MarkdownWebSearchBlock({
<Search size={14} className="infio-chat-code-block-header-icon" />
Web search: {query}
</div>
<div className={'infio-chat-code-block-header-button'}>
<button
style={{ color: '#008000' }}
disabled={true}
>
{
!finish || applyStatus === ApplyStatus.Idle ? (
<>
<Loader2 className="spinner" size={14} /> Searching...
</>
) : applyStatus === ApplyStatus.Applied ? (
<>
<Check size={14} /> Done
</>
) : (
<>
<X size={14} /> Failed
</>
)}
</button>
</div>
</div>
</div>
)

View File

@@ -25,9 +25,7 @@ export default function MarkdownSemanticSearchFilesBlock({
}
React.useEffect(() => {
console.log('finish', finish, applyStatus)
if (finish && applyStatus === ApplyStatus.Idle) {
console.log('finish auto semantic search files', path)
onApply({
type: 'semantic_search_files',
filepath: path,