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 4ef01353..87983026 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 @@ -29,6 +29,7 @@ import { acceptAllBg, acceptBorder, buttonFontSize, buttonTextColor, rejectAllBg import { PlacesType } from 'react-tooltip'; import { ToolName, toolNames } from '../../../../common/prompt/prompts.js'; import { error } from 'console'; +import { RawToolCallObj } from '../../../../common/sendLLMMessageTypes.js'; @@ -1333,7 +1334,7 @@ export const ListableToolItem = ({ name, onClick, isSmall, className, showDot }: -const EditToolChildren = ({ uri, changeDescription }: { uri: URI, changeDescription: string }) => { +const EditToolChildren = ({ uri, changeDescription }: { uri: URI | undefined, changeDescription: string }) => { return
@@ -2285,6 +2286,37 @@ const CommandBarInChat = () => { } +const EditToolSoFar = ({ toolCallSoFar, }: { toolCallSoFar: RawToolCallObj }) => { + + const uri = URI.file(toolCallSoFar.rawParams.uri ?? 'unknown') + + const title = titleOfToolName['edit_file'].proposed + + const uriDone = toolCallSoFar.doneParams.includes('uri') + const desc1 = + {uriDone ? + getBasename(toolCallSoFar.rawParams['uri'] ?? 'unknown') + : `Generating`} + + + + // If URI has not been specified + return } + > + + + + + + +} + export const SidebarChat = () => { const textAreaRef = useRef(null) const textAreaFnsRef = useRef(null) @@ -2416,6 +2448,15 @@ export const SidebarChat = () => { /> : null + // the tool currently being generated + const generatingTool = toolIsGenerating ? + toolCallSoFar.name === 'edit_file' ? + : null + : null + const messagesHTML = { {previousMessagesHTML} {currStreamingMessageHTML} - {toolIsGenerating ? - Generating} - /> - : null} + {/* Generating tool */} + {generatingTool} + {/* loading indicator */} {isRunning === 'LLM' && !toolIsGenerating ? - {/* loading indicator */} {} : null} diff --git a/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx b/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx index 6574c5e1..ab0e61ee 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/util/services.tsx @@ -47,6 +47,7 @@ import { IWorkspaceContextService } from '../../../../../../../platform/workspac import { IVoidCommandBarService } from '../../../voidCommandBarService.js' import { INativeHostService } from '../../../../../../../platform/native/common/native.js'; import { IEditCodeService } from '../../../editCodeServiceInterface.js' +import { IToolsService } from '../../../toolsService.js' // normally to do this you'd use a useEffect that calls .onDidChangeState(), but useEffect mounts too late and misses initial state changes @@ -215,6 +216,7 @@ const getReactAccessor = (accessor: ServicesAccessor) => { IVoidCommandBarService: accessor.get(IVoidCommandBarService), INativeHostService: accessor.get(INativeHostService), + IToolsService: accessor.get(IToolsService), } as const return reactAccessor diff --git a/src/vs/workbench/contrib/void/browser/toolsService.ts b/src/vs/workbench/contrib/void/browser/toolsService.ts index 8dec053d..ab3ca373 100644 --- a/src/vs/workbench/contrib/void/browser/toolsService.ts +++ b/src/vs/workbench/contrib/void/browser/toolsService.ts @@ -26,7 +26,7 @@ import { IVoidSettingsService } from '../common/voidSettingsService.js' -type ValidateParams = { [T in ToolName]: (p: RawToolParamsObj) => Promise } +type ValidateParams = { [T in ToolName]: (p: RawToolParamsObj) => ToolCallParams[T] } type CallTool = { [T in ToolName]: (p: ToolCallParams[T]) => Promise<{ result: ToolResultType[T], interruptTool?: () => void }> } type ToolResultToString = { [T in ToolName]: (p: ToolCallParams[T], result: Awaited) => string } @@ -158,7 +158,7 @@ export class ToolsService implements IToolsService { const queryBuilder = instantiationService.createInstance(QueryBuilder); this.validateParams = { - read_file: async (params: RawToolParamsObj) => { + read_file: (params: RawToolParamsObj) => { const { uri: uriStr, start_line: startLineUnknown, end_line: endLineUnknown, page_number: pageNumberUnknown } = params const uri = validateURI(uriStr) const pageNumber = validatePageNum(pageNumberUnknown) @@ -168,19 +168,19 @@ export class ToolsService implements IToolsService { return { uri, startLine, endLine, pageNumber } }, - ls_dir: async (params: RawToolParamsObj) => { + ls_dir: (params: RawToolParamsObj) => { const { uri: uriStr, page_number: pageNumberUnknown } = params const uri = validateURI(uriStr) const pageNumber = validatePageNum(pageNumberUnknown) return { rootURI: uri, pageNumber } }, - get_dir_structure: async (params: RawToolParamsObj) => { + get_dir_structure: (params: RawToolParamsObj) => { const { uri: uriStr, } = params const uri = validateURI(uriStr) return { rootURI: uri } }, - search_pathnames_only: async (params: RawToolParamsObj) => { + search_pathnames_only: (params: RawToolParamsObj) => { const { query: queryUnknown, search_in_folder: includeUnknown, @@ -194,7 +194,7 @@ export class ToolsService implements IToolsService { return { queryStr, searchInFolder, pageNumber } }, - search_files: async (params: RawToolParamsObj) => { + search_files: (params: RawToolParamsObj) => { const { query: queryUnknown, search_in_folder: searchInFolderUnknown, @@ -213,7 +213,7 @@ export class ToolsService implements IToolsService { // --- - create_file_or_folder: async (params: RawToolParamsObj) => { + create_file_or_folder: (params: RawToolParamsObj) => { const { uri: uriUnknown } = params const uri = validateURI(uriUnknown) const uriStr = validateStr('uri', uriUnknown) @@ -221,7 +221,7 @@ export class ToolsService implements IToolsService { return { uri, isFolder } }, - delete_file_or_folder: async (params: RawToolParamsObj) => { + delete_file_or_folder: (params: RawToolParamsObj) => { const { uri: uriUnknown, params: paramsStr } = params const uri = validateURI(uriUnknown) const isRecursive = validateRecursiveParamStr(paramsStr) @@ -230,14 +230,14 @@ export class ToolsService implements IToolsService { return { uri, isRecursive, isFolder } }, - edit_file: async (params: RawToolParamsObj) => { + edit_file: (params: RawToolParamsObj) => { const { uri: uriStr, change_description: changeDescriptionUnknown } = params const uri = validateURI(uriStr) const changeDescription = validateStr('changeDescription', changeDescriptionUnknown) return { uri, changeDescription } }, - run_terminal_command: async (params: RawToolParamsObj) => { + run_terminal_command: (params: RawToolParamsObj) => { const { command: commandUnknown, terminal_id: terminalIdUnknown, wait_for_completion: waitForCompletionUnknown } = params const command = validateStr('command', commandUnknown) const proposedTerminalId = validateProposedTerminalId(terminalIdUnknown)