Skip to content

Commit 3467e45

Browse files
authored
feat(amazonq): show the opt-in checkbox for server-side context (#5894)
We need to support client-side opt-out for internal users who have workspace context server running by default.
1 parent 60b26c8 commit 3467e45

File tree

3 files changed

+28
-17
lines changed

3 files changed

+28
-17
lines changed

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/settings/CodeWhispererConfigurable.kt

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,12 @@ import com.intellij.util.concurrency.EdtExecutorService
2525
import com.intellij.util.execution.ParametersListUtil
2626
import kotlinx.coroutines.launch
2727
import org.eclipse.lsp4j.DidChangeConfigurationParams
28+
import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection
2829
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnection
30+
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
2931
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManagerListener
32+
import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
33+
import software.aws.toolkits.jetbrains.core.credentials.sono.isInternalUser
3034
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
3135
import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWhispererLoginType
3236
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager
@@ -47,6 +51,12 @@ class CodeWhispererConfigurable(private val project: Project) :
4751
private val isSso: Boolean
4852
get() = CodeWhispererExplorerActionManager.getInstance().checkActiveCodeWhispererConnectionType(project) == CodeWhispererLoginType.SSO
4953

54+
private val isInternalUser: Boolean
55+
get() {
56+
val conn = ToolkitConnectionManager.getInstance(project).activeConnectionForFeature(QConnection.getInstance()) as? AwsBearerTokenConnection
57+
return conn?.let { isInternalUser(it.startUrl) } ?: false
58+
}
59+
5060
override fun getId() = "aws.codewhisperer"
5161

5262
override fun createPanel() = panel {
@@ -123,6 +133,21 @@ class CodeWhispererConfigurable(private val project: Project) :
123133
}.enabled(false)
124134
}
125135
}
136+
137+
row {
138+
checkBox(message("aws.settings.codewhisperer.workspace_context")).apply {
139+
connect.subscribe(
140+
ToolkitConnectionManagerListener.TOPIC,
141+
object : ToolkitConnectionManagerListener {
142+
override fun activeConnectionChanged(newConnection: ToolkitConnection?) {
143+
enabled(isCodeWhispererEnabled(project))
144+
}
145+
}
146+
)
147+
enabled(invoke)
148+
bindSelected(codeWhispererSettings::isWorkspaceContextEnabled, codeWhispererSettings::toggleWorkspaceContextEnabled)
149+
}.comment(message("aws.settings.codewhisperer.workspace_context.tooltip"))
150+
}.visible(isInternalUser)
126151
}
127152

128153
group(message("aws.settings.codewhisperer.group.inline_suggestions")) {
@@ -158,20 +183,6 @@ class CodeWhispererConfigurable(private val project: Project) :
158183
}
159184

160185
group(message("aws.settings.codewhisperer.group.q_chat")) {
161-
row {
162-
checkBox(message("aws.settings.codewhisperer.workspace_context")).apply {
163-
connect.subscribe(
164-
ToolkitConnectionManagerListener.TOPIC,
165-
object : ToolkitConnectionManagerListener {
166-
override fun activeConnectionChanged(newConnection: ToolkitConnection?) {
167-
enabled(isCodeWhispererEnabled(project))
168-
}
169-
}
170-
)
171-
enabled(invoke)
172-
bindSelected(codeWhispererSettings::isWorkspaceContextEnabled, codeWhispererSettings::toggleWorkspaceContextEnabled)
173-
}.comment(message("aws.settings.codewhisperer.workspace_context.tooltip"))
174-
}.visible(false)
175186
row {
176187
checkBox(message("aws.settings.codewhisperer.project_context")).apply {
177188
connect.subscribe(

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererConfigurableTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class CodeWhispererConfigurableTest : CodeWhispererTestBase() {
4040
message("aws.settings.codewhisperer.include_code_with_reference"),
4141
message("aws.settings.codewhisperer.configurable.opt_out.title"),
4242
message("aws.settings.codewhisperer.automatic_import_adder"),
43-
"Workspace context",
43+
"Server-side context",
4444
message("aws.settings.codewhisperer.project_context"),
4545
message("aws.settings.codewhisperer.project_context_gpu")
4646
)

plugins/core/resources/resources/software/aws/toolkits/resources/MessagesBundle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,8 @@ aws.settings.codewhisperer.project_context_index_max_size.tooltip=The maximum si
301301
aws.settings.codewhisperer.project_context_index_thread=Workspace index worker threads
302302
aws.settings.codewhisperer.project_context_index_thread.tooltip=Number of worker threads of Amazon Q local index process. Set to 0 to use system default worker threads for balanced performance. Please restart or reload IntelliJ after changing worker threads.
303303
aws.settings.codewhisperer.warning=To use Amazon Q, login with AWS Builder ID or AWS IAM Identity Center.
304-
aws.settings.codewhisperer.workspace_context=Workspace context
305-
aws.settings.codewhisperer.workspace_context.tooltip=When checked, Amazon Q will enable server side project context.
304+
aws.settings.codewhisperer.workspace_context=Server-side context
305+
aws.settings.codewhisperer.workspace_context.tooltip=Index project files on the server and use as context for higher-quality responses. This feature will activate only if your administrator has opted you in.
306306
aws.settings.dynamic_resources_configurable.clear_all=Clear All
307307
aws.settings.dynamic_resources_configurable.select_all=Select All
308308
aws.settings.dynamic_resources_configurable.suggest_types.dialog.message=Please suggest additional AWS resource types (e.g. AWS::S3::Bucket)\nyou would like to see supported in future releases.\n\n(max length: 2000 chars)

0 commit comments

Comments
 (0)