[versions]
graalvm-plugin = "0.11.5"
jline = "3.30.6"
langchain4j = "1.15.0"
langchain4j-extra = "1.15.0-beta25"
commonmark = "0.28.0"
kotlinxSerializationJson = "1.10.0"
kotlinxCoroutines = "1.10.2"
slf4j = "2.0.17"
logback = "1.5.21"
junitBom = "5.14.0"
testcontainers = "1.21.3"
mockitoKotlin = "6.1.0"
kotlin = "2.3.20"
jackson = "2.19.2"
spotless = "8.4.0"
detekt = "1.23.8"
shadow = "9.0.1"
graalvmSvm = "25.0.2"
sqlite = "3.51.3.0"
hikaricp = "7.0.2"
exposed = "1.2.0"
compose = "1.10.3"
compose-material3 = "1.9.0"
compose-material-icons = "1.7.3"
coil = "3.4.0"
koin = "4.2.0"
jlatexmath = "1.0.7"
tika = "3.3.0"
lucene = "10.4.0"
caffeine = "3.2.3"
jsoup = "1.22.1"
konform = "0.11.1"
pty4j = "0.13.12"
jediterm = "3.64"
openpdf = "2.2.2"
poi = "5.4.0"
filekit = "0.13.0"

[libraries]
# JLine
jline = { module = "org.jline:jline", version.ref = "jline" }
jline-terminal-jansi = { module = "org.jline:jline-terminal-jansi", version.ref = "jline" }

# GraalVM Native Image (SVM)
graalvm-nativeimage-svm = { module = "org.graalvm.nativeimage:svm", version.ref = "graalvmSvm" }

# LangChain4j
langchain4j = { module = "dev.langchain4j:langchain4j", version.ref = "langchain4j" }
langchain4j-open-ai = { module = "dev.langchain4j:langchain4j-open-ai", version.ref = "langchain4j" }
langchain4j-google-ai-gemini = { module = "dev.langchain4j:langchain4j-google-ai-gemini", version.ref = "langchain4j" }
langchain4j-anthropic = { module = "dev.langchain4j:langchain4j-anthropic", version.ref = "langchain4j" }
langchain4j-http-client = { module = "dev.langchain4j:langchain4j-http-client-jdk", version.ref = "langchain4j" }
langchain4j-jvector = { module = "dev.langchain4j:langchain4j-community-jvector", version.ref = "langchain4j-extra" }
langchain4j-agentic = { module = "dev.langchain4j:langchain4j-agentic", version.ref = "langchain4j-extra" }
langchain4j-mcp = { module = "dev.langchain4j:langchain4j-mcp", version.ref = "langchain4j-extra" }
langchain4j-mcp-docker = { module = "dev.langchain4j:langchain4j-mcp-docker", version.ref = "langchain4j-extra" }

# Markdown
commonmark = { module = "org.commonmark:commonmark", version.ref = "commonmark" }
commonmark-ext-gfm-tables = { module = "org.commonmark:commonmark-ext-gfm-tables", version.ref = "commonmark" }
commonmark-ext-autolink = { module = "org.commonmark:commonmark-ext-autolink", version.ref = "commonmark" }

# LaTeX Rendering
jlatexmath = { module = "org.scilab.forge:jlatexmath", version.ref = "jlatexmath" }

# Terminal (JediTerm & PTY4J)
pty4j = { module = "org.jetbrains.pty4j:pty4j", version.ref = "pty4j" }
jediterm-ui = { module = "org.jetbrains.jediterm:jediterm-ui", version.ref = "jediterm" }
jediterm-core = { module = "org.jetbrains.jediterm:jediterm-core", version.ref = "jediterm" }

# Image Loading (Coil)
coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" }
coil-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp", version.ref = "coil" }

# Compose Material
compose-material3 = { module = "org.jetbrains.compose.material3:material3", version.ref = "compose-material3" }
compose-material-icons-extended = { module = "org.jetbrains.compose.material:material-icons-extended", version.ref = "compose-material-icons" }

# Jackson
jackson-module-kotlin = { module = "com.fasterxml.jackson.module:jackson-module-kotlin", version.ref = "jackson" }
jackson-dataformat-yaml = { module = "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml", version.ref = "jackson" }
jackson-datatype-jsr310 = { module = "com.fasterxml.jackson.datatype:jackson-datatype-jsr310", version.ref = "jackson" }

# Kotlinx Serialization
kotlinx-serialization-json-jvm = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json-jvm", version.ref = "kotlinxSerializationJson" }

# Kotlinx Coroutines
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" }

# Caffeine Cache
caffeine = { module = "com.github.ben-manes.caffeine:caffeine", version.ref = "caffeine" }

# HTML Parser
jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" }

# PDF Export (OpenPDF / LibrePDF)
openpdf = { module = "com.github.librepdf:openpdf", version.ref = "openpdf" }

# Word Export (Apache POI)
poi-ooxml = { module = "org.apache.poi:poi-ooxml", version.ref = "poi" }

# FileKit — native file/folder picker
filekit-compose = { module = "io.github.vinceglb:filekit-dialogs-compose", version.ref = "filekit" }

# Logging
slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" }
logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" }

# Apache Tika (File type detection and content extraction)
tika-core = { module = "org.apache.tika:tika-core", version.ref = "tika" }
tika-parser-pdf = { module = "org.apache.tika:tika-parser-pdf-module", version.ref = "tika" }
tika-parser-microsoft = { module = "org.apache.tika:tika-parser-microsoft-module", version.ref = "tika" }

# Apache Lucene
lucene-core = { module = "org.apache.lucene:lucene-core", version.ref = "lucene" }
lucene-queryparser = { module = "org.apache.lucene:lucene-queryparser", version.ref = "lucene" }
lucene-backward-codecs = { module = "org.apache.lucene:lucene-backward-codecs", version.ref = "lucene" }

# Database
sqlite-jdbc = { module = "org.xerial:sqlite-jdbc", version.ref = "sqlite" }
hikaricp = { module = "com.zaxxer:HikariCP", version.ref = "hikaricp" }

# Exposed ORM
exposed-core = { module = "org.jetbrains.exposed:exposed-core", version.ref = "exposed" }
exposed-jdbc = { module = "org.jetbrains.exposed:exposed-jdbc", version.ref = "exposed" }
exposed-java-time = { module = "org.jetbrains.exposed:exposed-java-time", version.ref = "exposed" }

# Koin DI
koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" }
koin-test = { module = "io.insert-koin:koin-test", version.ref = "koin" }
koin-test-junit5 = { module = "io.insert-koin:koin-test-junit5", version.ref = "koin" }

# Konform Validation
konform = { module = "io.konform:konform", version.ref = "konform" }

# Testing
junit-bom = { module = "org.junit:junit-bom", version.ref = "junitBom" }
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter" }
testcontainers-ollama = { module = "org.testcontainers:ollama", version.ref = "testcontainers" }
testcontainers-junit-jupiter = { module = "org.testcontainers:junit-jupiter", version.ref = "testcontainers" }
mockito-kotlin = { module = "org.mockito.kotlin:mockito-kotlin", version.ref = "mockitoKotlin" }
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }

# Detekt
detekt-api = { module = "io.gitlab.arturbosch.detekt:detekt-api", version.ref = "detekt" }

[bundles]
langchain4j = [
    "langchain4j",
    "langchain4j-open-ai",
    "langchain4j-google-ai-gemini",
    "langchain4j-anthropic",
    "langchain4j-http-client",
    "langchain4j-jvector",
    "langchain4j-agentic",
    "langchain4j-mcp",
    "langchain4j-mcp-docker"
]

lucene = [
    "lucene-core",
    "lucene-queryparser",
    "lucene-backward-codecs"
]

exposed = [
    "exposed-core",
    "exposed-jdbc",
    "exposed-java-time"
]

jackson = [
    "jackson-module-kotlin",
    "jackson-dataformat-yaml",
    "jackson-datatype-jsr310"
]

tika = [
    "tika-core",
    "tika-parser-pdf",
    "tika-parser-microsoft"
]

commonmark = [
    "commonmark",
    "commonmark-ext-gfm-tables"
]

koin = [
    "koin-core"
]

koin-test = [
    "koin-test",
    "koin-test-junit5"
]

testcontainers = [
    "testcontainers-ollama",
    "testcontainers-junit-jupiter"
]

logging = [
    "slf4j-api",
    "logback-classic"
]

jline = [
    "jline",
    "jline-terminal-jansi"
]

jediterm = [
    "pty4j",
    "jediterm-ui",
    "jediterm-core"
]

filekit = [
    "filekit-compose"
]

[plugins]
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
graalvm-native = { id = "org.graalvm.buildtools.native", version.ref = "graalvm-plugin" }
spotless = { id = "com.diffplug.spotless", version.ref = "spotless" }
shadow = { id = "com.gradleup.shadow", version.ref = "shadow" }
compose-multiplatform = { id = "org.jetbrains.compose", version.ref = "compose" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" }
