@@ -3,6 +3,7 @@ package cc.unitmesh.devti.mcp.ui
3
3
import cc.unitmesh.devti.mcp.ui.model.McpMessage
4
4
import cc.unitmesh.devti.mcp.ui.model.MessageType
5
5
import com.intellij.ui.JBColor
6
+ import com.intellij.ui.components.JBLabel
6
7
import com.intellij.ui.components.JBScrollPane
7
8
import com.intellij.ui.table.JBTable
8
9
import com.intellij.util.ui.JBUI
@@ -27,20 +28,48 @@ class McpMessageLogPanel : JPanel(BorderLayout()) {
27
28
autoCreateRowSorter = true
28
29
}
29
30
30
- private val detailTextArea = JTextArea ().apply {
31
+ private val toolNameLabel = JBLabel (" Tool Name:" ).apply {
32
+ font = font.deriveFont(java.awt.Font .BOLD )
33
+ border = JBUI .Borders .empty(10 , 10 , 5 , 10 )
34
+ }
35
+
36
+ private val toolNameTextArea = JTextArea ().apply {
37
+ isEditable = false
38
+ wrapStyleWord = true
39
+ lineWrap = true
40
+ border = JBUI .Borders .empty(5 , 10 , 10 , 10 )
41
+ }
42
+
43
+ private val parametersLabel = JBLabel (" Parameters:" ).apply {
44
+ font = font.deriveFont(java.awt.Font .BOLD )
45
+ border = JBUI .Borders .empty(10 , 10 , 5 , 10 )
46
+ }
47
+
48
+ private val parametersTextArea = JTextArea ().apply {
31
49
isEditable = false
32
50
wrapStyleWord = true
33
51
lineWrap = true
34
- border = JBUI .Borders .empty(10 )
52
+ border = JBUI .Borders .empty(5 , 10 , 10 , 10 )
35
53
}
54
+
55
+ private val detailPanel = JPanel (BorderLayout ()).apply {
56
+ add(toolNameLabel, BorderLayout .NORTH )
57
+ val centerPanel = JPanel (BorderLayout ()).apply {
58
+ add(toolNameTextArea, BorderLayout .NORTH )
59
+ add(parametersLabel, BorderLayout .CENTER )
60
+ add(parametersTextArea, BorderLayout .SOUTH )
61
+ }
62
+ add(centerPanel, BorderLayout .CENTER )
63
+ }
64
+
65
+ private val detailScrollPane = JBScrollPane (detailPanel)
36
66
37
67
init {
38
68
table.getColumnModel().getColumn(0 ).cellRenderer = TypeColumnRenderer ()
39
69
40
- // Create split pane
41
70
val splitPane = JSplitPane (JSplitPane .HORIZONTAL_SPLIT ).apply {
42
71
leftComponent = JBScrollPane (table)
43
- rightComponent = JBScrollPane (detailTextArea)
72
+ rightComponent = detailScrollPane
44
73
dividerLocation = 600
45
74
resizeWeight = 0.5
46
75
}
@@ -50,8 +79,20 @@ class McpMessageLogPanel : JPanel(BorderLayout()) {
50
79
if (! e.valueIsAdjusting && table.selectedRow >= 0 ) {
51
80
val selectedIndex = table.convertRowIndexToModel(table.selectedRow)
52
81
if (selectedIndex >= 0 && selectedIndex < messages.size) {
53
- detailTextArea.text = messages[selectedIndex].content
54
- detailTextArea.caretPosition = 0
82
+ val message = messages[selectedIndex]
83
+
84
+ // Parse content if toolName and parameters are not explicitly set
85
+ val (toolName, params) = if (message.toolName != null && message.parameters != null ) {
86
+ Pair (message.toolName, message.parameters)
87
+ } else {
88
+ McpMessage .parseContent(message.content)
89
+ }
90
+
91
+ toolNameTextArea.text = toolName ? : " N/A"
92
+ toolNameTextArea.caretPosition = 0
93
+
94
+ parametersTextArea.text = params ? : " N/A"
95
+ parametersTextArea.caretPosition = 0
55
96
}
56
97
}
57
98
}
@@ -68,7 +109,8 @@ class McpMessageLogPanel : JPanel(BorderLayout()) {
68
109
fun clear () {
69
110
messages.clear()
70
111
tableModel.fireTableDataChanged()
71
- detailTextArea.text = " "
112
+ toolNameTextArea.text = " "
113
+ parametersTextArea.text = " "
72
114
}
73
115
74
116
private inner class MessageTableModel : DefaultTableModel () {
0 commit comments