Skip to content

feat(amazonq): adding account details options for users #5918

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -117,5 +117,7 @@

<action id="q.manage.subscription"
class="software.aws.toolkits.jetbrains.services.codewhisperer.actions.ManageSubscription"/>
<action id="q.account.details"
class="software.aws.toolkits.jetbrains.services.codewhisperer.actions.AccountDetails"/>
</actions>
</idea-plugin>
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ class QStatusBarLoggedInActionGroup : DefaultActionGroup() {
} else {
add(actionManager.getAction("q.manage.subscription"))
}

add(actionManager.getAction("q.account.details"))
add(SsoLogoutAction(connection))
}
}.toTypedArray()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ amazonq.refresh.panel=Refresh Chat Session
amazonq.title=Amazon Q
amazonq.workspace.settings.open.prompt=Workspace index is now enabled. You can disable it from Amazon Q settings.
action.q.manage.subscription.text=Manage Q Developer Pro Subscription
action.q.account.details.text=Account Details
action.q.profile.usage.text=You changed your profile
action.q.profile.usage=You''re using the ''<b>{0}</b>'' profile for Amazon Q.
action.q.switchProfiles.text=Change Profile
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_CONTEXT_COMMANDS
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_PINNED_CONTEXT
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_UPDATE
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SUBSCRIPTION_DETAILS
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CopyFileParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.DID_APPEND_FILE
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.DID_COPY_FILE
Expand Down Expand Up @@ -88,4 +89,7 @@ interface AmazonQLanguageClient : LanguageClient {

@JsonNotification(CHAT_OPTIONS_UPDATE_NOTIFICATION)
fun sendChatOptionsUpdate(params: LSPAny)

@JsonNotification(CHAT_SUBSCRIPTION_DETAILS)
fun sendSubscriptionDetails(params: LSPAny)
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_CONTEXT_COMMANDS
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_PINNED_CONTEXT
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SEND_UPDATE
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_SUBSCRIPTION_DETAILS
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CopyFileParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.FileParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_SERIALIZED_CHAT_REQUEST_METHOD
Expand Down Expand Up @@ -499,6 +500,15 @@ class AmazonQLanguageClientImpl(private val project: Project) : AmazonQLanguageC
)
}

override fun sendSubscriptionDetails(params: LSPAny) {
chatManager.notifyUi(
FlareUiMessage(
command = CHAT_SUBSCRIPTION_DETAILS,
params = params,
)
)
}

override fun sendPinnedContext(params: LSPAny) {
// Send the active text file path with pinned context
val editor = FileEditorManager.getInstance(project).selectedTextEditor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ data class DeveloperProfiles(
val pinnedContextEnabled: Boolean,
val imageContextEnabled: Boolean,
val reroute: Boolean,
val subscriptionDetails: Boolean,
val workspaceFilePath: String?,
)

Expand Down Expand Up @@ -70,6 +71,7 @@ fun createExtendedClientMetadata(project: Project): ExtendedClientMetadata {
pinnedContextEnabled = true,
imageContextEnabled = true,
reroute = true,
subscriptionDetails = true,
workspaceFilePath = project.workspaceFile?.path,
),
window = WindowSettings(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ const val CHAT_TAB_ADD = "aws/chat/tabAdd"
const val CHAT_TAB_BAR_ACTIONS = "aws/chat/tabBarAction"
const val CHAT_TAB_CHANGE = "aws/chat/tabChange"
const val CHAT_TAB_REMOVE = "aws/chat/tabRemove"
const val CHAT_SUBSCRIPTION_DETAILS = "aws/chat/subscription/details"

const val DID_COPY_FILE = "aws/didCopyFile"
const val DID_WRITE_FILE = "aws/didWriteFile"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.jetbrains.services.codewhisperer.actions

import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.progress.currentThreadCoroutineScope
import com.intellij.openapi.project.DumbAware
import kotlinx.coroutines.future.await
import kotlinx.coroutines.launch
import org.eclipse.lsp4j.ExecuteCommandParams
import software.aws.toolkits.core.utils.error
import software.aws.toolkits.core.utils.getLogger
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.isSono
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService

class AccountDetails : AnAction(), DumbAware {
override fun getActionUpdateThread() = ActionUpdateThread.BGT

override fun update(e: AnActionEvent) {
val project = e.project
if (project == null) {
e.presentation.isEnabledAndVisible = false
} else {
val connection = ToolkitConnectionManager.getInstance(project)
.activeConnectionForFeature(QConnection.getInstance()) as? AwsBearerTokenConnection

// Show for IDC users
e.presentation.isEnabledAndVisible = !connection.isSono()
}
}

override fun actionPerformed(e: AnActionEvent) {
val project = e.project ?: return
currentThreadCoroutineScope().launch {

Check warning on line 40 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/actions/AccountDetails.kt

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Unstable API Usage

'currentThreadCoroutineScope()' is declared in unstable 'com.intellij.openapi.progress.CoroutinesKt' marked with @ApiStatus.Experimental

Check warning

Code scanning / QDJVMC

Unstable API Usage Warning

'currentThreadCoroutineScope()' is declared in unstable 'com.intellij.openapi.progress.CoroutinesKt' marked with @ApiStatus.Experimental
AmazonQLspService.getInstance(project).execute { lsp ->
lsp.workspaceService.executeCommand(
ExecuteCommandParams().apply {
this.command = SHOW_SUBSCRIPTION_COMMAND
}
)
}.handleAsync { _, ex ->
if (ex != null) {
LOG.error(ex) { "Failed $SHOW_SUBSCRIPTION_COMMAND" }
}
}.await()
}
}

companion object {
private val LOG = getLogger<AccountDetails>()
private const val SHOW_SUBSCRIPTION_COMMAND = "aws/chat/subscription/show"
}
}
Loading