diff --git a/src/main/kotlin/cc/unitmesh/devti/connector/openai/OpenAIConnector.kt b/src/main/kotlin/cc/unitmesh/devti/connector/openai/OpenAIConnector.kt index 264a9348d4..6ba3a8fb67 100644 --- a/src/main/kotlin/cc/unitmesh/devti/connector/openai/OpenAIConnector.kt +++ b/src/main/kotlin/cc/unitmesh/devti/connector/openai/OpenAIConnector.kt @@ -30,6 +30,7 @@ import java.time.Duration class OpenAIConnector : CodeCopilot { + private val promptGenerator = PromptGenerator() private var service: OpenAiService private val timeout = Duration.ofSeconds(600) diff --git a/src/main/kotlin/cc/unitmesh/devti/connector/openai/PromptGenerator.kt b/src/main/kotlin/cc/unitmesh/devti/connector/openai/PromptGenerator.kt index 8ef5bf89a3..22b6c811e5 100644 --- a/src/main/kotlin/cc/unitmesh/devti/connector/openai/PromptGenerator.kt +++ b/src/main/kotlin/cc/unitmesh/devti/connector/openai/PromptGenerator.kt @@ -2,7 +2,6 @@ package cc.unitmesh.devti.connector.openai import cc.unitmesh.devti.analysis.DtClass import cc.unitmesh.devti.flow.model.SimpleProjectInfo -import com.intellij.openapi.util.NlsSafe import java.io.InputStream class PromptGenerator { @@ -34,14 +33,6 @@ class PromptGenerator { .replace("{storyDetail}", storyDetail) } - fun codeComplete(methodCode: String, className: @NlsSafe String?): String { - val promptText: InputStream = getResource("copilot/code_complete")!! - val promptTextString = promptText.bufferedReader().use { it.readText() } - return promptTextString - .replace("{code}", methodCode) - .replace("{className}", className ?: "") - } - fun autoComment(methodCode: String): String { val promptText: InputStream = getResource("copilot/code_comments")!! val promptTextString = promptText.bufferedReader().use { it.readText() } @@ -49,13 +40,6 @@ class PromptGenerator { .replace("{code}", methodCode) } - fun codeReview(text: String): String { - val promptText: InputStream = getResource("copilot/code_review")!! - val promptTextString = promptText.bufferedReader().use { it.readText() } - return promptTextString - .replace("{code}", text) - } - fun findBug(text: String): String { val promptText: InputStream = getResource("copilot/find_bug")!! val promptTextString = promptText.bufferedReader().use { it.readText() } diff --git a/src/main/kotlin/cc/unitmesh/devti/flow/AutoDevFlow.kt b/src/main/kotlin/cc/unitmesh/devti/flow/AutoDevFlow.kt index aa7b3377b3..170eb5c557 100644 --- a/src/main/kotlin/cc/unitmesh/devti/flow/AutoDevFlow.kt +++ b/src/main/kotlin/cc/unitmesh/devti/flow/AutoDevFlow.kt @@ -144,8 +144,10 @@ class AutoDevFlow( // todo: log in here private fun executePrompt(promptText: String): String { + ui.add(promptText, true) return runBlocking { val prompt = connector.prompt(promptText) + ui.add(prompt, false) return@runBlocking prompt } } diff --git a/src/main/kotlin/cc/unitmesh/devti/model/DtAnalysisModel.kt b/src/main/kotlin/cc/unitmesh/devti/model/DtAnalysisModel.kt index c7f19f8ec7..7331b26d41 100644 --- a/src/main/kotlin/cc/unitmesh/devti/model/DtAnalysisModel.kt +++ b/src/main/kotlin/cc/unitmesh/devti/model/DtAnalysisModel.kt @@ -26,7 +26,7 @@ class DtClass( * //} * ``` */ - fun format(): String { + fun commentFormat(): String { val output = StringBuilder() output.append("// package: $packageName\n") output.append("// class $name {\n") @@ -70,9 +70,31 @@ class DtClass( return output.toString() } + fun format(): String { + val output = StringBuilder() + output.append("class $name ") + + val constructor = methods.find { it.name == this.name } + if (constructor != null) { + output.append("constructor(") + output.append(constructor.parameters.joinToString(", ") { "${it.name}: ${it.type}" }) + output.append(")\n") + } + + if (methods.isNotEmpty()) { + output.append("- methods: ") + // filter out constructor + output.append(methods.filter { it.name != this.name }.joinToString(", ") { method -> + "${method.name}(${method.parameters.joinToString(", ") { parameter -> "${parameter.name}: ${parameter.type}" }}): ${method.returnType}" + }) + } + + return output.toString() + } + companion object { fun formatPsi(psiClass: PsiClass): String { - return fromPsi(psiClass).format() + return fromPsi(psiClass).commentFormat() } fun fromJavaFile(file: PsiJavaFileImpl?): DtClass { diff --git a/src/main/kotlin/cc/unitmesh/devti/runconfig/AutoDevRunProfileState.kt b/src/main/kotlin/cc/unitmesh/devti/runconfig/AutoDevRunProfileState.kt index 05671c7f8e..7fe7642283 100644 --- a/src/main/kotlin/cc/unitmesh/devti/runconfig/AutoDevRunProfileState.kt +++ b/src/main/kotlin/cc/unitmesh/devti/runconfig/AutoDevRunProfileState.kt @@ -5,6 +5,7 @@ import cc.unitmesh.devti.flow.AutoDevFlow import cc.unitmesh.devti.flow.JavaCrudProcessor import cc.unitmesh.devti.flow.kanban.impl.GitHubIssue import cc.unitmesh.devti.connector.openai.OpenAIConnector +import cc.unitmesh.devti.gui.DevtiFlowToolWindowFactory import cc.unitmesh.devti.gui.chat.ChatBotActionType import cc.unitmesh.devti.gui.chat.ChatCodingComponent import cc.unitmesh.devti.gui.chat.ChatCodingService @@ -22,6 +23,7 @@ import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.progress.Task import com.intellij.openapi.project.Project +import com.intellij.openapi.wm.ToolWindowManager class AutoDevRunProfileState( val environment: ExecutionEnvironment, @@ -37,6 +39,9 @@ class AutoDevRunProfileState( } override fun execute(executor: Executor?, runner: ProgramRunner<*>): ExecutionResult? { + val toolWindowManager = ToolWindowManager.getInstance(project).getToolWindow(DevtiFlowToolWindowFactory.id) + val contentManager = toolWindowManager?.contentManager + val javaAuto = JavaCrudProcessor(project) val gitHubIssue = GitHubIssue(options.githubRepo(), githubToken) @@ -47,8 +52,11 @@ class AutoDevRunProfileState( val autoDevFlow = AutoDevFlow(gitHubIssue, openAIRunner, javaAuto, contentPanel) - log.warn(configuration.toString()) - log.warn(options.toString()) + val content = contentManager?.factory?.createContent(contentPanel, chatCodingService.getLabel(), false) + + contentManager?.removeAllContents(true) + contentManager?.addContent(content!!) + toolWindowManager?.activate(null) ProgressManager.getInstance().run( object : Task.Backgroundable(project, "Loading retained test failure", true) { diff --git a/src/test/kotlin/cc/unitmesh/devti/model/DtClassTest.kt b/src/test/kotlin/cc/unitmesh/devti/model/DtClassTest.kt index fc7207ef6a..9f8eaa27d1 100644 --- a/src/test/kotlin/cc/unitmesh/devti/model/DtClassTest.kt +++ b/src/test/kotlin/cc/unitmesh/devti/model/DtClassTest.kt @@ -1,6 +1,5 @@ package cc.unitmesh.devti.analysis -import cc.unitmesh.devti.analysis.DtClass.Companion.fromPsi import com.intellij.psi.JavaPsiFacade import com.intellij.psi.PsiElementFactory import com.intellij.testFramework.LightPlatformTestCase @@ -26,7 +25,7 @@ class DtClassTest : LightPlatformTestCase() { val dtClass = DtClass.fromPsi(psiClass) assertEquals( - dtClass.format(), """// package: HelloController + dtClass.commentFormat(), """// package: HelloController // class HelloController { // blogService: BlogService // + hello(): String @@ -87,7 +86,7 @@ public void setAttendees(List attendees) { val dtClass = DtClass.fromPsi(psiClass) assertEquals( - dtClass.format(), """// package: BookingDTO + dtClass.commentFormat(), """// package: BookingDTO // class BookingDTO { // roomId: String // startTime: String