Skip to content

Commit 61270ed

Browse files
authored
fix: provide loading text when chat assets are slow to load (#5973)
on remote, it can take 10+ seconds for chat to be visible. additionally, delete some unneeded assets to slightly reduce load time
1 parent b2fb2b3 commit 61270ed

File tree

14 files changed

+54
-377
lines changed

14 files changed

+54
-377
lines changed

buildSrc/src/main/kotlin/software/aws/toolkits/gradle/intellij/IdeVersions.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ object IdeVersions {
163163
"com.intellij.java",
164164
"com.intellij.gradle",
165165
"org.jetbrains.idea.maven",
166+
"com.jetbrains.codeWithMe",
166167
"com.intellij.properties"
167168
),
168169
marketplacePlugins = listOf(

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,12 @@ class AmazonQToolWindowFactory : ToolWindowFactory, DumbAware {
133133
}
134134
}
135135

136+
/**
137+
* Only applies to local
138+
* On remote, since we are using PROJECTOR_INSTANCING, this will never run
139+
*/
136140
override fun init(toolWindow: ToolWindow) {
137-
toolWindow.stripeTitle = message("q.window.title")
141+
toolWindow.stripeTitle = message("toolwindow.stripe.amazon.q.window")
138142
toolWindow.component.addComponentListener(
139143
object : ComponentAdapter() {
140144
override fun componentResized(e: ComponentEvent) {
@@ -143,6 +147,8 @@ class AmazonQToolWindowFactory : ToolWindowFactory, DumbAware {
143147
LOG.debug {
144148
"Amazon Q Tool window stretched to a width less than the minimum allowed width, resizing to the minimum allowed width"
145149
}
150+
151+
// can't implement equivalent on remote as stretchWidth impl is noop
146152
(toolWindow as ToolWindowEx).stretchWidth(MINIMUM_TOOLWINDOW_WIDTH - newWidth)
147153
}
148154
}

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

Lines changed: 21 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.FlareUiMes
1616
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfile
1717
import software.aws.toolkits.jetbrains.services.amazonq.util.HighlightCommand
1818
import software.aws.toolkits.jetbrains.services.amazonq.util.createBrowser
19+
import software.aws.toolkits.jetbrains.services.amazonq.webview.theme.EditorThemeAdapter
20+
import software.aws.toolkits.jetbrains.services.amazonq.webview.theme.ThemeBrowserAdapter
1921
import software.aws.toolkits.jetbrains.settings.MeetQSettings
2022
import java.nio.file.Path
2123
import java.nio.file.Paths
@@ -128,26 +130,26 @@ class Browser(parent: Disposable, private val mynahAsset: Path, val project: Pro
128130
// https://github.com/highlightjs/highlight.js/issues/1387
129131
// language=HTML
130132
val jsScripts = """
131-
<script type="text/javascript" charset="UTF-8" src="$connectorAdapterPath"></script>
133+
<script type="text/javascript" charset="UTF-8" src="$connectorAdapterPath" defer></script>
132134
<script type="text/javascript" charset="UTF-8" src="$mynahResource" defer onload="init()"></script>
133135
<script type="text/javascript">
134136
135137
const init = () => {
136138
const hybridChatConnector = connectorAdapter.initiateAdapter(
137-
${MeetQSettings.getInstance().reinvent2024OnboardingCount < MAX_ONBOARDING_PAGE_COUNT},
138-
${MeetQSettings.getInstance().disclaimerAcknowledged},
139-
$isFeatureDevAvailable,
140-
$isCodeTransformAvailable,
141-
$isDocAvailable,
142-
$isCodeScanAvailable,
143-
$isCodeTestAvailable,
144-
{
145-
postMessage: message => {
146-
$postMessageToJavaJsCode
147-
}
139+
${MeetQSettings.getInstance().reinvent2024OnboardingCount < MAX_ONBOARDING_PAGE_COUNT},
140+
${MeetQSettings.getInstance().disclaimerAcknowledged},
141+
$isFeatureDevAvailable,
142+
$isCodeTransformAvailable,
143+
$isDocAvailable,
144+
$isCodeScanAvailable,
145+
$isCodeTestAvailable,
146+
{
147+
postMessage: message => { $postMessageToJavaJsCode }
148148
},
149+
${OBJECT_MAPPER.writeValueAsString(highlightCommand)},
150+
"${activeProfile?.profileName.orEmpty()}"
151+
)
149152
150-
"${activeProfile?.profileName.orEmpty()}")
151153
const qChat = amazonQChat.createChat(
152154
{
153155
postMessage: message => {
@@ -208,15 +210,7 @@ class Browser(parent: Disposable, private val mynahAsset: Path, val project: Pro
208210
</script>
209211
""".trimIndent()
210212

211-
addQuickActionCommands(
212-
isCodeTransformAvailable,
213-
isFeatureDevAvailable,
214-
isDocAvailable,
215-
isCodeTestAvailable,
216-
isCodeScanAvailable,
217-
highlightCommand,
218-
activeProfile
219-
)
213+
// language=HTML
220214
return """
221215
<!DOCTYPE html>
222216
<style>
@@ -283,38 +277,21 @@ class Browser(parent: Disposable, private val mynahAsset: Path, val project: Pro
283277
transform: translateZ(0) !important;
284278
}
285279
</style>
286-
<html>
280+
<html lang="en">
287281
<head>
288282
<title>AWS Q</title>
289283
$jsScripts
290284
</head>
291285
<body>
286+
<div style="text-align: center;">Amazon Q is loading...</div>
287+
<script type="text/javascript">
288+
${ThemeBrowserAdapter().buildJsCodeToUpdateTheme(EditorThemeAdapter.getThemeFromIde())}
289+
</script>
292290
</body>
293291
</html>
294292
""".trimIndent()
295293
}
296294

297-
private fun addQuickActionCommands(
298-
isCodeTransformAvailable: Boolean,
299-
isFeatureDevAvailable: Boolean,
300-
isDocAvailable: Boolean,
301-
isCodeTestAvailable: Boolean,
302-
isCodeScanAvailable: Boolean,
303-
highlightCommand: HighlightCommand?,
304-
activeProfile: QRegionProfile?,
305-
) {
306-
// TODO: Remove this once chat has been integrated with agents. This is added temporarily to keep detekt happy.
307-
isCodeScanAvailable
308-
isCodeTestAvailable
309-
isDocAvailable
310-
isFeatureDevAvailable
311-
isCodeTransformAvailable
312-
MAX_ONBOARDING_PAGE_COUNT
313-
OBJECT_MAPPER
314-
highlightCommand
315-
activeProfile
316-
}
317-
318295
companion object {
319296
private const val MAX_ONBOARDING_PAGE_COUNT = 3
320297
private val OBJECT_MAPPER = jacksonObjectMapper()

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,8 @@ class BrowserConnector(
201201
themeSource
202202
.distinctUntilChanged()
203203
.onEach {
204-
themeBrowserAdapter.updateThemeInBrowser(chatBrowser, it, uiReady)
204+
uiReady.await()
205+
themeBrowserAdapter.updateThemeInBrowser(chatBrowser, it)
205206
}
206207
.launchIn(this)
207208
}
@@ -619,7 +620,7 @@ class BrowserConnector(
619620
$isDocAvailable,
620621
$isCodeScanAvailable,
621622
$isCodeTestAvailable,
622-
{ postMessage: () => {} }
623+
{ postMessage: () => {} },
623624
);
624625
625626
const commands = tempConnector.initialQuickActions?.slice(0, 2) || [];

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/theme/ThemeBrowserAdapter.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
package software.aws.toolkits.jetbrains.services.amazonq.webview.theme
55

6-
import kotlinx.coroutines.CompletableDeferred
76
import org.cef.browser.CefBrowser
87
import java.awt.Color
98
import java.awt.Font
@@ -19,13 +18,12 @@ class ThemeBrowserAdapter {
1918
browser.executeJavaScript("window.changeTheme(${theme.darkMode})", browser.url, 0)
2019
}
2120

22-
suspend fun updateThemeInBrowser(browser: CefBrowser, theme: AmazonQTheme, uiReady: CompletableDeferred<Boolean>) {
23-
uiReady.await()
21+
fun updateThemeInBrowser(browser: CefBrowser, theme: AmazonQTheme) {
2422
val codeToUpdateTheme = buildJsCodeToUpdateTheme(theme)
2523
browser.executeJavaScript(codeToUpdateTheme, browser.url, 0)
2624
}
2725

28-
private fun buildJsCodeToUpdateTheme(theme: AmazonQTheme) = buildString {
26+
fun buildJsCodeToUpdateTheme(theme: AmazonQTheme) = buildString {
2927
val (bg, altBg, inputBg) = determineInputAndBgColor(theme)
3028
appendDarkMode(theme.darkMode)
3129

plugins/amazonq/mynah-ui/src/mynah-ui/connectorAdapter.ts

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,6 @@ import { isTabType } from './ui/storages/tabsStorage'
77
import { WebviewUIHandler } from './ui/main'
88
import { TabDataGenerator } from './ui/tabs/generator'
99
import { ChatClientAdapter, ChatEventHandler } from '@aws/chat-client'
10-
import { FqnExtractor } from "./fqn/extractor";
11-
12-
export * from "./ui/main";
13-
14-
declare global {
15-
interface Window { fqnExtractor: FqnExtractor; }
16-
}
17-
18-
window.fqnExtractor = new FqnExtractor();
1910

2011
export const initiateAdapter = (showWelcomePage: boolean,
2112
disclaimerAcknowledged: boolean,
@@ -25,11 +16,12 @@ export const initiateAdapter = (showWelcomePage: boolean,
2516
isCodeScanEnabled: boolean,
2617
isCodeTestEnabled: boolean,
2718
ideApiPostMessage: (message: any) => void,
28-
profileName?: string) : HybridChatAdapter => {
29-
return new HybridChatAdapter(showWelcomePage, disclaimerAcknowledged, isFeatureDevEnabled, isCodeTransformEnabled, isDocEnabled, isCodeScanEnabled, isCodeTestEnabled, ideApiPostMessage, profileName)
19+
highlightCommand?: QuickActionCommand,
20+
profileName?: string,
21+
) : HybridChatAdapter => {
22+
return new HybridChatAdapter(showWelcomePage, disclaimerAcknowledged, isFeatureDevEnabled, isCodeTransformEnabled, isDocEnabled, isCodeScanEnabled, isCodeTestEnabled, ideApiPostMessage, highlightCommand, profileName)
3023
}
3124

32-
3325
// Ref: https://github.com/aws/aws-toolkit-vscode/blob/e9ea8082ffe0b9968a873437407d0b6b31b9e1a5/packages/core/src/amazonq/webview/ui/connectorAdapter.ts#L14
3426
export class HybridChatAdapter implements ChatClientAdapter {
3527
private uiHandler?: WebviewUIHandler
@@ -46,6 +38,7 @@ export class HybridChatAdapter implements ChatClientAdapter {
4638
private isCodeScanEnabled: boolean,
4739
private isCodeTestEnabled: boolean,
4840
private ideApiPostMessage: (message: any) => void,
41+
private highlightCommand?: QuickActionCommand,
4942
private profileName?: string,
5043

5144
) {}
@@ -67,6 +60,7 @@ export class HybridChatAdapter implements ChatClientAdapter {
6760
isDocEnabled: this.isDocEnabled,
6861
isCodeScanEnabled: this.isCodeScanEnabled,
6962
isCodeTestEnabled: this.isCodeTestEnabled,
63+
highlightCommand: this.highlightCommand,
7064
profileName: this.profileName,
7165
hybridChat: true,
7266
})

plugins/amazonq/mynah-ui/src/mynah-ui/fqn/extractor.ts

Lines changed: 0 additions & 133 deletions
This file was deleted.

0 commit comments

Comments
 (0)