From b97c5089ce1a6272c0ef417573191c9e7e07ca2a Mon Sep 17 00:00:00 2001 From: Andrew Pareles Date: Wed, 12 Mar 2025 02:26:55 -0700 Subject: [PATCH] update approve/reject state --- .../react/src/sidebar-tsx/SidebarChat.tsx | 52 +++++++------------ 1 file changed, 20 insertions(+), 32 deletions(-) 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 726a2842..aa7b7120 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 @@ -669,10 +669,8 @@ type ToolHeaderParams = { desc1: string; desc2?: React.ReactNode; isError?: boolean; - requestToolId?: string; numResults?: number; children?: React.ReactNode; - isLastMessage?: boolean; onClick?: () => void; } @@ -684,8 +682,6 @@ const ToolHeaderComponent = ({ numResults, children, isError, - requestToolId, - isLastMessage, onClick, }: ToolHeaderParams) => { @@ -743,7 +739,6 @@ const ToolHeaderComponent = ({ - {!requestToolId ? null : } ); }; @@ -1061,23 +1056,18 @@ const toolNameToDesc = (toolName: ToolName, _toolParams: ToolCallParams[ToolName } -const ToolRequestAcceptRejectButtons = ({ voidToolId, isLastMessage: isLast }: { voidToolId: string, isLastMessage: boolean }) => { +const ToolRequestAcceptRejectButtons = ({ voidToolId }: { voidToolId: string }) => { const accessor = useAccessor() const chatThreadsService = accessor.get('IChatThreadService') const metricsService = accessor.get('IMetricsService') - const initRequestState = isLast ? 'awaiting_response' : 'rejected' - const [requestState, setRequestState] = useState<'accepted' | 'rejected' | 'awaiting_response'>(initRequestState) - const onAccept = useCallback(() => { chatThreadsService.approveTool(voidToolId) - setRequestState('accepted') metricsService.capture('Tool Request Accepted', {}) }, [chatThreadsService, voidToolId, metricsService]) const onReject = useCallback(() => { chatThreadsService.rejectTool(voidToolId) - setRequestState('rejected') metricsService.capture('Tool Request Rejected', {}) }, [chatThreadsService, voidToolId, metricsService]) @@ -1113,18 +1103,14 @@ const ToolRequestAcceptRejectButtons = ({ voidToolId, isLastMessage: isLast }: { ) - if (requestState === 'awaiting_response') { - return
- {approveButton} - {cancelButton} -
- } - - return null + return
+ {approveButton} + {cancelButton} +
} const toolNameToComponent: { [T in ToolName]: { - requestWrapper: T extends ToolNameWithApproval ? ((props: { toolRequest: ToolRequestApproval, isLastMessage: boolean }) => React.ReactNode) : null, + requestWrapper: T extends ToolNameWithApproval ? ((props: { toolRequest: ToolRequestApproval }) => React.ReactNode) : null, resultWrapper: (props: { toolMessage: ToolMessage }) => React.ReactNode, } } = { 'read_file': { @@ -1291,7 +1277,7 @@ const toolNameToComponent: { [T in ToolName]: { // --- 'create_uri': { - requestWrapper: ({ toolRequest, isLastMessage }) => { + requestWrapper: ({ toolRequest }) => { const accessor = useAccessor() const commandService = accessor.get('ICommandService') const title = toolNameToTitle[toolRequest.name] @@ -1299,7 +1285,7 @@ const toolNameToComponent: { [T in ToolName]: { const icon = null const isError = false - const componentParams: ToolHeaderParams = { title, desc1, isError, icon, isLastMessage, requestToolId: toolRequest.voidToolId } + const componentParams: ToolHeaderParams = { title, desc1, isError, icon, } const { params } = toolRequest componentParams.onClick = () => { commandService.executeCommand('vscode.open', params.uri, { preview: true }) } @@ -1332,7 +1318,7 @@ const toolNameToComponent: { [T in ToolName]: { } }, 'delete_uri': { - requestWrapper: ({ toolRequest, isLastMessage }) => { + requestWrapper: ({ toolRequest, }) => { const accessor = useAccessor() const commandService = accessor.get('ICommandService') const title = toolNameToTitle[toolRequest.name] @@ -1340,7 +1326,7 @@ const toolNameToComponent: { [T in ToolName]: { const icon = null const isError = false - const componentParams: ToolHeaderParams = { title, desc1, isError, icon, isLastMessage, requestToolId: toolRequest.voidToolId } + const componentParams: ToolHeaderParams = { title, desc1, isError, icon, } const { params } = toolRequest componentParams.onClick = () => { commandService.executeCommand('vscode.open', params.uri, { preview: true }) } @@ -1373,7 +1359,7 @@ const toolNameToComponent: { [T in ToolName]: { } }, 'edit': { - requestWrapper: ({ toolRequest, isLastMessage }) => { + requestWrapper: ({ toolRequest, }) => { const accessor = useAccessor() const commandService = accessor.get('ICommandService') const title = toolNameToTitle[toolRequest.name] @@ -1381,7 +1367,7 @@ const toolNameToComponent: { [T in ToolName]: { const icon = null const isError = false - const componentParams: ToolHeaderParams = { title, desc1, isError, icon, isLastMessage, requestToolId: toolRequest.voidToolId } + const componentParams: ToolHeaderParams = { title, desc1, isError, icon, } const { params } = toolRequest componentParams.children = @@ -1416,7 +1402,7 @@ const toolNameToComponent: { [T in ToolName]: { } }, 'terminal_command': { - requestWrapper: ({ toolRequest, isLastMessage }) => { + requestWrapper: ({ toolRequest, }) => { const accessor = useAccessor() const commandService = accessor.get('ICommandService') const terminalToolsService = accessor.get('ITerminalToolService') @@ -1425,7 +1411,7 @@ const toolNameToComponent: { [T in ToolName]: { const icon = null const isError = false - const componentParams: ToolHeaderParams = { title, desc1, isError, icon, isLastMessage, requestToolId: toolRequest.voidToolId } + const componentParams: ToolHeaderParams = { title, desc1, isError, icon, } const { proposedTerminalId } = toolRequest.params if (terminalToolsService.terminalExists(proposedTerminalId)) @@ -1514,16 +1500,18 @@ const ChatBubble = ({ chatMessage, isLoading, messageIdx, isLast }: ChatBubblePr /> } else if (role === 'tool_request') { - const ToolRequestWrapper = toolNameToComponent[chatMessage.name].requestWrapper as React.FC<{ toolRequest: any, isLastMessage: boolean }> // ts isnt smart enough... - return - + const ToolRequestWrapper = toolNameToComponent[chatMessage.name].requestWrapper as React.FC<{ toolRequest: any }> // ts isnt smart enough... + if (!isLast) return null + return <> + + + } else if (role === 'tool') { const ToolResultWrapper = toolNameToComponent[chatMessage.name].resultWrapper as React.FC<{ toolMessage: any }> // ts isnt smart enough... return } - }