import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.kotlin.serialization) alias(libs.plugins.kotlin.compose) alias(libs.plugins.shadow) } kotlin { jvmToolchain(21) // Suppress Beta-предупреждения от expect/actual объектов. compilerOptions { freeCompilerArgs.add("-Xexpect-actual-classes") } // Mosaic 0.18 поддерживает JVM + desktop-native (macosX64/macosArm64/linuxX64/linuxArm64/mingwX64). // iOS пропускаем — на iOS не бывает TUI-сессий. jvm() macosX64() macosArm64() linuxX64() linuxArm64() mingwX64() sourceSets { commonMain.dependencies { implementation(project(":proto")) implementation(libs.kotlinx.coroutines.core) implementation(libs.kotlinx.serialization.json) // JetBrains Compose runtime — тащит Mosaic как обёртку. implementation(libs.mosaic.runtime) implementation(libs.mosaic.tty.terminal) } jvmMain.dependencies { implementation(project(":client")) } commonTest.dependencies { implementation(kotlin("test")) implementation(libs.kotlinx.coroutines.core) } } @OptIn(ExperimentalKotlinGradlePluginApi::class) jvm { binaries { executable { mainClass.set("pw.binom.agentik.tui.MainKt") } } } } // --- Fatjar (uberjar) --- // // Аналогично `:agentik-cli`: shadowJar склеивает `jvmJar` + `jvmRuntimeClasspath` в self-contained // `*-all.jar`. Shadow 8.x не авторегистрирует shadowJar в KMP-проектах — регистрируем явно. val shadowJarTask = tasks.register("shadowJar") { archiveBaseName.set("agentik-tui") archiveClassifier.set("all") description = "Self-contained fatjar with all runtime dependencies bundled (incl. Compose-runtime + Mosaic)." group = "build" from(tasks.named("jvmJar")) val cc = try { @Suppress("UNCHECKED_CAST") configurations as org.gradle.api.artifacts.ConfigurationContainer } catch (_: ClassCastException) { @Suppress("UNCHECKED_CAST") (project as org.gradle.api.Project).configurations as org.gradle.api.artifacts.ConfigurationContainer } from(cc.getByName("jvmRuntimeClasspath")) mergeServiceFiles() duplicatesStrategy = DuplicatesStrategy.EXCLUDE manifest { attributes["Main-Class"] = "pw.binom.agentik.tui.MainKt" attributes["Implementation-Title"] = "agentik-tui" attributes["Implementation-Version"] = project.version.toString() } includeEmptyDirs = false }