c140d0b758
- :client больше не создаёт HttpClient: нет зависимости на ktor-client-cio, нет defaultAgentikHttpClient. - applyAgentikDefaults(token) — конфигурация agentik (JSON + Bearer) поверх клиента. - agentikHttpClient(engineFactory, token, configure) — сборка клиента из фабрики движка потребителя. - AgentikAgent(id, baseUrl, httpClient) — клиент обязателен, параметр token убран. - :agentik-cli получил свой defaultCliHttpClient() (CIO + requestTimeout=0); 8 команд передают клиент явно.
96 lines
3.4 KiB
Kotlin
96 lines
3.4 KiB
Kotlin
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)
|
|
|
|
// Native-таргеты, которые покрывает kotlinx.cli 0.3.6 (см. его .module
|
|
// в Maven Central): linux_x64, macos_x64, macos_arm64, mingw_x64.
|
|
// linuxArm64 не входит — kotlinx.cli 0.3.6 для него не публикуется
|
|
// (последний релиз 2023-09, KMP-targets зафиксированы). clikt-multiplatform
|
|
// 5.x имеет linuxArm64, но ломается на duplicate symbol `selfAndAncestors`
|
|
// между clikt и clikt-mordant при линковке native (issue ajalt/clikt#598),
|
|
// поэтому clikt отвергнут.
|
|
//
|
|
// iOS не входит: :agentik-cli бессмыслен на iOS, а :client (единственный
|
|
// его потребитель) тоже без iOS.
|
|
jvm()
|
|
listOf(
|
|
linuxX64(),
|
|
macosX64(),
|
|
macosArm64(),
|
|
mingwX64(),
|
|
)
|
|
|
|
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)
|
|
implementation(libs.ktor.client.cio)
|
|
}
|
|
// :agentik-cli — commonMain-only (нет jvmMain/nativeMain разделения):
|
|
// весь код, включая platformEnv, лежит в commonMain.
|
|
}
|
|
|
|
@OptIn(ExperimentalKotlinGradlePluginApi::class)
|
|
jvm {
|
|
binaries {
|
|
executable {
|
|
mainClass.set("pw.binom.agentik.cli.AgentikCliKt")
|
|
}
|
|
}
|
|
}
|
|
|
|
// entryPoint на K/N — это FQN функции БЕЗ суффикса `Kt`
|
|
// (Java/Kotlin convention `MainKt.main` тут не работает, линкер K/N ищет
|
|
// функцию как `package.main`). На JVM суффикс `Kt` сохраняется через
|
|
// mainClass.set(...) выше.
|
|
listOf(
|
|
linuxX64(),
|
|
macosX64(),
|
|
macosArm64(),
|
|
mingwX64(),
|
|
).forEach {
|
|
it.binaries.executable {
|
|
entryPoint = "pw.binom.agentik.cli.main"
|
|
}
|
|
}
|
|
}
|
|
|
|
// Fatjar — аналог :standalone.
|
|
val shadowJarTask = tasks.register<ShadowJar>("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
|
|
}
|