f4caab940e
Новый KMP-модуль :skills (9 целей, зеркалит :proto). Парсит скилы
в формате opencode: YAML-фронтматтер с name+description, затем markdown
body.
- SkillFile(name, description, body) — @Serializable результат.
- SkillParseError — sealed-иерархия ошибок: Empty, MissingOpeningFence,
MissingClosingFence, InvalidYaml, SchemaMismatch, BlankName.
- SkillParser.parse(raw): SkillParseResult + parseOrThrow(raw): SkillFile.
Обрабатывает BOM, CRLF, имена с двоеточиями (backend:spring:db-base),
multiline-YAML, пустое тело; неизвестные ключи фронтматтера игнорирует.
- SkillParserTest — 16 тестов, 0 failures.
YAML-библиотека — com.charleskorn.kaml 0.104.0 (не JetBrains,
интеграция с kotlinx @Serializable). Грабли kaml 0.104: параметр
ignoreUnknownKeys переименован в strictMode (инвертирован);
missing-required-field прилетает как YamlException, не
SerializationException — различаем по сообщению.
Проверка: :skills:jvmTest 16/16, :skills:assemble (9 целей) — зелёные.
35 lines
1022 B
Kotlin
35 lines
1022 B
Kotlin
val caffeineRepo = providers.gradleProperty("caffeineRepo").getOrElse("http://192.168.76.117/repository/caffeine")
|
|
|
|
pluginManagement {
|
|
repositories {
|
|
gradlePluginPortal()
|
|
mavenCentral()
|
|
google()
|
|
}
|
|
}
|
|
|
|
dependencyResolutionManagement {
|
|
repositories {
|
|
mavenCentral()
|
|
google()
|
|
// Home Nexus, репо "caffeine": pw.binom.* (A2A, ...)
|
|
maven {
|
|
name = "caffeine"
|
|
url = uri(caffeineRepo)
|
|
setAllowInsecureProtocol(true)
|
|
}
|
|
}
|
|
}
|
|
|
|
rootProject.name = "agentik"
|
|
|
|
include(":standalone")
|
|
// Собственный протокол agentik. Пока в нём пилим, потом вынесем.
|
|
include(":proto")
|
|
// Парсер скилов (YAML-frontmatter + markdown body, opencode-style).
|
|
include(":skills")
|
|
// Ktor-сервер, экспонирующий Agent по HTTP (SSE + JSON).
|
|
include(":server")
|
|
// Ktor-клиент, превращающий HTTP-фасад в `Agent`/`Conversation`.
|
|
include(":client")
|