Skip to content

Commit ce18658

Browse files
committed
JBAI-18822 Refactor ai.koog:agents-ext module to extract files-related abstractions from agents
1 parent ac54db4 commit ce18658

File tree

20 files changed

+69
-54
lines changed

20 files changed

+69
-54
lines changed

agents/agents-ext/src/commonMain/kotlin/ai/koog/agents/ext/tool/file/ListDirectoryTool.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import ai.koog.agents.core.tools.ToolException
55
import ai.koog.agents.core.tools.annotations.LLMDescription
66
import ai.koog.agents.core.tools.validate
77
import ai.koog.agents.core.tools.validateNotNull
8-
import ai.koog.agents.ext.tool.file.filter.GlobPattern
9-
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
108
import ai.koog.agents.ext.tool.file.render.folder
119
import ai.koog.prompt.text.text
1210
import ai.koog.rag.base.files.FileMetadata
1311
import ai.koog.rag.base.files.FileSystemProvider
12+
import ai.koog.rag.base.files.filter.GlobPattern
13+
import ai.koog.rag.base.files.model.FileSystemEntry
1414
import kotlinx.serialization.Serializable
1515

1616
/**

agents/agents-ext/src/commonMain/kotlin/ai/koog/agents/ext/tool/file/ListDirectoryUtil.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package ai.koog.agents.ext.tool.file
22

3-
import ai.koog.agents.ext.tool.file.filter.GlobPattern
4-
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
5-
import ai.koog.agents.ext.tool.file.model.buildFileEntry
6-
import ai.koog.agents.ext.tool.file.model.buildFolderEntry
73
import ai.koog.agents.ext.tool.file.render.norm
84
import ai.koog.rag.base.files.FileMetadata
95
import ai.koog.rag.base.files.FileSystemProvider
6+
import ai.koog.rag.base.files.filter.GlobPattern
7+
import ai.koog.rag.base.files.model.FileSystemEntry
8+
import ai.koog.rag.base.files.model.buildFileEntry
9+
import ai.koog.rag.base.files.model.buildFolderEntry
1010
import kotlin.collections.plusAssign
1111

1212
/**

agents/agents-ext/src/commonMain/kotlin/ai/koog/agents/ext/tool/file/ReadFileTool.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ import ai.koog.agents.core.tools.ToolException
55
import ai.koog.agents.core.tools.annotations.LLMDescription
66
import ai.koog.agents.core.tools.validate
77
import ai.koog.agents.core.tools.validateNotNull
8-
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
98
import ai.koog.agents.ext.tool.file.render.file
109
import ai.koog.prompt.text.text
1110
import ai.koog.rag.base.files.FileMetadata
1211
import ai.koog.rag.base.files.FileSystemProvider
12+
import ai.koog.rag.base.files.model.FileSystemEntry
1313
import kotlinx.serialization.Serializable
1414

1515
/**

agents/agents-ext/src/commonMain/kotlin/ai/koog/agents/ext/tool/file/ReadFileUtil.kt

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package ai.koog.agents.ext.tool.file
22

3-
import ai.koog.agents.ext.tool.file.model.FileSystemEntry.File
4-
import ai.koog.agents.ext.tool.file.model.FileSystemEntry.File.Content
5-
import ai.koog.agents.ext.tool.file.model.buildFileSize
63
import ai.koog.rag.base.files.DocumentProvider
74
import ai.koog.rag.base.files.FileMetadata
85
import ai.koog.rag.base.files.FileSystemProvider
6+
import ai.koog.rag.base.files.model.FileSystemEntry
7+
import ai.koog.rag.base.files.model.buildFileSize
98
import ai.koog.rag.base.files.readText
109

1110
/**
@@ -35,8 +34,8 @@ internal suspend fun <Path> buildTextFileEntry(
3534
startLine: Int,
3635
endLine: Int,
3736
onEndLineExceedsFileLength: ((endLine: Int, fileLineCount: Int) -> Unit)? = null
38-
): File {
39-
return File(
37+
): FileSystemEntry.File {
38+
return FileSystemEntry.File(
4039
name = fs.name(path),
4140
extension = fs.extension(path),
4241
path = fs.toAbsolutePathString(path),
@@ -52,7 +51,7 @@ private fun buildContent(
5251
startLine: Int,
5352
endLine: Int,
5453
onEndLineExceedsFileLength: ((requestedEndLine: Int, fileLineCount: Int) -> Unit)?
55-
): Content {
54+
): FileSystemEntry.File.Content {
5655
val lineCount = content.lineSequence().count()
5756

5857
require(startLine >= 0) { "startLine=$startLine must be >= 0" }
@@ -68,17 +67,17 @@ private fun buildContent(
6867
}
6968

7069
if (startLine == 0 && clampedEndLine == lineCount) {
71-
return Content.Text(content)
70+
return FileSystemEntry.File.Content.Text(content)
7271
}
7372

7473
val range = DocumentProvider.DocumentRange(
7574
DocumentProvider.Position(startLine, 0),
7675
DocumentProvider.Position(clampedEndLine, 0)
7776
)
7877

79-
return Content.Excerpt(
78+
return FileSystemEntry.File.Content.Excerpt(
8079
listOf(
81-
Content.Excerpt.Snippet(
80+
FileSystemEntry.File.Content.Excerpt.Snippet(
8281
text = range.substring(content),
8382
range = range,
8483
)

agents/agents-ext/src/commonMain/kotlin/ai/koog/agents/ext/tool/file/WriteFileTool.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import ai.koog.agents.core.tools.ToolException
55
import ai.koog.agents.core.tools.annotations.LLMDescription
66
import ai.koog.agents.core.tools.validate
77
import ai.koog.agents.core.tools.validateNotNull
8-
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
9-
import ai.koog.agents.ext.tool.file.model.buildFileSystemEntry
108
import ai.koog.agents.ext.tool.file.render.entry
119
import ai.koog.prompt.text.text
1210
import ai.koog.rag.base.files.FileMetadata
1311
import ai.koog.rag.base.files.FileSystemProvider
12+
import ai.koog.rag.base.files.model.FileSystemEntry
13+
import ai.koog.rag.base.files.model.buildFileSystemEntry
1414
import ai.koog.rag.base.files.writeText
1515
import kotlinx.serialization.Serializable
1616

agents/agents-ext/src/commonMain/kotlin/ai/koog/agents/ext/tool/file/render/Text.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package ai.koog.agents.ext.tool.file.render
22

3-
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
43
import ai.koog.prompt.text.TextContentBuilder
54
import ai.koog.rag.base.files.FileMetadata
5+
import ai.koog.rag.base.files.model.FileSystemEntry
66

77
private const val FOLDER_INDENTATION = " "
88

agents/agents-ext/src/commonMain/kotlin/ai/koog/agents/ext/tool/search/RegexSearchTool.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ package ai.koog.agents.ext.tool.search
22

33
import ai.koog.agents.core.tools.Tool
44
import ai.koog.agents.core.tools.annotations.LLMDescription
5-
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
6-
import ai.koog.agents.ext.tool.file.model.buildFileSize
75
import ai.koog.prompt.text.text
86
import ai.koog.rag.base.files.DocumentProvider
97
import ai.koog.rag.base.files.FileMetadata
108
import ai.koog.rag.base.files.FileSystemProvider
119
import ai.koog.rag.base.files.extendRangeByLines
10+
import ai.koog.rag.base.files.model.FileSystemEntry
11+
import ai.koog.rag.base.files.model.buildFileSize
1212
import ai.koog.rag.base.files.readText
1313
import ai.koog.rag.base.files.toPosition
1414
import kotlinx.coroutines.CancellationException

agents/agents-ext/src/commonTest/kotlin/ai/koog/agents/ext/tool/file/render/TextTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package ai.koog.agents.ext.tool.file.render
22

3-
import ai.koog.agents.ext.tool.file.model.FileSize
4-
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
53
import ai.koog.prompt.text.text
64
import ai.koog.rag.base.files.DocumentProvider
75
import ai.koog.rag.base.files.FileMetadata
6+
import ai.koog.rag.base.files.model.FileSize
7+
import ai.koog.rag.base.files.model.FileSystemEntry
88
import kotlin.test.Test
99
import kotlin.test.assertEquals
1010

agents/agents-ext/src/jvmTest/kotlin/ai/koog/agents/ext/tool/file/ListDirectoryUtilJvmTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package ai.koog.agents.ext.tool.file
22

3-
import ai.koog.agents.ext.tool.file.filter.GlobPattern
4-
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
53
import ai.koog.rag.base.files.JVMFileSystemProvider
4+
import ai.koog.rag.base.files.filter.GlobPattern
5+
import ai.koog.rag.base.files.model.FileSystemEntry
66
import kotlinx.coroutines.test.runTest
77
import org.junit.jupiter.api.io.TempDir
88
import java.nio.file.Path
@@ -210,8 +210,8 @@ class ListDirectoryUtilJvmTest {
210210
assertEquals("root", entry.name)
211211
val singleChild = assertNotNull(entry.entries).single() as FileSystemEntry.Folder
212212
assertEquals("single", singleChild.name)
213-
assertNotNull(singleChild.entries)
214-
assertTrue(singleChild.entries.isEmpty())
213+
val entries = assertNotNull(singleChild.entries)
214+
assertTrue(entries.isEmpty())
215215
}
216216

217217
@Test

agents/agents-ext/src/jvmTest/kotlin/ai/koog/agents/ext/tool/file/ReadFileUtilJvmTest.kt

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package ai.koog.agents.ext.tool.file
22

3-
import ai.koog.agents.ext.tool.file.model.FileSystemEntry
43
import ai.koog.rag.base.files.JVMFileSystemProvider
4+
import ai.koog.rag.base.files.model.FileSystemEntry
55
import kotlinx.coroutines.test.runTest
66
import org.junit.jupiter.api.assertThrows
77
import org.junit.jupiter.api.io.TempDir
@@ -30,8 +30,9 @@ class ReadFileUtilJvmTest {
3030

3131
val entry = buildTextFileEntry(fs, file, metadata, 0, -1)
3232

33-
assertIs<FileSystemEntry.File.Content.Text>(entry.content)
34-
assertEquals("line1\nline2\nline3", entry.content.text)
33+
val content = entry.content
34+
assertIs<FileSystemEntry.File.Content.Text>(content)
35+
assertEquals("line1\nline2\nline3", content.text)
3536
}
3637

3738
@Test
@@ -41,8 +42,9 @@ class ReadFileUtilJvmTest {
4142

4243
val entry = buildTextFileEntry(fs, file, metadata, 0, 3)
4344

44-
assertIs<FileSystemEntry.File.Content.Text>(entry.content)
45-
assertEquals("line1\nline2\nline3", entry.content.text)
45+
val content = entry.content
46+
assertIs<FileSystemEntry.File.Content.Text>(content)
47+
assertEquals("line1\nline2\nline3", content.text)
4648
}
4749

4850
@Test
@@ -52,8 +54,9 @@ class ReadFileUtilJvmTest {
5254

5355
val entry = buildTextFileEntry(fs, file, metadata, 1, 3)
5456

55-
assertIs<FileSystemEntry.File.Content.Excerpt>(entry.content)
56-
val snippet = entry.content.snippets.single()
57+
val content = entry.content
58+
assertIs<FileSystemEntry.File.Content.Excerpt>(content)
59+
val snippet = content.snippets.single()
5760
assertEquals("line1\nline2", snippet.text.trim())
5861
assertEquals(1, snippet.range.start.line)
5962
assertEquals(3, snippet.range.end.line)
@@ -66,8 +69,9 @@ class ReadFileUtilJvmTest {
6669

6770
val entry = buildTextFileEntry(fs, file, metadata, 0, -1)
6871

69-
assertIs<FileSystemEntry.File.Content.Text>(entry.content)
70-
assertEquals("single line", entry.content.text)
72+
val content = entry.content
73+
assertIs<FileSystemEntry.File.Content.Text>(content)
74+
assertEquals("single line", content.text)
7175
}
7276

7377
@Test
@@ -146,8 +150,9 @@ class ReadFileUtilJvmTest {
146150
invokedWithFileLineCount = fileLineCount
147151
}
148152

149-
assertIs<FileSystemEntry.File.Content.Text>(entry.content)
150-
assertEquals("line1\nline2", entry.content.text)
153+
val content = entry.content
154+
assertIs<FileSystemEntry.File.Content.Text>(content)
155+
assertEquals("line1\nline2", content.text)
151156
assertEquals(50, invokedWithRequestedEndLine)
152157
assertEquals(2, invokedWithFileLineCount)
153158
}

0 commit comments

Comments
 (0)