Skip to content

Commit 4c9fd68

Browse files
authored
1.4.3 (#154)
* 1.4.3 * 1.4.2 * docs * wip * renames, etc * Update MultiDiffChatAction.kt * fixes * Update gradle.properties * misc
1 parent ac000da commit 4c9fd68

File tree

7 files changed

+138
-5
lines changed

7 files changed

+138
-5
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
pluginName=intellij-aicoder
22
pluginRepositoryUrl=https://github.com/SimiaCryptus/intellij-aicoder
3-
pluginVersion=1.4.2
3+
pluginVersion=1.4.3
44

55
jvmArgs=-Xmx8g
66
org.gradle.jvmargs=-Xmx8g
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package com.github.simiacryptus.aicoder.actions.generic
2+
3+
import com.github.simiacryptus.aicoder.AppServer
4+
import com.github.simiacryptus.aicoder.actions.BaseAction
5+
import com.github.simiacryptus.aicoder.config.AppSettingsState
6+
import com.github.simiacryptus.aicoder.config.AppSettingsState.Companion.chatModel
7+
import com.intellij.openapi.actionSystem.ActionUpdateThread
8+
import com.intellij.openapi.actionSystem.AnActionEvent
9+
import com.intellij.openapi.actionSystem.CommonDataKeys
10+
import com.intellij.openapi.project.Project
11+
import com.intellij.xdebugger.XDebuggerManager
12+
import com.simiacryptus.skyenet.core.platform.ApplicationServices
13+
import com.simiacryptus.skyenet.core.platform.Session
14+
import com.simiacryptus.skyenet.core.platform.StorageInterface
15+
import com.simiacryptus.skyenet.core.platform.User
16+
import com.simiacryptus.skyenet.webui.application.ApplicationServer
17+
import com.simiacryptus.skyenet.webui.chat.ChatServer
18+
import com.simiacryptus.skyenet.webui.chat.ChatSocketManager
19+
import com.simiacryptus.skyenet.webui.session.SocketManager
20+
import org.slf4j.LoggerFactory
21+
import java.awt.Desktop
22+
import java.io.File
23+
24+
class DebugChatAction : BaseAction() {
25+
override fun getActionUpdateThread() = ActionUpdateThread.BGT
26+
27+
val path = "/codeChat"
28+
val model = AppSettingsState.instance.smartModel.chatModel()
29+
30+
override fun handle(e: AnActionEvent) {
31+
val project = e.getData(CommonDataKeys.PROJECT)
32+
val debugSessionInfo = getDebugSessionInfo(project)
33+
val systemPrompt = debugSessionInfo
34+
val userInterfacePrompt = ""
35+
val session = StorageInterface.newGlobalID()
36+
agents[session] = ChatSocketManager(
37+
session = session,
38+
model = model,
39+
initialAssistantPrompt = "",
40+
userInterfacePrompt = userInterfacePrompt,
41+
systemPrompt = systemPrompt,
42+
api = api,
43+
storage = ApplicationServices.dataStorageFactory(root),
44+
applicationClass = ApplicationServer::class.java,
45+
)
46+
47+
val server = AppServer.getServer(e.project)
48+
val app = initApp(server, path)
49+
app.sessions[session] = app.newSession(null, session)
50+
51+
Thread {
52+
Thread.sleep(500)
53+
try {
54+
Desktop.getDesktop().browse(server.server.uri.resolve("$path/#$session"))
55+
} catch (e: Throwable) {
56+
log.warn("Error opening browser", e)
57+
}
58+
}.start()
59+
}
60+
61+
private fun getDebugSessionInfo(project: Project?): String {
62+
val debugSession = XDebuggerManager.getInstance(project ?: return "No project found").currentSession
63+
val stackFrame = debugSession?.currentStackFrame ?: return "No stack frames found"
64+
val frameContext = stackFrame.sourcePosition?.let {
65+
val lines = it.file.toFile.readLines()
66+
val context = ((it.line - 2) until (it.line + 2)).map { line -> lines.getOrNull(line) }
67+
context.joinToString("\n")
68+
}
69+
//val frameVars = debugSession..map { it.name to it.value?.toString() }
70+
return frameContext.toString()
71+
}
72+
73+
override fun isEnabled(event: AnActionEvent) = true
74+
75+
companion object {
76+
private val log = LoggerFactory.getLogger(CodeChatAction::class.java)
77+
private val agents = mutableMapOf<Session, SocketManager>()
78+
val root: File get() = File(AppSettingsState.instance.pluginHome, "code_chat")
79+
private fun initApp(server: AppServer, path: String): ChatServer {
80+
server.appRegistry[path]?.let { return it }
81+
val socketServer = object : ApplicationServer(
82+
applicationName = "Code Chat",
83+
path = path,
84+
showMenubar = false,
85+
) {
86+
override val singleInput = false
87+
override val stickyInput = true
88+
override fun newSession(user: User?, session: Session) =
89+
agents[session] ?: throw IllegalArgumentException("Unknown session: $session")
90+
}
91+
server.addApp(path, socketServer)
92+
return socketServer
93+
}
94+
95+
}
96+
}

src/main/kotlin/com/github/simiacryptus/aicoder/actions/generic/GenerateRelatedFileAction.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.github.simiacryptus.aicoder.actions.generic
33
import com.github.simiacryptus.aicoder.actions.FileContextAction
44
import com.github.simiacryptus.aicoder.config.AppSettingsState
55
import com.github.simiacryptus.aicoder.config.AppSettingsState.Companion.chatModel
6+
import com.github.simiacryptus.aicoder.config.Name
67
import com.github.simiacryptus.aicoder.util.UITools
78
import com.intellij.openapi.actionSystem.ActionUpdateThread
89
import com.intellij.openapi.actionSystem.AnActionEvent
@@ -20,6 +21,7 @@ import java.io.File
2021
import java.io.FileInputStream
2122
import java.nio.file.Path
2223
import java.util.concurrent.TimeUnit
24+
import javax.swing.JTextArea
2325

2426
class GenerateRelatedFileAction : FileContextAction<GenerateRelatedFileAction.Settings>() {
2527
override fun getActionUpdateThread() = ActionUpdateThread.BGT
@@ -33,7 +35,16 @@ class GenerateRelatedFileAction : FileContextAction<GenerateRelatedFileAction.Se
3335
val code: String = ""
3436
)
3537

36-
class SettingsUI
38+
class SettingsUI {
39+
@Name("Directive")
40+
var directive: JTextArea = JTextArea(
41+
"""
42+
Create test cases
43+
""".trimIndent(),
44+
3,
45+
120
46+
)
47+
}
3748

3849
class UserSettings(
3950
var directive: String = "",

src/main/kotlin/com/github/simiacryptus/aicoder/actions/generic/MultiDiffChatAction.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ class MultiDiffChatAction : BaseAction() {
143143
path = path,
144144
showMenubar = false,
145145
) {
146-
override val singleInput = true
146+
override val singleInput = false
147147
override val stickyInput = false
148148
override fun newSession(user: User?, session: Session) = agents[session]!!
149149
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.github.simiacryptus.aicoder.ui
2+
3+
import com.intellij.openapi.actionSystem.AnAction
4+
import com.intellij.openapi.actionSystem.AnActionEvent
5+
6+
open class MainMenu : com.intellij.openapi.actionSystem.DefaultActionGroup() {
7+
override fun getChildren(e: AnActionEvent?): Array<AnAction> {
8+
val children = super.getChildren(e)
9+
return children
10+
}
11+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.simiacryptus.jopenai.exceptions
2+
3+
class CustomException(message: String) : Exception(message)

src/main/resources/META-INF/plugin.xml

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,23 @@
2323

2424

2525
<actions>
26+
<group id="com.github.simiacryptus.aicoder.ui.MainMenu"
27+
class="com.github.simiacryptus.aicoder.ui.MainMenu"
28+
popup="true"
29+
icon="MyIcons.icon"
30+
text="_AI Coder"
31+
description="AI coding assistant tools">
32+
<add-to-group group-id="ToolsMenu" anchor="last"/>
33+
</group>
2634
<action id="GenericChat" class="com.github.simiacryptus.aicoder.actions.generic.GenericChatAction"
27-
icon="MyIcons.icon"
2835
text="Chat with AI"
2936
description="Start a chat session with an AI to discuss code or get assistance">
30-
<add-to-group group-id="ToolsMenu" anchor="last"/>
37+
<add-to-group group-id="com.github.simiacryptus.aicoder.ui.MainMenu" anchor="last"/>
38+
</action>
39+
<action id="DebugChat" class="com.github.simiacryptus.aicoder.actions.generic.DebugChatAction"
40+
text="Discuss Debug Session"
41+
description="Start a chat session with an AI to discuss code or get assistance">
42+
<add-to-group group-id="com.github.simiacryptus.aicoder.ui.MainMenu" anchor="last"/>
3143
</action>
3244

3345
<group id="com.github.simiacryptus.aicoder.ui.EditorMenu"

0 commit comments

Comments
 (0)