2e1387273a
Новый KMP-модуль :agent-toolsets с основными абстракциями для тулсетов: - ToolsetContribution(name, description, tools: List<ToolEntry>) — декларация тулсета: имя + описание + список входящих LiteTool'ов с именами. - ToolsetContext + Logger + NoOpLogger — что тулсеты получают при активации. - ToolsetRegistry — реестр тулсетов с Mutex-защитой; методы activate/deactivate/isActive/activeNames/inactiveNames/activeTools/ findByName/findOwnerByToolName. - ToolsetDispatchPolicy — диспетчер с прощающей auto-activation: если тул из неактивного тулсета вызван — молча активирует тулсет и выполняет. Если тул вообще неизвестен — fallback в BaseToolDispatcher (плоские тулы вне toolsets). - EnableToolsetTool / DisableToolsetTool — встроенные LiteTool'ы (4-case контракт зафиксирован в docs/TOOLSETS-PLAN.md): activate/deactivate с равномерным сообщением 'X deactivated' независимо от того, был ли он активен. - SyncLiteTool — обёртка suspend-handler'а в синхронный LiteTool (через runBlocking). LiteTool.invoke синхронен по контракту litert-kmp. Дизайн: - :agent-toolsets НЕ зависит от :standalone — может быть переиспользован в Android-сборке и любом LiteTool-агенте. - Модуль KMP (jvm + native), общие интерфейсы в commonMain, JVM-специфика только в SyncLiteTool (runBlocking). - ToolsetContext минимален (logger); storage/skill добавятся в commit 5+. Тесты: 29 новых покрывают activate/deactivate/idempotency, activeTools, findOwnerByToolName, auto-activation в диспетчере, fallback в base, оба контракта enable/disable со всеми 4 кейсами. Tests: 328/328 green (299 ранее + 29 в :agent-toolsets)
43 lines
1.3 KiB
Kotlin
43 lines
1.3 KiB
Kotlin
plugins {
|
|
alias(libs.plugins.kotlin.multiplatform)
|
|
alias(libs.plugins.kotlin.serialization)
|
|
}
|
|
|
|
kotlin {
|
|
jvmToolchain(21)
|
|
|
|
// KMP-модуль с ядром механики toolsets: реестр, диспетчер, встроенные тулы
|
|
// enable_toolset/disable_toolset. Не зависит от :standalone — может быть
|
|
// переиспользован в Android-сборке и в любом другом LiteTool-агенте.
|
|
jvm()
|
|
macosX64()
|
|
macosArm64()
|
|
iosX64()
|
|
iosArm64()
|
|
iosSimulatorArm64()
|
|
linuxX64()
|
|
linuxArm64()
|
|
mingwX64()
|
|
|
|
sourceSets {
|
|
commonMain.dependencies {
|
|
// :storage-core — для StorageBundle в ToolsetContext (commit 5+)
|
|
api(project(":storage-core"))
|
|
|
|
// litert-kmp: LiteTool интерфейс (sync describe/invoke)
|
|
api(libs.litert.api)
|
|
|
|
api(libs.kotlinx.coroutines.core)
|
|
api(libs.kotlinx.serialization.json)
|
|
}
|
|
jvmMain.dependencies {
|
|
// runBlocking для SyncLiteTool обёртки (LiteTool.invoke — sync)
|
|
implementation(libs.kotlin.logging)
|
|
}
|
|
commonTest.dependencies {
|
|
implementation(kotlin("test"))
|
|
implementation(libs.kotlinx.coroutines.test)
|
|
}
|
|
}
|
|
}
|