1
1
package cc.unitmesh.devti.mcp.ui
2
2
3
+ import cc.unitmesh.devti.AutoDevSnippetFile
4
+ import cc.unitmesh.devti.sketch.ui.code.EditorUtil
5
+ import cc.unitmesh.devti.sketch.ui.code.findDocument
3
6
import com.intellij.openapi.project.Project
4
7
import com.intellij.openapi.ui.DialogWrapper
5
8
import com.intellij.ui.LanguageTextField
@@ -14,6 +17,11 @@ import io.modelcontextprotocol.kotlin.sdk.Tool
14
17
import javax.swing.JComponent
15
18
import javax.swing.JSlider
16
19
import cc.unitmesh.devti.util.parser.CodeFence
20
+ import com.intellij.openapi.editor.Document
21
+ import com.intellij.openapi.editor.EditorFactory
22
+ import com.intellij.openapi.editor.EditorKind
23
+ import com.intellij.openapi.editor.ex.EditorEx
24
+ import com.intellij.testFramework.LightVirtualFile
17
25
18
26
class McpLlmConfigDialog (
19
27
private val project : Project ,
@@ -22,26 +30,36 @@ class McpLlmConfigDialog(
22
30
) : DialogWrapper(project) {
23
31
private lateinit var temperatureSlider: JSlider
24
32
private val toolCheckboxes = mutableMapOf<String , JBCheckBox >()
25
- private lateinit var promptField : LanguageTextField
33
+ private var markdownEditor : EditorEx ?
26
34
27
35
init {
28
36
title = " Chatbot Configuration"
29
37
allTools.forEach { (serverName, tools) ->
30
38
config.enabledTools.addAll(tools)
31
39
}
32
40
41
+ val language = CodeFence .findLanguage(" Markdown" )
42
+ val systemPrompt = config.createSystemPrompt()
43
+ val file = LightVirtualFile (AutoDevSnippetFile .naming(" md" ), language, systemPrompt)
44
+ markdownEditor = try {
45
+ val document: Document = file.findDocument() ? : throw IllegalStateException (" Document not found" )
46
+ EditorFactory .getInstance().createEditor(document, project, EditorKind .MAIN_EDITOR ) as ? EditorEx
47
+ } catch (e: Throwable ) {
48
+ throw e
49
+ }
50
+
51
+ if (markdownEditor != null ) {
52
+ EditorUtil .configEditor(markdownEditor!! , project, file, false )
53
+ }
54
+
33
55
init ()
34
56
}
35
57
36
58
/* *
37
59
* Based on https://github.com/jujumilk3/leaked-system-prompts/blob/main/anthropic-claude-api-tool-use_20250119.md
38
60
*/
39
61
override fun createCenterPanel (): JComponent {
40
- val systemPrompt = config.createSystemPrompt()
41
62
val language = CodeFence .findLanguage(" markdown" )
42
- promptField = LanguageTextField (language, project, systemPrompt).also {
43
- it.preferredSize = JBUI .size(640 , 320 )
44
- }
45
63
46
64
return panel {
47
65
row {
@@ -77,13 +95,15 @@ class McpLlmConfigDialog(
77
95
}
78
96
}
79
97
}.topGap(TopGap .MEDIUM )
80
- group( " System Prompt " ) {
98
+ if (markdownEditor != null ) {
81
99
row {
82
- cell(promptField)
83
- .align(FILL )
100
+ cell(markdownEditor!! .component)
84
101
.resizableColumn()
102
+ .applyToComponent {
103
+ preferredSize = JBUI .size(500 , 320 )
104
+ }
85
105
}
86
- }.topGap( TopGap . MEDIUM )
106
+ }
87
107
}.withPreferredSize(500 , 600 )
88
108
}
89
109
0 commit comments