Skip to content

Commit 8dfef62

Browse files
committed
fix(amazonqFeatureDev): add token for stop gen
1 parent aa1a1c4 commit 8dfef62

File tree

10 files changed

+47
-5
lines changed

10 files changed

+47
-5
lines changed

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevApp.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ class FeatureDevApp : AmazonQApp {
4141
"response-body-link-click" to IncomingFeatureDevMessage.ClickedLink::class,
4242
"insert_code_at_cursor_position" to IncomingFeatureDevMessage.InsertCodeAtCursorPosition::class,
4343
"open-diff" to IncomingFeatureDevMessage.OpenDiff::class,
44-
"file-click" to IncomingFeatureDevMessage.FileClicked::class
44+
"file-click" to IncomingFeatureDevMessage.FileClicked::class,
45+
"stop-response" to IncomingFeatureDevMessage.StopResponse::class
4546
)
4647

4748
scope.launch {
@@ -82,6 +83,7 @@ class FeatureDevApp : AmazonQApp {
8283
is IncomingFeatureDevMessage.InsertCodeAtCursorPosition -> inboundAppMessagesHandler.processInsertCodeAtCursorPosition(message)
8384
is IncomingFeatureDevMessage.OpenDiff -> inboundAppMessagesHandler.processOpenDiff(message)
8485
is IncomingFeatureDevMessage.FileClicked -> inboundAppMessagesHandler.processFileClicked(message)
86+
is IncomingFeatureDevMessage.StopResponse -> inboundAppMessagesHandler.processStopMessage(message)
8587
}
8688
}
8789

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/InboundAppMessagesHandler.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ interface InboundAppMessagesHandler {
1717
suspend fun processInsertCodeAtCursorPosition(message: IncomingFeatureDevMessage.InsertCodeAtCursorPosition)
1818
suspend fun processOpenDiff(message: IncomingFeatureDevMessage.OpenDiff)
1919
suspend fun processFileClicked(message: IncomingFeatureDevMessage.FileClicked)
20+
suspend fun processStopMessage(message: IncomingFeatureDevMessage.StopResponse)
2021
}

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevController.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ class FeatureDevController(
9090
)
9191
}
9292

93+
override suspend fun processStopMessage(message: IncomingFeatureDevMessage.StopResponse) {
94+
handleStopMessage(message)
95+
}
96+
9397
override suspend fun processNewTabCreatedMessage(message: IncomingFeatureDevMessage.NewTabCreated) {
9498
newTabOpened(message.tabId)
9599
}
@@ -282,6 +286,21 @@ class FeatureDevController(
282286
}
283287
}
284288

289+
private suspend fun handleStopMessage(message: IncomingFeatureDevMessage.StopResponse) {
290+
var session: Session? = null
291+
messenger.sendAnswer( tabId = message.tabId, "Stopping code generation ...", messageType = FeatureDevMessageType.Answer, canBeVoted = false)
292+
messenger.sendUpdatePlaceholder(
293+
tabId = message.tabId,
294+
newPlaceholder = "Stopping code generation ..."
295+
)
296+
messenger.sendChatInputEnabledMessage(tabId = message.tabId, enabled = false)
297+
session = getSessionInfo(message.tabId)
298+
299+
if (session.sessionState.token?.token() !== null) {
300+
session.sessionState?.token?.cancel()
301+
}
302+
303+
}
285304
private suspend fun insertCode(tabId: String) {
286305
var session: Session? = null
287306
try {

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/messages/FeatureDevMessage.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@ sealed interface IncomingFeatureDevMessage : FeatureDevBaseMessage {
6666
val link: String,
6767
) : IncomingFeatureDevMessage
6868

69+
data class StopResponse(
70+
@JsonProperty("tabID") val tabId: String,
71+
val command: String,
72+
val messageId: String?
73+
) : IncomingFeatureDevMessage
74+
6975
data class InsertCodeAtCursorPosition(
7076
@JsonProperty("tabID") val tabId: String,
7177
val code: String,

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/session/CodeGenerationState.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session
55

66
import kotlinx.coroutines.delay
7+
import org.gradle.tooling.CancellationTokenSource
78
import software.amazon.awssdk.services.codewhispererruntime.model.CodeGenerationWorkflowStatus
89
import software.aws.toolkits.core.utils.getLogger
910
import software.aws.toolkits.core.utils.warn
@@ -24,6 +25,7 @@ private val logger = getLogger<CodeGenerationState>()
2425
class CodeGenerationState(
2526
override val tabID: String,
2627
override var approach: String,
28+
override val token: CancellationTokenSource?,
2729
val config: SessionStateConfig,
2830
val uploadId: String,
2931
val currentIteration: Int,
@@ -78,7 +80,8 @@ class CodeGenerationState(
7880
uploadId = uploadId,
7981
messenger = messenger,
8082
codeGenerationRemainingIterationCount = codeGenerationRemainingIterationCount,
81-
codeGenerationTotalIterationCount = codeGenerationTotalIterationCount
83+
codeGenerationTotalIterationCount = codeGenerationTotalIterationCount,
84+
token = this.token
8285
)
8386

8487
// It is not needed to interact right away with the PrepareCodeGeneration.

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/session/ConversationNotStartedState.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33

44
package software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session
55

6+
import org.gradle.tooling.CancellationTokenSource
7+
68
class ConversationNotStartedState(
79
override var approach: String,
810
override val tabID: String,
9-
) : SessionState {
11+
override val token: CancellationTokenSource?,
12+
) : SessionState {
1013
override val phase = SessionStatePhase.INIT
1114

1215
override suspend fun interact(action: SessionStateAction): SessionStateInteraction {

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/session/PrepareCodeGenerationState.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
package software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session
55

6+
import org.gradle.tooling.CancellationTokenSource
67
import software.aws.toolkits.core.utils.getLogger
78
import software.aws.toolkits.core.utils.warn
89
import software.aws.toolkits.jetbrains.services.amazonq.messages.MessagePublisher
@@ -22,6 +23,7 @@ private val logger = getLogger<PrepareCodeGenerationState>()
2223

2324
class PrepareCodeGenerationState(
2425
override var tabID: String,
26+
override val token: CancellationTokenSource?,
2527
override var approach: String,
2628
private var config: SessionStateConfig,
2729
val filePaths: List<NewFileZipInfo>,
@@ -71,7 +73,8 @@ class PrepareCodeGenerationState(
7173
uploadId = this.uploadId,
7274
currentIteration = this.currentIteration,
7375
repositorySize = zipFileLength.toDouble(),
74-
messenger = messenger
76+
messenger = messenger,
77+
token = this.token
7578
)
7679
} catch (e: Exception) {
7780
result = Result.Failed

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/session/Session.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class Session(val tabID: String, val project: Project) {
4141
context = FeatureDevSessionContext(project, MAX_PROJECT_SIZE_BYTES)
4242
proxyClient = FeatureDevClient.getInstance(project)
4343
featureDevService = FeatureDevService(proxyClient, project)
44-
_state = ConversationNotStartedState("", tabID)
44+
_state = ConversationNotStartedState("", tabID, null)
4545
isAuthenticating = false
4646
codegenRetries = CODE_GENERATION_RETRY_LIMIT
4747
}
@@ -81,6 +81,7 @@ class Session(val tabID: String, val project: Project) {
8181
currentIteration = 0, // first code gen iteration
8282
uploadId = "", // There is no code gen uploadId so far
8383
messenger = messenger,
84+
token = null
8485
)
8586
}
8687

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/session/SessionState.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33

44
package software.aws.toolkits.jetbrains.services.amazonqFeatureDev.session
55

6+
import org.gradle.tooling.CancellationTokenSource
7+
68
interface SessionState {
79
val tabID: String
810
val phase: SessionStatePhase?
11+
val token: CancellationTokenSource?
912
var approach: String
1013
suspend fun interact(action: SessionStateAction): SessionStateInteraction
1114
}

plugins/amazonq/codetransform/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codemodernizer/model/BuildStepStatus.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@ fun mapTransformationPlanApiStatus(apiStatus: TransformationProgressUpdateStatus
1717
TransformationProgressUpdateStatus.FAILED, TransformationProgressUpdateStatus.PAUSED -> BuildStepStatus.WARNING
1818
TransformationProgressUpdateStatus.IN_PROGRESS -> BuildStepStatus.WORKING
1919
TransformationProgressUpdateStatus.UNKNOWN_TO_SDK_VERSION -> BuildStepStatus.ERROR
20+
TransformationProgressUpdateStatus.AWAITING_CLIENT_ACTION -> TODO()
2021
}

0 commit comments

Comments
 (0)