Skip to content

Commit 014e0ac

Browse files
committed
Adds event listener for notifying UI that AB feature configurations have been resolved
1 parent 8a1d250 commit 014e0ac

File tree

9 files changed

+91
-5
lines changed

9 files changed

+91
-5
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "feature",
3+
"description" : "Adds event listener for notifying UI that AB feature configurations have been resolved"
4+
}

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/App.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,21 @@
33

44
package software.aws.toolkits.jetbrains.services.cwc
55

6+
import com.intellij.openapi.application.ApplicationManager
67
import kotlinx.coroutines.flow.merge
78
import kotlinx.coroutines.launch
89
import software.aws.toolkits.jetbrains.core.coroutines.disposableCoroutineScope
10+
import software.aws.toolkits.jetbrains.services.amazonq.CodeWhispererFeatureConfigListener
911
import software.aws.toolkits.jetbrains.services.amazonq.apps.AmazonQApp
1012
import software.aws.toolkits.jetbrains.services.amazonq.apps.AmazonQAppInitContext
1113
import software.aws.toolkits.jetbrains.services.amazonq.messages.AmazonQMessage
1214
import software.aws.toolkits.jetbrains.services.amazonq.onboarding.OnboardingPageInteraction
15+
import software.aws.toolkits.jetbrains.services.amazonq.util.highlightCommand
1316
import software.aws.toolkits.jetbrains.services.cwc.commands.ActionRegistrar
1417
import software.aws.toolkits.jetbrains.services.cwc.commands.CodeScanIssueActionMessage
1518
import software.aws.toolkits.jetbrains.services.cwc.commands.ContextMenuActionMessage
1619
import software.aws.toolkits.jetbrains.services.cwc.controller.ChatController
20+
import software.aws.toolkits.jetbrains.services.cwc.messages.FeatureConfigsAvailableMessage
1721
import software.aws.toolkits.jetbrains.services.cwc.messages.IncomingCwcMessage
1822

1923
class App : AmazonQApp {
@@ -56,6 +60,21 @@ class App : AmazonQApp {
5660
scope.launch { handleMessage(message, inboundAppMessagesHandler) }
5761
}
5862
}
63+
64+
ApplicationManager.getApplication().messageBus.connect(this).subscribe(
65+
CodeWhispererFeatureConfigListener.TOPIC,
66+
object : CodeWhispererFeatureConfigListener {
67+
override fun refreshUi() {
68+
scope.launch {
69+
context.messagesFromAppToUi.publish(
70+
FeatureConfigsAvailableMessage(
71+
highlightCommand = highlightCommand()
72+
)
73+
)
74+
}
75+
}
76+
}
77+
)
5978
}
6079

6180
private suspend fun handleMessage(message: AmazonQMessage, inboundAppMessagesHandler: InboundAppMessagesHandler) {

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/messages/CwcMessage.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import software.amazon.awssdk.services.codewhispererstreaming.model.UserIntent
1717
import software.aws.toolkits.jetbrains.services.amazonq.auth.AuthFollowUpType
1818
import software.aws.toolkits.jetbrains.services.amazonq.messages.AmazonQMessage
1919
import software.aws.toolkits.jetbrains.services.amazonq.onboarding.OnboardingPageInteractionType
20+
import software.aws.toolkits.jetbrains.services.amazonq.util.HighlightCommand
2021
import software.aws.toolkits.jetbrains.services.cwc.clients.chat.model.FollowUpType
2122
import java.time.Instant
2223

@@ -264,6 +265,14 @@ data class ErrorMessage(
264265
type = "errorMessage",
265266
)
266267

268+
data class FeatureConfigsAvailableMessage(
269+
val highlightCommand: HighlightCommand?,
270+
271+
) : UiMessage(
272+
null,
273+
type = "featureConfigsAvailableMessage",
274+
)
275+
267276
data class QuickActionMessage(
268277
val message: String,
269278
@JsonProperty("triggerID") val triggerId: String,

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
import { ChatItemAction, ChatItemType, FeedbackPayload } from '@aws/mynah-ui-chat'
6+
import {ChatItemAction, ChatItemType, FeedbackPayload, QuickActionCommand} from '@aws/mynah-ui-chat'
77
import { ExtensionMessage } from '../commands'
88
import { CodeReference } from './amazonqCommonsConnector'
99
import { TabOpenType, TabsStorage } from '../storages/tabsStorage'
@@ -23,6 +23,9 @@ export interface ConnectorProps {
2323
onError: (tabID: string, message: string, title: string) => void
2424
onWarning: (tabID: string, message: string, title: string) => void
2525
onOpenSettingsMessage: (tabID: string) => void
26+
onFeatureConfigsAvailable: (
27+
highlightCommand?: QuickActionCommand
28+
) => void
2629
tabsStorage: TabsStorage
2730
}
2831

@@ -33,6 +36,7 @@ export class Connector {
3336
private readonly onChatAnswerReceived
3437
private readonly onCWCContextCommandMessage
3538
private readonly onOpenSettingsMessage
39+
private readonly onFeatureConfigsAvailable
3640
private readonly followUpGenerator: FollowUpGenerator
3741

3842
constructor(props: ConnectorProps) {
@@ -42,6 +46,7 @@ export class Connector {
4246
this.onError = props.onError
4347
this.onCWCContextCommandMessage = props.onCWCContextCommandMessage
4448
this.onOpenSettingsMessage = props.onOpenSettingsMessage
49+
this.onFeatureConfigsAvailable = props.onFeatureConfigsAvailable
4550
this.followUpGenerator = new FollowUpGenerator()
4651
}
4752

@@ -373,5 +378,12 @@ export class Connector {
373378
await this.processOpenSettingsMessage(messageData)
374379
return
375380
}
381+
382+
if (messageData.type === 'featureConfigsAvailableMessage') {
383+
this.onFeatureConfigsAvailable(
384+
messageData.highlightCommand,
385+
)
386+
return
387+
}
376388
}
377389
}

plugins/amazonq/mynah-ui/src/mynah-ui/ui/connector.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
Engagement,
1111
NotificationType,
1212
ProgressField,
13-
ChatPrompt,
13+
ChatPrompt, QuickActionCommand,
1414
} from '@aws/mynah-ui-chat'
1515
import { Connector as CWChatConnector } from './apps/cwChatConnector'
1616
import { Connector as FeatureDevChatConnector } from './apps/featureDevChatConnector'
@@ -84,6 +84,9 @@ export interface ConnectorProps {
8484
codeTestEnabled: boolean,
8585
authenticatingTabIDs: string[]
8686
) => void
87+
onFeatureConfigsAvailable: (
88+
highlightCommand?: QuickActionCommand
89+
) => void
8790
onNewTab: (tabType: TabType) => void
8891
onStartNewTransform: (tabID: string) => void
8992
onCodeTransformCommandMessageReceived: (message: ChatItem, command?: string) => void

plugins/amazonq/mynah-ui/src/mynah-ui/ui/main.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,15 @@ export const createMynahUI = (
8282

8383
let isCodeTestEnabled = codeTestEnabled
8484

85+
let highlightedCommand = highlightCommand
86+
8587
const tabDataGenerator = new TabDataGenerator({
8688
isFeatureDevEnabled,
8789
isCodeTransformEnabled,
8890
isDocEnabled,
8991
isCodeScanEnabled,
9092
isCodeTestEnabled,
91-
highlightCommand
93+
highlightCommand: highlightedCommand
9294
})
9395

9496
// eslint-disable-next-line prefer-const
@@ -115,13 +117,15 @@ export const createMynahUI = (
115117
docEnabled: boolean,
116118
codeScanEnabled: boolean,
117119
codeTestEnabled: boolean,
118-
authenticatingTabIDs: string[]
120+
authenticatingTabIDs: string[],
121+
highlightCommand?: QuickActionCommand
119122
): void => {
120123
isFeatureDevEnabled = featureDevEnabled
121124
isCodeTransformEnabled = codeTransformEnabled
122125
isDocEnabled = docEnabled
123126
isCodeScanEnabled = codeScanEnabled
124127
isCodeTestEnabled = codeTestEnabled
128+
highlightedCommand = highlightCommand
125129

126130
quickActionHandler.isFeatureDevEnabled = isFeatureDevEnabled
127131
quickActionHandler.isCodeTransformEnabled = isCodeTransformEnabled
@@ -133,11 +137,13 @@ export const createMynahUI = (
133137
tabDataGenerator.quickActionsGenerator.isDocEnabled = isDocEnabled
134138
tabDataGenerator.quickActionsGenerator.isCodeScanEnabled = isCodeScanEnabled
135139
tabDataGenerator.quickActionsGenerator.isCodeTestEnabled = isCodeTestEnabled
140+
tabDataGenerator.highlightCommand = highlightedCommand
136141

137142
// Set the new defaults for the quick action commands in all tabs now that isFeatureDevEnabled and isCodeTransformEnabled were enabled/disabled
138143
for (const tab of tabsStorage.getTabs()) {
139144
mynahUI.updateStore(tab.id, {
140145
quickActionCommands: tabDataGenerator.quickActionsGenerator.generateForTab(tab.type),
146+
contextCommands: tabDataGenerator.getTabData(tab.type, true).contextCommands
141147
})
142148
}
143149

@@ -552,6 +558,18 @@ export const createMynahUI = (
552558
tabsStorage.updateTabStatus(tabID, 'free')
553559
}
554560
}
561+
},
562+
onFeatureConfigsAvailable: (
563+
highlightCommand?: QuickActionCommand
564+
): void => {
565+
tabDataGenerator.highlightCommand = highlightCommand
566+
567+
// Set the new defaults for the quick action commands in all tabs now that isFeatureDevEnabled and isCodeTransformEnabled were enabled/disabled
568+
for (const tab of tabsStorage.getTabs()) {
569+
mynahUI.updateStore(tab.id, {
570+
contextCommands: tabDataGenerator.getTabData(tab.type, true).contextCommands
571+
})
572+
}
555573
}
556574
})
557575

plugins/amazonq/mynah-ui/src/mynah-ui/ui/tabs/generator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export interface TabDataGeneratorProps {
2121
export class TabDataGenerator {
2222
private followUpsGenerator: FollowUpGenerator
2323
public quickActionsGenerator: QuickActionGenerator
24-
private highlightCommand?: QuickActionCommand
24+
public highlightCommand?: QuickActionCommand
2525

2626
private tabTitle: Map<TabType, string> = new Map([
2727
['unknown', 'Chat'],
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.jetbrains.services.amazonq
5+
6+
import com.intellij.openapi.application.ApplicationManager
7+
import com.intellij.util.messages.Topic
8+
9+
interface CodeWhispererFeatureConfigListener {
10+
fun refreshUi() {}
11+
12+
companion object {
13+
@Topic.AppLevel
14+
val TOPIC = Topic.create("customization listener", CodeWhispererFeatureConfigListener::class.java)
15+
16+
fun notifyCustomUiUpdate() {
17+
ApplicationManager.getApplication().messageBus.syncPublisher(TOPIC).refreshUi()
18+
}
19+
}
20+
}

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/CodeWhispererFeatureConfigService.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ class CodeWhispererFeatureConfigService {
8282
}
8383
featureConfigs.remove(CUSTOMIZATION_ARN_OVERRIDE_NAME)
8484
}
85+
CodeWhispererFeatureConfigListener.notifyCustomUiUpdate()
8586
}
8687
} catch (e: Exception) {
8788
LOG.debug(e) { "Error when fetching feature configs" }

0 commit comments

Comments
 (0)