From 08450be7e3af4133c80496632da9dd21d9d04d14 Mon Sep 17 00:00:00 2001 From: Will Lo Date: Thu, 12 Dec 2024 13:38:43 -0800 Subject: [PATCH 1/6] optin @workspace context if a user is in treatment group --- .../services/amazonq/startup/AmazonQStartupActivity.kt | 10 ++++++++-- .../amazonq/CodeWhispererFeatureConfigService.kt | 8 ++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt index 58f5cd2fc75..560c17691cf 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt @@ -17,8 +17,8 @@ import software.aws.toolkits.core.utils.warn import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection -import software.aws.toolkits.jetbrains.core.credentials.sono.isInternalUser import software.aws.toolkits.jetbrains.core.gettingstarted.emitUserState +import software.aws.toolkits.jetbrains.services.amazonq.CodeWhispererFeatureConfigService import software.aws.toolkits.jetbrains.services.amazonq.project.ProjectContextController import software.aws.toolkits.jetbrains.services.amazonq.toolwindow.AmazonQToolWindow import software.aws.toolkits.jetbrains.services.amazonq.toolwindow.AmazonQToolWindowFactory @@ -35,9 +35,15 @@ class AmazonQStartupActivity : ProjectActivity { override suspend fun execute(project: Project) { if (ApplicationManager.getApplication().isUnitTestMode) return + // Turn on project context if a user is in treatment group and prompt UI to notify them ToolkitConnectionManager.getInstance(project).activeConnectionForFeature(QConnection.getInstance())?.let { - if (it is AwsBearerTokenConnection && isInternalUser(it.startUrl)) { + if (it is AwsBearerTokenConnection && + CodeWhispererFeatureConfigService.getInstance().getWorkspaceContext() && + !CodeWhispererSettings.getInstance().isProjectContextEnabled() + ) { CodeWhispererSettings.getInstance().toggleProjectContextEnabled(value = true, passive = true) + + // TODO: toast notification UI } } diff --git a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/CodeWhispererFeatureConfigService.kt b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/CodeWhispererFeatureConfigService.kt index de57180cba6..ed14a9e48a4 100644 --- a/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/CodeWhispererFeatureConfigService.kt +++ b/plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/CodeWhispererFeatureConfigService.kt @@ -115,6 +115,8 @@ class CodeWhispererFeatureConfigService { fun getInlineCompletion(): Boolean = getFeatureValueForKey(INLINE_COMPLETION).stringValue() == "TREATMENT" + fun getWorkspaceContext(): Boolean = getFeatureValueForKey(WORKSPACE_CONTEXT_FEATURE).stringValue() == "TREATMENT" + // Get the feature value for the given key. // In case of a misconfiguration, it will return a default feature value of Boolean false. private fun getFeatureValueForKey(name: String): FeatureValue = @@ -133,6 +135,7 @@ class CodeWhispererFeatureConfigService { private const val INLINE_COMPLETION = "ProjectContextV2" const val CUSTOMIZATION_ARN_OVERRIDE_NAME = "customizationArnOverride" private const val NEW_AUTO_TRIGGER_UX = "newAutoTriggerUX" + private const val WORKSPACE_CONTEXT_FEATURE = "WorkspaceContext" private val LOG = getLogger() // TODO: add real feature later @@ -158,6 +161,11 @@ class CodeWhispererFeatureConfigService { INLINE_COMPLETION, "CONTROL", FeatureValue.builder().stringValue("CONTROL").build() + ), + WORKSPACE_CONTEXT_FEATURE to FeatureContext( + WORKSPACE_CONTEXT_FEATURE, + "CONTROL", + FeatureValue.builder().stringValue("CONTROL").build() ) ) } From 218429998511b07eb9a5db48683b79d992580dcf Mon Sep 17 00:00:00 2001 From: Will Lo Date: Thu, 12 Dec 2024 14:05:08 -0800 Subject: [PATCH 2/6] ui --- .../services/amazonq/startup/AmazonQStartupActivity.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt index 560c17691cf..b322edbca86 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt @@ -22,9 +22,11 @@ import software.aws.toolkits.jetbrains.services.amazonq.CodeWhispererFeatureConf import software.aws.toolkits.jetbrains.services.amazonq.project.ProjectContextController import software.aws.toolkits.jetbrains.services.amazonq.toolwindow.AmazonQToolWindow import software.aws.toolkits.jetbrains.services.amazonq.toolwindow.AmazonQToolWindowFactory +import software.aws.toolkits.jetbrains.services.codewhisperer.actions.CodeWhispererShowSettingsAction import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager import software.aws.toolkits.jetbrains.services.cwc.inline.InlineChatController import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings +import software.aws.toolkits.jetbrains.utils.notifyInfo import java.lang.management.ManagementFactory import java.time.Duration import java.util.concurrent.atomic.AtomicBoolean @@ -43,7 +45,12 @@ class AmazonQStartupActivity : ProjectActivity { ) { CodeWhispererSettings.getInstance().toggleProjectContextEnabled(value = true, passive = true) - // TODO: toast notification UI + // TODO: localize strings + notifyInfo( + title = "Amazon Q", + content = "Amazon Q is now enabling workspace indexing", + notificationActions = listOf(CodeWhispererShowSettingsAction()) + ) } } From 903e3105c15e99934cceabed827dda517df9bd9e Mon Sep 17 00:00:00 2001 From: Will Lo Date: Thu, 12 Dec 2024 15:52:47 -0800 Subject: [PATCH 3/6] patch --- .../services/amazonq/startup/AmazonQStartupActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt index b322edbca86..e9b0e3264b9 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt @@ -45,7 +45,7 @@ class AmazonQStartupActivity : ProjectActivity { ) { CodeWhispererSettings.getInstance().toggleProjectContextEnabled(value = true, passive = true) - // TODO: localize strings + // TODO: finalize and localize strings notifyInfo( title = "Amazon Q", content = "Amazon Q is now enabling workspace indexing", From 2a569d547f9c1abaa3dd34f142b2b126c03051ac Mon Sep 17 00:00:00 2001 From: Will Lo Date: Thu, 12 Dec 2024 15:53:18 -0800 Subject: [PATCH 4/6] patch --- .../amazonq/startup/AmazonQStartupActivity.kt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt index e9b0e3264b9..208e0a1ad8e 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt @@ -46,11 +46,13 @@ class AmazonQStartupActivity : ProjectActivity { CodeWhispererSettings.getInstance().toggleProjectContextEnabled(value = true, passive = true) // TODO: finalize and localize strings - notifyInfo( - title = "Amazon Q", - content = "Amazon Q is now enabling workspace indexing", - notificationActions = listOf(CodeWhispererShowSettingsAction()) - ) + runInEdt { + notifyInfo( + title = "Amazon Q", + content = "Amazon Q is now enabling workspace indexing", + notificationActions = listOf(CodeWhispererShowSettingsAction()) + ) + } } } From c29db88e9f35012574c618f488ba4df989eb90d1 Mon Sep 17 00:00:00 2001 From: Will Lo Date: Thu, 12 Dec 2024 16:58:35 -0800 Subject: [PATCH 5/6] p --- .../services/amazonq/startup/AmazonQStartupActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt index 208e0a1ad8e..eafdccda717 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt @@ -49,7 +49,7 @@ class AmazonQStartupActivity : ProjectActivity { runInEdt { notifyInfo( title = "Amazon Q", - content = "Amazon Q is now enabling workspace indexing", + content = "Workspace index is now enabled. You can disable it in the Amazon Q settings.", notificationActions = listOf(CodeWhispererShowSettingsAction()) ) } From f96396e714aec76d8b012c487c1fe3951057bbb4 Mon Sep 17 00:00:00 2001 From: Will Lo Date: Thu, 12 Dec 2024 22:19:55 -0800 Subject: [PATCH 6/6] localize --- .../services/amazonq/startup/AmazonQStartupActivity.kt | 7 ++++--- .../aws/toolkits/resources/AmazonQBundle.properties | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt index eafdccda717..13b445a6368 100644 --- a/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt +++ b/plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt @@ -27,6 +27,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhisp import software.aws.toolkits.jetbrains.services.cwc.inline.InlineChatController import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings import software.aws.toolkits.jetbrains.utils.notifyInfo +import software.aws.toolkits.resources.AmazonQBundle.message import java.lang.management.ManagementFactory import java.time.Duration import java.util.concurrent.atomic.AtomicBoolean @@ -45,11 +46,11 @@ class AmazonQStartupActivity : ProjectActivity { ) { CodeWhispererSettings.getInstance().toggleProjectContextEnabled(value = true, passive = true) - // TODO: finalize and localize strings + // TODO: finalize strings runInEdt { notifyInfo( - title = "Amazon Q", - content = "Workspace index is now enabled. You can disable it in the Amazon Q settings.", + title = message("amazonq.brand.title"), + content = message("amazonq.chat.workspacecontext.enable.message"), notificationActions = listOf(CodeWhispererShowSettingsAction()) ) } diff --git a/plugins/amazonq/shared/jetbrains-community/resources/software/aws/toolkits/resources/AmazonQBundle.properties b/plugins/amazonq/shared/jetbrains-community/resources/software/aws/toolkits/resources/AmazonQBundle.properties index 6e675823089..fb1432d66eb 100644 --- a/plugins/amazonq/shared/jetbrains-community/resources/software/aws/toolkits/resources/AmazonQBundle.properties +++ b/plugins/amazonq/shared/jetbrains-community/resources/software/aws/toolkits/resources/AmazonQBundle.properties @@ -1,4 +1,6 @@ action.q.hello.description=Hello description +amazonq.brand.title=Amazon Q +amazonq.chat.workspacecontext.enable.message=Workspace index is now enabled. You can disable it in the Amazon Q settings. amazonqInlineChat.hint.edit = Edit amazonqInlineChat.popup.accept=Accept \u23CE amazonqInlineChat.popup.cancel=Cancel \u238B