@@ -22,6 +22,7 @@ import com.intellij.openapi.util.UserDataHolderBase
22
22
import com.intellij.openapi.vfs.VirtualFile
23
23
import com.intellij.psi.PsiManager
24
24
import com.intellij.ui.JBColor
25
+ import com.intellij.ui.SearchTextField
25
26
import com.intellij.ui.components.JBLabel
26
27
import com.intellij.ui.components.JBScrollPane
27
28
import com.intellij.ui.components.JBTextField
@@ -41,6 +42,8 @@ import java.awt.FlowLayout
41
42
import java.beans.PropertyChangeListener
42
43
import javax.swing.*
43
44
import javax.swing.border.CompoundBorder
45
+ import javax.swing.event.DocumentEvent
46
+ import javax.swing.event.DocumentListener
44
47
45
48
open class McpPreviewEditor (
46
49
val project : Project ,
@@ -59,6 +62,7 @@ open class McpPreviewEditor(
59
62
private lateinit var resultPanel: McpResultPanel
60
63
private val config = McpLlmConfig ()
61
64
private val borderColor = JBColor (0xE5E7EB , 0x3C3F41 ) // Equivalent to Tailwind gray-200
65
+ private lateinit var searchField: SearchTextField
62
66
63
67
init {
64
68
createUI()
@@ -79,12 +83,24 @@ open class McpPreviewEditor(
79
83
private fun createUI () {
80
84
val headerPanel = panel {
81
85
row {
82
- val label = JBLabel (" MCP Preview - Tools Panel " ).apply {
86
+ val label = JBLabel (" MCP Tools" ).apply {
83
87
font = JBUI .Fonts .label(14.0f ).asBold()
88
+ border = JBUI .Borders .emptyLeft(8 )
84
89
isOpaque = true
85
90
}
86
91
87
92
cell(label).align(Align .FILL ).resizableColumn()
93
+
94
+ searchField = SearchTextField ().apply {
95
+ textEditor.emptyText.text = " Search tools..."
96
+ textEditor.document.addDocumentListener(object : DocumentListener {
97
+ override fun insertUpdate (e : DocumentEvent ) = filterTools()
98
+ override fun removeUpdate (e : DocumentEvent ) = filterTools()
99
+ override fun changedUpdate (e : DocumentEvent ) = filterTools()
100
+ })
101
+ }
102
+
103
+ cell(searchField).align(Align .FILL ).resizableColumn()
88
104
}
89
105
}.apply {
90
106
border = BorderFactory .createMatteBorder(0 , 0 , 1 , 0 , borderColor)
@@ -197,6 +213,11 @@ open class McpPreviewEditor(
197
213
mainPanel.add(bottomPanel, BorderLayout .SOUTH )
198
214
}
199
215
216
+ private fun filterTools () {
217
+ val searchText = searchField.text.trim()
218
+ toolListPanel.filterTools(searchText)
219
+ }
220
+
200
221
private fun showConfigDialog () {
201
222
val dialog = McpLlmConfigDialog (project, config, allTools)
202
223
0 commit comments