Skip to content

build(amazonq): remove standalone local context server #5654

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

Merged
merged 2 commits into from
May 7, 2025
Merged
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 @@ -6,29 +6,20 @@ package software.aws.toolkits.jetbrains.services.amazonq.startup
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.runInEdt
import com.intellij.openapi.project.Project
import com.intellij.openapi.project.waitForSmartMode
import com.intellij.openapi.startup.ProjectActivity
import com.intellij.openapi.wm.ToolWindowManager
import kotlinx.coroutines.TimeoutCancellationException
import kotlinx.coroutines.delay
import kotlinx.coroutines.time.withTimeout
import software.aws.toolkits.core.utils.getLogger
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.gettingstarted.emitUserState
import software.aws.toolkits.jetbrains.services.amazonq.CodeWhispererFeatureConfigService
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileManager
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.explorer.CodeWhispererExplorerActionManager
import software.aws.toolkits.jetbrains.services.cwc.inline.InlineChatController
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
import java.lang.management.ManagementFactory
import java.time.Duration
import java.util.concurrent.atomic.AtomicBoolean

class AmazonQStartupActivity : ProjectActivity {
Expand Down Expand Up @@ -58,39 +49,8 @@ class AmazonQStartupActivity : ProjectActivity {
QRegionProfileManager.getInstance().validateProfile(project)

AmazonQLspService.getInstance(project)
startLsp(project)
if (runOnce.get()) return
emitUserState(project)
runOnce.set(true)
}

private suspend fun startLsp(project: Project) {
// Automatically start the project context LSP after some delay when average CPU load is below 30%.
// The CPU load requirement is to avoid competing with native JetBrains indexing and other CPU expensive OS processes
// In the future we will decouple LSP start and indexing start to let LSP perform other tasks.
val startLspIndexingDuration = Duration.ofMinutes(30)
project.waitForSmartMode()
delay(30_000) // Wait for 30 seconds for systemLoadAverage to be more accurate
try {
withTimeout(startLspIndexingDuration) {
while (true) {
val cpuUsage = ManagementFactory.getOperatingSystemMXBean().systemLoadAverage
if (cpuUsage > 0 && cpuUsage < 30) {
ProjectContextController.getInstance(project = project)
break
} else {
delay(60_000) // Wait for 60 seconds
}
}
}
} catch (e: TimeoutCancellationException) {
LOG.warn { "Failed to start LSP server due to time out" }
} catch (e: Exception) {
LOG.warn { "Failed to start LSP server" }
}
}

companion object {
private val LOG = getLogger<AmazonQStartupActivity>()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@
import software.aws.toolkits.jetbrains.services.amazonq.messages.MessagePublisher
import software.aws.toolkits.jetbrains.services.amazonq.onboarding.OnboardingPageInteraction
import software.aws.toolkits.jetbrains.services.amazonq.onboarding.OnboardingPageInteractionType
import software.aws.toolkits.jetbrains.services.amazonq.project.ProjectContextController
import software.aws.toolkits.jetbrains.services.amazonq.project.RelevantDocument
import software.aws.toolkits.jetbrains.services.codewhisperer.settings.CodeWhispererConfigurable
import software.aws.toolkits.jetbrains.services.cwc.InboundAppMessagesHandler
Expand Down Expand Up @@ -72,10 +71,8 @@
import software.aws.toolkits.jetbrains.services.cwc.messages.FollowUp
import software.aws.toolkits.jetbrains.services.cwc.messages.IncomingCwcMessage
import software.aws.toolkits.jetbrains.services.cwc.messages.OnboardingPageInteractionMessage
import software.aws.toolkits.jetbrains.services.cwc.messages.OpenSettingsMessage
import software.aws.toolkits.jetbrains.services.cwc.messages.QuickActionMessage
import software.aws.toolkits.jetbrains.services.cwc.storage.ChatSessionStorage
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
import software.aws.toolkits.telemetry.CwsprChatCommandType
import java.util.UUID

Expand Down Expand Up @@ -127,24 +124,11 @@
}

override suspend fun processPromptChatMessage(message: IncomingCwcMessage.ChatPrompt) {
var prompt = message.chatMessage
var queryResult: List<RelevantDocument> = emptyList()
val prompt = message.chatMessage
val queryResult: List<RelevantDocument> = emptyList()

Check warning on line 128 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/ChatController.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/ChatController.kt#L127-L128

Added lines #L127 - L128 were not covered by tests
val triggerId = UUID.randomUUID().toString()
var shouldAddIndexInProgressMessage: Boolean = false
var shouldUseWorkspaceContext: Boolean = false

if (prompt.contains("@workspace")) {
if (CodeWhispererSettings.getInstance().isProjectContextEnabled()) {
shouldUseWorkspaceContext = true
prompt = prompt.replace("@workspace", "")
val projectContextController = ProjectContextController.getInstance(context.project)
queryResult = projectContextController.queryChat(prompt, timeout = null)
if (!projectContextController.getProjectContextIndexComplete()) shouldAddIndexInProgressMessage = true
logger.info { "project context relevant document count: ${queryResult.size}" }
} else {
sendOpenSettingsMessage(message.tabId)
}
}
val shouldAddIndexInProgressMessage = false
val shouldUseWorkspaceContext = false

Check warning on line 131 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/ChatController.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/controller/ChatController.kt#L130-L131

Added lines #L130 - L131 were not covered by tests

handleChat(
tabId = message.tabId,
Expand Down Expand Up @@ -467,13 +451,6 @@
messagePublisher.publish(message)
}

private suspend fun sendOpenSettingsMessage(tabId: String) {
val message = OpenSettingsMessage(
tabId = tabId
)
messagePublisher.publish(message)
}

private suspend fun sendStaticTextResponse(tabId: String, triggerId: String, response: StaticTextResponse) {
val chatMessage = ChatMessage(
tabId = tabId,
Expand Down

This file was deleted.

This file was deleted.

Loading
Loading