Skip to content

Commit 7a7a662

Browse files
committed
get workspaceId from LSP
1 parent a4304b5 commit 7a7a662

File tree

5 files changed

+47
-5
lines changed

5 files changed

+47
-5
lines changed

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/service/CodeWhispererService.kt

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import com.intellij.psi.PsiDocumentManager
2121
import com.intellij.psi.PsiFile
2222
import com.intellij.util.concurrency.annotations.RequiresEdt
2323
import com.intellij.util.messages.Topic
24-
import io.ktor.client.request.request
2524
import kotlinx.coroutines.CoroutineScope
2625
import kotlinx.coroutines.Deferred
2726
import kotlinx.coroutines.Job
@@ -30,6 +29,7 @@ import kotlinx.coroutines.delay
3029
import kotlinx.coroutines.isActive
3130
import kotlinx.coroutines.launch
3231
import kotlinx.coroutines.withContext
32+
import java.nio.file.Paths
3333
import software.amazon.awssdk.core.exception.SdkServiceException
3434
import software.amazon.awssdk.core.util.DefaultSdkAutoConstructList
3535
import software.amazon.awssdk.services.codewhispererruntime.model.CodeWhispererRuntimeException
@@ -54,6 +54,9 @@ import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnection
5454
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
5555
import software.aws.toolkits.jetbrains.core.credentials.pinning.CodeWhispererConnection
5656
import software.aws.toolkits.jetbrains.services.amazonq.SUPPLEMENTAL_CONTEXT_TIMEOUT
57+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
58+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.GetConfigurationFromServerParams
59+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.LspServerConfigurations
5760
import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWhispererClientAdaptor
5861
import software.aws.toolkits.jetbrains.services.codewhisperer.customization.CodeWhispererModelConfigurator
5962
import software.aws.toolkits.jetbrains.services.codewhisperer.editor.CodeWhispererEditorManager
@@ -92,6 +95,8 @@ import software.aws.toolkits.resources.message
9295
import software.aws.toolkits.telemetry.CodewhispererCompletionType
9396
import software.aws.toolkits.telemetry.CodewhispererSuggestionState
9497
import software.aws.toolkits.telemetry.CodewhispererTriggerType
98+
import java.net.URI
99+
import java.util.concurrent.CompletableFuture
95100
import java.util.concurrent.TimeUnit
96101

97102
@Service
@@ -669,13 +674,34 @@ class CodeWhispererService(private val cs: CoroutineScope) : Disposable {
669674
val customizationArn = CodeWhispererModelConfigurator.getInstance().activeCustomization(project)?.arn
670675

671676
// TODO: use workspaceID from LSP
672-
// hardcoded for now!
673-
val workspaceId = null
677+
var workspaceId: String? = null
678+
try {
679+
val workspacesInfos = getWorkspaceIds(project).get().workspaces
680+
for (workspaceInfo in workspacesInfos) {
681+
val workspaceRootPath = Paths.get(URI(workspaceInfo.workspaceRoot)).toString()
682+
if (psiFile.virtualFile.path.startsWith(workspaceRootPath)) {
683+
workspaceId = workspaceInfo.workspaceId
684+
break
685+
}
674686

687+
}
688+
} catch (e: Exception) {
689+
LOG.info("Cannot get workspaceId from LSP'$e'")
690+
}
691+
LOG.info("Found workspaceId from LSP '$workspaceId'")
675692
return RequestContext(project, editor, triggerTypeInfo, caretPosition,
676693
fileContext, supplementalContext, connection, latencyContext, customizationArn, workspaceId)
677694
}
678695

696+
fun getWorkspaceIds(project: Project): CompletableFuture<LspServerConfigurations> {
697+
val payload = GetConfigurationFromServerParams(
698+
section = "aws.q.workspaceContext"
699+
)
700+
return AmazonQLspService.executeIfRunning(project) { server ->
701+
server.getConfigurationFromServer(payload)
702+
} ?: (CompletableFuture.failedFuture(IllegalStateException("LSP Server not running")))
703+
}
704+
679705
fun validateResponse(response: GenerateCompletionsResponse): GenerateCompletionsResponse {
680706
// If contentSpans in reference are not consistent with content(recommendations),
681707
// remove the incorrect references.

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage
77
import org.eclipse.lsp4j.jsonrpc.services.JsonNotification
88
import org.eclipse.lsp4j.jsonrpc.services.JsonRequest
99
import org.eclipse.lsp4j.services.LanguageServer
10+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.GetConfigurationFromServerParams
11+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.LspServerConfigurations
1012
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.credentials.UpdateCredentialsPayload
1113
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.dependencies.DidChangeDependencyPathsParams
1214
import java.util.concurrent.CompletableFuture
@@ -24,4 +26,7 @@ interface AmazonQLanguageServer : LanguageServer {
2426

2527
@JsonNotification("aws/credentials/token/delete")
2628
fun deleteTokenCredentials(): CompletableFuture<Unit>
29+
30+
@JsonRequest("aws/getConfigurationFromServer")
31+
fun getConfigurationFromServer(params: GetConfigurationFromServerParams): CompletableFuture<LspServerConfigurations>
2732
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.textdocument.TextDoc
5555
import software.aws.toolkits.jetbrains.services.amazonq.lsp.util.WorkspaceFolderUtil.createWorkspaceFolders
5656
import software.aws.toolkits.jetbrains.services.amazonq.lsp.workspace.WorkspaceServiceHandler
5757
import software.aws.toolkits.jetbrains.services.telemetry.ClientMetadata
58-
import software.aws.toolkits.jetbrains.settings.LspSettings
5958
import java.io.IOException
6059
import java.io.OutputStreamWriter
6160
import java.io.PipedInputStream
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33

44
package software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws
55

6-
data class GetConfigurationFromServerPayload(
6+
data class GetConfigurationFromServerParams(
77
val section: String,
88
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// Copyright 2025 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.lsp.model.aws
5+
6+
// This represents each item in the array
7+
data class WorkspaceInfo(val workspaceRoot: String, val workspaceId: String)
8+
9+
// This represents the entire array
10+
data class LspServerConfigurations ( val workspaces: List<WorkspaceInfo> )
11+
12+

0 commit comments

Comments
 (0)