.kilo/plans/1780256109130-stellar-forest.md
Add the VS Code empty-state Feedback & Support affordance to the JetBrains plugin, including a non-modal popup with the same three destinations:
https://github.com/Kilo-Org/kilocode/issues/new/choosehttps://kilo.ai/discordhttps://kilo.ai/supportThe popup must hide when clicking outside or pressing Escape.
packages/kilo-jetbrains/frontend/src/main/kotlin/ai/kilocode/client/session/ui/EmptySessionPanel.kt.Show History; this is the right place to add the button.packages/kilo-vscode/webview-ui/src/components/chat/MessageList.tsxpackages/kilo-vscode/webview-ui/src/components/chat/FeedbackDialog.tsxpackages/kilo-vscode/webview-ui/src/styles/welcome.css$INTELLIJ_REPO=/Users/kirillk/products/intellij-community.JBPopupFactory.getInstance().createComponentPopupBuilder(content, focusComponent)setModalContext(false) for non-modal contextsetRequestFocus(false) / setFocusable(false) if we want the popup not to steal focussetCancelOnClickOutside(true) for outside-click dismissalsetCancelKeyEnabled(true) for Escape dismissalsetCancelOnWindowDeactivation(true) and setCancelOnOtherWindowOpen(true) are available and appropriate for cleanupAllIcons:
AllIcons.Ide.FeedbackAllIcons.Vcs.Vendors.GithubAllIcons.Actions.Help or AllIcons.General.ContextHelpAdd localized JetBrains bundle keys.
frontend/src/main/resources/messages/KiloBundle.properties:
feedback.button=Feedback & Supportfeedback.dialog.message=We'd love to hear your feedback or help with any issues you're experiencing.feedback.dialog.github=Report an issue on GitHubfeedback.dialog.discord=Join our Discord communityfeedback.dialog.support=Customer Supportcommon.cancel=Cancel only if needed.KiloBundle_*.properties files. If accurate translations are not already available from the VS Code i18n files, copy the VS Code translations for matching locales where practical and leave English fallback only if the JetBrains bundle mechanism supports it cleanly.Extend EmptySessionPanel UI.
FeedbackButton, styled to match VS Code conceptually:
Feedback & Support textJBUI.CurrentTheme.Link.Foreground.ENABLEDJBUI.CurrentTheme.Link.Foreground.HOVERED if usefulUiStyle.Colors.editorBackground() / component backgroundUiStyle.Gap / JBUI.BordersUiStyle.Arc.component() or JBUI.getInt("Button.arc", 6) at paint timeShow History button in the empty-state south area, keeping the current centered layout.Implement the feedback popup in frontend Swing code.
EmptySessionPanel.kt or a new nearby UI file if the file would become too large./icons/kilo-content.svgAllIcons.Vcs.Vendors.Github for GitHub, the borrowed Discord SVG for Discord, and AllIcons.Actions.Help or AllIcons.General.ContextHelp for Customer Supportfrontend/src/main/resources/icons/ using the plugin's existing icon naming pattern, for example discord.svg and discord_dark.svg if the borrowed asset needs separate theme variants.IconLoader.getIcon("/icons/discord.svg", EmptySessionPanel::class.java) or a small Kilo-owned icon object if multiple call sites need it.BrowserUtil.browse(url) to open links.JBPopupFactory.createComponentPopupBuilder(content, null) and configure:
.setModalContext(false).setRequestFocus(false).setFocusable(false) unless keyboard tabbing inside popup is desired; if buttons need keyboard focus, use .setFocusable(true) with .setRequestFocus(false).setCancelOnClickOutside(true).setCancelKeyEnabled(true).setCancelOnWindowDeactivation(true).setCancelOnOtherWindowOpen(true).setResizable(false).setMovable(false)popup.showUnderneathOf(feedbackButton).Add test coverage in EmptySessionPanelTest.kt.
KiloBundle.message("feedback.button").BasePlatformTestCase; otherwise test the retained popup content builder/action rows directly through package-internal methods.Add release note.
.changeset/ unless the repo has a JetBrains-specific release-note mechanism that supersedes changesets.Add Feedback & Support to the JetBrains empty session screen.Verify.
packages/kilo-jetbrains/:
./gradlew :frontend:test --tests "ai.kilocode.client.session.ui.EmptySessionPanelTest"packages/kilo-jetbrains/:
bun run typecheck or ./gradlew typecheckpackages/kilo-jetbrains/ plus a changeset.AllIcons does not provide one and the popup should match the VS Code button set visually.