8
8
ChatItemButton ,
9
9
ChatItemFormItem ,
10
10
ChatItemType ,
11
+ MynahIconsType ,
11
12
MynahUIDataModel ,
12
13
QuickActionCommand ,
13
14
} from '@aws/mynah-ui'
@@ -33,6 +34,7 @@ export class Connector extends BaseConnector {
33
34
private readonly onContextCommandDataReceived
34
35
private readonly onShowCustomForm
35
36
private readonly onChatAnswerUpdated
37
+ private chatItems : Map < string , Map < string , ChatItem > > = new Map ( ) // tabId -> messageId -> ChatItem
36
38
37
39
override getTabType ( ) : TabType {
38
40
return 'cwc'
@@ -109,6 +111,10 @@ export class Connector extends BaseConnector {
109
111
title : messageData . title ,
110
112
buttons : messageData . buttons ?? undefined ,
111
113
fileList : messageData . fileList ?? undefined ,
114
+ header : messageData . header ?? undefined ,
115
+ padding : messageData . padding ?? undefined ,
116
+ fullWidth : messageData . fullWidth ?? undefined ,
117
+ codeBlockActions : messageData . codeBlockActions ?? undefined ,
112
118
}
113
119
114
120
if ( messageData . relatedSuggestions !== undefined ) {
@@ -117,6 +123,10 @@ export class Connector extends BaseConnector {
117
123
content : messageData . relatedSuggestions ,
118
124
}
119
125
}
126
+
127
+ if ( answer . messageId ) {
128
+ this . storeChatItem ( messageData . tabID , answer . messageId , answer )
129
+ }
120
130
this . onChatAnswerReceived ( messageData . tabID , answer , messageData )
121
131
122
132
// Exit the function if we received an answer from AI
@@ -147,13 +157,57 @@ export class Connector extends BaseConnector {
147
157
: undefined ,
148
158
buttons : messageData . buttons ?? undefined ,
149
159
canBeVoted : messageData . canBeVoted ?? false ,
160
+ header : messageData . header ?? undefined ,
161
+ padding : messageData . padding ?? undefined ,
162
+ fullWidth : messageData . fullWidth ?? undefined ,
163
+ codeBlockActions : messageData . codeBlockActions ?? undefined ,
150
164
}
151
165
this . onChatAnswerReceived ( messageData . tabID , answer , messageData )
152
166
153
167
return
154
168
}
155
169
}
156
170
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
+
157
211
processContextCommandData ( messageData : any ) {
158
212
if ( messageData . data ) {
159
213
this . onContextCommandDataReceived ( messageData . data )
@@ -199,6 +253,11 @@ export class Connector extends BaseConnector {
199
253
return
200
254
}
201
255
256
+ if ( messageData . type === 'toolMessage' ) {
257
+ await this . processToolMessage ( messageData )
258
+ return
259
+ }
260
+
202
261
if ( messageData . type === 'editorContextCommandMessage' ) {
203
262
await this . processEditorContextCommandMessage ( messageData )
204
263
return
@@ -270,35 +329,39 @@ export class Connector extends BaseConnector {
270
329
) {
271
330
return
272
331
}
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 )
273
336
const answer : ChatItem = {
274
337
type : ChatItemType . ANSWER ,
275
338
messageId : messageId ,
276
339
buttons : [ ] ,
340
+ body : undefined ,
341
+ header : currentChatItem ?. header ? { ...currentChatItem . header } : { } ,
277
342
}
278
343
switch ( action . id ) {
279
344
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' ,
285
349
status : 'success' ,
286
- position : 'outside' ,
287
- disabled : true ,
288
- } ,
289
- ]
350
+ }
351
+ answer . header . buttons = [ ]
352
+ answer . body = ' '
353
+ }
290
354
break
291
355
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' ,
297
360
status : 'error' ,
298
- position : 'outside' ,
299
- disabled : true ,
300
- } ,
301
- ]
361
+ }
362
+ answer . header . buttons = [ ]
363
+ answer . body = ' '
364
+ }
302
365
break
303
366
case 'confirm-tool-use' :
304
367
answer . buttons = [
@@ -315,6 +378,12 @@ export class Connector extends BaseConnector {
315
378
default :
316
379
break
317
380
}
381
+
382
+ if ( currentChatItem && answer . messageId ) {
383
+ const updatedItem = { ...currentChatItem , ...answer }
384
+ this . storeChatItem ( tabId , answer . messageId , updatedItem )
385
+ }
386
+
318
387
this . onChatAnswerUpdated ( tabId , answer )
319
388
}
320
389
0 commit comments