0fdc12695e
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 как бинарные ассеты.
78 lines
2.8 KiB
Markdown
78 lines
2.8 KiB
Markdown
# :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`.
|