15f3952eba
ci / JVM build + tests (push) Successful in 6m15s
Выделяет append-only message log в отдельный KMP-модуль.
Цель — разделить ДВЕ сущности по своей природе:
:message-log-api — append-only audit log (User/Assistant/ToolCall/
ToolResult/Error). Никаких update, только insert + read.
Это иммутабельная история диалога.
:working-memory-api — mutable runtime context (compact, summary, WM order).
Live state. Compaction-логика.
Раньше оба жили в :message-store-api, что:
- смешивало контракты: append-only audit vs mutable runtime;
- делало невозможным лёгкого клиента который читает только audit log
без WM-runtime зависимости;
- затрудняло compaction-логике жить в одном модуле с audit-записью.
Миграция:
- В :message-log-api переехали: Content, MessageRecord, MessageStore,
MessageContext (с MessageOrigin), MessageEvent, TokenStats, TurnTokens,
helpers (encode/decodeBodyPayload, MessageBodyPayload, BodyDecoded).
Пакет pw.binom.agentik.messageLog.
- В :message-store-api остались: ConversationStore, ConversationRecord,
ReflectionStore, Ids, legacy events.EventStore (paginated replay).
Пакет pw.binom.agentik.messageStore.
- :working-memory-api: обновил deps (api → :message-log-api для Content/MessageContext).
- 23 consumer-файла обновлены (FQN renames).
- storage-sqlite/ksqlite: убраны недостижимые ветки Summary/System
(эти synthetic records живут ТОЛЬКО в :working-memory-api, не попадают
в audit log :message-log-api).
Файлы:
+ :message-log-api (5 файлов, ~280 строк)
- :message-store-api (5 файлов, ~430 строк)
~ 23 файла обновлены
Совместимость схем не меняется. Все 5 storage impl'ов (3 backend × 5 store)
работают на тех же таблицах.
105 lines
6.6 KiB
Kotlin
105 lines
6.6 KiB
Kotlin
val caffeineRepo = providers.gradleProperty("caffeineRepo").getOrElse("http://192.168.76.117/repository/caffeine")
|
||
|
||
pluginManagement {
|
||
repositories {
|
||
gradlePluginPortal()
|
||
mavenCentral()
|
||
google()
|
||
}
|
||
}
|
||
|
||
dependencyResolutionManagement {
|
||
repositories {
|
||
// Сначала mavenLocal — чтобы локально опубликованные версии
|
||
// (через publishToMavenLocal) перекрывали caffeine.
|
||
mavenLocal()
|
||
mavenCentral()
|
||
google()
|
||
// Локально опубликованные snapshot-ы text-embedding-kmp (см. `~/.m2`).
|
||
// Home Nexus, репо "caffeine": pw.binom.* (A2A, ...)
|
||
maven {
|
||
name = "caffeine"
|
||
url = uri(caffeineRepo)
|
||
setAllowInsecureProtocol(true)
|
||
}
|
||
}
|
||
}
|
||
|
||
rootProject.name = "agentik"
|
||
|
||
include(":standalone")
|
||
// Generic LLM-side tools: LlmReflector, SkillMiner, LlmMemoryReviewer,
|
||
// ContextCompactor + парсеры/промпты. Вынесены из :standalone (god class)
|
||
// — переиспользуемы в :agentik-cli / :agentik-tui и любых других клиентах.
|
||
include(":llm-tools")
|
||
// Generic MCP-bridge: McpConfig, McpRegistry, McpLiteToolAdapter. Вынесены
|
||
// из :standalone — MCP не специфичен для standalone'а, это generic мост
|
||
// между MCP-SDK и LiteTool. Содержит :agent-toolsets (NamedTool).
|
||
include(":mcp-bridge")
|
||
// Собственный протокол agentik. Пока в нём пилим, потом вынесем.
|
||
include(":proto")
|
||
// Парсер скилов (YAML-frontmatter + markdown body, opencode-style).
|
||
include(":skills")
|
||
// Ktor-сервер, экспонирующий Agent по HTTP (SSE + JSON).
|
||
include(":server")
|
||
// Ktor-клиент, превращающий HTTP-фасад в `Agent`/`Conversation`.
|
||
include(":client")
|
||
// CLI-клиент поверх :client — REPL со slash-командами и стримингом ответов.
|
||
// KMP со всеми целями (jvm + весь натив), jvm-таргет собирается как shadowJar.
|
||
include(":agentik-cli")
|
||
// TUI-клиент поверх :client — Compose-style UI (Mosaic от Jake Wharton),
|
||
// рендерится в ANSI-терминал. KMP со всеми desktop-целями (без ios).
|
||
// include(":agentik-tui") — отключено 2026-09-17: пользователь признал TUI-подход неудачным.
|
||
// Папка agentik-tui/ оставлена на диске для возможного возврата; из сборки исключена.
|
||
|
||
// Встраиваемая долговременная память агента. `:memory-api` — интерфейсы,
|
||
// `:memory-md` — реализация на базе §-файлов (Hermes-style).
|
||
include(":memory-api")
|
||
include(":memory-md")
|
||
// Vector-бэкенд долговременной памяти поверх JVector (ANN-индекс) + SQLite
|
||
// для метаданных. JVM-only (JVector не имеет KMP-таргетов). На Android ART
|
||
// работает через Java 11 base classes (scalar fallback).
|
||
include(":memory-vector")
|
||
// Интерфейсы хранилища и разговорной истории: MessageStore / WorkingMemoryStore /
|
||
// ConversationStore / ReflectionStore + StorageBundle агрегатор. Реализации —
|
||
// в :storage-inmemory / :storage-sqlite / :storage-android (последний deferred).
|
||
// In-memory реализация store'ов из :message-store-api и :working-memory-api. KMP,
|
||
// IO-зависимостей. Используется в тестах (быстрый setup, без JDBC) и будет
|
||
// использоваться в Android-сборке (JVector/SQLite не подходят для ART out-of-box).
|
||
include(":message-store-api")
|
||
include(":message-log-api")
|
||
// Bounded-tail event log с auto-TTL. Двухуровневое хранилище: этот модуль —
|
||
// короткий live tail + recent replay; полный audit log живёт в :message-store-api
|
||
// (там — MessageStore + ConversationStore). EventStore сам управляет eviction,
|
||
// никаких prune-методов наружу. KMP, без implementations пока.
|
||
include(":event-store")
|
||
// KMP in-memory реализация MutableEventStore. ConcurrentLinkedDeque + TTL/size
|
||
// eviction. Для тестов, dev-режима, embedded-сценариев (Android core).
|
||
include(":event-store-in-memory")
|
||
include(":working-memory-api")
|
||
include(":storage-bundle")
|
||
include(":storage-inmemory")
|
||
// SQLDelight-реализация store'ов из :message-store-api и :working-memory-api. JVM-only
|
||
// native драйверов для KMP вне JVM пока не публикует). Содержит 4 .sq-файла +
|
||
// 5 классов: SqliteStores, SqliteConversationStore, SqliteMessageStore,
|
||
// SqliteWorkingMemoryStore, SqliteReflectionStore. Бэкенд для прод-запуска
|
||
// :standalone (путь к .db файлу в AGENTIK_DB).
|
||
include(":storage-sqlite")
|
||
// KMP-реализация EventStore через ksqlite (https://github.com/caffeine-mgn/ksqlite).
|
||
// Цель: проверить что pure-Kotlin SQLite с sqlite-vec заменяет SQLDelight+JVector
|
||
// на KMP-таргетах (JVM + linuxX64 + mingwX64). Apple targets auto-disabled на
|
||
// Linux — собираются локально на macOS. Пока покрывает только EventStore;
|
||
// остальные store'ы мигрируют после стабилизации ksqlite и реального
|
||
// использования на Android-агенте.
|
||
include(":storage-ksqlite")
|
||
// KMP-реализация EventStore через ksqlite (https://github.com/caffeine-mgn/ksqlite).
|
||
// Цель: проверить что pure-Kotlin SQLite с sqlite-vec заменяет SQLDelight+JVector
|
||
// на KMP-таргетах (JVM + linuxX64 + mingwX64). Apple targets auto-disabled на
|
||
// Linux — собираются локально на macOS. На этом этапе покрывает только EventStore;
|
||
// остальные store'ы мигрируют после стабилизации ksqlite (>=0.2) и реального
|
||
// использования на Android-агенте.
|
||
// Ядро механики toolsets: ToolsetRegistry + ToolsetDispatchPolicy + встроенные
|
||
// тулы enable_toolset/disable_toolset. KMP, не зависит от :standalone, может быть
|
||
// переиспользован в Android-сборке. Интеграция с ChatAgent — commit 5+.
|
||
include(":agent-toolsets")
|