diff --git a/.changes/next-release/bugfix-9834036d-17d5-4064-86da-8769b80dfa9b.json b/.changes/next-release/bugfix-9834036d-17d5-4064-86da-8769b80dfa9b.json new file mode 100644 index 00000000000..7038fd8c87c --- /dev/null +++ b/.changes/next-release/bugfix-9834036d-17d5-4064-86da-8769b80dfa9b.json @@ -0,0 +1,4 @@ +{ + "type" : "bugfix", + "description" : "Amazon Q /doc: Prompt users to start a new documentation task if current task failed" +} \ No newline at end of file diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/controller/DocController.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/controller/DocController.kt index c52bedf1d96..8e16053619e 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/controller/DocController.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/controller/DocController.kt @@ -407,10 +407,9 @@ class DocController( else -> { logger.error { "$FEATURE_NAME: OpenDiff event is received for a conversation that has ${session.sessionState.phase} phase" } - messenger.sendError( + messenger.sendErrorToUser( tabId = message.tabId, errMessage = message("amazonqFeatureDev.exception.open_diff_failed"), - retries = 0, conversationId = session.conversationIdUnsafe ) } @@ -509,10 +508,9 @@ class DocController( ) } catch (err: Exception) { val message = createUserFacingErrorMessage("Failed to insert code changes: ${err.message}") - messenger.sendError( + messenger.sendErrorToUser( tabId = tabId, errMessage = message ?: message("amazonqFeatureDev.exception.insert_code_failed"), - retries = retriesRemaining(session), conversationId = session?.conversationIdUnsafe ) } @@ -590,10 +588,9 @@ class DocController( when (err) { is RepoSizeError -> { - messenger.sendError( + messenger.sendErrorToUser( tabId = tabId, errMessage = err.message, - retries = retriesRemaining(session), conversationId = session?.conversationIdUnsafe ) messenger.sendSystemPrompt( @@ -609,10 +606,9 @@ class DocController( } is ZipFileError -> { - messenger.sendError( + messenger.sendErrorToUser( tabId = tabId, errMessage = err.message, - retries = 0, conversationId = session?.conversationIdUnsafe ) } @@ -704,10 +700,9 @@ class DocController( else -> message("amazonqFeatureDev.error_text") } - messenger.sendError( + messenger.sendErrorToUser( tabId = tabId, errMessage = defaultMessage, - retries = retriesRemaining(session), conversationId = session?.conversationIdUnsafe ) } @@ -805,9 +800,12 @@ class DocController( ) { return } - if (filePaths.isEmpty() && deletedFiles.isEmpty()) { - handleEmptyFiles(followUpMessage, session) + messenger.sendErrorToUser( + followUpMessage.tabId, + message("amazonqDoc.error.generating"), + conversationId = session.conversationId + ) return } @@ -862,37 +860,6 @@ class DocController( } } - private suspend fun handleEmptyFiles( - message: IncomingDocMessage.FollowupClicked, - session: DocSession, - ) { - messenger.sendAnswer( - message = message("amazonqDoc.error.generating"), - messageType = DocMessageType.Answer, - tabId = message.tabId, - canBeVoted = true - ) - - messenger.sendAnswer( - messageType = DocMessageType.SystemPrompt, - tabId = message.tabId, - followUp = if (retriesRemaining(session) > 0) { - listOf( - FollowUp( - pillText = message("amazonqFeatureDev.follow_up.retry"), - type = FollowUpTypes.RETRY, - status = FollowUpStatusType.Warning - ) - ) - } else { - emptyList() - } - ) - - // Lock the chat input until they explicitly click retry - messenger.sendChatInputEnabledMessage(tabId = message.tabId, enabled = false) - } - private suspend fun retryRequests(tabId: String) { var session: DocSession? = null docGenerationTask = DocGenerationTask() diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/controller/DocControllerExtensions.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/controller/DocControllerExtensions.kt index f16503e2c02..583b1f3d984 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/controller/DocControllerExtensions.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqDoc/controller/DocControllerExtensions.kt @@ -6,13 +6,11 @@ package software.aws.toolkits.jetbrains.services.amazonqDoc.controller import com.intellij.notification.NotificationAction import software.aws.toolkits.jetbrains.services.amazonqDoc.inProgress import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.DocMessageType -import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.FollowUp -import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.FollowUpStatusType -import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.FollowUpTypes import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendAnswer import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendAsyncEventProgress import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendChatInputEnabledMessage import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendCodeResult +import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendErrorToUser import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendSystemPrompt import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendUpdatePlaceholder import software.aws.toolkits.jetbrains.services.amazonqDoc.messages.sendUpdatePromptProgress @@ -73,26 +71,12 @@ suspend fun DocController.onCodeGeneration(session: DocSession, message: String, // Atm this is the only possible path as codegen is mocked to return empty. if (filePaths.size or deletedFiles.size == 0) { - messenger.sendAnswer( - tabId = tabId, - messageType = DocMessageType.Answer, - message = message("amazonqFeatureDev.code_generation.no_file_changes") - ) - messenger.sendSystemPrompt( - tabId = tabId, - followUp = if (retriesRemaining(session) > 0) { - listOf( - FollowUp( - pillText = message("amazonqFeatureDev.follow_up.retry"), - type = FollowUpTypes.RETRY, - status = FollowUpStatusType.Warning - ) - ) - } else { - emptyList() - } + messenger.sendErrorToUser( + tabId, + message("amazonqDoc.error.generating"), + conversationId = session.conversationId ) - messenger.sendChatInputEnabledMessage(tabId = tabId, enabled = false) // Lock chat input until retry is clicked. + return }