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..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 @@ -17,14 +17,17 @@ 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 +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 software.aws.toolkits.resources.AmazonQBundle.message import java.lang.management.ManagementFactory import java.time.Duration import java.util.concurrent.atomic.AtomicBoolean @@ -35,9 +38,22 @@ 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: finalize strings + runInEdt { + notifyInfo( + 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 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() ) ) }