diff --git a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx index e4ce0c1a..0c957ad7 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx @@ -20,7 +20,7 @@ import { VOID_OPEN_SETTINGS_ACTION_ID } from '../../../voidSettingsPane.js'; import { ChatMode, displayInfoOfProviderName, FeatureName, isFeatureNameDisabled } from '../../../../../../../workbench/contrib/void/common/voidSettingsTypes.js'; import { WarningBox } from '../void-settings-tsx/WarningBox.js'; import { getModelCapabilities, getIsReasoningEnabledState } from '../../../../common/modelCapabilities.js'; -import { AlertTriangle, Ban, Check, ChevronRight, Dot, FileIcon, Pencil, Undo, Undo2, X, Flag, Copy as CopyIcon, Info } from 'lucide-react'; +import { AlertTriangle, Ban, Check, ChevronRight, Dot, FileIcon, Pencil, Undo, Undo2, X, Flag, Copy as CopyIcon, Info, CirclePlus, Ellipsis, CircleEllipsis } from 'lucide-react'; import { ChatMessage, CheckpointEntry, StagingSelectionItem, ToolMessage } from '../../../../common/chatThreadServiceTypes.js'; import { approvalTypeOfToolName, LintErrorItem, ToolApprovalType, toolApprovalTypes, ToolCallParams } from '../../../../common/toolsServiceTypes.js'; import { ApplyButtonsHTML, CopyButton, IconShell1, JumpToFileButton, JumpToTerminalButton, StatusIndicator, StatusIndicatorForApplyButton, useApplyButtonState } from '../markdown/ApplyBlockHoverButtons.js'; @@ -734,7 +734,8 @@ const ToolHeaderWrapper = ({ {...desc1Info ? { 'data-tooltip-id': 'void-tooltip', 'data-tooltip-content': desc1Info, - 'data-tooltip-place': 'top-end', + 'data-tooltip-place': 'top', + 'data-tooltip-delay-show': 1000, } : {}} >{desc1} @@ -742,12 +743,20 @@ const ToolHeaderWrapper = ({ {/* right */}
+ {info && } {isError && } {isRejected && )} - {info && }
@@ -1591,7 +1593,7 @@ const toolNameToComponent: { [T in ToolName]: { resultWrapper: ResultWrapper, if (params.uri) { const rel = getRelative(params.uri, accessor) - if (rel) componentParams.info = `Only in ${rel}` + if (rel) componentParams.info = `Only search in ${rel}` } if (toolMessage.type === 'success') { @@ -1639,7 +1641,7 @@ const toolNameToComponent: { [T in ToolName]: { resultWrapper: ResultWrapper, if (params.uri) { const rel = getRelative(params.uri, accessor) - if (rel) componentParams.info = `Only in ${rel}` + if (rel) componentParams.info = `Only search in ${rel}` } if (toolMessage.type === 'success') { @@ -1691,7 +1693,7 @@ const toolNameToComponent: { [T in ToolName]: { resultWrapper: ResultWrapper, const componentParams: ToolHeaderParams = { title, desc1, desc1Info, isError, icon, } if (params.includePattern) - componentParams.info = `Only in ${params.includePattern}` + componentParams.info = `Only search in ${params.includePattern}` if (toolMessage.type === 'success') { const { result, rawParams } = toolMessage @@ -1740,7 +1742,7 @@ const toolNameToComponent: { [T in ToolName]: { resultWrapper: ResultWrapper, if (params.searchInFolder) { const rel = getRelative(params.searchInFolder, accessor) - if (rel) componentParams.desc1Info = `Only in ${rel}` + if (rel) componentParams.info = `Only search in ${rel}` } if (toolMessage.type === 'success') { @@ -1918,8 +1920,6 @@ const toolNameToComponent: { [T in ToolName]: { resultWrapper: ResultWrapper, const { rawParams, params } = toolMessage const componentParams: ToolHeaderParams = { title, desc1, desc1Info, isError, icon, isRejected, } - componentParams.info = getRelative(params.uri, accessor) // full path - if (toolMessage.type === 'running_now' || toolMessage.type === 'tool_request') { componentParams.children = { @@ -155,9 +155,10 @@ export const PastThreadsList = ({ className = '' }: { className?: string }) => { const streamState = useFullChatThreadsStreamState() - const runningThreadIds = new Set() + const runningThreadIds: { [threadId: string]: IsRunningType | undefined } = {} for (const threadId in streamState) { - if (streamState[threadId]?.isRunning) { runningThreadIds.add(threadId) } + const isRunning = streamState[threadId]?.isRunning + if (isRunning) { runningThreadIds[threadId] = isRunning } } if (!allThreads) { @@ -190,7 +191,7 @@ export const PastThreadsList = ({ className = '' }: { className?: string }) => { idx={i} hoveredIdx={hoveredIdx} setHoveredIdx={setHoveredIdx} - isRunning={runningThreadIds.has(pastThread.id)} + isRunning={runningThreadIds[pastThread.id]} /> ); }) @@ -289,7 +290,7 @@ const PastThreadElement = ({ pastThread, idx, hoveredIdx, setHoveredIdx, isRunni idx: number, hoveredIdx: number | null, setHoveredIdx: (idx: number | null) => void, - isRunning: boolean, + isRunning: IsRunningType | undefined, } ) => { @@ -361,7 +362,11 @@ const PastThreadElement = ({ pastThread, idx, hoveredIdx, setHoveredIdx, isRunni
{/* spinner */} - {isRunning ? : null} + {isRunning === 'LLM' || isRunning === 'tool' ? + : + isRunning === 'awaiting_user' ? + : + null} {/* name */} {firstMsg}