Files
subochev 0a7c40688c
ci / JVM build + tests (push) Failing after 2m59s
release / Publish KMP libraries → caffeine Nexus (release) Failing after 9s
feat(memory): add :memory-md-vector hybrid backend + :reflection-api + outbox/journal entity splits
- :memory-md-vector (KMP jvm+linuxX64+mingwX64): .md-файлы как source of
  truth, векторный индекс (sqlite-vec) как derived cache. reconcile()
  на старте: orphan-cleanup + content-hash-gated re-embed. Гибридный
  скор 0.7*vector + 0.3*keyword. Заменяет EmbeddingProvider на
  KMP-TextEmbeddingExecutor из :memory-api.

- :reflection-api: новый 4-й API-модуль (Reflection, ReflectionStore,
  ReflectionEvent). Зависит только от :memory-api.

- :journal-api получил ConversationRecord/ConversationStore/Ids (бывший
  :message-store-api, полностью удалён). :outbox-api получил Event,
  CommonEvent, AgentEvent (бывший :event-store).

- :memory-api получил MemoryVectorIndex + NoteMatches +
  TextEmbeddingExecutor (suspend-обёртка над TextEmbeddingExtractor).

- :memory-vector KMP-цели достигнуты через commonMain-only TextEmbedding-
  Executor, EmbeddingProvider выпилен; :memory-md-vector тянет
  text-embedding-api транзитивно через :memory-api.

- :standalone flatten в commonMain/commonTest завершён (тесты из jvmTest
  переехали в commonTest). Включён optional деп :memory-md-vector через
  AGENTIK_MEMORY_BACKEND=md-vector.

jvmTest: 96 задач, 407 тестов, 0 падений.
2026-09-21 23:10:28 +03:00
..

:memory-api — контракт долговременной памяти (KMP, jvm + native)

Что это

Интерфейсы долговременной памяти агента:

  • MemoryStore — append-only журнал MemoryNote(id, content, createdAt).
  • MemoryCategory — discriminator (USER, WORLD, PREFERENCE, кастомные).
  • MemoryNote — структурная единица памяти; immutable.
  • Прелоадер / ревьювер по контракту, не по реализации.

Решает: как единая абстракция позволяет иметь одновременно файловую память (:memory-md), SQLite + ANN (:memory-vector) и тестовую in-memory (в :standalone/tests). Агент работает с MemoryStore, не с конкретным бэкендом.

Где используется

  • :memory-md — Hermes-style §-файлы (user.md / world.md / preference.md).
  • :memory-vector — SQLite + JVector + LLM-эмбеддинги.
  • :standalone подключает обе реализации и переключает через AGENTIK_MEMORY_BACKEND=md|vector|off.

Как подключить

kotlin {
    sourceSets.commonMain.dependencies {
        api("pw.binom.agentik:memory-api:0.1.0")
    }
}

Артефакт публикуется в caffeine.

Версии

gradle/libs.versions.toml → [versions] agentik-memory-api.

Что в API

interface MemoryStore {
    suspend fun save(category: MemoryCategory, content: String): MemoryNote
    suspend fun query(category: MemoryCategory?, q: String, limit: Int = 10): List<MemoryNote>
    suspend fun all(category: MemoryCategory? = null): List<MemoryNote>
}

enum class MemoryCategory(val path: String) {
    USER("user"),
    WORLD("world"),
    PREFERENCE("preference");
}

data class MemoryNote(
    val id: String,
    val category: MemoryCategory,
    val content: String,
    val createdAt: Instant,
)

Тесты

./gradlew :memory-api:allTests

Контрактные тесты на Kotlin Multiplatform (без jvmTest-специфики).

Чего здесь НЕТ

  • Никаких конкретных storage — это API. Backend-ы в :memory-md и :memory-vector.

Текущий статус

Используется продакшеном. Контракт стабильный.