Skip to content

Commit d6d251f

Browse files
committed
Merge remote-tracking branch 'origin/feature/q-lsp-chat' into feature/remote-chat
Conflicts: plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QLoginWebview.kt plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQPanel.kt plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/controller/FeatureDevController.kt
2 parents 77b82a4 + 9b97fde commit d6d251f

File tree

245 files changed

+6630
-12856
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

245 files changed

+6630
-12856
lines changed

buildSrc/src/main/kotlin/temp-toolkit-intellij-root-conventions.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ val toolkitVersion: String by project
3535

3636
// please check changelog generation logic if this format is changed
3737
// also sync with gateway version
38-
version = "$toolkitVersion-${ideProfile.shortName}"
38+
version = "$toolkitVersion.${ideProfile.shortName}"
3939

4040
val resharperDlls = configurations.register("resharperDlls") {
4141
isCanBeConsumed = false

buildSrc/src/main/kotlin/toolkit-publishing-conventions.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ val ideProfile = IdeVersions.ideProfile(project)
1616
val toolkitVersion: String by project
1717

1818
// please check changelog generation logic if this format is changed
19-
version = "$toolkitVersion-${ideProfile.shortName}"
19+
version = "$toolkitVersion.${ideProfile.shortName}"
2020

2121
// attach the current commit hash on local builds
2222
if (!project.isCi()) {

plugins/amazonq/chat/jetbrains-community/resources/META-INF/plugin-chat.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
<projectListeners>
99
<listener class="software.aws.toolkits.jetbrains.services.amazonq.toolwindow.AmazonQToolWindowListener"
1010
topic="com.intellij.openapi.wm.ex.ToolWindowManagerListener"/>
11-
<listener class="software.aws.toolkits.jetbrains.services.amazonq.project.ProjectContextEditorListener"
12-
topic="com.intellij.openapi.fileEditor.FileEditorManagerListener"/>
1311
</projectListeners>
1412

1513
<extensions defaultExtensionNs="com.intellij">

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/QLoginWebview.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ import com.intellij.ui.components.panels.Wrapper
1818
import com.intellij.ui.dsl.builder.Align
1919
import com.intellij.ui.dsl.builder.panel
2020
import com.intellij.ui.jcef.JBCefJSQuery
21+
import kotlinx.coroutines.CoroutineScope
22+
import kotlinx.coroutines.flow.distinctUntilChanged
23+
import kotlinx.coroutines.flow.launchIn
24+
import kotlinx.coroutines.flow.onEach
2125
import software.aws.toolkits.core.utils.debug
2226
import software.aws.toolkits.core.utils.error
2327
import software.aws.toolkits.core.utils.getLogger
@@ -39,6 +43,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.profile.QProfileSwitchIn
3943
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfile
4044
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileManager
4145
import software.aws.toolkits.jetbrains.services.amazonq.util.createBrowser
46+
import software.aws.toolkits.jetbrains.services.amazonq.webview.theme.EditorThemeAdapter
47+
import software.aws.toolkits.jetbrains.services.amazonq.webview.theme.ThemeBrowserAdapter
4248
import software.aws.toolkits.jetbrains.utils.isQConnected
4349
import software.aws.toolkits.jetbrains.utils.isQExpired
4450
import software.aws.toolkits.jetbrains.utils.isQWebviewsAvailable
@@ -53,7 +59,7 @@ import javax.swing.JButton
5359
import javax.swing.JComponent
5460

5561
@Service(Service.Level.PROJECT)
56-
class QWebviewPanel private constructor(val project: Project) : Disposable {
62+
class QWebviewPanel private constructor(val project: Project, private val scope: CoroutineScope) : Disposable {
5763
private val webviewContainer = Wrapper()
5864
var browser: QWebviewBrowser? = null
5965
private set
@@ -101,6 +107,14 @@ class QWebviewPanel private constructor(val project: Project) : Disposable {
101107
} else {
102108
browser = QWebviewBrowser(project, this).also {
103109
webviewContainer.add(it.component())
110+
111+
val themeBrowserAdapter = ThemeBrowserAdapter()
112+
EditorThemeAdapter().onThemeChange()
113+
.distinctUntilChanged()
114+
.onEach { theme ->
115+
themeBrowserAdapter.updateLoginThemeInBrowser(it.jcefBrowser.cefBrowser, theme)
116+
}
117+
.launchIn(scope)
104118
}
105119
}
106120
}

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/commands/MessageSerializer.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@ import com.fasterxml.jackson.databind.MapperFeature
1212
import com.fasterxml.jackson.databind.SerializationFeature
1313
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
1414
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
15+
import com.fasterxml.jackson.module.kotlin.treeToValue
1516
import org.jetbrains.annotations.VisibleForTesting
1617
import software.aws.toolkits.jetbrains.services.amazonq.messages.AmazonQMessage
1718
import software.aws.toolkits.jetbrains.services.amazonq.messages.UnknownMessageType
1819
import software.aws.toolkits.jetbrains.services.amazonq.util.command
1920

2021
class MessageSerializer @VisibleForTesting constructor() {
2122

22-
private val objectMapper = jacksonObjectMapper()
23+
val objectMapper = jacksonObjectMapper()
2324
.registerModule(JavaTimeModule())
2425
.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS)
2526
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
@@ -36,6 +37,12 @@ class MessageSerializer @VisibleForTesting constructor() {
3637

3738
fun serialize(value: Any): String = objectMapper.writeValueAsString(value)
3839

40+
inline fun <reified T> deserializeChatMessages(value: JsonNode): T =
41+
objectMapper.treeToValue<T>(value)
42+
43+
inline fun <reified T> deserializeChatMessages(value: JsonNode, clazz: Class<T>): T =
44+
objectMapper.treeToValue(value, clazz)
45+
3946
// Provide singleton global access
4047
companion object {
4148
private val instance = MessageSerializer()

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,20 @@ package software.aws.toolkits.jetbrains.services.amazonq.startup
66
import com.intellij.openapi.application.ApplicationManager
77
import com.intellij.openapi.application.runInEdt
88
import com.intellij.openapi.project.Project
9-
import com.intellij.openapi.project.waitForSmartMode
109
import com.intellij.openapi.startup.ProjectActivity
1110
import com.intellij.openapi.wm.ToolWindowManager
12-
import kotlinx.coroutines.TimeoutCancellationException
13-
import kotlinx.coroutines.delay
14-
import kotlinx.coroutines.time.withTimeout
15-
import software.aws.toolkits.core.utils.getLogger
16-
import software.aws.toolkits.core.utils.warn
1711
import software.aws.toolkits.jetbrains.core.credentials.AwsBearerTokenConnection
1812
import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
1913
import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
2014
import software.aws.toolkits.jetbrains.core.gettingstarted.emitUserState
2115
import software.aws.toolkits.jetbrains.services.amazonq.CodeWhispererFeatureConfigService
2216
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
2317
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfileManager
24-
import software.aws.toolkits.jetbrains.services.amazonq.project.ProjectContextController
2518
import software.aws.toolkits.jetbrains.services.amazonq.toolwindow.AmazonQToolWindow
2619
import software.aws.toolkits.jetbrains.services.amazonq.toolwindow.AmazonQToolWindowFactory
2720
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager
2821
import software.aws.toolkits.jetbrains.services.cwc.inline.InlineChatController
2922
import software.aws.toolkits.jetbrains.settings.CodeWhispererSettings
30-
import java.lang.management.ManagementFactory
31-
import java.time.Duration
3223
import java.util.concurrent.atomic.AtomicBoolean
3324

3425
class AmazonQStartupActivity : ProjectActivity {
@@ -58,39 +49,8 @@ class AmazonQStartupActivity : ProjectActivity {
5849
QRegionProfileManager.getInstance().validateProfile(project)
5950

6051
AmazonQLspService.getInstance(project)
61-
startLsp(project)
6252
if (runOnce.get()) return
6353
emitUserState(project)
6454
runOnce.set(true)
6555
}
66-
67-
private suspend fun startLsp(project: Project) {
68-
// Automatically start the project context LSP after some delay when average CPU load is below 30%.
69-
// The CPU load requirement is to avoid competing with native JetBrains indexing and other CPU expensive OS processes
70-
// In the future we will decouple LSP start and indexing start to let LSP perform other tasks.
71-
val startLspIndexingDuration = Duration.ofMinutes(30)
72-
project.waitForSmartMode()
73-
delay(30_000) // Wait for 30 seconds for systemLoadAverage to be more accurate
74-
try {
75-
withTimeout(startLspIndexingDuration) {
76-
while (true) {
77-
val cpuUsage = ManagementFactory.getOperatingSystemMXBean().systemLoadAverage
78-
if (cpuUsage > 0 && cpuUsage < 30) {
79-
ProjectContextController.getInstance(project = project)
80-
break
81-
} else {
82-
delay(60_000) // Wait for 60 seconds
83-
}
84-
}
85-
}
86-
} catch (e: TimeoutCancellationException) {
87-
LOG.warn { "Failed to start LSP server due to time out" }
88-
} catch (e: Exception) {
89-
LOG.warn { "Failed to start LSP server" }
90-
}
91-
}
92-
93-
companion object {
94-
private val LOG = getLogger<AmazonQStartupActivity>()
95-
}
9656
}

0 commit comments

Comments
 (0)