Skip to content
Open
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
17 changes: 17 additions & 0 deletions .changes/3.103.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"date" : "2026-02-12",
"version" : "3.103",
"entries" : [ {
"type" : "bugfix",
"description" : "Amazon Q Chat: Fix chat history restoration to display rich UI elements and persist user preferences"
}, {
"type" : "bugfix",
"description" : "Amazon Q: Fix LSP server startup failure when Node.js runtime path is configured as a directory instead of the executable path"
}, {
"type" : "bugfix",
"description" : "Amazon Q: Fix race condition causing \"Can't remove document listener\" error during LSP restart"
}, {
"type" : "deprecation",
"description" : "An upcoming release will remove support for JetBrains Gateway version 2025.2 and for IDEs based on the 2024.3 platform"
} ]
}
5 changes: 5 additions & 0 deletions .changes/3.104.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"date" : "2026-02-27",
"version" : "3.104",
"entries" : [ ]
}
8 changes: 8 additions & 0 deletions .changes/3.105.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"date" : "2026-03-06",
"version" : "3.105",
"entries" : [ {
"type" : "removal",
"description" : "Removed support for 2024.3.x IDEs and Gateway 2025.2"
} ]
}
2 changes: 1 addition & 1 deletion .github/workflows/prerelease.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
strategy:
matrix:
build_target: [ ':plugin-amazonq:buildPlugin' ]
version: [ '2024.3', '2025.1', '2025.2', '2025.3' ]
version: [ '2025.1', '2025.2', '2025.3' ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand Down
25 changes: 0 additions & 25 deletions .run/Run Amazon Q - Community [2024.3].run.xml

This file was deleted.

25 changes: 0 additions & 25 deletions .run/Run Amazon Q - Rider [2024.3].run.xml

This file was deleted.

25 changes: 0 additions & 25 deletions .run/Run Amazon Q - Ultimate [2024.3].run.xml

This file was deleted.

2 changes: 1 addition & 1 deletion .run/generateConfigs.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def write_config(mv: str, ide: IdeVariant, plugin: PluginVariant):
f.write(TEMPLATE.format(plugin = plugin, variant = ide, major_version = mv))

if __name__ == '__main__':
mvs = ["2024.3", "2025.1", "2025.2", "2025.3"]
mvs = ["2025.1", "2025.2", "2025.3"]
ides = [
IdeVariant("Community", "IC"),
IdeVariant("Rider", "RD"),
Expand Down
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,14 @@
# _3.105_ (2026-03-06)
- **(Removal)** Removed support for 2024.3.x IDEs and Gateway 2025.2

# _3.104_ (2026-02-27)

# _3.103_ (2026-02-12)
- **(Bug Fix)** Amazon Q Chat: Fix chat history restoration to display rich UI elements and persist user preferences
- **(Bug Fix)** Amazon Q: Fix LSP server startup failure when Node.js runtime path is configured as a directory instead of the executable path
- **(Bug Fix)** Amazon Q: Fix race condition causing "Can't remove document listener" error during LSP restart
- **(Deprecation)** An upcoming release will remove support for JetBrains Gateway version 2025.2 and for IDEs based on the 2024.3 platform

# _3.102_ (2026-01-15)

# _3.101_ (2026-01-09)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ fun Project.jvmTarget(): Provider<JavaVersion> = withCurrentProfileName {
// https://plugins.jetbrains.com/docs/intellij/using-kotlin.html#stdlib-miscellaneous
fun Project.kotlinTarget(): Provider<String> = withCurrentProfileName {
when (it) {
"2024.3" -> KotlinVersionEnum.KOTLIN_2_0
"2025.1", "2025.2", "2025.3" -> KotlinVersionEnum.KOTLIN_2_1
else -> error("not set")
}.version
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,45 +26,6 @@ object IdeVersions {
)

private val ideProfiles = listOf(
Profile(
name = "2024.3",
community = ProductProfile(
sdkVersion = "2024.3",
bundledPlugins = commonPlugins + listOf(
"com.intellij.java",
"com.intellij.gradle",
"org.jetbrains.idea.maven",
),
marketplacePlugins = listOf(
"org.toml.lang:243.21565.122",
"PythonCore:243.21565.211",
"Docker:243.21565.204",
"com.intellij.modules.json:243.26574.91"
)
),
ultimate = ProductProfile(
sdkVersion = "2024.3",
bundledPlugins = commonPlugins + listOf(
"JavaScript",
"JavaScriptDebugger",
"com.intellij.database",
"com.jetbrains.codeWithMe",
),
marketplacePlugins = listOf(
"org.toml.lang:243.21565.122",
"Pythonid:243.21565.211",
"org.jetbrains.plugins.go:243.21565.211",
"com.intellij.modules.json:243.26574.91"
)
),
rider = RiderProfile(
sdkVersion = "2024.3",
bundledPlugins = commonPlugins,
netFrameworkTarget = "net472",
rdGenVersion = "2024.3.0",
nugetVersion = " 2024.3.0"
)
),
Profile(
name = "2025.1",
community = ProductProfile(
Expand Down Expand Up @@ -109,10 +70,6 @@ object IdeVersions {
),
Profile(
name = "2025.2",
gateway = ProductProfile(
sdkVersion = "2025.2",
bundledPlugins = listOf("org.jetbrains.plugins.terminal")
),
community = ProductProfile(
sdkVersion = "2025.2",
bundledPlugins = commonPlugins + listOf(
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/toolkit-detekt.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ dependencies {
// detekt with type introspection configured in kotlin conventions
private val detektFiles = fileTree(projectDir).matching {
include("**/*.kt", "**/*.kts")
exclude("**/build")
exclude("**/build", "**/bin")
}

detekt {
Expand Down
2 changes: 1 addition & 1 deletion kotlinResolution.settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ dependencyResolutionManagement {
maybeCreate("libs").apply {
// pull value from IJ library list: https://github.com/JetBrains/intellij-community/blob/<mv>/.idea/libraries/kotlinx_coroutines_core.xml
val version = when (providers.gradleProperty("ideProfileName").getOrNull() ?: return@apply) {
"2024.3", "2025.1" -> {
"2025.1" -> {
"1.8.0-intellij-11"
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,11 @@ class AmazonQStreamingClientTest : AmazonQTestBase() {
override fun setup() {
super.setup()

// Allow Python paths on Windows for test environment (Python plugin scans for interpreters)
// Allow Python paths for test environment (Python plugin scans for interpreters)
if (SystemInfo.isWindows) {
VfsRootAccess.allowRootAccess(disposableRule.disposable, "C:/Program Files")
} else {
VfsRootAccess.allowRootAccess(disposableRule.disposable, "/usr/bin", "/usr/local/bin")
}

amazonQStreamingClient = AmazonQStreamingClient.getInstance(projectRule.project)
Expand Down Expand Up @@ -245,9 +247,12 @@ class AmazonQStreamingClientTest : AmazonQTestBase() {
companion object {
@JvmStatic
@BeforeClass
fun allowWindowsPythonPaths() {
fun allowPythonPaths() {
// Allow Python paths for test environment (Python plugin scans for interpreters)
if (SystemInfo.isWindows) {
VfsRootAccess.allowRootAccess(Disposer.newDisposable(), "C:/Program Files")
} else {
VfsRootAccess.allowRootAccess(Disposer.newDisposable(), "/usr/bin", "/usr/local/bin")
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,13 @@ open class CodeWhispererCodeModernizerTestBase(

@Before
open fun setup() {
// Allow Python paths for test environment (Python plugin scans for interpreters)
if (com.intellij.openapi.util.SystemInfo.isWindows) {
com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess.allowRootAccess(disposableRule.disposable, "C:/Program Files")
} else {
com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess.allowRootAccess(disposableRule.disposable, "/usr/bin", "/usr/local/bin")
}

project = projectRule.project
toolkitConnectionManager = spy(ToolkitConnectionManager.getInstance(project))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -219,20 +219,31 @@ data class LatencyContext(

var firstRequestId: String = "",
) {
fun getCodeWhispererEndToEndLatency() = TimeUnit.NANOSECONDS.toMillis(
codewhispererEndToEndEnd - codewhispererEndToEndStart
).toDouble()
fun getCodeWhispererEndToEndLatency(): Double {
// Guard against uninitialized timestamps which would result in incorrect latency values
if (codewhispererEndToEndStart == 0L || codewhispererEndToEndEnd == 0L) {
return 0.0
}
return TimeUnit.NANOSECONDS.toMillis(
codewhispererEndToEndEnd - codewhispererEndToEndStart
).toDouble()
}

// For auto-trigger it's from the time when last char typed
// for manual-trigger it's from the time when last trigger action happened(alt + c)
fun getPerceivedLatency(triggerType: CodewhispererTriggerType) =
if (triggerType == CodewhispererTriggerType.OnDemand) {
fun getPerceivedLatency(triggerType: CodewhispererTriggerType): Double {
// Guard against uninitialized timestamps which would result in incorrect latency values
if (codewhispererEndToEndEnd == 0L) {
return 0.0
}
return if (triggerType == CodewhispererTriggerType.OnDemand) {
getCodeWhispererEndToEndLatency()
} else {
TimeUnit.NANOSECONDS.toMillis(
codewhispererEndToEndEnd - CodeWhispererAutoTriggerService.getInstance().timeAtLastCharTyped
).toDouble()
}
}
}

data class TryExampleRowContext(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ class CodeWhispererSettingsTest : CodeWhispererTestBase() {
)
ToolWindowManager.getInstance(projectRule.project).registerToolWindow(
RegisterToolWindowTask(
id = CodeWhispererCodeReferenceToolWindowFactory.id
id = CodeWhispererCodeReferenceToolWindowFactory.id,
shouldBeAvailable = false
)
)
projectRule.project.service<StatusBarWidgetsManager>().updateWidget(CodeWhispererStatusBarWidgetFactory::class.java)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,13 @@ open class CodeWhispererTestBase {
@Before
open fun setUp() = runTest {
mockLanguageServer = mockk()
VfsRootAccess.allowRootAccess(disposableRule.disposable, "/usr/bin", "/usr/local/bin", "C:/Program Files/pypy3.10-v7.3.17-win64")
VfsRootAccess.allowRootAccess(
disposableRule.disposable,
"/usr/bin",
"/usr/local/bin",
"C:/Program Files/pypy3.10-v7.3.17-win64",
"C:/Program Files/pypy3.11-v7.3.20-win64"
)
val starter = object : AmazonQServerInstanceStarter {
override fun start(
project: Project,
Expand Down Expand Up @@ -316,23 +322,26 @@ open class CodeWhispererTestBase {
val psiFileCaptor = argumentCaptor<PsiFile>()
val latencyContextCaptor = argumentCaptor<LatencyContext>()

wheneverBlocking {
codewhispererService.getRequestContext(
triggerTypeCaptor.capture(),
editorCaptor.capture(),
projectCaptor.capture(),
psiFileCaptor.capture(),
latencyContextCaptor.capture()
)
}.doSuspendableAnswer {
projectRule.fixture.type(userInput)
codewhispererService.getRequestContext(
triggerTypeCaptor.firstValue,
editorCaptor.firstValue,
projectRule.project,
psiFileCaptor.firstValue,
latencyContextCaptor.firstValue
)
codewhispererService.stub {
onBlocking {
getRequestContext(
triggerTypeCaptor.capture(),
editorCaptor.capture(),
projectCaptor.capture(),
psiFileCaptor.capture(),
latencyContextCaptor.capture()
)
} doSuspendableAnswer {
val requestContext = codewhispererService.getRequestContext(
triggerTypeCaptor.firstValue,
editorCaptor.firstValue,
projectRule.project,
psiFileCaptor.firstValue,
latencyContextCaptor.firstValue
)
projectRule.fixture.type(userInput)
requestContext
}
}
}

Expand Down
3 changes: 2 additions & 1 deletion plugins/amazonq/mynah-ui/src/mynah-ui/ui/tabs/generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ export class TabDataGenerator {
],
[
'codetransform',
`Welcome to Code Transformation! **You can also run transformations from the command line. To install the tool, see the [documentation](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/run-CLI-transformations.html).**`,
`Welcome to Code Transformation!
**ℹ️ AWS Transform custom now available for Java upgrades. Agentic AI that handles version upgrades, SDK migration, and more, and improves with every execution. [Learn more](https://aws.amazon.com/transform/custom/)**`,
],
])

Expand Down
Loading
Loading