Skip to content
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 @@ -163,6 +163,7 @@ object IdeVersions {
"com.intellij.java",
"com.intellij.gradle",
"org.jetbrains.idea.maven",
"com.jetbrains.codeWithMe",
"com.intellij.properties"
),
marketplacePlugins = listOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,12 @@ class AmazonQToolWindowFactory : ToolWindowFactory, DumbAware {
}
}

/**
* Only applies to local
* On remote, since we are using PROJECTOR_INSTANCING, this will never run
*/
override fun init(toolWindow: ToolWindow) {
toolWindow.stripeTitle = message("q.window.title")
toolWindow.stripeTitle = message("toolwindow.stripe.amazon.q.window")
toolWindow.component.addComponentListener(
object : ComponentAdapter() {
override fun componentResized(e: ComponentEvent) {
Expand All @@ -143,6 +147,8 @@ class AmazonQToolWindowFactory : ToolWindowFactory, DumbAware {
LOG.debug {
"Amazon Q Tool window stretched to a width less than the minimum allowed width, resizing to the minimum allowed width"
}

// can't implement equivalent on remote as stretchWidth impl is noop
(toolWindow as ToolWindowEx).stretchWidth(MINIMUM_TOOLWINDOW_WIDTH - newWidth)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.FlareUiMes
import software.aws.toolkits.jetbrains.services.amazonq.profile.QRegionProfile
import software.aws.toolkits.jetbrains.services.amazonq.util.HighlightCommand
import software.aws.toolkits.jetbrains.services.amazonq.util.createBrowser
import software.aws.toolkits.jetbrains.services.amazonq.webview.theme.EditorThemeAdapter
import software.aws.toolkits.jetbrains.services.amazonq.webview.theme.ThemeBrowserAdapter
import software.aws.toolkits.jetbrains.settings.MeetQSettings
import java.nio.file.Path
import java.nio.file.Paths
Expand Down Expand Up @@ -128,26 +130,26 @@ class Browser(parent: Disposable, private val mynahAsset: Path, val project: Pro
// https://github.com/highlightjs/highlight.js/issues/1387
// language=HTML
val jsScripts = """
<script type="text/javascript" charset="UTF-8" src="$connectorAdapterPath"></script>
<script type="text/javascript" charset="UTF-8" src="$connectorAdapterPath" defer></script>
<script type="text/javascript" charset="UTF-8" src="$mynahResource" defer onload="init()"></script>
<script type="text/javascript">

const init = () => {
const hybridChatConnector = connectorAdapter.initiateAdapter(
${MeetQSettings.getInstance().reinvent2024OnboardingCount < MAX_ONBOARDING_PAGE_COUNT},
${MeetQSettings.getInstance().disclaimerAcknowledged},
$isFeatureDevAvailable,
$isCodeTransformAvailable,
$isDocAvailable,
$isCodeScanAvailable,
$isCodeTestAvailable,
{
postMessage: message => {
$postMessageToJavaJsCode
}
${MeetQSettings.getInstance().reinvent2024OnboardingCount < MAX_ONBOARDING_PAGE_COUNT},
${MeetQSettings.getInstance().disclaimerAcknowledged},
$isFeatureDevAvailable,
$isCodeTransformAvailable,
$isDocAvailable,
$isCodeScanAvailable,
$isCodeTestAvailable,
{
postMessage: message => { $postMessageToJavaJsCode }
},
${OBJECT_MAPPER.writeValueAsString(highlightCommand)},
"${activeProfile?.profileName.orEmpty()}"
)

"${activeProfile?.profileName.orEmpty()}")
const qChat = amazonQChat.createChat(
{
postMessage: message => {
Expand Down Expand Up @@ -208,15 +210,7 @@ class Browser(parent: Disposable, private val mynahAsset: Path, val project: Pro
</script>
""".trimIndent()

addQuickActionCommands(
isCodeTransformAvailable,
isFeatureDevAvailable,
isDocAvailable,
isCodeTestAvailable,
isCodeScanAvailable,
highlightCommand,
activeProfile
)
// language=HTML
return """
<!DOCTYPE html>
<style>
Expand Down Expand Up @@ -283,38 +277,21 @@ class Browser(parent: Disposable, private val mynahAsset: Path, val project: Pro
transform: translateZ(0) !important;
}
</style>
<html>
<html lang="en">
<head>
<title>AWS Q</title>
$jsScripts
</head>
<body>
<div style="text-align: center;">Amazon Q is loading...</div>
<script type="text/javascript">
${ThemeBrowserAdapter().buildJsCodeToUpdateTheme(EditorThemeAdapter.getThemeFromIde())}
</script>
</body>
</html>
""".trimIndent()
}

private fun addQuickActionCommands(
isCodeTransformAvailable: Boolean,
isFeatureDevAvailable: Boolean,
isDocAvailable: Boolean,
isCodeTestAvailable: Boolean,
isCodeScanAvailable: Boolean,
highlightCommand: HighlightCommand?,
activeProfile: QRegionProfile?,
) {
// TODO: Remove this once chat has been integrated with agents. This is added temporarily to keep detekt happy.
isCodeScanAvailable
isCodeTestAvailable
isDocAvailable
isFeatureDevAvailable
isCodeTransformAvailable
MAX_ONBOARDING_PAGE_COUNT
OBJECT_MAPPER
highlightCommand
activeProfile
}

companion object {
private const val MAX_ONBOARDING_PAGE_COUNT = 3
private val OBJECT_MAPPER = jacksonObjectMapper()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,8 @@ class BrowserConnector(
themeSource
.distinctUntilChanged()
.onEach {
themeBrowserAdapter.updateThemeInBrowser(chatBrowser, it, uiReady)
uiReady.await()
themeBrowserAdapter.updateThemeInBrowser(chatBrowser, it)
}
.launchIn(this)
}
Expand Down Expand Up @@ -619,7 +620,7 @@ class BrowserConnector(
$isDocAvailable,
$isCodeScanAvailable,
$isCodeTestAvailable,
{ postMessage: () => {} }
{ postMessage: () => {} },
);

const commands = tempConnector.initialQuickActions?.slice(0, 2) || [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

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

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

suspend fun updateThemeInBrowser(browser: CefBrowser, theme: AmazonQTheme, uiReady: CompletableDeferred<Boolean>) {
uiReady.await()
fun updateThemeInBrowser(browser: CefBrowser, theme: AmazonQTheme) {
val codeToUpdateTheme = buildJsCodeToUpdateTheme(theme)
browser.executeJavaScript(codeToUpdateTheme, browser.url, 0)
}

private fun buildJsCodeToUpdateTheme(theme: AmazonQTheme) = buildString {
fun buildJsCodeToUpdateTheme(theme: AmazonQTheme) = buildString {
val (bg, altBg, inputBg) = determineInputAndBgColor(theme)
appendDarkMode(theme.darkMode)

Expand Down
18 changes: 6 additions & 12 deletions plugins/amazonq/mynah-ui/src/mynah-ui/connectorAdapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,6 @@ import { isTabType } from './ui/storages/tabsStorage'
import { WebviewUIHandler } from './ui/main'
import { TabDataGenerator } from './ui/tabs/generator'
import { ChatClientAdapter, ChatEventHandler } from '@aws/chat-client'
import { FqnExtractor } from "./fqn/extractor";

export * from "./ui/main";

declare global {
interface Window { fqnExtractor: FqnExtractor; }
}

window.fqnExtractor = new FqnExtractor();

export const initiateAdapter = (showWelcomePage: boolean,
disclaimerAcknowledged: boolean,
Expand All @@ -25,11 +16,12 @@ export const initiateAdapter = (showWelcomePage: boolean,
isCodeScanEnabled: boolean,
isCodeTestEnabled: boolean,
ideApiPostMessage: (message: any) => void,
profileName?: string) : HybridChatAdapter => {
return new HybridChatAdapter(showWelcomePage, disclaimerAcknowledged, isFeatureDevEnabled, isCodeTransformEnabled, isDocEnabled, isCodeScanEnabled, isCodeTestEnabled, ideApiPostMessage, profileName)
highlightCommand?: QuickActionCommand,
profileName?: string,
) : HybridChatAdapter => {
return new HybridChatAdapter(showWelcomePage, disclaimerAcknowledged, isFeatureDevEnabled, isCodeTransformEnabled, isDocEnabled, isCodeScanEnabled, isCodeTestEnabled, ideApiPostMessage, highlightCommand, profileName)
}


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

) {}
Expand All @@ -67,6 +60,7 @@ export class HybridChatAdapter implements ChatClientAdapter {
isDocEnabled: this.isDocEnabled,
isCodeScanEnabled: this.isCodeScanEnabled,
isCodeTestEnabled: this.isCodeTestEnabled,
highlightCommand: this.highlightCommand,
profileName: this.profileName,
hybridChat: true,
})
Expand Down
133 changes: 0 additions & 133 deletions plugins/amazonq/mynah-ui/src/mynah-ui/fqn/extractor.ts

This file was deleted.

Loading
Loading