@@ -4,6 +4,7 @@ import cc.unitmesh.devti.gui.AutoDevToolWindowFactory
4
4
import cc.unitmesh.devti.gui.chat.message.ChatActionType
5
5
import cc.unitmesh.devti.observer.agent.AgentStateService
6
6
import cc.unitmesh.devti.observer.plan.reviewPlan
7
+ import cc.unitmesh.devti.provider.AutoTestService
7
8
import cc.unitmesh.devti.sketch.AutoSketchMode
8
9
import cc.unitmesh.devti.sketch.AutoSketchModeListener
9
10
import cc.unitmesh.devti.util.parser.CodeFence
@@ -12,6 +13,7 @@ import com.intellij.openapi.project.Project
12
13
import kotlinx.serialization.Serializable
13
14
import com.intellij.openapi.application.runInEdt
14
15
import com.intellij.openapi.util.Disposer
16
+ import com.intellij.psi.PsiManager
15
17
import java.util.concurrent.CompletableFuture
16
18
17
19
@Serializable
@@ -44,7 +46,7 @@ class IssueEvaluateTool : AbstractMcpTool<IssueArgs>() {
44
46
connection.subscribe(AutoSketchModeListener .TOPIC , object : AutoSketchModeListener {
45
47
override fun done () {
46
48
val messages = project.getService(AgentStateService ::class .java).getAllMessages()
47
- var plan: String = " "
49
+ var plan = " "
48
50
messages.lastOrNull()?.content?.also {
49
51
plan = CodeFence .parseAll(it).firstOrNull {
50
52
it.originLanguage == " plan"
@@ -65,7 +67,36 @@ class IssueEvaluateTool : AbstractMcpTool<IssueArgs>() {
65
67
}
66
68
})
67
69
68
-
69
70
return Response (future.get())
70
71
}
71
- }
72
+ }
73
+
74
+ @Serializable
75
+ data class CreateTestForFileArgs (val fileName : String )
76
+
77
+ class CreateTestForFileTool : AbstractMcpTool <CreateTestForFileArgs >() {
78
+ override val name: String = " create_test_for_file"
79
+ override val description: String = """
80
+ This tool is used to create a test for a file.
81
+ Requires a file_name parameter containing the file name.
82
+ Returns a the test code for this file.
83
+ """ .trimIndent()
84
+
85
+ override fun handle (
86
+ project : Project ,
87
+ args : CreateTestForFileArgs
88
+ ): Response {
89
+ val fileName = args.fileName
90
+ val file = project.baseDir.findFileByRelativePath(fileName)
91
+ ? : return Response (error = " File not found" )
92
+ val psiFile = PsiManager .getInstance(project).findFile(file)
93
+ ? : return Response (error = " Current IDE don't support this file type" )
94
+ val context = AutoTestService .context(psiFile)
95
+ ? : return Response (error = " AutoDev don't support this file type" )
96
+
97
+ val result = context.runFileAsync(project, file, psiFile)
98
+ ? : return Response (error = " Failed to create test for file" )
99
+
100
+ return Response (result)
101
+ }
102
+ }
0 commit comments