# `:storage-core` — контракт хранилища (KMP, jvm + native) ## Что это Интерфейсы persistence-уровня для `:standalone`: - `MessageStore` — append-only история сообщений по диалогу. - `WorkingMemoryStore` — rolling buffer текущего хода (`AssistantMessage`, `ToolExchange`, `UserMessage`, system-prompt) для fast-recovery при reconnect/relance. - `ConversationStore` — метаданные диалогов (id, title, model, timestamps). - `ReflectionStore` — LLM-reflections (свободная форма заметок хранителя). Решает: позволяет запустить агента на Android-in-memory, на desktop-SQLite, или на production-SQLite, не переписывая логику. Контракт минимален и async-friendly. ## Где используется - `:storage-inmemory` — для тестов и Android. - `:storage-sqlite` — прод (Desktop / server / однодесктопный Android-development). ## Как подключить ```kotlin kotlin { sourceSets.commonMain.dependencies { api("pw.binom.agentik:storage-core:0.1.0") } } ``` ## Версии `gradle/libs.versions.toml` → `[versions] agentik-storage-core`. ## Что в API ```kotlin interface MessageStore { suspend fun append(conversationId: String, message: Message): Unit suspend fun after(conversationId: String, instant: Instant, limit: Int = 100): List } interface WorkingMemoryStore { suspend fun save(conv: String, entry: WorkingMemoryEntry): Unit fun load(conv: String): Flow // cold flow suspend fun clear(conv: String): Unit } sealed interface WorkingMemoryEntry { val id: String val date: Instant class UserMessage(...) : WorkingMemoryEntry class AssistantMessage(...) : WorkingMemoryEntry class ToolExchange(val toolName: String, val toolArgsJson: String, val resultText: String, val wasCancelled: Boolean) : WorkingMemoryEntry class SystemPrompt(...) : WorkingMemoryEntry } ``` ## Тесты Контрактные тесты (общие для всех имплементаций) — в `:storage-sqlite` и `:storage-inmemory`. ## Чего здесь НЕТ - Никакого HTTP / SSE. - Никакой конкретной БД. Backend'ы в `:storage-*`. ## Текущий статус Используется продакшеном. Контракт зафиксирован после interrupt-имплементации (см. [INTERRUPT-DESIGN.md](../../docs/INTERRUPT-DESIGN.md)).