Skip to content

Commit b923351

Browse files
viksheViktor Shesternyak
and
Viktor Shesternyak
authored
fix(amazonq): /doc fix prompt to change folder in chat (#5249)
Co-authored-by: Viktor Shesternyak <vshester@amazon.com>
1 parent b2301fd commit b923351

File tree

6 files changed

+82
-0
lines changed

6 files changed

+82
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "Amazon Q /doc: fix for user prompt to change folder in chat"
4+
}

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/controller/DocController.kt

+37
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendError
5656
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendErrorToUser
5757
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendFolderConfirmationMessage
5858
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendMonthlyLimitError
59+
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendRetryChangeFolderMessage
5960
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendSystemPrompt
6061
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendUpdatePlaceholder
6162
import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendUpdatePromptProgress
@@ -340,6 +341,31 @@ class DocController(
340341
}
341342
}
342343

344+
private suspend fun promptForRetryFolderSelection(tabId: String, message: String) {
345+
messenger.sendRetryChangeFolderMessage(
346+
tabId = tabId,
347+
message = message,
348+
followUps = listOf(
349+
FollowUp(
350+
icon = FollowUpIcons.Refresh,
351+
pillText = message("amazonqDoc.prompt.folder.change"),
352+
prompt = message("amazonqDoc.prompt.folder.change"),
353+
status = FollowUpStatusType.Info,
354+
type = FollowUpTypes.MODIFY_DEFAULT_SOURCE_FOLDER
355+
),
356+
FollowUp(
357+
icon = FollowUpIcons.Cancel,
358+
pillText = message("general.cancel"),
359+
prompt = message("general.cancel"),
360+
status = FollowUpStatusType.Error,
361+
type = FollowUpTypes.CANCEL_FOLDER_SELECTION
362+
),
363+
)
364+
)
365+
366+
messenger.sendChatInputEnabledMessage(tabId, false)
367+
}
368+
343369
override suspend fun processLinkClick(message: IncomingDocMessage.ClickedLink) {
344370
BrowserUtil.browse(message.link)
345371
}
@@ -915,11 +941,22 @@ class DocController(
915941
val projectRoot = session.context.projectRoot
916942

917943
withContext(EDT) {
944+
messenger.sendAnswer(
945+
tabId = tabId,
946+
messageType = DocMessageType.Answer,
947+
message = message("amazonqDoc.prompt.choose_folder_to_continue")
948+
)
949+
918950
val selectedFolder = selectFolder(context.project, currentSourceFolder)
919951

920952
// No folder was selected
921953
if (selectedFolder == null) {
922954
logger.info { "Cancelled dialog and not selected any folder" }
955+
promptForRetryFolderSelection(
956+
tabId,
957+
message("amazonqDoc.prompt.canceled_source_folder_selection")
958+
)
959+
923960
return@withContext
924961
}
925962

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/messages/DocMessage.kt

+9
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,15 @@ data class FolderConfirmationMessage(
179179
type = "folderConfirmationMessage"
180180
)
181181

182+
data class RetryChangeFolderMessage(
183+
@JsonProperty("tabID") override val tabId: String,
184+
val message: String,
185+
val followUps: List<FollowUp>?,
186+
) : UiMessage(
187+
tabId = tabId,
188+
type = "retryChangeFolderMessage"
189+
)
190+
182191
// this should come from mynah?
183192
data class ChatItemButton(
184193
val id: String,

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/messages/DocMessagePublisherExtensions.kt

+10
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,16 @@ suspend fun MessagePublisher.sendFolderConfirmationMessage(
243243
)
244244
}
245245

246+
suspend fun MessagePublisher.sendRetryChangeFolderMessage(
247+
tabId: String,
248+
message: String,
249+
followUps: List<FollowUp>,
250+
) {
251+
this.publish(
252+
RetryChangeFolderMessage(tabId = tabId, message = message, followUps = followUps)
253+
)
254+
}
255+
246256
suspend fun MessagePublisher.sendUpdatePromptProgress(tabId: String, progressField: ProgressField?) {
247257
this.publish(
248258
PromptProgressMessage(tabId, progressField)

plugins/amazonq/mynah-ui/src/mynah-ui/ui/apps/docChatConnector.ts

+20
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,21 @@ export class Connector {
170170
}
171171
}
172172

173+
private processRetryChangeFolderMessage = async (messageData: any): Promise<void> => {
174+
if (this.onChatAnswerReceived !== undefined) {
175+
const answer: ChatItem = {
176+
type: ChatItemType.ANSWER,
177+
body: messageData.message ?? undefined,
178+
messageId: messageData.messageID ?? messageData.triggerID ?? '',
179+
followUp: {
180+
text: '',
181+
options: messageData.followUps,
182+
},
183+
}
184+
this.onChatAnswerReceived(messageData.tabID, answer)
185+
}
186+
}
187+
173188
private processChatMessage = async (messageData: any): Promise<void> => {
174189
if (this.onChatAnswerReceived !== undefined) {
175190
const answer: ChatItem = {
@@ -263,6 +278,11 @@ export class Connector {
263278
return
264279
}
265280

281+
if (messageData.type === 'retryChangeFolderMessage') {
282+
await this.processRetryChangeFolderMessage(messageData)
283+
return
284+
}
285+
266286
if (messageData.type === 'chatMessage') {
267287
await this.processChatMessage(messageData)
268288
return

plugins/core/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties

+2
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ amazonqDoc.progress_message.generating=Generating documentation
5959
amazonqDoc.progress_message.scanning=Scanning source files
6060
amazonqDoc.progress_message.summarizing=Summarizing source files
6161
amazonqDoc.progress_message.updating=Okay, I'm updating the README.
62+
amazonqDoc.prompt.canceled_source_folder_selection=It looks like you didn't choose a folder. Choose a folder to continue.
63+
amazonqDoc.prompt.choose_folder_to_continue=Choose a folder to continue
6264
amazonqDoc.prompt.create=Create a README
6365
amazonqDoc.prompt.create.confirmation=Create a README for this project?
6466
amazonqDoc.prompt.folder.change=Change folder

0 commit comments

Comments
 (0)