From bcfb55c52d3bea9df4c11c458eb746c418090c37 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:42:24 +0000 Subject: [PATCH 1/7] Initial plan From fc61b3474271e20d1b7e6f8e0b629b149ad58bbc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:47:25 +0000 Subject: [PATCH 2/7] Fix IDE plugin UI: dark mode support and markdown rendering Co-authored-by: Mte90 <403283+Mte90@users.noreply.github.com> --- .../com/picocode/PicoCodeToolWindowContent.kt | 77 ++++++++++++++++--- 1 file changed, 68 insertions(+), 9 deletions(-) diff --git a/ide-plugins/src/main/kotlin/com/picocode/PicoCodeToolWindowContent.kt b/ide-plugins/src/main/kotlin/com/picocode/PicoCodeToolWindowContent.kt index 94bb050..83e2d02 100644 --- a/ide-plugins/src/main/kotlin/com/picocode/PicoCodeToolWindowContent.kt +++ b/ide-plugins/src/main/kotlin/com/picocode/PicoCodeToolWindowContent.kt @@ -4,10 +4,12 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.project.Project import com.intellij.ui.components.JBScrollPane import com.intellij.ui.components.JBTextArea +import com.intellij.ui.JBColor import java.awt.BorderLayout import java.awt.Dimension import java.awt.FlowLayout import javax.swing.* +import javax.swing.text.html.HTMLEditorKit import java.net.HttpURLConnection import java.net.URL import com.google.gson.Gson @@ -157,24 +159,76 @@ class PicoCodeToolWindowContent(private val project: Project) { return panel } + /** + * Convert markdown to HTML for rendering + */ + private fun markdownToHtml(markdown: String): String { + var html = markdown + // Escape HTML special characters first + .replace("&", "&") + .replace("<", "<") + .replace(">", ">") + // Code blocks (```) + .replace(Regex("```([\\s\\S]*?)```"), "
$1
") + // Inline code (`) + .replace(Regex("`([^`]+)`"), "$1") + // Bold (**text**) + .replace(Regex("\\*\\*([^*]+)\\*\\*"), "$1") + // Italic (*text*) + .replace(Regex("\\*([^*]+)\\*"), "$1") + // Headers + .replace(Regex("^### (.+)$", RegexOption.MULTILINE), "

$1

") + .replace(Regex("^## (.+)$", RegexOption.MULTILINE), "

$1

") + .replace(Regex("^# (.+)$", RegexOption.MULTILINE), "

$1

") + // Lists + .replace(Regex("^- (.+)$", RegexOption.MULTILINE), "
  • $1
  • ") + .replace(Regex("^\\* (.+)$", RegexOption.MULTILINE), "
  • $1
  • ") + // Line breaks + .replace("\n", "
    ") + + // Wrap lists in