docs: per-module README + root navigation hub + CI/release workflows
ci / JVM build + tests (push) Failing after 1m57s

- README.md в каждом подмодуле: для библиотек — описание проблемы,
  подключение через maven-central/caffeine, версии в gradle/libs.versions.toml.
  Для запускаемых модулей — команды запуска + переменные среды с дефолтами.
- Корневой README.md переписан как навигационный хаб: что это, где клиенты,
  где серверы, как собрать, как опубликовать.
- build.gradle.kts: per-module POM-description через единую карту в rootProject.extra
  (порядок важен — нужно ДО apply плагина KMP, поэтому beforeEvaluate в subprojects).
- .gitea/workflows/ci.yml (новый): build + jvmTest + shadowJar на PR/push main.
- .gitea/workflows/release.yml (обновлён): публикует библиотеки в caffeine
  Nexus + собирает 3 fatjar'а и крепит их к release как бинарные ассеты.
This commit is contained in:
2026-09-16 16:24:03 +03:00
parent e68db11aaa
commit 0fdc12695e
18 changed files with 1279 additions and 364 deletions
+77
View File
@@ -0,0 +1,77 @@
# :skills — `pw.binom.agentik.skills`
**Парсер opencode-style скилов: `SKILL.md` или `*.yaml` с YAML-frontmatter + markdown body.**
Загружается в system prompt как отдельная секция; модели доступны тулы
`read_skill` / `skill_save` / `skill_delete` (если они подключены через
`:agent-toolsets`).
## Какую проблему решает
Агенту нужно **знать**, какие процедуры/инструкции у него есть, не таская их
в коде. Скил — это:
```markdown
---
name: backend:spring:db-base
description: Правила JPA/Flyway миграций и репозиториев в agentik.
---
Правила, которые применяются ко всем изменениям схемы:
- миграции только в Flyway;
- новые колонки nullable by default;
- ...
```
Парсер читает такие файлы из каталога (рекурсивно), валидирует обязательные
поля (`name`, `description`), собирает каталог для system prompt и **поддерживает
горячее обновление**: добавил файл — доступен в следующем `read_skill` без
рестарта.
## Формат
Поддерживаются оба варианта:
- **`SKILL.md`** — единый файл в каталоге (с frontmatter + body).
- **`*.yaml`** + опциональный `*.md`-компаньон с тем же basename.
Frontmatter — YAML, минимум `name` (с `:` для вложенности) и `description`.
Остальные поля — пользовательские, доступны через `SkillFile.frontmatter`.
## Подключение
```kotlin
commonMain {
implementation("pw.binom.agentik:skills:$version")
implementation("com.charleskorn.kaml:kaml:0.55.0")
}
```
## Использование
```kotlin
import pw.binom.agentik.skills.SkillCatalog
val catalog = SkillCatalog.fromDirectory(Path("/etc/agentik/skills"))
catalog.listAll().forEach { skill ->
println("- ${skill.name}: ${skill.description}")
}
val skill = catalog.findByName("backend:spring:db-base")
val body = skill?.body
```
`SkillPrompt` умеет отрендерить каталог в markdown-секцию для system prompt
(с truncate по длине, чтобы не раздувать контекст).
## Где смотреть версии
- `version` из `gradle.properties` (`version=0.1.0`)
- релизы: `https://git.binom.pw/subochev/agentik/releases`
## Сборка
```bash
./gradlew :skills:build
./gradlew :skills:jvmTest
```
KMP-таргеты — полный набор как у `:proto`. Зависимости — только `kotlinx-serialization` + `kaml`.