Skip to content

Commit d57bccb

Browse files
committed
feat(container): add DockerContextProvider for chat context #306
Introduce DockerContextProvider to collect Docker-related context for chat interactions. Update plugin configuration to register the provider.
1 parent cf2bd92 commit d57bccb

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package cc.unitmesh.container.provider
2+
3+
import cc.unitmesh.devti.provider.context.ChatContextItem
4+
import cc.unitmesh.devti.provider.context.ChatContextProvider
5+
import cc.unitmesh.devti.provider.context.ChatCreationContext
6+
import com.github.dockerjava.core.dockerfile.Dockerfile
7+
import com.intellij.docker.DockerFileSearch
8+
import com.intellij.docker.dockerFile.DockerPsiFile
9+
import com.intellij.docker.dockerFile.parser.psi.DockerFileFromCommand
10+
import com.intellij.openapi.project.Project
11+
import com.intellij.psi.PsiManager
12+
import com.intellij.psi.util.PsiTreeUtil
13+
14+
class DockerContextProvider : ChatContextProvider {
15+
override fun isApplicable(project: Project, creationContext: ChatCreationContext): Boolean =
16+
DockerFileSearch.getInstance().getDockerFiles(project).isNotEmpty()
17+
18+
override suspend fun collect(
19+
project: Project,
20+
creationContext: ChatCreationContext
21+
): List<ChatContextItem> {
22+
val dockerFiles = DockerFileSearch.getInstance().getDockerFiles(project).mapNotNull {
23+
PsiManager.getInstance(project).findFile(it) as? DockerPsiFile
24+
}
25+
26+
if (dockerFiles.isEmpty()) return emptyList()
27+
28+
val fromCommands = dockerFiles.mapNotNull {
29+
PsiTreeUtil.getChildrenOfType(it, DockerFileFromCommand::class.java)?.toList()
30+
}.flatten()
31+
32+
if (fromCommands.isEmpty()) return listOf(
33+
ChatContextItem(DockerContextProvider::class, "This project use Docker to run in server")
34+
)
35+
36+
val text = "This project use Docker to run in server. Here is related info:\n" +
37+
fromCommands.joinToString("\n") { it.text }
38+
39+
return listOf(ChatContextItem(DockerContextProvider::class, text))
40+
}
41+
}

exts/ext-container/src/233/main/resources/cc.unitmesh.container.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
</dependencies>
77

88
<extensions defaultExtensionNs="cc.unitmesh">
9-
<!-- <runService implementation="cc.unitmesh.container.RunDockerfileService"/>-->
9+
<!-- <runService implementation="cc.unitmesh.container.RunDockerfileService"/>-->
10+
11+
<chatContextProvider implementation="cc.unitmesh.container.provider.DockerContextProvider"/>
1012
</extensions>
1113
</idea-plugin>

0 commit comments

Comments
 (0)