# agentik Self-contained multi-module Kotlin Multiplatform агент с долговременной памятью, персоной, навыками и HTTP-фасадом под `/agentik`. Состоит из библиотечных модулей (KMP, опубликованных в Nexus `caffeine`) и трёх запускаемых артефактов. ## Запускаемые модули | Модуль | Что делает | Артефакт | Таргеты | |---|---|---|---| | [`:standalone`](standalone/README.md) | HTTP-сервер со всеми транспортами (AG-UI / A2A / `:proto`), SQLite, памятью, скилами, SOUL, MCP | `standalone-all.jar` (≈250 MB) | JVM | | [`:agentik-cli`](agentik-cli/README.md) | REPL-клиент к `/agentik` со slash-командами | `agentik-cli-all.jar` (≈8 MB) | JVM | | [`:agentik-tui`](agentik-tui/README.md) | Compose-style TUI-клиент (Mosaic) к `/agentik` | `agentik-tui-all.jar` (≈10 MB) | JVM + macosX64/macosArm64/linuxX64/linuxArm64/mingwX64 | ## Библиотеки Все библиотеки — **KMP (jvm + 8 native)**, опубликованы в Nexus-репо `caffeine` под группой `pw.binom.agentik`. ### Протокол и транспорт - [`:proto`](proto/README.md) — `Agent` / `Conversation` / `Message` / `Event`, типы без сетевой логики. **Stateful** — клиент шлёт только новый message, агент владеет историей. - [`:server`](server/README.md) — Ktor-фасад, экспонирующий `:proto.Agent` под `/agentik` (HTTP+JSON+SSE). - [`:client`](client/README.md) — Ktor-клиент, превращающий HTTP `/agentik` обратно в `Agent`/`Conversation`. ### Память - [`:memory-api`](memory-api/README.md) — контракт: `MemoryStore`, `MemoryNote`, `MemoryPrefetcher`, `MemoryReviewer`, `MemoryTools`. - [`:memory-md`](memory-md/README.md) — Hermes-style реализация поверх §-файлов (`user.md`/`world.md`/`preference.md`). - [`:memory-vector`](memory-vector/README.md) — JVector (ANN) + SQLite + эмбеддинги (HTTP/SIGLIP on-device). ### Хранилище - [`:storage-core`](storage-core/README.md) — `ConversationStore` / `MessageStore` / `WorkingMemoryStore` / `ReflectionStore`. - [`:storage-inmemory`](storage-inmemory/README.md) — in-memory реализация (для тестов и embedded). - [`:storage-sqlite`](storage-sqlite/README.md) — SQLDelight реализация (прод-бэкенд). ### Логика - [`:skills`](skills/README.md) — opencode-style `SKILL.md` / `*.yaml` парсер + рендер в system prompt. - [`:agent-toolsets`](agent-toolsets/README.md) — реестр тулов + `enable_toolset`/`disable_toolset` диспетчер. ## Где смотреть версии - `gradle.properties` → `version=0.1.0` (текущая разрабатываемая) - Релизы: `https://git.binom.pw/subochev/agentik/releases` - Опубликованные артефакты: Nexus-репозиторий `caffeine` (`http://nexus.xx/repository/caffeine/pw/binom/agentik/`) При подключении библиотек используйте одну и ту же `version` (`VERSION` в Gradle зависимостях). Все артефакты синхронизированы и совместимы по ABI в пределах одной версии. ## Публикация (CI/CD) `.gitea/workflows/release.yml` — публикует все KMP-таргеты всех модулей в Nexus-репо `caffeine` при создании Gitea Release. Версия артефактов берётся из имени тега (`git tag v0.1.0` → `pw.binom.agentik:*:0.1.0`). ```bash # Создать релиз: git tag v0.1.0 && git push --tags # → Gitea → Releases → New Release → выбрать тег → Publish # → CI публикует в Nexus (нужны секреты BINOM_REPO_USER/BINOM_REPO_PASSWORD) ``` ## Сборка ```bash # Всё ./gradlew build # Только JVM-тесты всех модулей ./gradlew jvmTest # Только fatjar запускаемых модулей ./gradlew :standalone:shadowJar :agentik-cli:shadowJar :agentik-tui:shadowJar # Опубликовать локально в mavenLocal (~/.m2) ./gradlew publishToMavenLocal # Опубликовать в Nexus (нужны креды) ./gradlew publish -Pversion=0.2.0 \ -Pbinom.repo.url=http://nexus.xx/repository/caffeine/ \ -Pbinom.repo.user=USER -Pbinom.repo.password=PASS ``` ## Лицензия Apache-2.0 — см. [LICENSE](LICENSE) (если есть).