11import { MinimalIssue } from '@atlassianlabs/jira-pi-common-models' ;
22import * as React from 'react' ;
3- import { ToolPermissionChoice } from 'src/rovo-dev/rovoDevApiClientInterfaces' ;
4- import { State } from 'src/rovo-dev/rovoDevTypes' ;
3+ import { State , ToolPermissionDialogChoice } from 'src/rovo-dev/rovoDevTypes' ;
54import { RovoDevProviderMessage , RovoDevProviderMessageType } from 'src/rovo-dev/rovoDevWebviewProviderMessages' ;
65import { ConnectionTimeout } from 'src/util/time' ;
76
@@ -19,6 +18,7 @@ import { ToolCallItem } from '../tools/ToolCallItem';
1918import { ToolReturnParsedItem } from '../tools/ToolReturnItem' ;
2019import { DialogMessage , parseToolReturnMessage , PullRequestMessage , Response , scrollToEnd } from '../utils' ;
2120import { ChatMessageItem } from './ChatMessageItem' ;
21+ import { DropdownButton } from './dropdown-button/DropdownButton' ;
2222import { MessageDrawer } from './MessageDrawer' ;
2323
2424interface ChatStreamProps {
@@ -48,7 +48,7 @@ interface ChatStreamProps {
4848 setPromptText : ( context : string ) => void ;
4949 jiraWorkItems : MinimalIssue < DetailedSiteInfo > [ ] | undefined ;
5050 onJiraItemClick : ( issue : MinimalIssue < DetailedSiteInfo > ) => void ;
51- onToolPermissionChoice : ( toolCallId : string , choice : ToolPermissionChoice ) => void ;
51+ onToolPermissionChoice : ( toolCallId : string , choice : ToolPermissionDialogChoice | 'enableYolo' ) => void ;
5252}
5353
5454export const ChatStream : React . FC < ChatStreamProps > = ( {
@@ -313,15 +313,36 @@ export const ChatStream: React.FC<ChatStreamProps> = ({
313313 </ div >
314314 ) }
315315
316- { ! isChatHistoryDisabled &&
317- modalDialogs . map ( ( dialog ) => (
318- < DialogMessageItem
319- msg = { dialog }
320- isRetryAfterErrorButtonEnabled = { renderProps . isRetryAfterErrorButtonEnabled }
321- retryAfterError = { renderProps . retryPromptAfterError }
322- onToolPermissionChoice = { onToolPermissionChoice }
323- />
324- ) ) }
316+ { ! isChatHistoryDisabled && (
317+ < div >
318+ { modalDialogs . map ( ( dialog ) => (
319+ < DialogMessageItem
320+ msg = { dialog }
321+ isRetryAfterErrorButtonEnabled = { renderProps . isRetryAfterErrorButtonEnabled }
322+ retryAfterError = { renderProps . retryPromptAfterError }
323+ onToolPermissionChoice = { onToolPermissionChoice }
324+ />
325+ ) ) }
326+ { modalDialogs . length > 1 && modalDialogs . every ( ( d ) => d . type === 'toolPermissionRequest' ) && (
327+ < DropdownButton
328+ buttonItem = { {
329+ label : 'Allow all' ,
330+ onSelect : ( ) => onToolPermissionChoice ( modalDialogs [ 0 ] . toolCallId , 'allowAll' ) ,
331+ } }
332+ items = { [
333+ {
334+ label : 'Allow all' ,
335+ onSelect : ( ) => onToolPermissionChoice ( modalDialogs [ 0 ] . toolCallId , 'allowAll' ) ,
336+ } ,
337+ {
338+ label : 'Enable YOLO mode' ,
339+ onSelect : ( ) => onToolPermissionChoice ( modalDialogs [ 0 ] . toolCallId , 'enableYolo' ) ,
340+ } ,
341+ ] }
342+ />
343+ ) }
344+ </ div >
345+ ) }
325346
326347 { ! isChatHistoryDisabled && currentState . state === 'WaitingForPrompt' && (
327348 < FollowUpActionFooter >
0 commit comments