88 ChatItemButton ,
99 ChatItemFormItem ,
1010 ChatItemType ,
11+ MynahIconsType ,
1112 MynahUIDataModel ,
1213 QuickActionCommand ,
1314} from '@aws/mynah-ui'
@@ -33,6 +34,7 @@ export class Connector extends BaseConnector {
3334 private readonly onContextCommandDataReceived
3435 private readonly onShowCustomForm
3536 private readonly onChatAnswerUpdated
37+ private chatItems : Map < string , Map < string , ChatItem > > = new Map ( ) // tabId -> messageId -> ChatItem
3638
3739 override getTabType ( ) : TabType {
3840 return 'cwc'
@@ -109,6 +111,10 @@ export class Connector extends BaseConnector {
109111 title : messageData . title ,
110112 buttons : messageData . buttons ?? undefined ,
111113 fileList : messageData . fileList ?? undefined ,
114+ header : messageData . header ?? undefined ,
115+ padding : messageData . padding ?? undefined ,
116+ fullWidth : messageData . fullWidth ?? undefined ,
117+ codeBlockActions : messageData . codeBlockActions ?? undefined ,
112118 }
113119
114120 if ( messageData . relatedSuggestions !== undefined ) {
@@ -117,6 +123,10 @@ export class Connector extends BaseConnector {
117123 content : messageData . relatedSuggestions ,
118124 }
119125 }
126+
127+ if ( answer . messageId ) {
128+ this . storeChatItem ( messageData . tabID , answer . messageId , answer )
129+ }
120130 this . onChatAnswerReceived ( messageData . tabID , answer , messageData )
121131
122132 // Exit the function if we received an answer from AI
@@ -147,13 +157,57 @@ export class Connector extends BaseConnector {
147157 : undefined ,
148158 buttons : messageData . buttons ?? undefined ,
149159 canBeVoted : messageData . canBeVoted ?? false ,
160+ header : messageData . header ?? undefined ,
161+ padding : messageData . padding ?? undefined ,
162+ fullWidth : messageData . fullWidth ?? undefined ,
163+ codeBlockActions : messageData . codeBlockActions ?? undefined ,
150164 }
151165 this . onChatAnswerReceived ( messageData . tabID , answer , messageData )
152166
153167 return
154168 }
155169 }
156170
171+ private processToolMessage = async ( messageData : any ) : Promise < void > => {
172+ if ( this . onChatAnswerUpdated === undefined ) {
173+ return
174+ }
175+ const answer : CWCChatItem = {
176+ type : messageData . messageType ,
177+ messageId : messageData . messageID ?? messageData . triggerID ,
178+ body : messageData . message ,
179+ followUp : messageData . followUps ,
180+ canBeVoted : messageData . canBeVoted ?? false ,
181+ codeReference : messageData . codeReference ,
182+ userIntent : messageData . contextList ,
183+ codeBlockLanguage : messageData . codeBlockLanguage ,
184+ contextList : messageData . contextList ,
185+ title : messageData . title ,
186+ buttons : messageData . buttons ,
187+ fileList : messageData . fileList ,
188+ header : messageData . header ?? undefined ,
189+ padding : messageData . padding ?? undefined ,
190+ fullWidth : messageData . fullWidth ?? undefined ,
191+ codeBlockActions : messageData . codeBlockActions ?? undefined ,
192+ }
193+ if ( answer . messageId ) {
194+ this . storeChatItem ( messageData . tabID , answer . messageId , answer )
195+ }
196+ this . onChatAnswerUpdated ( messageData . tabID , answer )
197+ return
198+ }
199+
200+ private storeChatItem ( tabId : string , messageId : string , item : ChatItem ) : void {
201+ if ( ! this . chatItems . has ( tabId ) ) {
202+ this . chatItems . set ( tabId , new Map ( ) )
203+ }
204+ this . chatItems . get ( tabId ) ?. set ( messageId , { ...item } )
205+ }
206+
207+ private getCurrentChatItem ( tabId : string , messageId : string ) : ChatItem | undefined {
208+ return this . chatItems . get ( tabId ) ?. get ( messageId )
209+ }
210+
157211 processContextCommandData ( messageData : any ) {
158212 if ( messageData . data ) {
159213 this . onContextCommandDataReceived ( messageData . data )
@@ -199,6 +253,11 @@ export class Connector extends BaseConnector {
199253 return
200254 }
201255
256+ if ( messageData . type === 'toolMessage' ) {
257+ await this . processToolMessage ( messageData )
258+ return
259+ }
260+
202261 if ( messageData . type === 'editorContextCommandMessage' ) {
203262 await this . processEditorContextCommandMessage ( messageData )
204263 return
@@ -270,35 +329,39 @@ export class Connector extends BaseConnector {
270329 ) {
271330 return
272331 }
332+
333+ // Can not assign body as "undefined" or "null" because both of these values will be overriden at main.ts in onChatAnswerUpdated
334+ // TODO: Refactor in next PR if necessary.
335+ const currentChatItem = this . getCurrentChatItem ( tabId , messageId )
273336 const answer : ChatItem = {
274337 type : ChatItemType . ANSWER ,
275338 messageId : messageId ,
276339 buttons : [ ] ,
340+ body : undefined ,
341+ header : currentChatItem ?. header ? { ...currentChatItem . header } : { } ,
277342 }
278343 switch ( action . id ) {
279344 case 'accept-code-diff' :
280- answer . buttons = [
281- {
282- keepCardAfterClick : true ,
283- text : 'Accepted code' ,
284- id : 'accepted-code-diff' ,
345+ if ( answer . header ) {
346+ answer . header . status = {
347+ icon : 'ok' as MynahIconsType ,
348+ text : 'Accepted' ,
285349 status : 'success' ,
286- position : 'outside' ,
287- disabled : true ,
288- } ,
289- ]
350+ }
351+ answer . header . buttons = [ ]
352+ answer . body = ' '
353+ }
290354 break
291355 case 'reject-code-diff' :
292- answer . buttons = [
293- {
294- keepCardAfterClick : true ,
295- text : 'Rejected code' ,
296- id : 'rejected-code-diff' ,
356+ if ( answer . header ) {
357+ answer . header . status = {
358+ icon : 'cancel' as MynahIconsType ,
359+ text : 'Rejected' ,
297360 status : 'error' ,
298- position : 'outside' ,
299- disabled : true ,
300- } ,
301- ]
361+ }
362+ answer . header . buttons = [ ]
363+ answer . body = ' '
364+ }
302365 break
303366 case 'confirm-tool-use' :
304367 answer . buttons = [
@@ -315,6 +378,12 @@ export class Connector extends BaseConnector {
315378 default :
316379 break
317380 }
381+
382+ if ( currentChatItem && answer . messageId ) {
383+ const updatedItem = { ...currentChatItem , ...answer }
384+ this . storeChatItem ( tabId , answer . messageId , updatedItem )
385+ }
386+
318387 this . onChatAnswerUpdated ( tabId , answer )
319388 }
320389
0 commit comments