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.shadow) } kotlin { jvmToolchain(21) // Одноразовый CLI. Пока только JVM. Native-бинари добавим позже — // kotlinx.cli 0.3.6 не имеет linuxArm64, а clikt имеет upstream-баг // с duplicate symbol selfAndAncestors между clikt и clikt-mordant. jvm() sourceSets { commonMain.dependencies { implementation(project(":proto")) implementation(project(":client")) // kotlinx.cli 0.3.6 — KMP subcommand-парсер от JetBrains. // clikt 5.x имеет upstream-баг: `duplicate symbol selfAndAncestors` // между `clikt` и `clikt-mordant` при линковке native. kotlinx.cli // таких проблем нет. implementation(libs.kotlinx.cli) implementation(libs.kotlinx.coroutines.core) } // :agentik-cli — JVM-only one-shot CLI. Нет jvmMain / nativeMain. // Всё (включая platformEnv) лежит в commonMain. } @OptIn(ExperimentalKotlinGradlePluginApi::class) jvm { binaries { executable { mainClass.set("pw.binom.agentik.cli.AgentikCliKt") } } } } // Fatjar — аналог :standalone. val shadowJarTask = tasks.register("shadowJar") { archiveBaseName.set("agentik-cli") archiveClassifier.set("all") description = "Self-contained fatjar with all runtime dependencies bundled." group = "build" from(tasks.named("jvmJar")) from(project.configurations.getByName("jvmRuntimeClasspath")) mergeServiceFiles() duplicatesStrategy = DuplicatesStrategy.EXCLUDE manifest { attributes["Main-Class"] = "pw.binom.agentik.cli.AgentikCliKt" attributes["Implementation-Title"] = "agentik-cli" attributes["Implementation-Version"] = project.version.toString() } includeEmptyDirs = false }